aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'lcode.c')
-rw-r--r--lcode.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/lcode.c b/lcode.c
index ffd77f2e..3cc0ea5c 100644
--- a/lcode.c
+++ b/lcode.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lcode.c,v 1.89 2002/02/05 22:39:12 roberto Exp roberto $ 2** $Id: lcode.c,v 1.90 2002/03/05 12:42:47 roberto Exp roberto $
3** Code generator for Lua 3** Code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -158,6 +158,11 @@ void luaK_patchlist (FuncState *fs, int list, int target) {
158} 158}
159 159
160 160
161void luaK_patchtohere (FuncState *fs, int list) {
162 luaK_patchlist(fs, list, luaK_getlabel(fs));
163}
164
165
161void luaK_concat (FuncState *fs, int *l1, int l2) { 166void luaK_concat (FuncState *fs, int *l1, int l2) {
162 if (*l1 == NO_JUMP) 167 if (*l1 == NO_JUMP)
163 *l1 = l2; 168 *l1 = l2;
@@ -171,16 +176,22 @@ void luaK_concat (FuncState *fs, int *l1, int l2) {
171} 176}
172 177
173 178
174void luaK_reserveregs (FuncState *fs, int n) { 179void luaK_checkstack (FuncState *fs, int n) {
175 fs->freereg += n; 180 int newstack = fs->freereg + n;
176 if (fs->freereg > fs->f->maxstacksize) { 181 if (newstack > fs->f->maxstacksize) {
177 if (fs->freereg >= MAXSTACK) 182 if (newstack >= MAXSTACK)
178 luaK_error(fs->ls, "function or expression too complex"); 183 luaK_error(fs->ls, "function or expression too complex");
179 fs->f->maxstacksize = cast(lu_byte, fs->freereg); 184 fs->f->maxstacksize = cast(lu_byte, newstack);
180 } 185 }
181} 186}
182 187
183 188
189void luaK_reserveregs (FuncState *fs, int n) {
190 luaK_checkstack(fs, n);
191 fs->freereg += n;
192}
193
194
184static void freereg (FuncState *fs, int reg) { 195static void freereg (FuncState *fs, int reg) {
185 if (reg >= fs->nactloc && reg < MAXSTACK) { 196 if (reg >= fs->nactloc && reg < MAXSTACK) {
186 fs->freereg--; 197 fs->freereg--;
@@ -533,7 +544,7 @@ void luaK_goiftrue (FuncState *fs, expdesc *e) {
533 } 544 }
534 } 545 }
535 luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ 546 luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */
536 luaK_patchlist(fs, e->t, luaK_getlabel(fs)); 547 luaK_patchtohere(fs, e->t);
537 e->t = NO_JUMP; 548 e->t = NO_JUMP;
538} 549}
539 550
@@ -560,7 +571,7 @@ static void luaK_goiffalse (FuncState *fs, expdesc *e) {
560 } 571 }
561 } 572 }
562 luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ 573 luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */
563 luaK_patchlist(fs, e->f, luaK_getlabel(fs)); 574 luaK_patchtohere(fs, e->f);
564 e->f = NO_JUMP; 575 e->f = NO_JUMP;
565} 576}
566 577