lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 60bc151ed70bce0d534edcbbba4380dee4306708
parent 3b19bd4d5768224b80fbc4983167821ada3f4485
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Fri,  9 Mar 2007 15:51:09 -0300

patch for last bug

Diffstat:
Mbugs | 40+++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/bugs b/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{