Ardour  9.0-pre0-582-g084a23a80d
lparser.h
Go to the documentation of this file.
1 /*
2 ** $Id: lparser.h,v 1.76.1.1 2017/04/19 17:20:42 roberto Exp $
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 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; nval = numerical integer value */
34  VNONRELOC, /* expression has its value in a fixed register;
35  info = result register */
36  VLOCAL, /* local variable; info = local register */
37  VUPVAL, /* upvalue variable; info = index of upvalue in 'upvalues' */
38  VINDEXED, /* indexed variable;
39  ind.vt = whether 't' is register or upvalue;
40  ind.t = table register or upvalue;
41  ind.idx = key's R/K index */
42  VJMP, /* expression is a test/comparison;
43  info = pc of corresponding jump instruction */
44  VRELOCABLE, /* expression can put result in any register;
45  info = instruction pc */
46  VCALL, /* expression is a function call; info = instruction pc */
47  VVARARG /* vararg expression; info = instruction pc */
49 
50 
51 #define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXED)
52 #define vkisinreg(k) ((k) == VNONRELOC || (k) == VLOCAL)
53 
54 typedef struct expdesc {
56  union {
57  lua_Integer ival; /* for VKINT */
58  lua_Number nval; /* for VKFLT */
59  int info; /* for generic use */
60  struct { /* for indexed variables (VINDEXED) */
61  short idx; /* index (R/K) */
62  lu_byte t; /* table (register or upvalue) */
63  lu_byte vt; /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */
64  } ind;
65  } u;
66  int t; /* patch list of 'exit when true' */
67  int f; /* patch list of 'exit when false' */
69 
70 
71 /* description of active local variable */
72 typedef struct Vardesc {
73  short idx; /* variable index in stack */
75 
76 
77 /* description of pending goto statements and label statements */
78 typedef struct Labeldesc {
79  TString *name; /* label identifier */
80  int pc; /* position in code */
81  int line; /* line where it appeared */
82  lu_byte nactvar; /* local level where it appears in current block */
84 
85 
86 /* list of labels or gotos */
87 typedef struct Labellist {
88  Labeldesc *arr; /* array */
89  int n; /* number of entries in use */
90  int size; /* array size */
92 
93 
94 /* dynamic structures used by the parser */
95 typedef struct Dyndata {
96  struct { /* list of active local variables */
98  int n;
99  int size;
101  Labellist gt; /* list of pending gotos */
102  Labellist label; /* list of active labels */
104 
105 
106 /* control of blocks */
107 struct BlockCnt; /* defined in lparser.c */
108 
109 
110 /* state needed to generate code for a given function */
111 typedef struct FuncState {
112  Proto *f; /* current function header */
113  struct FuncState *prev; /* enclosing function */
114  struct LexState *ls; /* lexical state */
115  struct BlockCnt *bl; /* chain of current blocks */
116  int pc; /* next position to code (equivalent to 'ncode') */
117  int lasttarget; /* 'label' of last 'jump label' */
118  int jpc; /* list of pending jumps to 'pc' */
119  int nk; /* number of elements in 'k' */
120  int np; /* number of elements in 'p' */
121  int firstlocal; /* index of first local var (in Dyndata array) */
122  short nlocvars; /* number of elements in 'f->locvars' */
123  lu_byte nactvar; /* number of active local variables */
124  lu_byte nups; /* number of upvalues */
125  lu_byte freereg; /* first free register */
127 
128 
130  Dyndata *dyd, const char *name, int firstchar);
131 
132 
133 #endif
GtkImageIconNameData name
Definition: gtkimage.h:6
unsigned char lu_byte
Definition: llimits.h:35
struct FuncState FuncState
struct expdesc expdesc
struct Vardesc Vardesc
struct Labeldesc Labeldesc
LClosure * luaY_parser(lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar)
struct Labellist Labellist
struct Dyndata Dyndata
expkind
Definition: lparser.h:25
@ VTRUE
Definition: lparser.h:29
@ VFALSE
Definition: lparser.h:30
@ VVARARG
Definition: lparser.h:47
@ VKFLT
Definition: lparser.h:32
@ VNIL
Definition: lparser.h:28
@ VKINT
Definition: lparser.h:33
@ VUPVAL
Definition: lparser.h:37
@ VNONRELOC
Definition: lparser.h:34
@ VINDEXED
Definition: lparser.h:38
@ VRELOCABLE
Definition: lparser.h:44
@ VJMP
Definition: lparser.h:42
@ VLOCAL
Definition: lparser.h:36
@ VVOID
Definition: lparser.h:26
@ VCALL
Definition: lparser.h:46
@ VK
Definition: lparser.h:31
LUA_INTEGER lua_Integer
Definition: lua-5.3.5/lua.h:93
double lua_Number
Definition: lua-5.3.5/lua.h:89
#define LUAI_FUNC
Definition: luaconf.h:282
Labellist gt
Definition: lparser.h:101
int size
Definition: lparser.h:99
Labellist label
Definition: lparser.h:102
Vardesc * arr
Definition: lparser.h:97
int n
Definition: lparser.h:98
struct Dyndata::@35 actvar
lu_byte nactvar
Definition: lparser.h:123
int jpc
Definition: lparser.h:118
struct BlockCnt * bl
Definition: lparser.h:115
int nk
Definition: lparser.h:119
short nlocvars
Definition: lparser.h:122
int firstlocal
Definition: lparser.h:121
lu_byte freereg
Definition: lparser.h:125
Proto * f
Definition: lparser.h:112
lu_byte nups
Definition: lparser.h:124
int np
Definition: lparser.h:120
int pc
Definition: lparser.h:116
struct FuncState * prev
Definition: lparser.h:113
struct LexState * ls
Definition: lparser.h:114
int lasttarget
Definition: lparser.h:117
int pc
Definition: lparser.h:80
lu_byte nactvar
Definition: lparser.h:82
int line
Definition: lparser.h:81
TString * name
Definition: lparser.h:79
int size
Definition: lparser.h:90
Labeldesc * arr
Definition: lparser.h:88
int n
Definition: lparser.h:89
Definition: llex.h:58
Definition: lzio.h:23
Definition: lobject.h:407
short idx
Definition: lparser.h:73
Definition: lzio.h:55
int info
Definition: lparser.h:59
short idx
Definition: lparser.h:61
union expdesc::@33 u
int t
Definition: lparser.h:66
lua_Integer ival
Definition: lparser.h:57
lu_byte vt
Definition: lparser.h:63
lua_Number nval
Definition: lparser.h:58
expkind k
Definition: lparser.h:55
struct expdesc::@33::@34 ind
int f
Definition: lparser.h:67
lu_byte t
Definition: lparser.h:62