aboutsummaryrefslogtreecommitdiff
path: root/lparser.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-10-11 17:02:19 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-10-11 17:02:19 -0300
commit916587508c117decb2f4d70677fa06be18803874 (patch)
tree24f930dcb544c9ddb5a15394537b5d7d8e64169e /lparser.h
parenta5382b763c2faa4c47e55ee0e49889b4c47daac4 (diff)
downloadlua-916587508c117decb2f4d70677fa06be18803874.tar.gz
lua-916587508c117decb2f4d70677fa06be18803874.tar.bz2
lua-916587508c117decb2f4d70677fa06be18803874.zip
parser keeps list of active local variables in a single dynamic array,
therefore saving C stack space
Diffstat (limited to 'lparser.h')
-rw-r--r--lparser.h14
1 files changed, 11 insertions, 3 deletions
diff --git a/lparser.h b/lparser.h
index 850b787d..4fcdc621 100644
--- a/lparser.h
+++ b/lparser.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.h,v 1.59 2009/09/28 16:32:50 roberto Exp roberto $ 2** $Id: lparser.h,v 1.60 2009/09/30 15:38:37 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*/
@@ -51,6 +51,14 @@ typedef struct vardesc {
51} vardesc; 51} vardesc;
52 52
53 53
54/* list of all active local variables */
55typedef struct Varlist {
56 vardesc *actvar;
57 int nactvar;
58 int actvarsize;
59} Varlist;
60
61
54struct BlockCnt; /* defined in lparser.c */ 62struct BlockCnt; /* defined in lparser.c */
55 63
56 64
@@ -68,16 +76,16 @@ typedef struct FuncState {
68 int freereg; /* first free register */ 76 int freereg; /* first free register */
69 int nk; /* number of elements in `k' */ 77 int nk; /* number of elements in `k' */
70 int np; /* number of elements in `p' */ 78 int np; /* number of elements in `p' */
79 int firstlocal; /* index of first local var of this function */
71 short nlocvars; /* number of elements in `locvars' */ 80 short nlocvars; /* number of elements in `locvars' */
72 lu_byte nactvar; /* number of active local variables */ 81 lu_byte nactvar; /* number of active local variables */
73 lu_byte nups; /* number of upvalues */ 82 lu_byte nups; /* number of upvalues */
74 lu_byte envreg; /* register holding current lexical environment */ 83 lu_byte envreg; /* register holding current lexical environment */
75 vardesc actvar[LUAI_MAXVARS]; /* stack of active variables */
76} FuncState; 84} FuncState;
77 85
78 86
79LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, 87LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
80 const char *name); 88 Varlist *varl, const char *name);
81 89
82 90
83#endif 91#endif