aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2017-06-09 13:01:21 +1000
committerdaurnimator <quae@daurnimator.com>2017-06-09 13:01:21 +1000
commit74dd47160960b3f0faa13dd1b61b64af69fde02e (patch)
treefee2730a670c4526c1c927230765be3dce49fc95
parent9b74a453e4a48f0c2028bc15b2c5bdaee6fcd5c7 (diff)
downloadfengari-74dd47160960b3f0faa13dd1b61b64af69fde02e.tar.gz
fengari-74dd47160960b3f0faa13dd1b61b64af69fde02e.tar.bz2
fengari-74dd47160960b3f0faa13dd1b61b64af69fde02e.zip
Add is_luastring function instead of using Array.isArray directly
-rw-r--r--src/defs.js9
-rw-r--r--src/lapi.js16
-rw-r--r--src/lstring.js2
-rw-r--r--src/lstrlib.js1
-rw-r--r--src/lundump.js2
5 files changed, 17 insertions, 13 deletions
diff --git a/src/defs.js b/src/defs.js
index 9e0fa5c..a125c34 100644
--- a/src/defs.js
+++ b/src/defs.js
@@ -132,8 +132,12 @@ class lua_Debug {
}
+const is_luastring = function(s) {
+ return Array.isArray(s);
+};
+
const to_jsstring = function(value, from, to) {
- assert(Array.isArray(value), "jsstring expect a array of bytes");
+ assert(is_luastring(value), "jsstring expect a array of bytes");
let u0, u1, u2, u3, u4, u5;
let idx = 0;
@@ -181,7 +185,7 @@ const to_luastring = function(str, cache) {
if (cache) {
let cached = to_luastring_cache[str];
- if (Array.isArray(cached)) return cached;
+ if (is_luastring(cached)) return cached;
}
let outU8Array = [];
@@ -403,5 +407,6 @@ module.exports.constant_types = constant_types;
module.exports.lua_Debug = lua_Debug;
module.exports.lua_upvalueindex = lua_upvalueindex;
module.exports.thread_status = thread_status;
+module.exports.is_luastring = is_luastring;
module.exports.to_jsstring = to_jsstring;
module.exports.to_luastring = to_luastring;
diff --git a/src/lapi.js b/src/lapi.js
index 4b5be04..1971cd7 100644
--- a/src/lapi.js
+++ b/src/lapi.js
@@ -236,7 +236,7 @@ const lua_pushlstring = function(L, s, len) {
if (len === 0) {
ts = lstring.luaS_bless(L, []);
} else {
- assert(Array.isArray(s), "lua_pushlstring expects array of byte");
+ assert(defs.is_luastring(s), "lua_pushlstring expects array of byte");
ts = lstring.luaS_bless(L, s.slice(0, len));
}
lobject.pushsvalue2s(L, ts);
@@ -246,7 +246,7 @@ const lua_pushlstring = function(L, s, len) {
};
const lua_pushstring = function (L, s) {
- assert(Array.isArray(s) || s === undefined || s === null, "lua_pushstring expects array of byte");
+ assert(defs.is_luastring(s) || s === undefined || s === null, "lua_pushstring expects array of byte");
if (s === undefined || s === null) {
L.stack[L.top] = new TValue(CT.LUA_TNIL, null);
@@ -262,12 +262,12 @@ const lua_pushstring = function (L, s) {
};
const lua_pushvfstring = function (L, fmt, argp) {
- assert(Array.isArray(fmt));
+ assert(defs.is_luastring(fmt));
return lobject.luaO_pushvfstring(L, fmt, argp);
};
const lua_pushfstring = function (L, fmt, ...argp) {
- assert(Array.isArray(fmt));
+ assert(defs.is_luastring(fmt));
return lobject.luaO_pushvfstring(L, fmt, argp);
};
@@ -350,7 +350,7 @@ const lua_pushglobaltable = function(L) {
** t[k] = value at the top of the stack (where 'k' is a string)
*/
const auxsetstr = function(L, t, k) {
- assert(Array.isArray(k), "key must be an array of bytes");
+ assert(defs.is_luastring(k), "key must be an array of bytes");
let str = lstring.luaS_new(L, k);
assert(1 < L.top - L.ci.funcOff, "not enough elements in the stack");
@@ -464,7 +464,7 @@ const lua_rawsetp = function(L, idx, p) {
*/
const auxgetstr = function(L, t, k) {
- assert(Array.isArray(k), "key must be an array of bytes");
+ assert(defs.is_luastring(k), "key must be an array of bytes");
let str = lstring.luaS_new(L, k);
lobject.pushsvalue2s(L, str);
assert(L.top <= L.ci.top, "stack overflow");
@@ -908,8 +908,8 @@ const lua_arith = function(L, op) {
*/
const lua_load = function(L, reader, data, chunkname, mode) {
- assert(Array.isArray(chunkname), "lua_load expect an array of byte as chunkname");
- assert(mode ? Array.isArray(mode) : true, "lua_load expect an array of byte as mode");
+ assert(defs.is_luastring(chunkname), "lua_load expect an array of byte as chunkname");
+ assert(mode ? defs.is_luastring(mode) : true, "lua_load expect an array of byte as mode");
if (!chunkname) chunkname = [defs.char["?"]];
let z = new lzio.ZIO(L, reader, data);
let status = ldo.luaD_protectedparser(L, z, chunkname, mode);
diff --git a/src/lstring.js b/src/lstring.js
index a5ee669..185582b 100644
--- a/src/lstring.js
+++ b/src/lstring.js
@@ -30,7 +30,7 @@ const luaS_eqlngstr = function(a, b) {
/* converts strings (arrays) to a consistent map key
make sure this doesn't conflict with any of the anti-collision strategies in ltable */
const luaS_hash = function(str) {
- assert(Array.isArray(str));
+ assert(defs.is_luastring(str));
return str.map(e => `${e}|`).join('');
};
diff --git a/src/lstrlib.js b/src/lstrlib.js
index 56817a0..0fb8631 100644
--- a/src/lstrlib.js
+++ b/src/lstrlib.js
@@ -65,7 +65,6 @@ const str_char = function(L) {
};
const writer = function(L, b, size, B) {
- assert(Array.isArray(b));
B.push(...b.slice(0, size));
return 0;
};
diff --git a/src/lundump.js b/src/lundump.js
index 3f61cb6..946efa6 100644
--- a/src/lundump.js
+++ b/src/lundump.js
@@ -23,7 +23,7 @@ class BytecodeParser {
this.numberSize = 8;
assert(Z instanceof lzio.ZIO, "BytecodeParser only operates on a ZIO");
- assert(Array.isArray(name));
+ assert(defs.is_luastring(name));
if (name[0] == defs.char["@"] || name[0] == defs.char["="])
this.name = name.slice(1);