diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-08 09:29:27 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-08 09:29:27 -0300 |
commit | 0267168675cb21f19e685749e1737dfd2884bdf2 (patch) | |
tree | f547cfbf519153e4ec37b08fe104eb874f78132f /lcode.c | |
parent | ba11831d357889ee090ce92ff508957c6c023c42 (diff) | |
download | lua-0267168675cb21f19e685749e1737dfd2884bdf2.tar.gz lua-0267168675cb21f19e685749e1737dfd2884bdf2.tar.bz2 lua-0267168675cb21f19e685749e1737dfd2884bdf2.zip |
details.
Diffstat (limited to 'lcode.c')
-rw-r--r-- | lcode.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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 | ||
147 | static void patchtestreg (Instruction *i, int reg) { | ||
148 | if (reg == NO_REG) reg = GETARG_B(*i); | ||
149 | SETARG_A(*i, reg); | ||
150 | } | ||
151 | |||
152 | |||
147 | static void luaK_patchlistaux (FuncState *fs, int list, | 153 | static 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 | } |