aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'lcode.c')
-rw-r--r--lcode.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lcode.c b/lcode.c
index 29a6bc89..e869dac3 100644
--- a/lcode.c
+++ b/lcode.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lcode.c,v 1.70 2001/06/06 18:00:19 roberto Exp roberto $ 2** $Id: lcode.c,v 1.71 2001/06/07 15:01:21 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*/
@@ -144,6 +144,12 @@ static int need_value (FuncState *fs, int list, OpCode op) {
144} 144}
145 145
146 146
147static void patchtestreg (Instruction *i, int reg) {
148 if (reg == NO_REG) reg = GETARG_B(*i);
149 SETARG_A(*i, reg);
150}
151
152
147static void luaK_patchlistaux (FuncState *fs, int list, 153static void luaK_patchlistaux (FuncState *fs, int list,
148 int ttarget, int treg, int ftarget, int freg, int dtarget) { 154 int ttarget, int treg, int ftarget, int freg, int dtarget) {
149 while (list != NO_JUMP) { 155 while (list != NO_JUMP) {
@@ -151,12 +157,12 @@ static void luaK_patchlistaux (FuncState *fs, int list,
151 Instruction *i = getjumpcontrol(fs, list); 157 Instruction *i = getjumpcontrol(fs, list);
152 switch (GET_OPCODE(*i)) { 158 switch (GET_OPCODE(*i)) {
153 case OP_TESTT: { 159 case OP_TESTT: {
154 SETARG_A(*i, treg); 160 patchtestreg(i, treg);
155 luaK_fixjump(fs, list, ttarget); 161 luaK_fixjump(fs, list, ttarget);
156 break; 162 break;
157 } 163 }
158 case OP_TESTF: { 164 case OP_TESTF: {
159 SETARG_A(*i, freg); 165 patchtestreg(i, freg);
160 luaK_fixjump(fs, list, ftarget); 166 luaK_fixjump(fs, list, ftarget);
161 break; 167 break;
162 } 168 }