Github User Fetcher
1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
lua-5.4.3/src/lparser.h
Go to the documentation of this file.
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 */
61
}
expkind
;
62
63
64
#define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXSTR)
65
#define vkisindexed(k) (VINDEXED <= (k) && (k) <= VINDEXSTR)
66
67
68
typedef
struct
expdesc
{
69
expkind
k
;
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' */
86
}
expdesc
;
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) */
99
lu_byte
kind
;
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) */
105
}
Vardesc
;
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 */
116
}
Labeldesc
;
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 */
124
}
Labellist
;
125
126
127
/* dynamic structures used by the parser */
128
typedef
struct
Dyndata
{
129
struct
{
/* list of all active local variables */
130
Vardesc
*
arr
;
131
int
n
;
132
int
size
;
133
}
actvar
;
134
Labellist
gt
;
/* list of pending gotos */
135
Labellist
label
;
/* list of active labels */
136
}
Dyndata
;
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 */
163
}
FuncState
;
164
165
166
LUAI_FUNC
int
luaY_nvarstack
(
FuncState
*fs);
167
LUAI_FUNC
LClosure
*
luaY_parser
(
lua_State
*L,
ZIO
*z,
Mbuffer
*buff,
168
Dyndata
*dyd,
const
char
*
name
,
int
firstchar);
169
170
171
#endif
name
const char * name
Definition
lsqlite3.c:2154
lu_byte
unsigned char lu_byte
Definition
lua-5.1.5/src/llimits.h:27
expkind
expkind
Definition
lua-5.1.5/src/lparser.h:19
lua_Integer
LUA_INTEGER lua_Integer
Definition
lua-5.1.5/src/lua.h:103
lua_Number
LUA_NUMBER lua_Number
Definition
lua-5.1.5/src/lua.h:99
LUAI_FUNC
#define LUAI_FUNC
Definition
lua-5.1.5/src/luaconf.h:191
llimits.h
lobject.h
Vardesc
union Vardesc Vardesc
FuncState
struct FuncState FuncState
luaY_parser
LUAI_FUNC LClosure * luaY_parser(lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
Definition
lua-5.2.4/src/lparser.c:1618
expdesc
struct expdesc expdesc
Labeldesc
struct Labeldesc Labeldesc
luaY_nvarstack
LUAI_FUNC int luaY_nvarstack(FuncState *fs)
Definition
lua-5.4.3/src/lparser.c:243
Labellist
struct Labellist Labellist
Dyndata
struct Dyndata Dyndata
expkind
expkind
Definition
lua-5.4.3/src/lparser.h:25
VTRUE
@ VTRUE
Definition
lua-5.4.3/src/lparser.h:29
VINDEXSTR
@ VINDEXSTR
Definition
lua-5.4.3/src/lparser.h:52
VFALSE
@ VFALSE
Definition
lua-5.4.3/src/lparser.h:30
VVARARG
@ VVARARG
Definition
lua-5.4.3/src/lparser.h:60
VKFLT
@ VKFLT
Definition
lua-5.4.3/src/lparser.h:32
VCONST
@ VCONST
Definition
lua-5.4.3/src/lparser.h:41
VNIL
@ VNIL
Definition
lua-5.4.3/src/lparser.h:28
VKINT
@ VKINT
Definition
lua-5.4.3/src/lparser.h:33
VRELOC
@ VRELOC
Definition
lua-5.4.3/src/lparser.h:57
VINDEXI
@ VINDEXI
Definition
lua-5.4.3/src/lparser.h:49
VINDEXUP
@ VINDEXUP
Definition
lua-5.4.3/src/lparser.h:46
VUPVAL
@ VUPVAL
Definition
lua-5.4.3/src/lparser.h:40
VNONRELOC
@ VNONRELOC
Definition
lua-5.4.3/src/lparser.h:36
VKSTR
@ VKSTR
Definition
lua-5.4.3/src/lparser.h:34
VINDEXED
@ VINDEXED
Definition
lua-5.4.3/src/lparser.h:43
VJMP
@ VJMP
Definition
lua-5.4.3/src/lparser.h:55
VLOCAL
@ VLOCAL
Definition
lua-5.4.3/src/lparser.h:38
VVOID
@ VVOID
Definition
lua-5.4.3/src/lparser.h:26
VCALL
@ VCALL
Definition
lua-5.4.3/src/lparser.h:59
VK
@ VK
Definition
lua-5.4.3/src/lparser.h:31
lzio.h
BlockCnt
Definition
lua-5.1.5/src/lparser.c:40
Dyndata
Definition
lua-5.2.4/src/lparser.h:80
Dyndata::gt
Labellist gt
Definition
lua-5.2.4/src/lparser.h:86
Dyndata::actvar
struct Dyndata::@63 actvar
Dyndata::size
int size
Definition
lua-5.2.4/src/lparser.h:84
Dyndata::label
Labellist label
Definition
lua-5.2.4/src/lparser.h:87
Dyndata::arr
Vardesc * arr
Definition
lua-5.2.4/src/lparser.h:82
Dyndata::n
int n
Definition
lua-5.2.4/src/lparser.h:83
FuncState
Definition
lua-5.1.5/src/lparser.h:58
FuncState::nactvar
lu_byte nactvar
Definition
lua-5.1.5/src/lparser.h:72
FuncState::firstlabel
int firstlabel
Definition
lua-5.4.3/src/lparser.h:156
FuncState::previousline
int previousline
Definition
lua-5.4.3/src/lparser.h:151
FuncState::prev
struct FuncState * prev
Definition
lua-5.1.5/src/lparser.h:61
FuncState::bl
struct BlockCnt * bl
Definition
lua-5.1.5/src/lparser.h:64
FuncState::nabslineinfo
int nabslineinfo
Definition
lua-5.4.3/src/lparser.h:154
FuncState::nk
int nk
Definition
lua-5.1.5/src/lparser.h:69
FuncState::f
Proto * f
Definition
lua-5.1.5/src/lparser.h:59
FuncState::iwthabs
lu_byte iwthabs
Definition
lua-5.4.3/src/lparser.h:161
FuncState::ndebugvars
short ndebugvars
Definition
lua-5.4.3/src/lparser.h:157
FuncState::firstlocal
int firstlocal
Definition
lua-5.2.4/src/lparser.h:107
FuncState::freereg
int freereg
Definition
lua-5.1.5/src/lparser.h:68
FuncState::nups
lu_byte nups
Definition
lua-5.2.4/src/lparser.h:110
FuncState::np
int np
Definition
lua-5.1.5/src/lparser.h:70
FuncState::pc
int pc
Definition
lua-5.1.5/src/lparser.h:65
FuncState::ls
struct LexState * ls
Definition
lua-5.1.5/src/lparser.h:62
FuncState::needclose
lu_byte needclose
Definition
lua-5.4.3/src/lparser.h:162
FuncState::lasttarget
int lasttarget
Definition
lua-5.1.5/src/lparser.h:66
LClosure
Definition
lua-5.1.5/src/lobject.h:302
Labeldesc
Definition
lua-5.2.4/src/lparser.h:63
Labeldesc::pc
int pc
Definition
lua-5.2.4/src/lparser.h:65
Labeldesc::close
lu_byte close
Definition
lua-5.4.3/src/lparser.h:115
Labeldesc::nactvar
lu_byte nactvar
Definition
lua-5.2.4/src/lparser.h:67
Labeldesc::name
TString * name
Definition
lua-5.2.4/src/lparser.h:64
Labeldesc::line
int line
Definition
lua-5.2.4/src/lparser.h:66
Labellist
Definition
lua-5.2.4/src/lparser.h:72
Labellist::size
int size
Definition
lua-5.2.4/src/lparser.h:75
Labellist::n
int n
Definition
lua-5.2.4/src/lparser.h:74
Labellist::arr
Labeldesc * arr
Definition
lua-5.2.4/src/lparser.h:73
LexState
Definition
lua-5.1.5/src/llex.h:55
Mbuffer
Definition
lua-5.1.5/src/lzio.h:24
Proto
Definition
lua-5.1.5/src/lobject.h:231
TValue
Definition
lua-5.4.3/src/lobject.h:65
Vardesc
Definition
lua-5.2.4/src/lparser.h:57
Vardesc::ridx
lu_byte ridx
Definition
lua-5.4.3/src/lparser.h:100
Vardesc::kind
lu_byte kind
Definition
lua-5.4.3/src/lparser.h:99
Vardesc::vd
struct Vardesc::@92 vd
Vardesc::pidx
short pidx
Definition
lua-5.4.3/src/lparser.h:101
Vardesc::k
TValue k
Definition
lua-5.4.3/src/lparser.h:104
Vardesc::name
TString * name
Definition
lua-5.4.3/src/lparser.h:102
Vardesc::TValuefields
TValuefields
Definition
lua-5.4.3/src/lparser.h:98
Zio
Definition
lua-5.1.5/src/lzio.h:56
expdesc
Definition
lua-5.1.5/src/lparser.h:37
expdesc::info
int info
Definition
lua-5.1.5/src/lparser.h:40
expdesc::idx
short idx
Definition
lua-5.2.4/src/lparser.h:44
expdesc::var
struct expdesc::@89::@91 var
expdesc::t
int t
Definition
lua-5.1.5/src/lparser.h:43
expdesc::u
union expdesc::@52 u
expdesc::ival
lua_Integer ival
Definition
lua-5.3.6/src/lparser.h:57
expdesc::vidx
unsigned short vidx
Definition
lua-5.4.3/src/lparser.h:81
expdesc::strval
TString * strval
Definition
lua-5.4.3/src/lparser.h:73
expdesc::nval
lua_Number nval
Definition
lua-5.1.5/src/lparser.h:41
expdesc::k
expkind k
Definition
lua-5.1.5/src/lparser.h:38
expdesc::ridx
lu_byte ridx
Definition
lua-5.4.3/src/lparser.h:80
expdesc::ind
struct expdesc::@61::@62 ind
expdesc::f
int f
Definition
lua-5.1.5/src/lparser.h:44
lua_State
Definition
lua-5.1.5/src/lstate.h:100
TString
Definition
lua-5.1.5/src/lobject.h:199
vendor
civetweb
third_party
lua-5.4.3
src
lparser.h
Generated by
1.10.0