aboutsummaryrefslogtreecommitdiff
path: root/lparser.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-02-07 15:14:50 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-02-07 15:14:50 -0200
commitf0797492875dec5bf7a23b9172809bc92c0c04cd (patch)
tree712c44cd08fc8ee3a12c11029dc50f1988f8628f /lparser.h
parentf8d677f94c3b4309be94698d33aeb0590a51eabc (diff)
downloadlua-f0797492875dec5bf7a23b9172809bc92c0c04cd.tar.gz
lua-f0797492875dec5bf7a23b9172809bc92c0c04cd.tar.bz2
lua-f0797492875dec5bf7a23b9172809bc92c0c04cd.zip
some reorganization of dynamic data structures used by the parser
Diffstat (limited to 'lparser.h')
-rw-r--r--lparser.h60
1 files changed, 24 insertions, 36 deletions
diff --git a/lparser.h b/lparser.h
index b433a02a..5626d100 100644
--- a/lparser.h
+++ b/lparser.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.h,v 1.65 2010/07/07 16:27:29 roberto Exp roberto $ 2** $Id: lparser.h,v 1.66 2011/02/04 17:34:43 roberto Exp roberto $
3** Lua Parser 3** Lua Parser
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -59,47 +59,36 @@ typedef struct Vardesc {
59} Vardesc; 59} Vardesc;
60 60
61 61
62/* list of all active local variables */ 62/* description of pending goto statements and label statements */
63typedef struct Varlist {
64 Vardesc *actvar;
65 int nactvar;
66 int actvarsize;
67} Varlist;
68
69
70/* description of pending goto statement */
71typedef struct Gotodesc {
72 TString *name;
73 int pc; /* where it is coded */
74 int line; /* line where it appeared */
75 lu_byte currlevel; /* variable level where it appears in current block */
76} Gotodesc;
77
78
79/* list of pending gotos */
80typedef struct Gotolist {
81 Gotodesc *gt;
82 int ngt;
83 int gtsize;
84} Gotolist;
85
86
87/* description of active labels */
88typedef struct Labeldesc { 63typedef struct Labeldesc {
89 TString *name; 64 TString *name; /* label identifier */
90 int pc; /* label position */ 65 int pc; /* position in code */
91 lu_byte nactvar; /* variable level where it appears in current block */ 66 int line; /* line where it appeared */
67 lu_byte nactvar; /* local level where it appears in current block */
92} Labeldesc; 68} Labeldesc;
93 69
94 70
95/* list of active labels */ 71/* list of labels or gotos */
96typedef struct Labellist { 72typedef struct Labellist {
97 Labeldesc *label; 73 Labeldesc *arr; /* array */
98 int nlabel; 74 int n; /* number of entries in use */
99 int labelsize; 75 int size; /* array size */
100} Labellist; 76} Labellist;
101 77
102 78
79/* dynamic structures used by the parser */
80typedef struct Dyndata {
81 struct { /* list of active local variables */
82 Vardesc *arr;
83 int n;
84 int size;
85 } actvar;
86 Labellist gt; /* list of pending gotos */
87 Labellist label; /* list of active labels */
88} Dyndata;
89
90
91/* control of blocks */
103struct BlockCnt; /* defined in lparser.c */ 92struct BlockCnt; /* defined in lparser.c */
104 93
105 94
@@ -125,8 +114,7 @@ typedef struct FuncState {
125 114
126 115
127LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, 116LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
128 Varlist *varl, Gotolist *gtl, 117 Dyndata *dyd, const char *name);
129 Labellist *labell, const char *name);
130 118
131 119
132#endif 120#endif