diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/loslib.js | 11 | ||||
-rw-r--r-- | src/lstrlib.js | 31 |
2 files changed, 8 insertions, 34 deletions
diff --git a/src/loslib.js b/src/loslib.js index 6419524..6e0a032 100644 --- a/src/loslib.js +++ b/src/loslib.js @@ -42,6 +42,7 @@ const { luaL_pushresult } = require('./lauxlib.js'); const { + luastring_eq, luastring_indexOf, to_jsstring, to_luastring @@ -101,14 +102,6 @@ const getfield = function(L, key, d, delta) { return res; }; -const array_cmp = function(a, ai, b, bi, len) { - for (let i=0; i<len; i++) { - if (a[ai+i] !== b[bi+i]) - return false; - } - return true; -}; - const checkoption = function(L, conv, i, buff) { let option = LUA_STRFTIMEOPTIONS; let o = 0; @@ -116,7 +109,7 @@ const checkoption = function(L, conv, i, buff) { for (; o < option.length && oplen <= (conv.length - i); o += oplen) { if (option[o] === '|'.charCodeAt(0)) /* next block? */ oplen++; /* will check options with next length (+1) */ - else if (array_cmp(conv, i, option, o, oplen)) { /* match? */ + else if (luastring_eq(conv.subarray(i, i+oplen), option.subarray(o, o+oplen))) { /* match? */ buff.set(conv.subarray(i, i+oplen)); /* copy valid option to buffer */ return i + oplen; /* return next item */ } diff --git a/src/lstrlib.js b/src/lstrlib.js index 50dbcf2..9da67c5 100644 --- a/src/lstrlib.js +++ b/src/lstrlib.js @@ -75,6 +75,7 @@ const { } = require('./lauxlib.js'); const lualib = require('./lualib.js'); const { + luastring_eq, luastring_indexOf, to_jsstring, to_luastring @@ -1061,21 +1062,7 @@ const end_capture = function(ms, s, p) { /* Compare the elements of arrays 'a' and 'b' to see if they contain the same elements */ const array_cmp = function(a, ai, b, bi, len) { - if (len === 0) - return true; - let aj = ai+len; - loop: for (;;) { - ai = luastring_indexOf(a, b[bi], ai); - if (ai === -1 || ai >= aj) - return false; - for (let j = 1; j < len; j++) { - if (a[ai+j] !== b[bi+j]) { - ai++; - continue loop; - } - } - return true; - } + return luastring_eq(a.subarray(ai, ai+len), b.subarray(bi, bi+len)); }; const match_capture = function(ms, s, l) { @@ -1249,17 +1236,11 @@ const find_subarray = function(arr, subarr, from_index) { if (sl === 0) return i; - loop: for (;;) { - i = arr.indexOf(subarr[0], i); - if (i === -1) break; - for (let j = 1; j < sl; j++) { - if (arr[i+j] !== subarr[j]) { - i++; - continue loop; - } - } - return i; + for (; (i = arr.indexOf(subarr[0], i)) !== -1; i++) { + if (luastring_eq(arr.subarray(i, i+sl), subarr)) + return i; } + return -1; }; |