lua5.4
lfunc.h
浏览该文件的文档.
1 /*
2 ** $Id: lfunc.h $
3 ** Auxiliary functions to manipulate prototypes and closures
4 ** See Copyright Notice in lua.h
5 */
6 
7 #ifndef lfunc_h
8 #define lfunc_h
9 
10 
11 #include "lobject.h"
12 
13 
14 #define sizeCclosure(n) (cast_int(offsetof(CClosure, upvalue)) + \
15  cast_int(sizeof(TValue)) * (n))
16 
17 #define sizeLclosure(n) (cast_int(offsetof(LClosure, upvals)) + \
18  cast_int(sizeof(TValue *)) * (n))
19 
20 
21 /* test whether thread is in 'twups' list */
22 #define isintwups(L) (L->twups != L)
23 
24 
25 /*
26 ** maximum number of upvalues in a closure (both C and Lua). (Value
27 ** must fit in a VM register.)
28 */
29 #define MAXUPVAL 255
30 
31 
32 #define upisopen(up) ((up)->v != &(up)->u.value)
33 
34 
35 #define uplevel(up) check_exp(upisopen(up), cast(StkId, (up)->v))
36 
37 
38 /*
39 ** maximum number of misses before giving up the cache of closures
40 ** in prototypes
41 */
42 #define MAXMISS 10
43 
44 
45 /*
46 ** Special "status" for 'luaF_close'
47 */
48 
49 /* close upvalues without running their closing methods */
50 #define NOCLOSINGMETH (-1)
51 
52 /* close upvalues running all closing methods in protected mode */
53 #define CLOSEPROTECT (-2)
54 
55 
57 LUAI_FUNC CClosure *luaF_newCclosure (lua_State *L, int nupvals);
58 LUAI_FUNC LClosure *luaF_newLclosure (lua_State *L, int nupvals);
61 LUAI_FUNC void luaF_newtbcupval (lua_State *L, StkId level);
62 LUAI_FUNC int luaF_close (lua_State *L, StkId level, int status);
65 LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number,
66  int pc);
67 
68 
69 #endif
dumpDebug
static void dumpDebug(DumpState *D, const Proto *f)
Definition: ldump.c:154
luaF_close
LUAI_FUNC int luaF_close(lua_State *L, StkId level, int status)
Definition: lfunc.c:223
luaF_getlocalname
const char * luaF_getlocalname(const Proto *f, int local_number, int pc)
Definition: lfunc.c:289
luaF_newproto
LUAI_FUNC Proto * luaF_newproto(lua_State *L)
Definition: lfunc.c:246
luaE_warnerror
void luaE_warnerror(lua_State *L, const char *where)
Definition: lstate.c:419
LUAC_INT
#define LUAC_INT
Definition: lundump.h:18
s2v
#define s2v(o)
Definition: lobject.h:150
luaC_newobj
GCObject * luaC_newobj(lua_State *L, int tt, size_t sz)
Definition: lgc.c:258
iswhite
#define iswhite(x)
Definition: lgc.h:87
Proto::upvalues
Upvaldesc * upvalues
Definition: lobject.h:547
l_isfalse
#define l_isfalse(o)
Definition: lobject.h:225
Upvaldesc::kind
lu_byte kind
Definition: lobject.h:497
lua_assert
#define lua_assert(c)
Definition: lauxlib.h:169
varerror
static void varerror(lua_State *L, StkId level, const char *msg)
Definition: lfunc.c:130
LUAI_FUNC
#define LUAI_FUNC
Definition: luaconf.h:307
cast_byte
#define cast_byte(i)
Definition: llimits.h:130
cast
#define cast(t, exp)
Definition: llimits.h:123
Proto::code
Instruction * code
Definition: lobject.h:545
UpVal::u
union UpVal::@3 u
AbsLineInfo::pc
int pc
Definition: lobject.h:523
lstate.h
Proto::sizeabslineinfo
int sizeabslineinfo
Definition: lobject.h:541
LUA_OK
#define LUA_OK
Definition: lua.h:49
DumpState::writer
lua_Writer writer
Definition: ldump.c:24
luaF_newtbcupval
LUAI_FUNC void luaF_newtbcupval(lua_State *L, StkId level)
Definition: lfunc.c:194
luaF_freeproto
void luaF_freeproto(lua_State *L, Proto *f)
Definition: lfunc.c:273
luaC_objbarrier
#define luaC_objbarrier(L, p, o)
Definition: lgc.h:173
LocVar::varname
TString * varname
Definition: lobject.h:506
unlikely
#define unlikely(x)
Definition: llimits.h:162
Proto::lastlinedefined
int lastlinedefined
Definition: lobject.h:543
DumpState::strip
int strip
Definition: ldump.c:26
lua_Writer
int(* lua_Writer)(lua_State *L, const void *p, size_t sz, void *ud)
Definition: lua.h:119
lua_unlock
#define lua_unlock(L)
Definition: llimits.h:254
luaF_unlinkupval
void luaF_unlinkupval(UpVal *uv)
Definition: lfunc.c:215
luaG_runerror
l_noret luaG_runerror(lua_State *L, const char *fmt,...)
Definition: ldebug.c:767
LUA_VNUMINT
#define LUA_VNUMINT
Definition: lobject.h:301
restorestack
#define restorestack(L, n)
Definition: ldo.h:36
DumpState
Definition: ldump.c:22
Proto::p
struct Proto ** p
Definition: lobject.h:546
LUA_VNUMFLT
#define LUA_VNUMFLT
Definition: lobject.h:302
dumpBlock
static void dumpBlock(DumpState *D, const void *b, size_t size)
Definition: ldump.c:40
dumpString
static void dumpString(DumpState *D, const TString *s)
Definition: ldump.c:88
luaG_findlocal
const char * luaG_findlocal(lua_State *L, CallInfo *ci, int n, StkId *pos)
Definition: ldebug.c:200
trynewtbcupval
static void trynewtbcupval(lua_State *L, void *ud)
Definition: lfunc.c:184
Proto::is_vararg
lu_byte is_vararg
Definition: lobject.h:533
LUAC_DATA
#define LUAC_DATA
Definition: lundump.h:16
lua_Number
LUA_NUMBER lua_Number
Definition: lua.h:90
LUA_VFALSE
#define LUA_VFALSE
Definition: lobject.h:217
Upvaldesc::name
TString * name
Definition: lobject.h:494
likely
#define likely(x)
Definition: llimits.h:161
Proto::sizecode
int sizecode
Definition: lobject.h:537
dumpConstants
static void dumpConstants(DumpState *D, const Proto *f)
Definition: ldump.c:108
NOCLOSINGMETH
#define NOCLOSINGMETH
Definition: lfunc.h:50
dumpVector
#define dumpVector(D, v, n)
Definition: ldump.c:35
StackValue
Definition: lobject.h:141
luaD_callnoyield
void luaD_callnoyield(lua_State *L, StkId func, int nResults)
Definition: ldo.c:565
Proto::sizep
int sizep
Definition: lobject.h:539
luaF_getlocalname
LUAI_FUNC const char * luaF_getlocalname(const Proto *func, int local_number, int pc)
Definition: lfunc.c:289
Proto::source
TString * source
Definition: lobject.h:551
dumpSize
static void dumpSize(DumpState *D, size_t x)
Definition: ldump.c:61
LUAC_NUM
#define LUAC_NUM
Definition: lundump.h:19
UNUSED
#define UNUSED(x)
Definition: llimits.h:118
callclosemth
static int callclosemth(lua_State *L, StkId level, int status)
Definition: lfunc.c:150
LocVar::startpc
int startpc
Definition: lobject.h:507
Proto::numparams
lu_byte numparams
Definition: lobject.h:532
LUAC_VERSION
#define LUAC_VERSION
Definition: lundump.h:25
nw2black
#define nw2black(x)
Definition: lgc.h:99
setnilvalue
#define setnilvalue(obj)
Definition: lobject.h:178
Proto::linedefined
int linedefined
Definition: lobject.h:542
DumpState::data
void * data
Definition: ldump.c:25
lua.h
UpVal::tbc
lu_byte tbc
Definition: lobject.h:608
UpVal
Definition: lobject.h:606
fltvalue
#define fltvalue(o)
Definition: lobject.h:310
ttisnil
#define ttisnil(v)
Definition: lobject.h:171
dumpVar
#define dumpVar(D, x)
Definition: ldump.c:49
dumpHeader
static void dumpHeader(DumpState *D)
Definition: ldump.c:197
ivalue
#define ivalue(o)
Definition: lobject.h:311
Proto::abslineinfo
AbsLineInfo * abslineinfo
Definition: lobject.h:549
dumpNumber
static void dumpNumber(DumpState *D, lua_Number x)
Definition: ldump.c:78
upisopen
#define upisopen(up)
Definition: lfunc.h:32
CClosure
Definition: lobject.h:624
AbsLineInfo::line
int line
Definition: lobject.h:524
sizeLclosure
#define sizeLclosure(n)
Definition: lfunc.h:17
G
#define G(L)
Definition: lstate.h:298
LUA_VLNGSTR
#define LUA_VLNGSTR
Definition: lobject.h:339
LUA_VSHRSTR
#define LUA_VSHRSTR
Definition: lobject.h:338
TString
Definition: lobject.h:364
lprefix.h
LUA_VTRUE
#define LUA_VTRUE
Definition: lobject.h:218
luaF_newtbcupval
void luaF_newtbcupval(lua_State *L, StkId level)
Definition: lfunc.c:194
ldebug.h
Proto::sizek
int sizek
Definition: lobject.h:536
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
getstr
#define getstr(ts)
Definition: lobject.h:381
LUA_SIGNATURE
#define LUA_SIGNATURE
Definition: lua.h:33
setobj
#define setobj(L, obj1, obj2)
Definition: lobject.h:116
Proto::lineinfo
ls_byte * lineinfo
Definition: lobject.h:548
LUA_VNIL
#define LUA_VNIL
Definition: lobject.h:161
dumpUpvalues
static void dumpUpvalues(DumpState *D, const Proto *f)
Definition: ldump.c:143
lua_State::openupval
UpVal * openupval
Definition: lstate.h:283
dumpCode
static void dumpCode(DumpState *D, const Proto *f)
Definition: ldump.c:100
gco2lcl
#define gco2lcl(o)
Definition: lstate.h:333
dumpLiteral
#define dumpLiteral(D, s)
Definition: ldump.c:37
lobject.h
luaD_seterrorobj
void luaD_seterrorobj(lua_State *L, int errcode, StkId oldtop)
Definition: ldo.c:91
LUAC_FORMAT
#define LUAC_FORMAT
Definition: lundump.h:27
lua_State
Definition: lstate.h:273
luaF_newCclosure
CClosure * luaF_newCclosure(lua_State *L, int nupvals)
Definition: lfunc.c:27
lua_Integer
LUA_INTEGER lua_Integer
Definition: lua.h:94
dumpByte
static void dumpByte(DumpState *D, int y)
Definition: ldump.c:52
LClosure::p
struct Proto * p
Definition: lobject.h:633
lua_State::twups
struct lua_State * twups
Definition: lstate.h:285
dumpInt
static void dumpInt(DumpState *D, int x)
Definition: ldump.c:73
lundump.h
TValue
Definition: lobject.h:65
dumpFunction
static void dumpFunction(DumpState *D, const Proto *f, TString *psource)
Definition: ldump.c:179
gco2upv
#define gco2upv(o)
Definition: lstate.h:340
tsslen
#define tsslen(s)
Definition: lobject.h:388
UpVal::value
TValue value
Definition: lobject.h:615
UpVal::v
TValue * v
Definition: lobject.h:609
Proto::k
TValue * k
Definition: lobject.h:544
callclose
static void callclose(lua_State *L, void *ud)
Definition: lfunc.c:103
luaF_newproto
Proto * luaF_newproto(lua_State *L)
Definition: lfunc.c:246
ttypetag
#define ttypetag(o)
Definition: lobject.h:82
LUA_VPROTO
#define LUA_VPROTO
Definition: lobject.h:487
LClosure
Definition: lobject.h:631
dumpInteger
static void dumpInteger(DumpState *D, lua_Integer x)
Definition: ldump.c:83
Proto::sizelineinfo
int sizelineinfo
Definition: lobject.h:538
gco2p
#define gco2p(o)
Definition: lstate.h:338
Proto::maxstacksize
lu_byte maxstacksize
Definition: lobject.h:534
Upvaldesc::instack
lu_byte instack
Definition: lobject.h:495
tsvalue
#define tsvalue(o)
Definition: lobject.h:347
luaF_newLclosure
LUAI_FUNC LClosure * luaF_newLclosure(lua_State *L, int nupvals)
Definition: lfunc.c:35
Proto::sizeupvalues
int sizeupvalues
Definition: lobject.h:535
Instruction
l_uint32 Instruction
Definition: llimits.h:194
uplevel
#define uplevel(up)
Definition: lfunc.h:35
CLOSEPROTECT
#define CLOSEPROTECT
Definition: lfunc.h:53
lua_State::ci
CallInfo * ci
Definition: lstate.h:280
luaD_throw
l_noret luaD_throw(lua_State *L, int errcode)
Definition: ldo.c:114
newupval
static UpVal * newupval(lua_State *L, int tbc, StkId level, UpVal **prev)
Definition: lfunc.c:65
isdead
#define isdead(g, v)
Definition: lgc.h:96
Proto
Definition: lobject.h:530
DIBS
#define DIBS
Definition: ldump.c:59
TM_CLOSE
@ TM_CLOSE
Definition: ltm.h:43
luaD_pcall
int luaD_pcall(lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef)
Definition: ldo.c:777
dumpProtos
static void dumpProtos(DumpState *D, const Proto *f)
Definition: ldump.c:134
luaF_initupvals
void luaF_initupvals(lua_State *L, LClosure *cl)
Definition: lfunc.c:48
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
luaU_dump
int luaU_dump(lua_State *L, const Proto *f, lua_Writer w, void *data, int strip)
Definition: ldump.c:213
prepclosingmethod
static int prepclosingmethod(lua_State *L, TValue *obj, TValue *err)
Definition: lfunc.c:113
luaF_newLclosure
LClosure * luaF_newLclosure(lua_State *L, int nupvals)
Definition: lfunc.c:35
DumpState::status
int status
Definition: ldump.c:27
gco2ccl
#define gco2ccl(o)
Definition: lstate.h:334
Upvaldesc::idx
lu_byte idx
Definition: lobject.h:496
luaM_free
#define luaM_free(L, b)
Definition: lmem.h:56
luaF_newCclosure
LUAI_FUNC CClosure * luaF_newCclosure(lua_State *L, int nupvals)
Definition: lfunc.c:27
lmem.h
lua_State::top
StkId top
Definition: lstate.h:278
luaF_findupval
UpVal * luaF_findupval(lua_State *L, StkId level)
Definition: lfunc.c:88
luaM_freearray
#define luaM_freearray(L, b, n)
Definition: lmem.h:57
LUA_VLCL
#define LUA_VLCL
Definition: lobject.h:568
lgc.h
GCObject
Definition: lobject.h:270
LUA_VUPVAL
#define LUA_VUPVAL
Definition: lobject.h:564
luaF_freeproto
LUAI_FUNC void luaF_freeproto(lua_State *L, Proto *f)
Definition: lfunc.c:273
isintwups
#define isintwups(L)
Definition: lfunc.h:22
luaF_findupval
LUAI_FUNC UpVal * luaF_findupval(lua_State *L, StkId level)
Definition: lfunc.c:88
next
#define next(ls)
Definition: llex.c:32
Proto::locvars
LocVar * locvars
Definition: lobject.h:550
sizeCclosure
#define sizeCclosure(n)
Definition: lfunc.h:14
luaF_unlinkupval
LUAI_FUNC void luaF_unlinkupval(UpVal *uv)
Definition: lfunc.c:215
luaF_initupvals
LUAI_FUNC void luaF_initupvals(lua_State *L, LClosure *cl)
Definition: lfunc.c:48
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
LocVar::endpc
int endpc
Definition: lobject.h:508
Proto::sizelocvars
int sizelocvars
Definition: lobject.h:540
luaC_barrier
#define luaC_barrier(L, p, v)
Definition: lgc.h:165
LUA_ERRMEM
#define LUA_ERRMEM
Definition: lua.h:53
luaD_rawrunprotected
int luaD_rawrunprotected(lua_State *L, Pfunc f, void *ud)
Definition: ldo.c:141
LClosure::upvals
UpVal * upvals[1]
Definition: lobject.h:634
lfunc.h
DumpState::L
lua_State * L
Definition: ldump.c:23
ldo.h
savestack
#define savestack(L, p)
Definition: ldo.h:35
cast_int
#define cast_int(i)
Definition: llimits.h:128