diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lobject.js | 2 | ||||
| -rw-r--r-- | src/lvm.js | 4 | 
2 files changed, 3 insertions, 3 deletions
| diff --git a/src/lobject.js b/src/lobject.js index 710a906..aeaa105 100644 --- a/src/lobject.js +++ b/src/lobject.js @@ -540,7 +540,7 @@ const intarith = function(L, op, v1, v2) {          case lua.LUA_OPADD:  return (v1 + v2);          case lua.LUA_OPSUB:  return (v1 - v2);          case lua.LUA_OPMUL:  return (v1 * v2); -        case lua.LUA_OPMOD:  return (v1 % v2); +        case lua.LUA_OPMOD:  return (v1 - Math.floor(v1 / v2) * v2); // % semantic on negative numbers is different in js          case lua.LUA_OPIDIV: return (v1 / v2);          case lua.LUA_OPBAND: return (v1 & v2);          case lua.LUA_OPBOR:  return (v1 | v2); @@ -281,9 +281,9 @@ const luaV_execute = function(L) {                  let numberop2 = tonumber(op2);                  if (op1.ttisinteger() && op2.ttisinteger()) { -                    L.stack[ra] = new TValue(CT.LUA_TNUMINT, (op1.value % op2.value)); +                    L.stack[ra] = new TValue(CT.LUA_TNUMINT, (op1.value - Math.floor(op1.value / op2.value) * op2.value));                  } else if (numberop1 !== false && numberop2 !== false) { -                    L.stack[ra] = new TValue(CT.LUA_TNUMFLT, k[i.B].value % op2.value); +                    L.stack[ra] = new TValue(CT.LUA_TNUMFLT, (numberop1 - Math.floor(numberop1 / numberop2) * numberop2));                  } else {                      ltm.luaT_trybinTM(L, op1, op2, ra, ltm.TMS.TM_MOD);                      base = ci.u.l.base; | 
