summaryrefslogtreecommitdiff
path: root/src/ltm.js
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2017-05-08 17:27:02 +1000
committerdaurnimator <quae@daurnimator.com>2017-05-08 17:27:02 +1000
commit698a10a3aaa3b5df0c22597e9b92a89b4f921632 (patch)
treed43d54cfbc182bf61715ea83d6ea4cf964c6214d /src/ltm.js
parent1f53206abfbac6dcae709831f5070a99c23c19db (diff)
downloadfengari-698a10a3aaa3b5df0c22597e9b92a89b4f921632.tar.gz
fengari-698a10a3aaa3b5df0c22597e9b92a89b4f921632.tar.bz2
fengari-698a10a3aaa3b5df0c22597e9b92a89b4f921632.zip
ltm.TMS should be indexes into an array
Diffstat (limited to 'src/ltm.js')
-rw-r--r--src/ltm.js90
1 files changed, 58 insertions, 32 deletions
diff --git a/src/ltm.js b/src/ltm.js
index 9011273..95486e4 100644
--- a/src/ltm.js
+++ b/src/ltm.js
@@ -13,34 +13,6 @@ const ldebug = require('./ldebug.js');
const lvm = require('./lvm.js');
const CT = defs.constant_types;
-
-const TMS = {
- TM_INDEX: defs.to_luastring("__index", true),
- TM_NEWINDEX: defs.to_luastring("__newindex", true),
- TM_GC: defs.to_luastring("__gc", true),
- TM_MODE: defs.to_luastring("__mode", true),
- TM_LEN: defs.to_luastring("__len", true),
- TM_EQ: defs.to_luastring("__eq", true), /* last tag method with fast access */
- TM_ADD: defs.to_luastring("__add", true),
- TM_SUB: defs.to_luastring("__sub", true),
- TM_MUL: defs.to_luastring("__mul", true),
- TM_MOD: defs.to_luastring("__mod", true),
- TM_POW: defs.to_luastring("__pow", true),
- TM_DIV: defs.to_luastring("__div", true),
- TM_IDIV: defs.to_luastring("__idiv", true),
- TM_BAND: defs.to_luastring("__band", true),
- TM_BOR: defs.to_luastring("__bor", true),
- TM_BXOR: defs.to_luastring("__bxor", true),
- TM_SHL: defs.to_luastring("__shl", true),
- TM_SHR: defs.to_luastring("__shr", true),
- TM_UNM: defs.to_luastring("__unm", true),
- TM_BNOT: defs.to_luastring("__bnot", true),
- TM_LT: defs.to_luastring("__lt", true),
- TM_LE: defs.to_luastring("__le", true),
- TM_CONCAT: defs.to_luastring("__concat", true),
- TM_CALL: defs.to_luastring("__call", true)
-};
-
const luaT_typenames_ = [
"no value",
"nil",
@@ -59,10 +31,64 @@ const ttypename = function(t) {
return luaT_typenames_[t + 1];
};
+
+/*
+* WARNING: if you change the order of this enumeration,
+* grep "ORDER TM" and "ORDER OP"
+*/
+const TMS = {
+ TM_INDEX: 0,
+ TM_NEWINDEX: 1,
+ TM_GC: 2,
+ TM_MODE: 3,
+ TM_LEN: 4,
+ TM_EQ: 5, /* last tag method with fast access */
+ TM_ADD: 6,
+ TM_SUB: 7,
+ TM_MUL: 8,
+ TM_MOD: 9,
+ TM_POW: 10,
+ TM_DIV: 11,
+ TM_IDIV: 12,
+ TM_BAND: 13 ,
+ TM_BOR: 14,
+ TM_BXOR: 15,
+ TM_SHL: 16,
+ TM_SHR: 17,
+ TM_UNM: 18,
+ TM_BNOT: 19,
+ TM_LT: 20,
+ TM_LE: 21,
+ TM_CONCAT: 22,
+ TM_CALL: 23,
+ TM_N: 24 /* number of elements in the enum */
+};
+
const luaT_init = function(L) {
- L.l_G.tmname = [];
- for (let event in TMS)
- L.l_G.tmname.push(new lobject.TValue(CT.LUA_TLNGSTR, lstring.luaS_new(L, TMS[event])));
+ L.l_G.tmname[TMS.TM_INDEX] = new lstring.luaS_new(L, defs.to_luastring("__index", true));
+ L.l_G.tmname[TMS.TM_NEWINDEX] = new lstring.luaS_new(L, defs.to_luastring("__newindex", true));
+ L.l_G.tmname[TMS.TM_GC] = new lstring.luaS_new(L, defs.to_luastring("__gc", true));
+ L.l_G.tmname[TMS.TM_MODE] = new lstring.luaS_new(L, defs.to_luastring("__mode", true));
+ L.l_G.tmname[TMS.TM_LEN] = new lstring.luaS_new(L, defs.to_luastring("__len", true));
+ L.l_G.tmname[TMS.TM_EQ] = new lstring.luaS_new(L, defs.to_luastring("__eq", true));
+ L.l_G.tmname[TMS.TM_ADD] = new lstring.luaS_new(L, defs.to_luastring("__add", true));
+ L.l_G.tmname[TMS.TM_SUB] = new lstring.luaS_new(L, defs.to_luastring("__sub", true));
+ L.l_G.tmname[TMS.TM_MUL] = new lstring.luaS_new(L, defs.to_luastring("__mul", true));
+ L.l_G.tmname[TMS.TM_MOD] = new lstring.luaS_new(L, defs.to_luastring("__mod", true));
+ L.l_G.tmname[TMS.TM_POW] = new lstring.luaS_new(L, defs.to_luastring("__pow", true));
+ L.l_G.tmname[TMS.TM_DIV] = new lstring.luaS_new(L, defs.to_luastring("__div", true));
+ L.l_G.tmname[TMS.TM_IDIV] = new lstring.luaS_new(L, defs.to_luastring("__idiv", true));
+ L.l_G.tmname[TMS.TM_BAND] = new lstring.luaS_new(L, defs.to_luastring("__band", true));
+ L.l_G.tmname[TMS.TM_BOR] = new lstring.luaS_new(L, defs.to_luastring("__bor", true));
+ L.l_G.tmname[TMS.TM_BXOR] = new lstring.luaS_new(L, defs.to_luastring("__bxor", true));
+ L.l_G.tmname[TMS.TM_SHL] = new lstring.luaS_new(L, defs.to_luastring("__shl", true));
+ L.l_G.tmname[TMS.TM_SHR] = new lstring.luaS_new(L, defs.to_luastring("__shr", true));
+ L.l_G.tmname[TMS.TM_UNM] = new lstring.luaS_new(L, defs.to_luastring("__unm", true));
+ L.l_G.tmname[TMS.TM_BNOT] = new lstring.luaS_new(L, defs.to_luastring("__bnot", true));
+ L.l_G.tmname[TMS.TM_LT] = new lstring.luaS_new(L, defs.to_luastring("__lt", true));
+ L.l_G.tmname[TMS.TM_LE] = new lstring.luaS_new(L, defs.to_luastring("__le", true));
+ L.l_G.tmname[TMS.TM_CONCAT] = new lstring.luaS_new(L, defs.to_luastring("__concat", true));
+ L.l_G.tmname[TMS.TM_CALL] = new lstring.luaS_new(L, defs.to_luastring("__call", true));
};
/*
@@ -150,7 +176,7 @@ const luaT_gettmbyobj = function(L, o, event) {
mt = L.l_G.mt[o.ttnov()];
}
- return mt ? ltable.luaH_getstr(mt, event) : lobject.luaO_nilobject;
+ return mt ? ltable.luaH_getstr(mt, L.l_G.tmname[event]) : lobject.luaO_nilobject;
};
module.exports.TMS = TMS;