lua5.4
lparser.h
浏览该文件的文档.
1 /*
2 ** $Id: lparser.h $
3 ** Lua Parser
4 ** See Copyright Notice in lua.h
5 */
6 
7 #ifndef lparser_h
8 #define lparser_h
9 
10 #include "llimits.h"
11 #include "lobject.h"
12 #include "lzio.h"
13 
14 
15 /*
16 ** Expression and variable descriptor.
17 ** Code generation for variables and expressions can be delayed to allow
18 ** optimizations; An 'expdesc' structure describes a potentially-delayed
19 ** variable/expression. It has a description of its "main" value plus a
20 ** list of conditional jumps that can also produce its value (generated
21 ** by short-circuit operators 'and'/'or').
22 */
23 
24 /* kinds of variables/expressions */
25 typedef enum {
26  VVOID, /* when 'expdesc' describes the last expression of a list,
27  this kind means an empty list (so, no expression) */
28  VNIL, /* constant nil */
29  VTRUE, /* constant true */
30  VFALSE, /* constant false */
31  VK, /* constant in 'k'; info = index of constant in 'k' */
32  VKFLT, /* floating constant; nval = numerical float value */
33  VKINT, /* integer constant; ival = numerical integer value */
34  VKSTR, /* string constant; strval = TString address;
35  (string is fixed by the lexer) */
36  VNONRELOC, /* expression has its value in a fixed register;
37  info = result register */
38  VLOCAL, /* local variable; var.ridx = register index;
39  var.vidx = relative index in 'actvar.arr' */
40  VUPVAL, /* upvalue variable; info = index of upvalue in 'upvalues' */
41  VCONST, /* compile-time <const> variable;
42  info = absolute index in 'actvar.arr' */
43  VINDEXED, /* indexed variable;
44  ind.t = table register;
45  ind.idx = key's R index */
46  VINDEXUP, /* indexed upvalue;
47  ind.t = table upvalue;
48  ind.idx = key's K index */
49  VINDEXI, /* indexed variable with constant integer;
50  ind.t = table register;
51  ind.idx = key's value */
52  VINDEXSTR, /* indexed variable with literal string;
53  ind.t = table register;
54  ind.idx = key's K index */
55  VJMP, /* expression is a test/comparison;
56  info = pc of corresponding jump instruction */
57  VRELOC, /* expression can put result in any register;
58  info = instruction pc */
59  VCALL, /* expression is a function call; info = instruction pc */
60  VVARARG /* vararg expression; info = instruction pc */
62 
63 
64 #define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXSTR)
65 #define vkisindexed(k) (VINDEXED <= (k) && (k) <= VINDEXSTR)
66 
67 
68 typedef struct expdesc {
70  union {
71  lua_Integer ival; /* for VKINT */
72  lua_Number nval; /* for VKFLT */
73  TString *strval; /* for VKSTR */
74  int info; /* for generic use */
75  struct { /* for indexed variables */
76  short idx; /* index (R or "long" K) */
77  lu_byte t; /* table (register or upvalue) */
78  } ind;
79  struct { /* for local variables */
80  lu_byte ridx; /* register holding the variable */
81  unsigned short vidx; /* compiler index (in 'actvar.arr') */
82  } var;
83  } u;
84  int t; /* patch list of 'exit when true' */
85  int f; /* patch list of 'exit when false' */
87 
88 
89 /* kinds of variables */
90 #define VDKREG 0 /* regular */
91 #define RDKCONST 1 /* constant */
92 #define RDKTOCLOSE 2 /* to-be-closed */
93 #define RDKCTC 3 /* compile-time constant */
94 
95 /* description of an active local variable */
96 typedef union Vardesc {
97  struct {
98  TValuefields; /* constant value (if it is a compile-time constant) */
100  lu_byte ridx; /* register holding the variable */
101  short pidx; /* index of the variable in the Proto's 'locvars' array */
102  TString *name; /* variable name */
103  } vd;
104  TValue k; /* constant value (if any) */
106 
107 
108 
109 /* description of pending goto statements and label statements */
110 typedef struct Labeldesc {
111  TString *name; /* label identifier */
112  int pc; /* position in code */
113  int line; /* line where it appeared */
114  lu_byte nactvar; /* number of active variables in that position */
115  lu_byte close; /* goto that escapes upvalues */
117 
118 
119 /* list of labels or gotos */
120 typedef struct Labellist {
121  Labeldesc *arr; /* array */
122  int n; /* number of entries in use */
123  int size; /* array size */
125 
126 
127 /* dynamic structures used by the parser */
128 typedef struct Dyndata {
129  struct { /* list of all active local variables */
131  int n;
132  int size;
134  Labellist gt; /* list of pending gotos */
135  Labellist label; /* list of active labels */
137 
138 
139 /* control of blocks */
140 struct BlockCnt; /* defined in lparser.c */
141 
142 
143 /* state needed to generate code for a given function */
144 typedef struct FuncState {
145  Proto *f; /* current function header */
146  struct FuncState *prev; /* enclosing function */
147  struct LexState *ls; /* lexical state */
148  struct BlockCnt *bl; /* chain of current blocks */
149  int pc; /* next position to code (equivalent to 'ncode') */
150  int lasttarget; /* 'label' of last 'jump label' */
151  int previousline; /* last line that was saved in 'lineinfo' */
152  int nk; /* number of elements in 'k' */
153  int np; /* number of elements in 'p' */
154  int nabslineinfo; /* number of elements in 'abslineinfo' */
155  int firstlocal; /* index of first local var (in Dyndata array) */
156  int firstlabel; /* index of first label (in 'dyd->label->arr') */
157  short ndebugvars; /* number of elements in 'f->locvars' */
158  lu_byte nactvar; /* number of active local variables */
159  lu_byte nups; /* number of upvalues */
160  lu_byte freereg; /* first free register */
161  lu_byte iwthabs; /* instructions issued since last absolute line info */
162  lu_byte needclose; /* function needs to close upvalues when returning */
164 
165 
168  Dyndata *dyd, const char *name, int firstchar);
169 
170 
171 #endif
Dyndata::actvar
struct Dyndata::@10 actvar
luaX_next
void luaX_next(LexState *ls)
Definition: llex.c:565
os_tmpname
static int os_tmpname(lua_State *L)
Definition: loslib.c:169
TK_IF
@ TK_IF
Definition: llex.h:36
luaL_optstring
#define luaL_optstring(L, n, d)
Definition: lauxlib.h:139
setvararg
static void setvararg(FuncState *fs, int nparams)
Definition: lparser.c:941
hasmultret
#define hasmultret(k)
Definition: lparser.c:38
Labeldesc::name
TString * name
Definition: lparser.h:111
LexState::buff
Mbuffer * buff
Definition: llex.h:73
LexState::h
Table * h
Definition: llex.h:74
luaK_exp2anyreg
int luaK_exp2anyreg(FuncState *fs, expdesc *e)
Definition: lcode.c:945
expdesc::ind
struct expdesc::@6::@7 ind
OPR_GE
@ OPR_GE
Definition: lcode.h:37
VLOCAL
@ VLOCAL
Definition: lparser.h:38
getfield
static int getfield(lua_State *L, const char *key, int d, int delta)
Definition: loslib.c:251
left
lu_byte left
Definition: lparser.c:1226
FuncState::np
int np
Definition: lparser.h:153
os_exit
static int os_exit(lua_State *L)
Definition: loslib.c:394
Proto::upvalues
Upvaldesc * upvalues
Definition: lobject.h:547
luaK_goiffalse
void luaK_goiffalse(FuncState *fs, expdesc *e)
Definition: lcode.c:1151
luaY_parser
LClosure * luaY_parser(lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
Definition: lparser.c:1931
TK_SHR
@ TK_SHR
Definition: llex.h:40
VJMP
@ VJMP
Definition: lparser.h:55
expdesc::var
struct expdesc::@6::@8 var
Upvaldesc::kind
lu_byte kind
Definition: lobject.h:497
expdesc::info
int info
Definition: lparser.h:74
lua_assert
#define lua_assert(c)
Definition: lauxlib.h:169
restassign
static void restassign(LexState *ls, struct LHS_assign *lh, int nvars)
Definition: lparser.c:1363
luaK_fixline
void luaK_fixline(FuncState *fs, int line)
Definition: lcode.c:1734
ls_byte
signed char ls_byte
Definition: llimits.h:37
SemInfo::r
lua_Number r
Definition: llex.h:50
OPR_AND
@ OPR_AND
Definition: lcode.h:39
OP_VARARG
@ OP_VARARG
Definition: lopcodes.h:304
lua_Unsigned
LUA_UNSIGNED lua_Unsigned
Definition: lua.h:97
VCONST
@ VCONST
Definition: lparser.h:41
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
setboolfield
static void setboolfield(lua_State *L, const char *key, int value)
Definition: loslib.c:219
Proto::code
Instruction * code
Definition: lobject.h:545
LexState::fs
struct FuncState * fs
Definition: llex.h:70
OP_TFORPREP
@ OP_TFORPREP
Definition: lopcodes.h:296
allocupvalue
static Upvaldesc * allocupvalue(FuncState *fs)
Definition: lparser.c:352
jumpscopeerror
static l_noret jumpscopeerror(LexState *ls, Labeldesc *gt)
Definition: lparser.c:502
check_readonly
static void check_readonly(LexState *ls, expdesc *e)
Definition: lparser.c:277
localstat
static void localstat(LexState *ls)
Definition: lparser.c:1716
codename
static void codename(LexState *ls, expdesc *e)
Definition: lparser.c:166
TK_THEN
@ TK_THEN
Definition: llex.h:37
FuncState::previousline
int previousline
Definition: lparser.h:151
luaX_token2str
const char * luaX_token2str(LexState *ls, int token)
Definition: llex.c:82
simpleexp
static void simpleexp(LexState *ls, expdesc *v)
Definition: lparser.c:1128
l_gmtime
#define l_gmtime(t, r)
Definition: loslib.c:94
FuncState::lasttarget
int lasttarget
Definition: lparser.h:150
LUA_MULTRET
#define LUA_MULTRET
Definition: lua.h:36
VUPVAL
@ VUPVAL
Definition: lparser.h:40
luaX_setinput
void luaX_setinput(lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar)
Definition: llex.c:167
lstate.h
vkisvar
#define vkisvar(k)
Definition: lparser.h:64
TK_REPEAT
@ TK_REPEAT
Definition: llex.h:36
new_localvarliteral
#define new_localvarliteral(ls, v)
Definition: lparser.c:208
expdesc::idx
short idx
Definition: lparser.h:76
os_time
static int os_time(lua_State *L)
Definition: loslib.c:346
FuncState::nabslineinfo
int nabslineinfo
Definition: lparser.h:154
Proto::sizeabslineinfo
int sizeabslineinfo
Definition: lobject.h:541
RDKCONST
#define RDKCONST
Definition: lparser.h:91
OP_TAILCALL
@ OP_TAILCALL
Definition: lopcodes.h:286
close_func
static void close_func(LexState *ls)
Definition: lparser.c:744
TK_NE
@ TK_NE
Definition: llex.h:39
luaK_patchlist
void luaK_patchlist(FuncState *fs, int list, int target)
Definition: lcode.c:305
FuncState::prev
struct FuncState * prev
Definition: lparser.h:146
luaK_jumpto
#define luaK_jumpto(fs, t)
Definition: lcode.h:60
lcode.h
BlockCnt::insidetbc
lu_byte insidetbc
Definition: lparser.c:56
searchupvalue
static int searchupvalue(FuncState *fs, TString *name)
Definition: lparser.c:342
RDKCTC
#define RDKCTC
Definition: lparser.h:93
FuncState
Definition: lparser.h:144
OP_CALL
@ OP_CALL
Definition: lopcodes.h:285
lua_pushstring
LUA_API const char * lua_pushstring(lua_State *L, const char *s)
Definition: lapi.c:514
luaL_checkstring
#define luaL_checkstring(L, n)
Definition: lauxlib.h:138
enterblock
static void enterblock(FuncState *fs, BlockCnt *bl, lu_byte isloop)
Definition: lparser.c:630
OPR_NOUNOPR
@ OPR_NOUNOPR
Definition: lcode.h:51
TK_FLT
@ TK_FLT
Definition: llex.h:42
OPR_NOT
@ OPR_NOT
Definition: lcode.h:51
luaC_objbarrier
#define luaC_objbarrier(L, p, o)
Definition: lgc.h:173
lua_getfield
LUA_API int lua_getfield(lua_State *L, int idx, const char *k)
Definition: lapi.c:665
VNONRELOC
@ VNONRELOC
Definition: lparser.h:36
exp1
static void exp1(LexState *ls)
Definition: lparser.c:1505
luaK_setlist
void luaK_setlist(FuncState *fs, int base, int nelems, int tostore)
Definition: lcode.c:1758
ConsControl::t
expdesc * t
Definition: lparser.c:828
check_condition
#define check_condition(ls, c, msg)
Definition: lparser.c:122
Labeldesc
Definition: lparser.h:110
luaL_buffinit
LUALIB_API void luaL_buffinit(lua_State *L, luaL_Buffer *B)
Definition: lauxlib.c:620
OP_GETUPVAL
@ OP_GETUPVAL
Definition: lopcodes.h:209
LUA_TTABLE
#define LUA_TTABLE
Definition: lua.h:70
luaS_new
TString * luaS_new(lua_State *L, const char *str)
Definition: lstring.c:241
cond
static int cond(LexState *ls)
Definition: lparser.c:1394
LocVar::varname
TString * varname
Definition: lobject.h:506
checkrepeated
static void checkrepeated(LexState *ls, TString *name)
Definition: lparser.c:1436
GETARG_A
#define GETARG_A(i)
Definition: lopcodes.h:125
unlikely
#define unlikely(x)
Definition: llimits.h:162
os_clock
static int os_clock(lua_State *L)
Definition: loslib.c:186
closelistfield
static void closelistfield(FuncState *fs, ConsControl *cc)
Definition: lparser.c:856
lua_pushinteger
LUA_API void lua_pushinteger(lua_State *L, lua_Integer n)
Definition: lapi.c:489
Vardesc::TValuefields
TValuefields
Definition: lparser.h:98
TK_IDIV
@ TK_IDIV
Definition: llex.h:39
solvegotos
static int solvegotos(LexState *ls, Labeldesc *lb)
Definition: lparser.c:573
ltable.h
Proto::lastlinedefined
int lastlinedefined
Definition: lobject.h:543
luaC_checkGC
#define luaC_checkGC(L)
Definition: lgc.h:162
primaryexp
static void primaryexp(LexState *ls, expdesc *v)
Definition: lparser.c:1068
os_setlocale
static int os_setlocale(lua_State *L)
Definition: loslib.c:382
FuncState::firstlabel
int firstlabel
Definition: lparser.h:156
localfunc
static void localfunc(LexState *ls)
Definition: lparser.c:1677
FuncState::ndebugvars
short ndebugvars
Definition: lparser.h:157
Vardesc::vd
struct Vardesc::@9 vd
luaK_setmultret
#define luaK_setmultret(fs, e)
Definition: lcode.h:58
right
lu_byte right
Definition: lparser.c:1227
OP_FORLOOP
@ OP_FORLOOP
Definition: lopcodes.h:292
TK_WHILE
@ TK_WHILE
Definition: llex.h:37
lua_pop
#define lua_pop(L, n)
Definition: lua.h:364
setfield
static void setfield(lua_State *L, const char *key, int value, int delta)
Definition: loslib.c:209
LexState::L
struct lua_State * L
Definition: llex.h:71
Proto::p
struct Proto ** p
Definition: lobject.h:546
removevars
static void removevars(FuncState *fs, int tolevel)
Definition: lparser.c:328
init_exp
static void init_exp(expdesc *e, expkind k, int i)
Definition: lparser.c:152
undefgoto
static l_noret undefgoto(LexState *ls, Labeldesc *gt)
Definition: lparser.c:646
expdesc::ridx
lu_byte ridx
Definition: lparser.h:80
checklimit
static void checklimit(FuncState *fs, int v, int l, const char *what)
Definition: lparser.c:87
Dyndata::label
Labellist label
Definition: lparser.h:135
TK_BREAK
@ TK_BREAK
Definition: llex.h:34
OPR_MOD
@ OPR_MOD
Definition: lcode.h:28
luaL_checkoption
LUALIB_API int luaL_checkoption(lua_State *L, int arg, const char *def, const char *const lst[])
Definition: lauxlib.c:360
forprep
static int forprep(lua_State *L, StkId ra)
Definition: lvm.c:206
Proto::is_vararg
lu_byte is_vararg
Definition: lobject.h:533
FuncState::bl
struct BlockCnt * bl
Definition: lparser.h:148
lua_isnoneornil
#define lua_isnoneornil(L, n)
Definition: lua.h:379
TK_LOCAL
@ TK_LOCAL
Definition: llex.h:36
Dyndata::arr
Vardesc * arr
Definition: lparser.h:130
expdesc::strval
TString * strval
Definition: lparser.h:73
BlockCnt::upval
lu_byte upval
Definition: lparser.c:54
fixforjump
static void fixforjump(FuncState *fs, int pc, int dest, int back)
Definition: lparser.c:1518
lua_Number
LUA_NUMBER lua_Number
Definition: lua.h:90
llimits.h
OPR_GT
@ OPR_GT
Definition: lcode.h:37
OPR_MUL
@ OPR_MUL
Definition: lcode.h:28
os_rename
static int os_rename(lua_State *L)
Definition: loslib.c:162
OPR_SHL
@ OPR_SHL
Definition: lcode.h:32
Dyndata
struct Dyndata Dyndata
ConsControl::nh
int nh
Definition: lparser.c:829
llex.h
getboolfield
static int getboolfield(lua_State *L, const char *key)
Definition: loslib.c:243
adjustlocalvars
static void adjustlocalvars(LexState *ls, int nvars)
Definition: lparser.c:311
adjust_assign
static void adjust_assign(LexState *ls, int nvars, int nexps, expdesc *e)
Definition: lparser.c:470
LUA_TMPNAMBUFSIZE
#define LUA_TMPNAMBUFSIZE
Definition: loslib.c:132
SETARG_Bx
#define SETARG_Bx(i, v)
Definition: lopcodes.h:141
Upvaldesc::name
TString * name
Definition: lobject.h:494
FuncState::f
Proto * f
Definition: lparser.h:145
VKFLT
@ VKFLT
Definition: lparser.h:32
OPR_BOR
@ OPR_BOR
Definition: lcode.h:31
VINDEXED
@ VINDEXED
Definition: lparser.h:43
OPR_LEN
@ OPR_LEN
Definition: lcode.h:51
leaveblock
static void leaveblock(FuncState *fs)
Definition: lparser.c:660
luaK_infix
void luaK_infix(FuncState *fs, BinOpr op, expdesc *v)
Definition: lcode.c:1582
registerlocalvar
static int registerlocalvar(LexState *ls, FuncState *fs, TString *varname)
Definition: lparser.c:175
fornum
static void fornum(LexState *ls, TString *varname, int line)
Definition: lparser.c:1557
OPR_DIV
@ OPR_DIV
Definition: lcode.h:29
luaY_nvarstack
LUAI_FUNC int luaY_nvarstack(FuncState *fs)
Definition: lparser.c:243
Proto::sizecode
int sizecode
Definition: lobject.h:537
OPR_NOBINOPR
@ OPR_NOBINOPR
Definition: lcode.h:40
luaK_posfix
void luaK_posfix(FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2, int line)
Definition: lcode.c:1650
SemInfo::i
lua_Integer i
Definition: llex.h:51
body
static void body(LexState *ls, expdesc *e, int ismethod, int line)
Definition: lparser.c:978
FuncState::ls
struct LexState * ls
Definition: lparser.h:147
TK_ELSE
@ TK_ELSE
Definition: llex.h:35
solvegoto
static void solvegoto(LexState *ls, int g, Labeldesc *label)
Definition: lparser.c:515
new_localvar
static int new_localvar(LexState *ls, TString *name)
Definition: lparser.c:193
Mbuffer
Definition: lzio.h:23
LFIELDS_PER_FLUSH
#define LFIELDS_PER_FLUSH
Definition: lopcodes.h:390
syslib
static const luaL_Reg syslib[]
Definition: loslib.c:407
fieldsel
static void fieldsel(LexState *ls, expdesc *v)
Definition: lparser.c:799
lua_pushnumber
LUA_API void lua_pushnumber(lua_State *L, lua_Number n)
Definition: lapi.c:481
Proto::sizep
int sizep
Definition: lobject.h:539
TK_DBCOLON
@ TK_DBCOLON
Definition: llex.h:41
luaL_pushresult
LUALIB_API void luaL_pushresult(luaL_Buffer *B)
Definition: lauxlib.c:584
TK_RETURN
@ TK_RETURN
Definition: llex.h:37
check_conflict
static void check_conflict(LexState *ls, struct LHS_assign *lh, expdesc *v)
Definition: lparser.c:1319
Proto::source
TString * source
Definition: lobject.h:551
statlist
static void statlist(LexState *ls)
Definition: lparser.c:787
OP_MOVE
@ OP_MOVE
Definition: lopcodes.h:200
LexState::dyd
struct Dyndata * dyd
Definition: llex.h:75
TK_AND
@ TK_AND
Definition: llex.h:34
testnext
static int testnext(LexState *ls, int c)
Definition: lparser.c:95
Vardesc
Definition: lparser.h:96
OPR_EQ
@ OPR_EQ
Definition: lcode.h:36
yindex
static void yindex(LexState *ls, expdesc *v)
Definition: lparser.c:810
luaL_fileresult
LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname)
Definition: lauxlib.c:245
singlevaraux
static void singlevaraux(FuncState *fs, TString *n, expdesc *var, int base)
Definition: lparser.c:424
os_getenv
static int os_getenv(lua_State *L)
Definition: loslib.c:180
errorlimit
static l_noret errorlimit(FuncState *fs, int limit, const char *what)
Definition: lparser.c:74
LocVar::startpc
int startpc
Definition: lobject.h:507
Proto::numparams
lu_byte numparams
Definition: lobject.h:532
TK_END
@ TK_END
Definition: llex.h:35
str_checkname
static TString * str_checkname(LexState *ls)
Definition: lparser.c:143
TK_SHL
@ TK_SHL
Definition: llex.h:40
TK_UNTIL
@ TK_UNTIL
Definition: llex.h:37
LHS_assign::v
expdesc v
Definition: lparser.c:1309
Proto::linedefined
int linedefined
Definition: lobject.h:542
lua.h
breakstat
static void breakstat(LexState *ls)
Definition: lparser.c:1426
OP_CLOSE
@ OP_CLOSE
Definition: lopcodes.h:268
TK_FALSE
@ TK_FALSE
Definition: llex.h:35
VNIL
@ VNIL
Definition: lparser.h:28
leavelevel
#define leavelevel(ls)
Definition: lparser.c:495
OPR_ADD
@ OPR_ADD
Definition: lcode.h:28
MAXARG_Bx
#define MAXARG_Bx
Definition: lopcodes.h:74
getlocalattribute
static int getlocalattribute(LexState *ls)
Definition: lparser.c:1689
MAXUPVAL
#define MAXUPVAL
Definition: lfunc.h:29
luaK_code
int luaK_code(FuncState *fs, Instruction i)
Definition: lcode.c:390
SETARG_C
#define SETARG_C(i, v)
Definition: lopcodes.h:134
OPR_SUB
@ OPR_SUB
Definition: lcode.h:28
SET_OPCODE
#define SET_OPCODE(i, o)
Definition: lopcodes.h:115
luaK_jump
int luaK_jump(FuncState *fs)
Definition: lcode.c:198
Labellist::n
int n
Definition: lparser.h:122
OP_TFORLOOP
@ OP_TFORLOOP
Definition: lopcodes.h:298
luaK_exp2anyregup
void luaK_exp2anyregup(FuncState *fs, expdesc *e)
Definition: lcode.c:967
Proto::abslineinfo
AbsLineInfo * abslineinfo
Definition: lobject.h:549
luaK_patchtohere
void luaK_patchtohere(FuncState *fs, int list)
Definition: lcode.c:311
getbinopr
static BinOpr getbinopr(int op)
Definition: lparser.c:1194
expdesc::f
int f
Definition: lparser.h:85
LexState::linenumber
int linenumber
Definition: llex.h:66
luaX_syntaxerror
l_noret luaX_syntaxerror(LexState *ls, const char *msg)
Definition: llex.c:119
luaK_int
void luaK_int(FuncState *fs, int reg, lua_Integer i)
Definition: lcode.c:663
LHS_assign::prev
struct LHS_assign * prev
Definition: lparser.c:1308
luaK_storevar
void luaK_storevar(FuncState *fs, expdesc *var, expdesc *ex)
Definition: lcode.c:1039
OP_CLOSURE
@ OP_CLOSURE
Definition: lopcodes.h:302
lua_setfield
LUA_API void lua_setfield(lua_State *L, int idx, const char *k)
Definition: lapi.c:847
codestring
static void codestring(expdesc *e, TString *s)
Definition: lparser.c:159
expkind
expkind
Definition: lparser.h:25
TK_ELSEIF
@ TK_ELSEIF
Definition: llex.h:35
OPR_IDIV
@ OPR_IDIV
Definition: lcode.h:29
forstat
static void forstat(LexState *ls, int line)
Definition: lparser.c:1608
luaL_Reg
Definition: lauxlib.h:37
MAXVARS
#define MAXVARS
Definition: lparser.c:35
VDKREG
#define VDKREG
Definition: lparser.h:90
VTRUE
@ VTRUE
Definition: lparser.h:29
error_expected
static l_noret error_expected(LexState *ls, int token)
Definition: lparser.c:68
TString
Definition: lobject.h:364
priority
static const struct @5 priority[]
expdesc::vidx
unsigned short vidx
Definition: lparser.h:81
getlocalvardesc
static Vardesc * getlocalvardesc(FuncState *fs, int vidx)
Definition: lparser.c:219
lprefix.h
TK_NOT
@ TK_NOT
Definition: llex.h:36
FuncState::nk
int nk
Definition: lparser.h:152
funcname
static int funcname(LexState *ls, expdesc *v)
Definition: lparser.c:1758
setclLvalue2s
#define setclLvalue2s(L, o, cl)
Definition: lobject.h:592
Token::seminfo
SemInfo seminfo
Definition: llex.h:58
check
static void check(LexState *ls, int c)
Definition: lparser.c:107
luaL_execresult
LUALIB_API int luaL_execresult(lua_State *L, int stat)
Definition: lauxlib.c:285
ldebug.h
luaL_optlstring
LUALIB_API const char * luaL_optlstring(lua_State *L, int arg, const char *def, size_t *len)
Definition: lauxlib.c:409
Proto::sizek
int sizek
Definition: lobject.h:536
TK_OR
@ TK_OR
Definition: llex.h:36
vkisindexed
#define vkisindexed(k)
Definition: lparser.h:65
ConsControl
struct ConsControl ConsControl
VINDEXUP
@ VINDEXUP
Definition: lparser.h:46
TK_IN
@ TK_IN
Definition: llex.h:36
lu_byte
unsigned char lu_byte
Definition: llimits.h:36
luaM_shrinkvector
#define luaM_shrinkvector(L, v, size, fs, t)
Definition: lmem.h:74
OP_TBC
@ OP_TBC
Definition: lopcodes.h:269
getstr
#define getstr(ts)
Definition: lobject.h:381
constructor
static void constructor(LexState *ls, expdesc *t)
Definition: lparser.c:913
FuncState::needclose
lu_byte needclose
Definition: lparser.h:162
VK
@ VK
Definition: lparser.h:31
luaY_parser
LUAI_FUNC LClosure * luaY_parser(lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
Definition: lparser.c:1931
luaL_argerror
LUALIB_API int luaL_argerror(lua_State *L, int arg, const char *extramsg)
Definition: lauxlib.c:175
luaD_inctop
void luaD_inctop(lua_State *L)
Definition: ldo.c:281
lua_pushfstring
LUA_API const char * lua_pushfstring(lua_State *L, const char *fmt,...)
Definition: lapi.c:542
ConsControl::na
int na
Definition: lparser.c:830
Vardesc::kind
lu_byte kind
Definition: lparser.h:99
ConsControl
Definition: lparser.c:826
LUA_STRFTIMEOPTIONS
#define LUA_STRFTIMEOPTIONS
Definition: loslib.c:49
FuncState::pc
int pc
Definition: lparser.h:149
BlockCnt::isloop
lu_byte isloop
Definition: lparser.c:55
newupvalue
static int newupvalue(FuncState *fs, TString *name, expdesc *v)
Definition: lparser.c:364
OP_VARARGPREP
@ OP_VARARGPREP
Definition: lopcodes.h:306
explist
static int explist(LexState *ls, expdesc *v)
Definition: lparser.c:1000
Proto::lineinfo
ls_byte * lineinfo
Definition: lobject.h:548
LHS_assign
Definition: lparser.c:1307
Vardesc::ridx
lu_byte ridx
Definition: lparser.h:100
VFALSE
@ VFALSE
Definition: lparser.h:30
mainfunc
static void mainfunc(LexState *ls, FuncState *fs)
Definition: lparser.c:1913
Labellist
Definition: lparser.h:120
OPR_CONCAT
@ OPR_CONCAT
Definition: lcode.h:34
checktoclose
static void checktoclose(LexState *ls, int level)
Definition: lparser.c:1706
expdesc::k
expkind k
Definition: lparser.h:69
BlockCnt
struct BlockCnt BlockCnt
luaL_Buffer
Definition: lauxlib.h:182
VINDEXSTR
@ VINDEXSTR
Definition: lparser.h:52
recfield
static void recfield(LexState *ls, ConsControl *cc)
Definition: lparser.c:835
luaL_opt
#define luaL_opt(L, f, n, d)
Definition: lauxlib.h:151
UNARY_PRIORITY
#define UNARY_PRIORITY
Definition: lparser.c:1241
VRELOC
@ VRELOC
Definition: lparser.h:57
expdesc::ival
lua_Integer ival
Definition: lparser.h:71
Labeldesc::line
int line
Definition: lparser.h:113
luaK_ret
void luaK_ret(FuncState *fs, int first, int nret)
Definition: lcode.c:206
TK_EOS
@ TK_EOS
Definition: llex.h:41
luaL_argcheck
#define luaL_argcheck(L, cond, arg, extramsg)
Definition: lauxlib.h:132
getunopr
static UnOpr getunopr(int op)
Definition: lparser.c:1183
VKSTR
@ VKSTR
Definition: lparser.h:34
luaL_addchar
#define luaL_addchar(B, c)
Definition: lauxlib.h:198
luaK_settablesize
void luaK_settablesize(FuncState *fs, int pc, int ra, int asize, int hsize)
Definition: lcode.c:1740
labelstat
static void labelstat(LexState *ls, TString *name, int line)
Definition: lparser.c:1446
lobject.h
luaH_new
Table * luaH_new(lua_State *L)
Definition: ltable.c:596
gotostat
static void gotostat(LexState *ls)
Definition: lparser.c:1404
lua_State
Definition: lstate.h:273
Vardesc::k
TValue k
Definition: lparser.h:104
ConsControl::v
expdesc v
Definition: lparser.c:827
lua_Integer
LUA_INTEGER lua_Integer
Definition: lua.h:94
BlockCnt::firstlabel
int firstlabel
Definition: lparser.c:51
lua_isboolean
#define lua_isboolean(L, n)
Definition: lua.h:376
OPR_MINUS
@ OPR_MINUS
Definition: lcode.h:51
retstat
static void retstat(LexState *ls)
Definition: lparser.c:1802
luaopen_os
LUAMOD_API int luaopen_os(lua_State *L)
Definition: loslib.c:426
lua_settop
LUA_API void lua_settop(lua_State *L, int idx)
Definition: lapi.c:173
LClosure::p
struct Proto * p
Definition: lobject.h:633
Labellist
struct Labellist Labellist
forlist
static void forlist(LexState *ls, TString *indexname)
Definition: lparser.c:1580
TK_GE
@ TK_GE
Definition: llex.h:39
lauxlib.h
lualib.h
lua_pushboolean
LUA_API void lua_pushboolean(lua_State *L, int b)
Definition: lapi.c:581
lparser.h
subexpr
static BinOpr subexpr(LexState *ls, expdesc *v, int limit)
Definition: lparser.c:1248
TValue
Definition: lobject.h:65
parlist
static void parlist(LexState *ls)
Definition: lparser.c:947
luaK_exp2val
void luaK_exp2val(FuncState *fs, expdesc *e)
Definition: lcode.c:977
whilestat
static void whilestat(LexState *ls, int line)
Definition: lparser.c:1456
AbsLineInfo
Definition: lobject.h:522
OPR_BXOR
@ OPR_BXOR
Definition: lcode.h:31
OPR_BNOT
@ OPR_BNOT
Definition: lcode.h:51
l_timet
#define l_timet
Definition: loslib.c:67
luaL_checktype
LUALIB_API void luaL_checktype(lua_State *L, int arg, int t)
Definition: lauxlib.c:390
lua_close
LUA_API void lua_close(lua_State *L)
Definition: lstate.c:402
Proto::k
TValue * k
Definition: lobject.h:544
l_gettime
#define l_gettime(L, arg)
Definition: loslib.c:69
luaK_nil
void luaK_nil(FuncState *fs, int from, int n)
Definition: lcode.c:130
luaF_newproto
Proto * luaF_newproto(lua_State *L)
Definition: lfunc.c:246
VVOID
@ VVOID
Definition: lparser.h:26
LClosure
Definition: lobject.h:631
expdesc
Definition: lparser.h:68
Proto::sizelineinfo
int sizelineinfo
Definition: lobject.h:538
luaK_getlabel
int luaK_getlabel(FuncState *fs)
Definition: lcode.c:231
TK_CONCAT
@ TK_CONCAT
Definition: llex.h:39
Proto::maxstacksize
lu_byte maxstacksize
Definition: lobject.h:534
Upvaldesc::instack
lu_byte instack
Definition: lobject.h:495
l_checktime
static time_t l_checktime(lua_State *L, int arg)
Definition: loslib.c:293
ifstat
static void ifstat(LexState *ls, int line)
Definition: lparser.c:1663
luaO_pushfstring
const char * luaO_pushfstring(lua_State *L, const char *fmt,...)
Definition: lobject.c:539
luaM_growvector
#define luaM_growvector(L, v, nelems, size, t, limit, e)
Definition: lmem.h:66
OPR_LE
@ OPR_LE
Definition: lcode.h:36
SIZETIMEFMT
#define SIZETIMEFMT
Definition: loslib.c:301
Dyndata
Definition: lparser.h:128
Proto::sizeupvalues
int sizeupvalues
Definition: lobject.h:535
BinOpr
BinOpr
Definition: lcode.h:26
open_func
static void open_func(LexState *ls, FuncState *fs, BlockCnt *bl)
Definition: lparser.c:717
l_pushtime
#define l_pushtime(L, t)
Definition: loslib.c:68
TK_INT
@ TK_INT
Definition: llex.h:42
Instruction
l_uint32 Instruction
Definition: llimits.h:194
block
static void block(LexState *ls)
Definition: lparser.c:1293
Labeldesc
struct Labeldesc Labeldesc
FuncState
struct FuncState FuncState
luaL_prepbuffsize
LUALIB_API char * luaL_prepbuffsize(luaL_Buffer *B, size_t sz)
Definition: lauxlib.c:565
luaK_checkstack
void luaK_checkstack(FuncState *fs, int n)
Definition: lcode.c:474
movegotosout
static void movegotosout(FuncState *fs, BlockCnt *bl)
Definition: lparser.c:616
Dyndata::gt
Labellist gt
Definition: lparser.h:134
OpCode
OpCode
Definition: lopcodes.h:196
addprototype
static Proto * addprototype(LexState *ls)
Definition: lparser.c:686
LUA_TNIL
#define LUA_TNIL
Definition: lua.h:65
BlockCnt::previous
struct BlockCnt * previous
Definition: lparser.c:50
LUAMOD_API
#define LUAMOD_API
Definition: luaconf.h:286
TK_FOR
@ TK_FOR
Definition: llex.h:35
TK_GOTO
@ TK_GOTO
Definition: llex.h:36
os_date
static int os_date(lua_State *L)
Definition: loslib.c:304
Labellist::size
int size
Definition: lparser.h:123
Labeldesc::close
lu_byte close
Definition: lparser.h:115
repeatstat
static void repeatstat(LexState *ls, int line)
Definition: lparser.c:1475
luaK_prefix
void luaK_prefix(FuncState *fs, UnOpr op, expdesc *e, int line)
Definition: lcode.c:1561
VKINT
@ VKINT
Definition: lparser.h:33
findlabel
static Labeldesc * findlabel(LexState *ls, TString *name)
Definition: lparser.c:532
forbody
static void forbody(LexState *ls, int base, int line, int nvars, int isgen)
Definition: lparser.c:1532
OPR_POW
@ OPR_POW
Definition: lcode.h:28
sethvalue2s
#define sethvalue2s(L, o, h)
Definition: lobject.h:666
expdesc
struct expdesc expdesc
luaL_optinteger
LUALIB_API lua_Integer luaL_optinteger(lua_State *L, int arg, lua_Integer def)
Definition: lauxlib.c:452
FuncState::nups
lu_byte nups
Definition: lparser.h:159
luaK_setoneret
void luaK_setoneret(FuncState *fs, expdesc *e)
Definition: lcode.c:745
luaK_exp2const
int luaK_exp2const(FuncState *fs, const expdesc *e, TValue *v)
Definition: lcode.c:83
funcstat
static void funcstat(LexState *ls, int line)
Definition: lparser.c:1772
VCALL
@ VCALL
Definition: lparser.h:59
Proto
Definition: lobject.h:530
FuncState::freereg
lu_byte freereg
Definition: lparser.h:160
FuncState::nactvar
lu_byte nactvar
Definition: lparser.h:158
OPR_SHR
@ OPR_SHR
Definition: lcode.h:32
suffixedexp
static void suffixedexp(LexState *ls, expdesc *v)
Definition: lparser.c:1090
os_execute
static int os_execute(lua_State *L)
Definition: loslib.c:142
block_follow
static int block_follow(LexState *ls, int withuntil)
Definition: lparser.c:776
luaY_nvarstack
int luaY_nvarstack(FuncState *fs)
Definition: lparser.c:243
field
static void field(LexState *ls, ConsControl *cc)
Definition: lparser.c:891
luaL_newlib
#define luaL_newlib(L, l)
Definition: lauxlib.h:129
markupval
static void markupval(FuncState *fs, int level)
Definition: lparser.c:410
MAX_INT
#define MAX_INT
Definition: llimits.h:53
Labeldesc::nactvar
lu_byte nactvar
Definition: lparser.h:114
luaL_error
LUALIB_API int luaL_error(lua_State *L, const char *fmt,...)
Definition: lauxlib.c:234
VVARARG
@ VVARARG
Definition: lparser.h:60
TK_TRUE
@ TK_TRUE
Definition: llex.h:37
init_var
static void init_var(FuncState *fs, expdesc *e, int vidx)
Definition: lparser.c:266
codeclosure
static void codeclosure(LexState *ls, expdesc *v)
Definition: lparser.c:710
TK_NIL
@ TK_NIL
Definition: llex.h:36
TK_DOTS
@ TK_DOTS
Definition: llex.h:39
BlockCnt::firstgoto
int firstgoto
Definition: lparser.c:52
luaK_indexed
void luaK_indexed(FuncState *fs, expdesc *t, expdesc *k)
Definition: lcode.c:1269
lstring.h
luaF_newLclosure
LClosure * luaF_newLclosure(lua_State *L, int nupvals)
Definition: lfunc.c:35
check_match
static void check_match(LexState *ls, int what, int who, int where)
Definition: lparser.c:130
listfield
static void listfield(LexState *ls, ConsControl *cc)
Definition: lparser.c:884
luaK_setreturns
void luaK_setreturns(FuncState *fs, expdesc *e, int nresults)
Definition: lcode.c:712
TK_DO
@ TK_DO
Definition: llex.h:35
OPR_LT
@ OPR_LT
Definition: lcode.h:36
expr
static void expr(LexState *ls, expdesc *v)
Definition: lparser.c:1278
LexState::source
TString * source
Definition: llex.h:76
Labellist::arr
Labeldesc * arr
Definition: lparser.h:121
Upvaldesc
Definition: lobject.h:493
FuncState::firstlocal
int firstlocal
Definition: lparser.h:155
checkoption
static const char * checkoption(lua_State *L, const char *conv, ptrdiff_t convlen, char *buff)
Definition: loslib.c:274
BlockCnt
Definition: lparser.c:49
Upvaldesc::idx
lu_byte idx
Definition: lobject.h:496
TK_STRING
@ TK_STRING
Definition: llex.h:42
lua_tointegerx
LUA_API lua_Integer lua_tointegerx(lua_State *L, int idx, int *pisnum)
Definition: lapi.c:365
luaK_finish
void luaK_finish(FuncState *fs)
Definition: lcode.c:1794
TK_NAME
@ TK_NAME
Definition: llex.h:42
luaK_dischargevars
void luaK_dischargevars(FuncState *fs, expdesc *e)
Definition: lcode.c:763
luaK_concat
void luaK_concat(FuncState *fs, int *l1, int l2)
Definition: lcode.c:180
VINDEXI
@ VINDEXI
Definition: lparser.h:49
newlabelentry
static int newlabelentry(LexState *ls, Labellist *l, TString *name, int line, int pc)
Definition: lparser.c:548
BlockCnt::nactvar
lu_byte nactvar
Definition: lparser.c:53
reglevel
static int reglevel(FuncState *fs, int nvar)
Definition: lparser.c:229
SemInfo::ts
TString * ts
Definition: llex.h:52
lmem.h
lua_State::top
StkId top
Definition: lstate.h:278
checknext
static void checknext(LexState *ls, int c)
Definition: lparser.c:116
LexState::t
Token t
Definition: llex.h:68
eqstr
#define eqstr(a, b)
Definition: lparser.c:43
expdesc::nval
lua_Number nval
Definition: lparser.h:72
enterlevel
#define enterlevel(ls)
Definition: lparser.c:492
OP_TFORCALL
@ OP_TFORCALL
Definition: lopcodes.h:297
Vardesc::pidx
short pidx
Definition: lparser.h:101
LocVar
Definition: lobject.h:505
lua_toboolean
LUA_API int lua_toboolean(lua_State *L, int idx)
Definition: lapi.c:375
luaK_goiftrue
void luaK_goiftrue(FuncState *fs, expdesc *e)
Definition: lcode.c:1124
lastlistfield
static void lastlistfield(FuncState *fs, ConsControl *cc)
Definition: lparser.c:868
Zio
Definition: lzio.h:55
statement
static void statement(LexState *ls)
Definition: lparser.c:1834
luaK_semerror
l_noret luaK_semerror(LexState *ls, const char *msg)
Definition: lcode.c:45
UnOpr
UnOpr
Definition: lcode.h:51
localdebuginfo
static LocVar * localdebuginfo(FuncState *fs, int vidx)
Definition: lparser.c:251
OPR_OR
@ OPR_OR
Definition: lcode.h:39
OPR_BAND
@ OPR_BAND
Definition: lcode.h:31
FuncState::iwthabs
lu_byte iwthabs
Definition: lparser.h:161
Labeldesc::pc
int pc
Definition: lparser.h:112
OPR_NE
@ OPR_NE
Definition: lcode.h:37
lzio.h
luaK_codeABC
#define luaK_codeABC(fs, o, a, b, c)
Definition: lcode.h:48
createlabel
static int createlabel(LexState *ls, TString *name, int line, int last)
Definition: lparser.c:596
Vardesc
union Vardesc Vardesc
searchvar
static int searchvar(FuncState *fs, TString *n, expdesc *var)
Definition: lparser.c:390
luaK_reserveregs
void luaK_reserveregs(FuncState *fs, int n)
Definition: lcode.c:488
Proto::locvars
LocVar * locvars
Definition: lobject.h:550
luaK_codeABx
int luaK_codeABx(FuncState *fs, OpCode o, int a, unsigned int bc)
Definition: lcode.c:416
expdesc::t
lu_byte t
Definition: lparser.h:77
setallfields
static void setallfields(lua_State *L, struct tm *stm)
Definition: loslib.c:230
luaK_self
void luaK_self(FuncState *fs, expdesc *e, expdesc *key)
Definition: lcode.c:1076
expdesc::t
int t
Definition: lparser.h:84
RDKTOCLOSE
#define RDKTOCLOSE
Definition: lparser.h:92
LexState
Definition: llex.h:64
OP_FORPREP
@ OP_FORPREP
Definition: lopcodes.h:293
funcargs
static void funcargs(LexState *ls, expdesc *f, int line)
Definition: lparser.c:1013
lua_createtable
LUA_API void lua_createtable(lua_State *L, int narray, int nrec)
Definition: lapi.c:738
LocVar::endpc
int endpc
Definition: lobject.h:508
Proto::sizelocvars
int sizelocvars
Definition: lobject.h:540
Dyndata::size
int size
Definition: lparser.h:132
l_localtime
#define l_localtime(t, r)
Definition: loslib.c:95
OP_NEWTABLE
@ OP_NEWTABLE
Definition: lopcodes.h:222
luaL_addsize
#define luaL_addsize(B, s)
Definition: lauxlib.h:202
Token::token
int token
Definition: llex.h:57
luaS_newliteral
#define luaS_newliteral(L, s)
Definition: lstring.h:28
os_difftime
static int os_difftime(lua_State *L)
Definition: loslib.c:372
expdesc::u
union expdesc::@6 u
TK_EQ
@ TK_EQ
Definition: llex.h:39
TK_FUNCTION
@ TK_FUNCTION
Definition: llex.h:35
getinstruction
#define getinstruction(fs, e)
Definition: lcode.h:55
Vardesc::name
TString * name
Definition: lparser.h:102
singlevar
static void singlevar(LexState *ls, expdesc *var)
Definition: lparser.c:452
test_then_block
static void test_then_block(LexState *ls, int *escapelist)
Definition: lparser.c:1626
lopcodes.h
lfunc.h
os_remove
static int os_remove(lua_State *L)
Definition: loslib.c:156
NO_JUMP
#define NO_JUMP
Definition: lcode.h:20
luaX_lookahead
int luaX_lookahead(LexState *ls)
Definition: llex.c:576
ldo.h
ConsControl::tostore
int tostore
Definition: lparser.c:831
luaK_exp2nextreg
void luaK_exp2nextreg(FuncState *fs, expdesc *e)
Definition: lcode.c:933
cast_int
#define cast_int(i)
Definition: llimits.h:128
Dyndata::n
int n
Definition: lparser.h:131
LexState::envn
TString * envn
Definition: llex.h:77
TK_LE
@ TK_LE
Definition: llex.h:39
newgotoentry
static int newgotoentry(LexState *ls, TString *name, int line, int pc)
Definition: lparser.c:563
exprstat
static void exprstat(LexState *ls)
Definition: lparser.c:1784
lua_tmpnam
#define lua_tmpnam(b, e)
Definition: loslib.c:133