lua5.4
ldo.h
浏览该文件的文档.
1 /*
2 ** $Id: ldo.h $
3 ** Stack and Call structure of Lua
4 ** See Copyright Notice in lua.h
5 */
6 
7 #ifndef ldo_h
8 #define ldo_h
9 
10 
11 #include "lobject.h"
12 #include "lstate.h"
13 #include "lzio.h"
14 
15 
16 /*
17 ** Macro to check stack size and grow stack if needed. Parameters
18 ** 'pre'/'pos' allow the macro to preserve a pointer into the
19 ** stack across reallocations, doing the work only when needed.
20 ** It also allows the running of one GC step when the stack is
21 ** reallocated.
22 ** 'condmovestack' is used in heavy tests to force a stack reallocation
23 ** at every check.
24 */
25 #define luaD_checkstackaux(L,n,pre,pos) \
26  if (L->stack_last - L->top <= (n)) \
27  { pre; luaD_growstack(L, n, 1); pos; } \
28  else { condmovestack(L,pre,pos); }
29 
30 /* In general, 'pre'/'pos' are empty (nothing to save) */
31 #define luaD_checkstack(L,n) luaD_checkstackaux(L,n,(void)0,(void)0)
32 
33 
34 
35 #define savestack(L,p) ((char *)(p) - (char *)L->stack)
36 #define restorestack(L,n) ((StkId)((char *)L->stack + (n)))
37 
38 
39 /* macro to check stack size, preserving 'p' */
40 #define checkstackGCp(L,n,p) \
41  luaD_checkstackaux(L, n, \
42  ptrdiff_t t__ = savestack(L, p); /* save 'p' */ \
43  luaC_checkGC(L), /* stack grow uses memory */ \
44  p = restorestack(L, t__)) /* 'pos' part: restore 'p' */
45 
46 
47 /* macro to check stack size and GC */
48 #define checkstackGC(L,fsize) \
49  luaD_checkstackaux(L, (fsize), luaC_checkGC(L), (void)0)
50 
51 
52 /* type of protected functions, to be ran by 'runprotected' */
53 typedef void (*Pfunc) (lua_State *L, void *ud);
54 
55 LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
56 LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
57  const char *mode);
58 LUAI_FUNC void luaD_hook (lua_State *L, int event, int line,
59  int fTransfer, int nTransfer);
61 LUAI_FUNC void luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int n);
62 LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int nResults);
63 LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults);
64 LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults);
65 LUAI_FUNC void luaD_tryfuncTM (lua_State *L, StkId func);
66 LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u,
67  ptrdiff_t oldtop, ptrdiff_t ef);
68 LUAI_FUNC void luaD_poscall (lua_State *L, CallInfo *ci, int nres);
69 LUAI_FUNC int luaD_reallocstack (lua_State *L, int newsize, int raiseerror);
70 LUAI_FUNC int luaD_growstack (lua_State *L, int n, int raiseerror);
73 
74 LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode);
75 LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud);
76 
77 #endif
78 
Dyndata::actvar
struct Dyndata::@10 actvar
setobjs2s
#define setobjs2s(L, o1, o2)
Definition: lobject.h:127
EXTRA_STACK
#define EXTRA_STACK
Definition: lstate.h:137
s2v
#define s2v(o)
Definition: lobject.h:150
unroll
static void unroll(lua_State *L, void *ud)
Definition: ldo.c:604
luaE_incCstack
LUAI_FUNC void luaE_incCstack(lua_State *L)
Definition: lstate.c:173
luaY_parser
LClosure * luaY_parser(lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
Definition: lparser.c:1931
f_parser
static void f_parser(lua_State *L, void *ud)
Definition: ldo.c:821
lua_assert
#define lua_assert(c)
Definition: lauxlib.h:169
correctstack
static void correctstack(lua_State *L, StkId oldstack, StkId newstack)
Definition: ldo.c:163
luaD_hook
LUAI_FUNC void luaD_hook(lua_State *L, int event, int line, int fTransfer, int nTransfer)
Definition: ldo.c:294
LUAI_FUNC
#define LUAI_FUNC
Definition: luaconf.h:307
cast_byte
#define cast_byte(i)
Definition: llimits.h:130
l_noret
#define l_noret
Definition: llimits.h:178
cast
#define cast(t, exp)
Definition: llimits.h:123
CallInfo::previous
struct CallInfo * previous
Definition: lstate.h:163
Proto::code
Instruction * code
Definition: lobject.h:545
rethook
static StkId rethook(lua_State *L, CallInfo *ci, StkId firstres, int nres)
Definition: ldo.c:346
luaU_undump
LClosure * luaU_undump(lua_State *L, ZIO *Z, const char *name)
Definition: lundump.c:311
UpVal::u
union UpVal::@3 u
lua_isyieldable
LUA_API int lua_isyieldable(lua_State *L)
Definition: ldo.c:736
LUA_MULTRET
#define LUA_MULTRET
Definition: lua.h:36
lua_resume
LUA_API int lua_resume(lua_State *L, lua_State *from, int nargs, int *nresults)
Definition: ldo.c:701
lstate.h
CIST_HOOKED
#define CIST_HOOKED
Definition: lstate.h:195
LUA_MINSTACK
#define LUA_MINSTACK
Definition: lua.h:80
luaD_poscall
void luaD_poscall(lua_State *L, CallInfo *ci, int nres)
Definition: ldo.c:434
LUA_OK
#define LUA_OK
Definition: lua.h:49
luaD_hookcall
LUAI_FUNC void luaD_hookcall(lua_State *L, CallInfo *ci)
Definition: ldo.c:333
stackinuse
static int stackinuse(lua_State *L)
Definition: ldo.c:238
luai_userstateyield
#define luai_userstateyield(L, n)
Definition: llimits.h:291
resume
static void resume(lua_State *L, void *ud)
Definition: ldo.c:676
api_incr_top
#define api_incr_top(L)
Definition: lapi.h:16
next_ci
#define next_ci(L)
Definition: ldo.c:444
SParser::mode
const char * mode
Definition: ldo.c:807
luaS_new
TString * luaS_new(lua_State *L, const char *str)
Definition: lstring.c:241
lua_State::status
lu_byte status
Definition: lstate.h:275
unlikely
#define unlikely(x)
Definition: llimits.h:162
global_State::panic
lua_CFunction panic
Definition: lstate.h:259
LUA_ERRERR
#define LUA_ERRERR
Definition: lua.h:54
ltable.h
lua_unlock
#define lua_unlock(L)
Definition: llimits.h:254
luaG_runerror
l_noret luaG_runerror(lua_State *L, const char *fmt,...)
Definition: ldebug.c:767
restorestack
#define restorestack(L, n)
Definition: ldo.h:36
recover
static int recover(lua_State *L, int status)
Definition: ldo.c:638
luaD_callnoyield
LUAI_FUNC void luaD_callnoyield(lua_State *L, StkId func, int nResults)
Definition: ldo.c:565
CIST_TAIL
#define CIST_TAIL
Definition: lstate.h:197
luaV_finishOp
void luaV_finishOp(lua_State *L)
Definition: lvm.c:803
fvalue
#define fvalue(o)
Definition: lobject.h:582
LUA_HOOKCALL
#define LUA_HOOKCALL
Definition: lua.h:429
SParser::dyd
Dyndata dyd
Definition: ldo.c:806
Dyndata::label
Labellist label
Definition: lparser.h:135
incnny
#define incnny(L)
Definition: lstate.h:106
checkmode
static void checkmode(lua_State *L, const char *mode, const char *x)
Definition: ldo.c:812
Proto::is_vararg
lu_byte is_vararg
Definition: lobject.h:533
lua_longjmp::b
luai_jmpbuf b
Definition: ldo.c:86
luai_userstateresume
#define luai_userstateresume(L, n)
Definition: llimits.h:287
luaD_precall
LUAI_FUNC CallInfo * luaD_precall(lua_State *L, StkId func, int nResults)
Definition: ldo.c:479
Dyndata::arr
Vardesc * arr
Definition: lparser.h:130
luaM_error
#define luaM_error(L)
Definition: lmem.h:17
lua_Debug::currentline
int currentline
Definition: lua.h:476
isLuacode
#define isLuacode(ci)
Definition: lstate.h:209
likely
#define likely(x)
Definition: llimits.h:161
ltm.h
lua_State::errfunc
ptrdiff_t errfunc
Definition: lstate.h:289
Pfunc
void(* Pfunc)(lua_State *L, void *ud)
Definition: ldo.h:53
luaD_precall
CallInfo * luaD_precall(lua_State *L, StkId func, int nresults)
Definition: ldo.c:479
StackValue
Definition: lobject.h:141
Mbuffer
Definition: lzio.h:23
luaD_callnoyield
void luaD_callnoyield(lua_State *L, StkId func, int nResults)
Definition: ldo.c:565
clCvalue
#define clCvalue(o)
Definition: lobject.h:583
luaE_checkcstack
void luaE_checkcstack(lua_State *L)
Definition: lstate.c:165
lua_Debug
Definition: lua.h:469
lua_State::oldpc
int oldpc
Definition: lstate.h:291
luaD_shrinkstack
LUAI_FUNC void luaD_shrinkstack(lua_State *L)
Definition: ldo.c:262
checkstackGC
#define checkstackGC(L, fsize)
Definition: ldo.h:48
luaD_shrinkstack
void luaD_shrinkstack(lua_State *L)
Definition: ldo.c:262
luaD_hook
void luaD_hook(lua_State *L, int event, int line, int ftransfer, int ntransfer)
Definition: ldo.c:294
Proto::numparams
lu_byte numparams
Definition: lobject.h:532
luai_jmpbuf
#define luai_jmpbuf
Definition: ldo.c:75
setnilvalue
#define setnilvalue(obj)
Definition: lobject.h:178
lua.h
luaD_reallocstack
int luaD_reallocstack(lua_State *L, int newsize, int raiseerror)
Definition: ldo.c:184
luaD_pcall
LUAI_FUNC int luaD_pcall(lua_State *L, Pfunc func, void *u, ptrdiff_t oldtop, ptrdiff_t ef)
Definition: ldo.c:777
UpVal
Definition: lobject.h:606
luaD_pretailcall
void luaD_pretailcall(lua_State *L, CallInfo *ci, StkId func, int narg1)
Definition: ldo.c:452
SParser
Definition: ldo.c:803
luaD_growstack
LUAI_FUNC int luaD_growstack(lua_State *L, int n, int raiseerror)
Definition: ldo.c:207
lua_State::errorJmp
struct lua_longjmp * errorJmp
Definition: lstate.h:286
luaZ_freebuffer
#define luaZ_freebuffer(L, buff)
Definition: lzio.h:44
lua_State::hook
volatile lua_Hook hook
Definition: lstate.h:288
ttisnil
#define ttisnil(v)
Definition: lobject.h:171
lua_yieldk
LUA_API int lua_yieldk(lua_State *L, int nresults, lua_KContext ctx, lua_KFunction k)
Definition: ldo.c:741
lua_State::stack_last
StkId stack_last
Definition: lstate.h:281
adjustresults
#define adjustresults(L, nres)
Definition: lapi.h:25
lvm.h
lua_longjmp::previous
struct lua_longjmp * previous
Definition: ldo.c:85
ci_func
#define ci_func(ci)
Definition: ldebug.h:18
G
#define G(L)
Definition: lstate.h:298
lua_KContext
LUA_KCONTEXT lua_KContext
Definition: lua.h:100
lprefix.h
luaG_typeerror
l_noret luaG_typeerror(lua_State *L, const TValue *o, const char *op)
Definition: ldebug.c:694
setsvalue2s
#define setsvalue2s(L, o, s)
Definition: lobject.h:355
CallInfo::nresults
short nresults
Definition: lstate.h:184
ldebug.h
CallInfo::func
StkId func
Definition: lstate.h:161
lua_lock
#define lua_lock(L)
Definition: llimits.h:253
lu_byte
unsigned char lu_byte
Definition: llimits.h:36
luaD_rawrunprotected
LUAI_FUNC int luaD_rawrunprotected(lua_State *L, Pfunc f, void *ud)
Definition: ldo.c:141
luaD_call
void luaD_call(lua_State *L, StkId func, int nResults)
Definition: ldo.c:557
LUA_SIGNATURE
#define LUA_SIGNATURE
Definition: lua.h:33
l_uint32
unsigned long l_uint32
Definition: llimits.h:191
luaD_inctop
void luaD_inctop(lua_State *L)
Definition: ldo.c:281
luaD_checkstack
#define luaD_checkstack(L, n)
Definition: ldo.h:31
CallInfo::c
struct CallInfo::@11::@14 c
findpcall
static CallInfo * findpcall(lua_State *L)
Definition: ldo.c:623
TM_CALL
@ TM_CALL
Definition: ltm.h:42
nyci
#define nyci
Definition: lstate.h:112
LUA_API
#define LUA_API
Definition: luaconf.h:277
codeNresults
#define codeNresults(n)
Definition: lapi.h:45
clLvalue
#define clLvalue(o)
Definition: lobject.h:581
lua_Hook
void(* lua_Hook)(lua_State *L, lua_Debug *ar)
Definition: lua.h:448
lua_State::openupval
UpVal * openupval
Definition: lstate.h:283
luaD_pretailcall
LUAI_FUNC void luaD_pretailcall(lua_State *L, CallInfo *ci, StkId func, int n)
Definition: ldo.c:452
lua_State::base_ci
CallInfo base_ci
Definition: lstate.h:287
CallInfo::l
struct CallInfo::@11::@13 l
LUA_MASKCALL
#define LUA_MASKCALL
Definition: lua.h:439
CallInfo
Definition: lstate.h:160
lobject.h
luaD_seterrorobj
void luaD_seterrorobj(lua_State *L, int errcode, StkId oldtop)
Definition: ldo.c:91
global_State
Definition: lstate.h:219
lua_State
Definition: lstate.h:273
luaD_inctop
LUAI_FUNC void luaD_inctop(lua_State *L)
Definition: ldo.c:281
CallInfo::u2
union CallInfo::@12 u2
lua_Debug::i_ci
struct CallInfo * i_ci
Definition: lua.h:487
lua_State::hookmask
volatile l_signalT hookmask
Definition: lstate.h:294
LClosure::p
struct Proto * p
Definition: lobject.h:633
luaM_reallocvector
#define luaM_reallocvector(L, v, oldn, n, t)
Definition: lmem.h:70
lundump.h
lparser.h
TValue
Definition: lobject.h:65
lua_longjmp::status
volatile int status
Definition: ldo.c:87
UpVal::v
TValue * v
Definition: lobject.h:609
lua_longjmp
Definition: ldo.c:84
lua_Debug::event
int event
Definition: lua.h:470
finishCcall
static void finishCcall(lua_State *L, int status)
Definition: ldo.c:574
ttypetag
#define ttypetag(o)
Definition: lobject.h:82
LUAI_MAXCCALLS
#define LUAI_MAXCCALLS
Definition: llimits.h:244
pcRel
#define pcRel(pc, p)
Definition: ldebug.h:14
LClosure
Definition: lobject.h:631
Proto::maxstacksize
lu_byte maxstacksize
Definition: lobject.h:534
CIST_C
#define CIST_C
Definition: lstate.h:193
LUA_ERRSYNTAX
#define LUA_ERRSYNTAX
Definition: lua.h:52
LUA_YIELD
#define LUA_YIELD
Definition: lua.h:50
luaO_pushfstring
const char * luaO_pushfstring(lua_State *L, const char *fmt,...)
Definition: lobject.c:539
luaV_execute
void luaV_execute(lua_State *L, CallInfo *ci)
Definition: lvm.c:1119
Dyndata
Definition: lparser.h:128
Proto::sizeupvalues
int sizeupvalues
Definition: lobject.h:535
CIST_FRESH
#define CIST_FRESH
Definition: lstate.h:194
LUA_MASKRET
#define LUA_MASKRET
Definition: lua.h:440
uplevel
#define uplevel(up)
Definition: lfunc.h:35
yieldable
#define yieldable(L)
Definition: lstate.h:99
Dyndata::gt
Labellist gt
Definition: lparser.h:134
CIST_TRAN
#define CIST_TRAN
Definition: lstate.h:200
luaD_tryfuncTM
LUAI_FUNC void luaD_tryfuncTM(lua_State *L, StkId func)
Definition: ldo.c:374
CLOSEPROTECT
#define CLOSEPROTECT
Definition: lfunc.h:53
SParser::z
ZIO * z
Definition: ldo.c:804
lua_State::ci
CallInfo * ci
Definition: lstate.h:280
LUAI_MAXSTACK
#define LUAI_MAXSTACK
Definition: ltests.h:130
luaD_throw
l_noret luaD_throw(lua_State *L, int errcode)
Definition: ldo.c:114
luaD_protectedparser
int luaD_protectedparser(lua_State *L, ZIO *z, const char *name, const char *mode)
Definition: ldo.c:838
lua_State::stack
StkId stack
Definition: lstate.h:282
Labellist::size
int size
Definition: lparser.h:123
LUA_HOOKTAILCALL
#define LUA_HOOKTAILCALL
Definition: lua.h:433
luaE_shrinkCI
void luaE_shrinkCI(lua_State *L)
Definition: lstate.c:138
SParser::buff
Mbuffer buff
Definition: ldo.c:805
errorstatus
#define errorstatus(s)
Definition: ldo.c:38
decnny
#define decnny(L)
Definition: lstate.h:109
Proto
Definition: lobject.h:530
LUA_HOOKRET
#define LUA_HOOKRET
Definition: lua.h:430
luaD_pcall
int luaD_pcall(lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef)
Definition: ldo.c:777
luaD_seterrorobj
LUAI_FUNC void luaD_seterrorobj(lua_State *L, int errcode, StkId oldtop)
Definition: ldo.c:91
luaD_call
LUAI_FUNC void luaD_call(lua_State *L, StkId func, int nResults)
Definition: ldo.c:557
luaF_initupvals
void luaF_initupvals(lua_State *L, LClosure *cl)
Definition: lfunc.c:48
moveresults
static void moveresults(lua_State *L, StkId res, int nres, int wanted)
Definition: ldo.c:392
luaD_throw
LUAI_FUNC l_noret luaD_throw(lua_State *L, int errcode)
Definition: ldo.c:114
luaT_gettmbyobj
const TValue * luaT_gettmbyobj(lua_State *L, const TValue *o, TMS event)
Definition: ltm.c:71
setobj2s
#define setobj2s(L, o1, o2)
Definition: lobject.h:129
UpVal::open
struct UpVal::@3::@4 open
lstring.h
Labellist::arr
Labeldesc * arr
Definition: lparser.h:121
CallInfo::transferinfo
struct CallInfo::@12::@15 transferinfo
lapi.h
LUA_ERRRUN
#define LUA_ERRRUN
Definition: lua.h:51
ERRORSTACKSIZE
#define ERRORSTACKSIZE
Definition: ldo.c:181
lua_CFunction
int(* lua_CFunction)(lua_State *L)
Definition: lua.h:106
hastocloseCfunc
#define hastocloseCfunc(n)
Definition: lapi.h:43
global_State::mainthread
struct lua_State * mainthread
Definition: lstate.h:260
getCcalls
#define getCcalls(L)
Definition: lstate.h:102
lua_KFunction
int(* lua_KFunction)(lua_State *L, int status, lua_KContext ctx)
Definition: lua.h:111
lmem.h
lua_State::top
StkId top
Definition: lstate.h:278
LUA_VLCF
#define LUA_VLCF
Definition: lobject.h:569
luaM_freearray
#define luaM_freearray(L, b, n)
Definition: lmem.h:57
LUA_VLCL
#define LUA_VLCL
Definition: lobject.h:568
lgc.h
CallInfo::nyield
int nyield
Definition: lstate.h:178
api_check
#define api_check(l, e, msg)
Definition: llimits.h:113
Zio
Definition: lzio.h:55
isLua
#define isLua(ci)
Definition: lstate.h:206
luaZ_initbuffer
#define luaZ_initbuffer(L, buff)
Definition: lzio.h:29
resume_error
static int resume_error(lua_State *L, const char *msg, int narg)
Definition: ldo.c:660
checkstackGCp
#define checkstackGCp(L, n, p)
Definition: ldo.h:40
stacksize
#define stacksize(th)
Definition: lstate.h:142
luaD_hookcall
void luaD_hookcall(lua_State *L, CallInfo *ci)
Definition: ldo.c:333
lua_State::nCcalls
l_uint32 nCcalls
Definition: lstate.h:290
luaD_tryfuncTM
void luaD_tryfuncTM(lua_State *L, StkId func)
Definition: ldo.c:374
lzio.h
lua_State::allowhook
lu_byte allowhook
Definition: lstate.h:276
luaD_growstack
int luaD_growstack(lua_State *L, int n, int raiseerror)
Definition: ldo.c:207
CallInfo::top
StkId top
Definition: lstate.h:162
SParser::name
const char * name
Definition: ldo.c:808
zgetc
#define zgetc(z)
Definition: lzio.h:20
luaD_protectedparser
LUAI_FUNC int luaD_protectedparser(lua_State *L, ZIO *z, const char *name, const char *mode)
Definition: ldo.c:838
CallInfo::callstatus
unsigned short callstatus
Definition: lstate.h:185
luaF_close
int luaF_close(lua_State *L, StkId level, int status)
Definition: lfunc.c:223
LUA_VCCL
#define LUA_VCCL
Definition: lobject.h:570
ccall
static void ccall(lua_State *L, StkId func, int nResults, int inc)
Definition: ldo.c:541
luaD_poscall
LUAI_FUNC void luaD_poscall(lua_State *L, CallInfo *ci, int nres)
Definition: ldo.c:434
Dyndata::size
int size
Definition: lparser.h:132
api_checknelems
#define api_checknelems(L, n)
Definition: lapi.h:30
luaS_newliteral
#define luaS_newliteral(L, s)
Definition: lstring.h:28
luaD_reallocstack
LUAI_FUNC int luaD_reallocstack(lua_State *L, int newsize, int raiseerror)
Definition: ldo.c:184
LUAI_THROW
#define LUAI_THROW(L, c)
Definition: ldo.c:73
LUA_ERRMEM
#define LUA_ERRMEM
Definition: lua.h:53
CallInfo::u
union CallInfo::@11 u
luaD_rawrunprotected
int luaD_rawrunprotected(lua_State *L, Pfunc f, void *ud)
Definition: ldo.c:141
CIST_YPCALL
#define CIST_YPCALL
Definition: lstate.h:196
CallInfo::funcidx
int funcidx
Definition: lstate.h:177
lopcodes.h
getoah
#define getoah(st)
Definition: lstate.h:213
lfunc.h
ldo.h
savestack
#define savestack(L, p)
Definition: ldo.h:35
condmovestack
#define condmovestack(L, pre, pos)
Definition: llimits.h:355
cast_int
#define cast_int(i)
Definition: llimits.h:128
LUAI_TRY
#define LUAI_TRY(L, c, a)
Definition: ldo.c:74