diff options
Diffstat (limited to 'lcode.c')
-rw-r--r-- | lcode.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lcode.c,v 1.57 2001/01/19 13:20:30 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 1.58 2001/01/29 13:14:49 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 | */ |
@@ -59,6 +59,17 @@ static void luaK_fixjump (FuncState *fs, int pc, int dest) { | |||
59 | } | 59 | } |
60 | 60 | ||
61 | 61 | ||
62 | /* | ||
63 | ** prep-for instructions (OP_FORPREP & OP_LFORPREP) have a negated jump, | ||
64 | ** as they simulate the real jump... | ||
65 | */ | ||
66 | void luaK_fixfor (FuncState *fs, int pc, int dest) { | ||
67 | Instruction *jmp = &fs->f->code[pc]; | ||
68 | int offset = dest-(pc+1); | ||
69 | SETARG_S(*jmp, -offset); | ||
70 | } | ||
71 | |||
72 | |||
62 | static int luaK_getjump (FuncState *fs, int pc) { | 73 | static int luaK_getjump (FuncState *fs, int pc) { |
63 | int offset = GETARG_S(fs->f->code[pc]); | 74 | int offset = GETARG_S(fs->f->code[pc]); |
64 | if (offset == NO_JUMP) /* point to itself represents end of list */ | 75 | if (offset == NO_JUMP) /* point to itself represents end of list */ |