diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-10-11 17:02:19 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-10-11 17:02:19 -0300 |
commit | 916587508c117decb2f4d70677fa06be18803874 (patch) | |
tree | 24f930dcb544c9ddb5a15394537b5d7d8e64169e /lparser.h | |
parent | a5382b763c2faa4c47e55ee0e49889b4c47daac4 (diff) | |
download | lua-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.h | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -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 */ | ||
55 | typedef struct Varlist { | ||
56 | vardesc *actvar; | ||
57 | int nactvar; | ||
58 | int actvarsize; | ||
59 | } Varlist; | ||
60 | |||
61 | |||
54 | struct BlockCnt; /* defined in lparser.c */ | 62 | struct 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 | ||
79 | LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, | 87 | LUAI_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 |