diff options
Diffstat (limited to 'lcode.c')
| -rw-r--r-- | lcode.c | 14 |
1 files changed, 6 insertions, 8 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lcode.c,v 2.23 2005/11/25 13:29:32 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 2.24 2005/12/22 16:19:56 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 | */ |
| @@ -731,17 +731,15 @@ void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { | |||
| 731 | case OPR_AND: { | 731 | case OPR_AND: { |
| 732 | lua_assert(e1->t == NO_JUMP); /* list must be closed */ | 732 | lua_assert(e1->t == NO_JUMP); /* list must be closed */ |
| 733 | luaK_dischargevars(fs, e2); | 733 | luaK_dischargevars(fs, e2); |
| 734 | luaK_concat(fs, &e1->f, e2->f); | 734 | luaK_concat(fs, &e2->f, e1->f); |
| 735 | e1->k = e2->k; e1->u.s.info = e2->u.s.info; | 735 | *e1 = *e2; |
| 736 | e1->u.s.aux = e2->u.s.aux; e1->t = e2->t; | ||
| 737 | break; | 736 | break; |
| 738 | } | 737 | } |
| 739 | case OPR_OR: { | 738 | case OPR_OR: { |
| 740 | lua_assert(e1->f == NO_JUMP); /* list must be closed */ | 739 | lua_assert(e1->f == NO_JUMP); /* list must be closed */ |
| 741 | luaK_dischargevars(fs, e2); | 740 | luaK_dischargevars(fs, e2); |
| 742 | luaK_concat(fs, &e1->t, e2->t); | 741 | luaK_concat(fs, &e2->t, e1->t); |
| 743 | e1->k = e2->k; e1->u.s.info = e2->u.s.info; | 742 | *e1 = *e2; |
| 744 | e1->u.s.aux = e2->u.s.aux; e1->f = e2->f; | ||
| 745 | break; | 743 | break; |
| 746 | } | 744 | } |
| 747 | case OPR_CONCAT: { | 745 | case OPR_CONCAT: { |
| @@ -750,7 +748,7 @@ void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { | |||
| 750 | lua_assert(e1->u.s.info == GETARG_B(getcode(fs, e2))-1); | 748 | lua_assert(e1->u.s.info == GETARG_B(getcode(fs, e2))-1); |
| 751 | freeexp(fs, e1); | 749 | freeexp(fs, e1); |
| 752 | SETARG_B(getcode(fs, e2), e1->u.s.info); | 750 | SETARG_B(getcode(fs, e2), e1->u.s.info); |
| 753 | e1->k = e2->k; e1->u.s.info = e2->u.s.info; | 751 | e1->k = VRELOCABLE; e1->u.s.info = e2->u.s.info; |
| 754 | } | 752 | } |
| 755 | else { | 753 | else { |
| 756 | luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ | 754 | luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ |
