diff options
Diffstat (limited to 'lcode.c')
-rw-r--r-- | lcode.c | 27 |
1 files changed, 14 insertions, 13 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lcode.c,v 2.38 2009/06/15 13:52:08 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 2.39 2009/06/17 17:49:09 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 | */ |
@@ -766,18 +766,19 @@ void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { | |||
766 | } | 766 | } |
767 | break; | 767 | break; |
768 | } | 768 | } |
769 | case OPR_ADD: codearith(fs, OP_ADD, e1, e2); break; | 769 | case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: |
770 | case OPR_SUB: codearith(fs, OP_SUB, e1, e2); break; | 770 | case OPR_MOD: case OPR_POW: { |
771 | case OPR_MUL: codearith(fs, OP_MUL, e1, e2); break; | 771 | codearith(fs, op - OPR_ADD + OP_ADD, e1, e2); |
772 | case OPR_DIV: codearith(fs, OP_DIV, e1, e2); break; | 772 | break; |
773 | case OPR_MOD: codearith(fs, OP_MOD, e1, e2); break; | 773 | } |
774 | case OPR_POW: codearith(fs, OP_POW, e1, e2); break; | 774 | case OPR_EQ: case OPR_LT: case OPR_LE: { |
775 | case OPR_EQ: codecomp(fs, OP_EQ, 1, e1, e2); break; | 775 | codecomp(fs, op - OPR_EQ + OP_EQ, 1, e1, e2); |
776 | case OPR_NE: codecomp(fs, OP_EQ, 0, e1, e2); break; | 776 | break; |
777 | case OPR_LT: codecomp(fs, OP_LT, 1, e1, e2); break; | 777 | } |
778 | case OPR_LE: codecomp(fs, OP_LE, 1, e1, e2); break; | 778 | case OPR_NE: case OPR_GT: case OPR_GE: { |
779 | case OPR_GT: codecomp(fs, OP_LT, 0, e1, e2); break; | 779 | codecomp(fs, op - OPR_NE + OP_EQ, 0, e1, e2); |
780 | case OPR_GE: codecomp(fs, OP_LE, 0, e1, e2); break; | 780 | break; |
781 | } | ||
781 | default: lua_assert(0); | 782 | default: lua_assert(0); |
782 | } | 783 | } |
783 | } | 784 | } |