|
1 /* |
|
2 ** $Id: lparser.h,v 1.57.1.1 2007/12/27 13:02:25 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 descriptor |
|
17 */ |
|
18 |
|
19 typedef enum { |
|
20 VVOID, /* no value */ |
|
21 VNIL, |
|
22 VTRUE, |
|
23 VFALSE, |
|
24 VK, /* info = index of constant in `k' */ |
|
25 VKNUM, /* nval = numerical value */ |
|
26 VLOCAL, /* info = local register */ |
|
27 VUPVAL, /* info = index of upvalue in `upvalues' */ |
|
28 VGLOBAL, /* info = index of table; aux = index of global name in `k' */ |
|
29 VINDEXED, /* info = table register; aux = index register (or `k') */ |
|
30 VJMP, /* info = instruction pc */ |
|
31 VRELOCABLE, /* info = instruction pc */ |
|
32 VNONRELOC, /* info = result register */ |
|
33 VCALL, /* info = instruction pc */ |
|
34 VVARARG /* info = instruction pc */ |
|
35 } expkind; |
|
36 |
|
37 typedef struct expdesc { |
|
38 expkind k; |
|
39 union { |
|
40 struct { int info, aux; } s; |
|
41 lua_Number nval; |
|
42 } u; |
|
43 int t; /* patch list of `exit when true' */ |
|
44 int f; /* patch list of `exit when false' */ |
|
45 } expdesc; |
|
46 |
|
47 |
|
48 typedef struct upvaldesc { |
|
49 lu_byte k; |
|
50 lu_byte info; |
|
51 } upvaldesc; |
|
52 |
|
53 |
|
54 struct BlockCnt; /* defined in lparser.c */ |
|
55 |
|
56 |
|
57 /* state needed to generate code for a given function */ |
|
58 typedef struct FuncState { |
|
59 Proto *f; /* current function header */ |
|
60 Table *h; /* table to find (and reuse) elements in `k' */ |
|
61 struct FuncState *prev; /* enclosing function */ |
|
62 struct LexState *ls; /* lexical state */ |
|
63 struct lua_State *L; /* copy of the Lua state */ |
|
64 struct BlockCnt *bl; /* chain of current blocks */ |
|
65 int pc; /* next position to code (equivalent to `ncode') */ |
|
66 int lasttarget; /* `pc' of last `jump target' */ |
|
67 int jpc; /* list of pending jumps to `pc' */ |
|
68 int freereg; /* first free register */ |
|
69 int nk; /* number of elements in `k' */ |
|
70 int np; /* number of elements in `p' */ |
|
71 short nlocvars; /* number of elements in `locvars' */ |
|
72 lu_byte nactvar; /* number of active local variables */ |
|
73 upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */ |
|
74 unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ |
|
75 } FuncState; |
|
76 |
|
77 |
|
78 LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, |
|
79 const char *name); |
|
80 |
|
81 |
|
82 #endif |