aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lcode.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/lcode.c b/lcode.c
index 2b932b94..87bf2f92 100644
--- a/lcode.c
+++ b/lcode.c
@@ -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;