| --- lua-5.1.4.orig/src/lcode.c 2007/12/28 15:32:23 2.25.1.3 |
| +++ lua-5.1.4/src/lcode.c 2009/06/15 14:07:34 |
| @@ -544,15 +544,18 @@ |
| pc = NO_JUMP; /* always true; do nothing */ |
| break; |
| } |
| - case VFALSE: { |
| - pc = luaK_jump(fs); /* always jump */ |
| - break; |
| - } |
| case VJMP: { |
| invertjump(fs, e); |
| pc = e->u.s.info; |
| break; |
| } |
| + case VFALSE: { |
| + if (!hasjumps(e)) { |
| + pc = luaK_jump(fs); /* always jump */ |
| + break; |
| + } |
| + /* else go through */ |
| + } |
| default: { |
| pc = jumponcond(fs, e, 0); |
| break; |
| @@ -572,14 +575,17 @@ |
| pc = NO_JUMP; /* always false; do nothing */ |
| break; |
| } |
| - case VTRUE: { |
| - pc = luaK_jump(fs); /* always jump */ |
| - break; |
| - } |
| case VJMP: { |
| pc = e->u.s.info; |
| break; |
| } |
| + case VTRUE: { |
| + if (!hasjumps(e)) { |
| + pc = luaK_jump(fs); /* always jump */ |
| + break; |
| + } |
| + /* else go through */ |
| + } |
| default: { |
| pc = jumponcond(fs, e, 1); |
| break; |
| |