diff options
Diffstat (limited to 'lcode.c')
-rw-r--r-- | lcode.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lcode.c,v 2.49 2010/07/07 16:27:29 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 2.50 2011/01/31 14:28:41 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 | */ |
@@ -171,6 +171,19 @@ void luaK_patchlist (FuncState *fs, int list, int target) { | |||
171 | } | 171 | } |
172 | 172 | ||
173 | 173 | ||
174 | LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level) { | ||
175 | level++; /* argument is +1 to reserve 0 as non-op */ | ||
176 | while (list != NO_JUMP) { | ||
177 | int next = getjump(fs, list); | ||
178 | lua_assert(GET_OPCODE(fs->f->code[list]) == OP_JMP && | ||
179 | (GETARG_A(fs->f->code[list]) == 0 || | ||
180 | GETARG_A(fs->f->code[list]) >= level)); | ||
181 | SETARG_A(fs->f->code[list], level); | ||
182 | list = next; | ||
183 | } | ||
184 | } | ||
185 | |||
186 | |||
174 | void luaK_patchtohere (FuncState *fs, int list) { | 187 | void luaK_patchtohere (FuncState *fs, int list) { |
175 | luaK_getlabel(fs); | 188 | luaK_getlabel(fs); |
176 | luaK_concat(fs, &fs->jpc, list); | 189 | luaK_concat(fs, &fs->jpc, list); |