root/lj_lib.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2 ** Library function support.
   3 ** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
   4 */
   5 
   6 #ifndef _LJ_LIB_H
   7 #define _LJ_LIB_H
   8 
   9 #include "lj_obj.h"
  10 
  11 /*
  12 ** A fallback handler is called by the assembler VM if the fast path fails:
  13 **
  14 ** - too few arguments:   unrecoverable.
  15 ** - wrong argument type:   recoverable, if coercion succeeds.
  16 ** - bad argument value:  unrecoverable.
  17 ** - stack overflow:        recoverable, if stack reallocation succeeds.
  18 ** - extra handling:        recoverable.
  19 **
  20 ** The unrecoverable cases throw an error with lj_err_arg(), lj_err_argtype(),
  21 ** lj_err_caller() or lj_err_callermsg().
  22 ** The recoverable cases return 0 or the number of results + 1.
  23 ** The assembler VM retries the fast path only if 0 is returned.
  24 ** This time the fallback must not be called again or it gets stuck in a loop.
  25 */
  26 
  27 /* Return values from fallback handler. */
  28 #define FFH_RETRY       0
  29 #define FFH_UNREACHABLE FFH_RETRY
  30 #define FFH_RES(n)      ((n)+1)
  31 #define FFH_TAILCALL    (-1)
  32 
  33 LJ_FUNC TValue *lj_lib_checkany(lua_State *L, int narg);
  34 LJ_FUNC GCstr *lj_lib_checkstr(lua_State *L, int narg);
  35 LJ_FUNC GCstr *lj_lib_optstr(lua_State *L, int narg);
  36 #if LJ_DUALNUM
  37 LJ_FUNC void lj_lib_checknumber(lua_State *L, int narg);
  38 #else
  39 #define lj_lib_checknumber(L, narg)     lj_lib_checknum((L), (narg))
  40 #endif
  41 LJ_FUNC lua_Number lj_lib_checknum(lua_State *L, int narg);
  42 LJ_FUNC int32_t lj_lib_checkint(lua_State *L, int narg);
  43 LJ_FUNC int32_t lj_lib_optint(lua_State *L, int narg, int32_t def);
  44 LJ_FUNC GCfunc *lj_lib_checkfunc(lua_State *L, int narg);
  45 LJ_FUNC GCtab *lj_lib_checktab(lua_State *L, int narg);
  46 LJ_FUNC GCtab *lj_lib_checktabornil(lua_State *L, int narg);
  47 LJ_FUNC int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst);
  48 
  49 /* Avoid including lj_frame.h. */
  50 #if LJ_GC64
  51 #define lj_lib_upvalue(L, n) \
  52   (&gcval(L->base-2)->fn.c.upvalue[(n)-1])
  53 #elif LJ_FR2
  54 #define lj_lib_upvalue(L, n) \
  55   (&gcref((L->base-2)->gcr)->fn.c.upvalue[(n)-1])
  56 #else
  57 #define lj_lib_upvalue(L, n) \
  58   (&gcref((L->base-1)->fr.func)->fn.c.upvalue[(n)-1])
  59 #endif
  60 
  61 #if LJ_TARGET_WINDOWS
  62 #define lj_lib_checkfpu(L) \
  63   do { setnumV(L->top++, (lua_Number)1437217655); \
  64     if (lua_tointeger(L, -1) != 1437217655) lj_err_caller(L, LJ_ERR_BADFPU); \
  65     L->top--; } while (0)
  66 #else
  67 #define lj_lib_checkfpu(L)      UNUSED(L)
  68 #endif
  69 
  70 LJ_FUNC GCfunc *lj_lib_pushcc(lua_State *L, lua_CFunction f, int id, int n);
  71 #define lj_lib_pushcf(L, fn, id)        (lj_lib_pushcc(L, (fn), (id), 0))
  72 
  73 /* Library function declarations. Scanned by buildvm. */
  74 #define LJLIB_CF(name)          static int lj_cf_##name(lua_State *L)
  75 #define LJLIB_ASM(name)         static int lj_ffh_##name(lua_State *L)
  76 #define LJLIB_ASM_(name)
  77 #define LJLIB_LUA(name)
  78 #define LJLIB_SET(name)
  79 #define LJLIB_PUSH(arg)
  80 #define LJLIB_REC(handler)
  81 #define LJLIB_NOREGUV
  82 #define LJLIB_NOREG
  83 
  84 #define LJ_LIB_REG(L, regname, name) \
  85   lj_lib_register(L, regname, lj_lib_init_##name, lj_lib_cf_##name)
  86 
  87 LJ_FUNC void lj_lib_register(lua_State *L, const char *libname,
  88                              const uint8_t *init, const lua_CFunction *cf);
  89 LJ_FUNC void lj_lib_prereg(lua_State *L, const char *name, lua_CFunction f,
  90                            GCtab *env);
  91 LJ_FUNC int lj_lib_postreg(lua_State *L, lua_CFunction cf, int id,
  92                            const char *name);
  93 
  94 /* Library init data tags. */
  95 #define LIBINIT_LENMASK 0x3f
  96 #define LIBINIT_TAGMASK 0xc0
  97 #define LIBINIT_CF      0x00
  98 #define LIBINIT_ASM     0x40
  99 #define LIBINIT_ASM_    0x80
 100 #define LIBINIT_STRING  0xc0
 101 #define LIBINIT_MAXSTR  0x38
 102 #define LIBINIT_LUA     0xf9
 103 #define LIBINIT_SET     0xfa
 104 #define LIBINIT_NUMBER  0xfb
 105 #define LIBINIT_COPY    0xfc
 106 #define LIBINIT_LASTCL  0xfd
 107 #define LIBINIT_FFID    0xfe
 108 #define LIBINIT_END     0xff
 109 
 110 /* Exported library functions. */
 111 
 112 typedef struct RandomState RandomState;
 113 LJ_FUNC uint64_t LJ_FASTCALL lj_math_random_step(RandomState *rs);
 114 
 115 #endif

/* [<][>][^][v][top][bottom][index][help] */