mirror of https://github.com/rusefi/lua.git
patch for last bug
This commit is contained in:
parent
3b19bd4d57
commit
60bc151ed7
40
bugs
40
bugs
|
@ -1252,7 +1252,45 @@ print(2 * v251.k1, v251.k1 * 2); -- 2 2, OK
|
|||
v253=1;
|
||||
print(2 * v251.k1, v251.k1 * 2); -- 1 2, ???
|
||||
]],
|
||||
patch = [[no patch yet]],
|
||||
patch = [[
|
||||
*lcode.c:
|
||||
@@ -657,10 +657,16 @@
|
||||
if (constfolding(op, e1, e2))
|
||||
return;
|
||||
else {
|
||||
- int o1 = luaK_exp2RK(fs, e1);
|
||||
int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0;
|
||||
- freeexp(fs, e2);
|
||||
- freeexp(fs, e1);
|
||||
+ int o1 = luaK_exp2RK(fs, e1);
|
||||
+ if (o1 > o2) {
|
||||
+ freeexp(fs, e1);
|
||||
+ freeexp(fs, e2);
|
||||
+ }
|
||||
+ else {
|
||||
+ freeexp(fs, e2);
|
||||
+ freeexp(fs, e1);
|
||||
+ }
|
||||
e1->u.s.info = luaK_codeABC(fs, op, 0, o1, o2);
|
||||
e1->k = VRELOCABLE;
|
||||
}
|
||||
@@ -718,10 +724,15 @@
|
||||
luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */
|
||||
break;
|
||||
}
|
||||
- default: {
|
||||
+ case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV:
|
||||
+ case OPR_MOD: case OPR_POW: {
|
||||
if (!isnumeral(v)) luaK_exp2RK(fs, v);
|
||||
break;
|
||||
}
|
||||
+ default: {
|
||||
+ luaK_exp2RK(fs, v);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
]],
|
||||
}
|
||||
|
||||
Bug{
|
||||
|
|
Loading…
Reference in New Issue