aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-02-08 14:15:41 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-02-08 14:15:41 -0300
commit02bab9fc258fe1cbc6088b1bd61193499d058eff (patch)
treea88b03d4c84ac0d734d528f39f4fd9ead8819432 /lvm.c
parent5e08b41567c5723c9f599d02a7511aa398f7c646 (diff)
downloadlua-02bab9fc258fe1cbc6088b1bd61193499d058eff.tar.gz
lua-02bab9fc258fe1cbc6088b1bd61193499d058eff.tar.bz2
lua-02bab9fc258fe1cbc6088b1bd61193499d058eff.zip
Bug: Wrong line in error message for arith. errors
It also causes 'L->top' to be wrong when the error happens, triggering an 'assert'.
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/lvm.c b/lvm.c
index 2e84dc63..8493a770 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1410,6 +1410,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1410 vmbreak; 1410 vmbreak;
1411 } 1411 }
1412 vmcase(OP_MODK) { 1412 vmcase(OP_MODK) {
1413 savestate(L, ci); /* in case of division by 0 */
1413 op_arithK(L, luaV_mod, luaV_modf); 1414 op_arithK(L, luaV_mod, luaV_modf);
1414 vmbreak; 1415 vmbreak;
1415 } 1416 }
@@ -1422,6 +1423,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1422 vmbreak; 1423 vmbreak;
1423 } 1424 }
1424 vmcase(OP_IDIVK) { 1425 vmcase(OP_IDIVK) {
1426 savestate(L, ci); /* in case of division by 0 */
1425 op_arithK(L, luaV_idiv, luai_numidiv); 1427 op_arithK(L, luaV_idiv, luai_numidiv);
1426 vmbreak; 1428 vmbreak;
1427 } 1429 }
@@ -1470,6 +1472,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1470 vmbreak; 1472 vmbreak;
1471 } 1473 }
1472 vmcase(OP_MOD) { 1474 vmcase(OP_MOD) {
1475 savestate(L, ci); /* in case of division by 0 */
1473 op_arith(L, luaV_mod, luaV_modf); 1476 op_arith(L, luaV_mod, luaV_modf);
1474 vmbreak; 1477 vmbreak;
1475 } 1478 }
@@ -1482,6 +1485,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1482 vmbreak; 1485 vmbreak;
1483 } 1486 }
1484 vmcase(OP_IDIV) { /* floor division */ 1487 vmcase(OP_IDIV) { /* floor division */
1488 savestate(L, ci); /* in case of division by 0 */
1485 op_arith(L, luaV_idiv, luai_numidiv); 1489 op_arith(L, luaV_idiv, luai_numidiv);
1486 vmbreak; 1490 vmbreak;
1487 } 1491 }