diff options
Diffstat (limited to 'src/ltm.js')
-rw-r--r-- | src/ltm.js | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -9,6 +9,8 @@ const Table = lobject.Table; const ldo = require('./ldo.js'); const lstate = require('./lstate.js'); const lua = require('./lua.js'); +const ldebug = require('./ldebug.js'); +const lvm = require('./lvm.js'); const CT = lua.constant_types; @@ -114,7 +116,21 @@ const luaT_callbinTM = function(L, p1, p2, res, event) { const luaT_trybinTM = function(L, p1, p2, res, event) { if (!luaT_callbinTM(L, p1, p2, res, event)) { - throw new Error("TM error"); // TODO: luaG_error + switch (event) { + case TMS.TM_CONCAT: + ldebug.luaG_concaterror(L, p1, p2); + case TMS.TM_BAND: case TMS.TM_BOR: case TMS.TM_BXOR: + case TMS.TM_SHL: case TMS.TM_SHR: case TMS.TM_BNOT: { + let n1 = lvm.tonumber(p1); + let n2 = lvm.tonumber(p2); + if (n1 !== false && n2 !== false) + ldebug.luaG_tointerror(L, p1, p2); + else + ldebug.luaG_opinterror(L, p1, p2, "perform bitwise operation on"); + } + default: + ldebug.luaG_opinterror(L, p1, p2, "perform arithmetic on"); + } } }; |