From 767dfd4196106b6ecb45a5253030778100cb1bc4 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Mon, 8 May 2017 17:45:21 +1000 Subject: src/lvm.js: Use TValue accessors to use strings --- src/lvm.js | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/src/lvm.js b/src/lvm.js index 15081ad..1ea4f65 100644 --- a/src/lvm.js +++ b/src/lvm.js @@ -719,7 +719,7 @@ const luaV_lessthan = function(L, l, r) { if (l.ttisnumber() && r.ttisnumber()) return LTnum(l, r) ? 1 : 0; else if (l.ttisstring() && r.ttisstring()) - return l_strcmp(l, r) < 0 ? 1 : 0; + return l_strcmp(l.tsvalue(), r.tsvalue()) < 0 ? 1 : 0; else { let res = ltm.luaT_callorderTM(L, l, r, ltm.TMS.TM_LT); if (res < 0) @@ -734,7 +734,7 @@ const luaV_lessequal = function(L, l, r) { if (l.ttisnumber() && r.ttisnumber()) return LEnum(l, r) ? 1 : 0; else if (l.ttisstring() && r.ttisstring()) - return l_strcmp(l, r) <= 0 ? 1 : 0; + return l_strcmp(l.tsvalue(), r.tsvalue()) <= 0 ? 1 : 0; else { res = ltm.luaT_callorderTM(L, l, r, ltm.TMS.TM_LE); if (res >= 0) @@ -773,18 +773,7 @@ const luaV_equalobj = function(L, t1, t2) { return t1.value === t2.value ? 1 : 0; case CT.LUA_TSHRSTR: case CT.LUA_TLNGSTR: { - let l1 = t1.value.length; - let l2 = t2.value.length; - - if (l1 !== l2) return 0; - - let i; - for (i = 0; i < l1; i++) { - if (t1.value[i] !== t2.value[i]) - return 0; - } - - return 1; + return lstring.luaS_eqlngstr(t1.tsvalue(), t2.tsvalue()) ? 1 : 0; } case CT.LUA_TLIGHTUSERDATA: case CT.LUA_TUSERDATA: @@ -927,12 +916,12 @@ const LTintfloat = function(l, r) { ** The code is a little tricky because it allows '\0' in the strings. */ const l_strcmp = function(ls, rs) { - let l = ls.value; - let jl = ls.jsstring(); - let ll = l.length; - let r = rs.value; - let lr = r.length; - let jr = rs.jsstring(); + let l = ls; + let ll = ls.length; + let jl = defs.to_jsstring(l); + let r = rs; + let lr = rs.length; + let jr = defs.to_jsstring(r); for (;;) { let temp = jl === jr; // TODO: strcoll ? if (!temp) /* not equal? */ @@ -949,14 +938,10 @@ const l_strcmp = function(ls, rs) { ll -= len; r = r.slice(len); lr -= len; - jl = new lobject.TValue(null, l).jsstring(); - jr = new lobject.TValue(null, r).jsstring(); + jl = defs.to_jsstring(l); + jr = defs.to_jsstring(r); } } - - ls = ls.jsstring(); - rs = rs.jsstring(); - return ls === rs ? 0 : (ls < rs ? -1 : 1); }; /* @@ -973,7 +958,7 @@ const luaV_objlen = function(L, ra, rb) { } case CT.LUA_TSHRSTR: case CT.LUA_TLNGSTR: - L.stack[ra] = new lobject.TValue(CT.LUA_TNUMINT, rb.value.length); + L.stack[ra] = new lobject.TValue(CT.LUA_TNUMINT, rb.vslen()); return; default: { tm = ltm.luaT_gettmbyobj(L, rb, ltm.TMS.TM_LEN); -- cgit v1.2.3-70-g09d2