diff options
| -rw-r--r-- | lcode.c | 24 |
1 files changed, 15 insertions, 9 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lcode.c,v 2.36 2008/04/07 18:41:47 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 2.37 2009/06/10 16:52:03 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 | */ |
| @@ -543,15 +543,18 @@ void luaK_goiftrue (FuncState *fs, expdesc *e) { | |||
| 543 | pc = NO_JUMP; /* always true; do nothing */ | 543 | pc = NO_JUMP; /* always true; do nothing */ |
| 544 | break; | 544 | break; |
| 545 | } | 545 | } |
| 546 | case VFALSE: { | ||
| 547 | pc = luaK_jump(fs); /* always jump */ | ||
| 548 | break; | ||
| 549 | } | ||
| 550 | case VJMP: { | 546 | case VJMP: { |
| 551 | invertjump(fs, e); | 547 | invertjump(fs, e); |
| 552 | pc = e->u.s.info; | 548 | pc = e->u.s.info; |
| 553 | break; | 549 | break; |
| 554 | } | 550 | } |
| 551 | case VFALSE: { | ||
| 552 | if (!hasjumps(e)) { | ||
| 553 | pc = luaK_jump(fs); /* always jump */ | ||
| 554 | break; | ||
| 555 | } | ||
| 556 | /* else go through */ | ||
| 557 | } | ||
| 555 | default: { | 558 | default: { |
| 556 | pc = jumponcond(fs, e, 0); | 559 | pc = jumponcond(fs, e, 0); |
| 557 | break; | 560 | break; |
| @@ -571,14 +574,17 @@ static void luaK_goiffalse (FuncState *fs, expdesc *e) { | |||
| 571 | pc = NO_JUMP; /* always false; do nothing */ | 574 | pc = NO_JUMP; /* always false; do nothing */ |
| 572 | break; | 575 | break; |
| 573 | } | 576 | } |
| 574 | case VTRUE: { | ||
| 575 | pc = luaK_jump(fs); /* always jump */ | ||
| 576 | break; | ||
| 577 | } | ||
| 578 | case VJMP: { | 577 | case VJMP: { |
| 579 | pc = e->u.s.info; | 578 | pc = e->u.s.info; |
| 580 | break; | 579 | break; |
| 581 | } | 580 | } |
| 581 | case VTRUE: { | ||
| 582 | if (!hasjumps(e)) { | ||
| 583 | pc = luaK_jump(fs); /* always jump */ | ||
| 584 | break; | ||
| 585 | } | ||
| 586 | /* else go through */ | ||
| 587 | } | ||
| 582 | default: { | 588 | default: { |
| 583 | pc = jumponcond(fs, e, 1); | 589 | pc = jumponcond(fs, e, 1); |
| 584 | break; | 590 | break; |
