From 4c404c404c281f1872f0283acbaee97657f3e08b Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Sun, 12 Mar 2017 16:01:08 +0100 Subject: [Strings] lapi.js, lcode.js, llex.js, lparser.js --- src/lapi.js | 12 ++++++------ src/lcode.js | 4 ++-- src/llex.js | 13 +++++++++---- src/lparser.js | 8 ++++---- src/lundump.js | 2 +- tests/C/Makefile | 17 ----------------- tests/C/lua_call-jsclosure.c | 30 ------------------------------ tests/C/lua_call.c | 28 ---------------------------- tests/C/lua_pop.c | 24 ------------------------ tests/C/lua_pushboolean.c | 21 --------------------- tests/C/lua_pushcclosure-light.c | 25 ------------------------- tests/C/lua_pushinteger.c | 21 --------------------- tests/C/lua_pushnil.c | 21 --------------------- tests/C/lua_pushnumber.c | 21 --------------------- tests/C/lua_pushstring.c | 21 --------------------- tests/C/lua_pushvalue.c | 24 ------------------------ tests/C/lua_setgettable.c | 31 ------------------------------- 17 files changed, 22 insertions(+), 301 deletions(-) delete mode 100644 tests/C/Makefile delete mode 100644 tests/C/lua_call-jsclosure.c delete mode 100644 tests/C/lua_call.c delete mode 100644 tests/C/lua_pop.c delete mode 100644 tests/C/lua_pushboolean.c delete mode 100644 tests/C/lua_pushcclosure-light.c delete mode 100644 tests/C/lua_pushinteger.c delete mode 100644 tests/C/lua_pushnil.c delete mode 100644 tests/C/lua_pushnumber.c delete mode 100644 tests/C/lua_pushstring.c delete mode 100644 tests/C/lua_pushvalue.c delete mode 100644 tests/C/lua_setgettable.c diff --git a/src/lapi.js b/src/lapi.js index 2fbd777..79cd6fb 100644 --- a/src/lapi.js +++ b/src/lapi.js @@ -217,7 +217,7 @@ const lua_pushlstring = function(L, s, len) { // TODO: embedded \0 assert(typeof s === "string"); assert(typeof len === "number"); - let ts = len === 0 ? new TValue(CT.LUA_TLNGSTR, "") : new TValue(CT.LUA_TLNGSTR, s.substr(0, len)); + let ts = len === 0 ? L.l_G.intern(lua.to_luastring("")) : L.l_G.intern(lua.to_luastring(s.substr(0, len))); L.stack[L.top++] = ts; assert(L.top <= L.ci.top, "stack overflow"); @@ -229,7 +229,7 @@ const lua_pushstring = function (L, s) { if (typeof s !== "string") L.stack[L.top] = ldo.nil; else { - let ts = new TValue(CT.LUA_TLNGSTR, s); + let ts = L.l_G.intern(lua.to_luastring(s)); L.stack[L.top] = ts; s = ts.value; } @@ -307,7 +307,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) { - let str = new TValue(CT.LUA_TLNGSTR, k); + let str = L.l_G.intern(lua.to_luastring(k)); assert(1 < L.top - L.ci.funcOff, "not enough elements in the stack"); @@ -384,7 +384,7 @@ const lua_rawset = function(L, idx) { */ const auxgetstr = function(L, t, k) { - let str = new TValue(CT.LUA_TLNGSTR, k); + let str = L.l_G.intern(lua.to_luastring(k)); let slot = t.__index(t, k); if (t.ttistable() && !slot.ttisnil()) { L.stack[L.top++] = slot; @@ -537,7 +537,7 @@ const lua_tolstring = function(L, idx) { if (!o.ttisstring() && !o.ttisnumber()) return null; - return `${o.value}`; + return o.ttisstring() ? String.fromCharCode(...o.value) : `${o.value}`; }; const lua_tostring = lua_tolstring; @@ -801,7 +801,7 @@ const lua_concat = function(L, n) { if (n >= 2) lvm.luaV_concat(L, n); else if (n === 0) { - L.stack[L.top++] = new TValue("", CT.LUA_TLNGSTR); + L.stack[L.top++] = L.l_G.intern(lua.to_luastring("")); assert(L.top <= L.ci.top, "stack overflow"); } }; diff --git a/src/lcode.js b/src/lcode.js index fedf1e2..c0ca1ff 100644 --- a/src/lcode.js +++ b/src/lcode.js @@ -513,7 +513,7 @@ const luaK_stringK = function(fs, s) { ** are no "precision" problems. */ const luaK_intK = function(fs, n) { - let k = new TValue(CT.LUA_TLNGSTR, `${n}`); + let k = new TValue(CT.LUA_TLNGSTR, lua.to_luastring(`${n}`)); let o = new TValue(CT.LUA_TNUMINT, n); return addk(fs, k, o); }; @@ -540,7 +540,7 @@ const boolK = function(fs, b) { ** Add nil to list of constants and return its index. */ const nilK = function(fs) { - return addk(fs, new TValue(CT.LUA_TLNGSTR, `null`), new TValue(CT.LUA_TNIL, null)); + return addk(fs, new TValue(CT.LUA_TLNGSTR, lua.to_luastring(`null`)), new TValue(CT.LUA_TNIL, null)); }; /* diff --git a/src/llex.js b/src/llex.js index 2e79066..fc3603f 100644 --- a/src/llex.js +++ b/src/llex.js @@ -218,7 +218,7 @@ const luaX_setinput = function(L, ls, z, source, firstchar) { ls.linenumber = 1; ls.lastline = 1; ls.source = source; - ls.envn = new TValue(CT.LUA_TLNGSTR, "_ENV"); + ls.envn = L.l_G.intern(lua.to_luastring("_ENV")); }; const check_next1 = function(ls, c) { @@ -356,7 +356,7 @@ const read_long_string = function(ls, seminfo, sep) { } if (seminfo) - seminfo.ts = new TValue(CT.LUA_TLNGSTR, ls.buff.buffer.slice(2 + sep).join('')); + seminfo.ts = new TValue(CT.LUA_TLNGSTR, lua.to_luastring(ls.buff.buffer.slice(2 + sep).join(''))); }; const esccheck = function(ls, c, msg) { @@ -478,7 +478,12 @@ const read_string = function(ls, del, seminfo) { } } save_and_next(ls); /* skip delimiter */ - seminfo.ts = new TValue(CT.LUA_TLNGSTR, ls.buff.buffer.slice(1, ls.buff.buffer.length-1).join('')); + seminfo.ts = new TValue( + CT.LUA_TLNGSTR, + lua.to_luastring( + ls.buff.buffer.slice(1, ls.buff.buffer.length-1).join('') + ) + ); }; const isreserved = function(w) { @@ -589,7 +594,7 @@ const llex = function(ls, seminfo) { save_and_next(ls); } while (ljstype.lislalnum(ls.current)); - let ts = new TValue(CT.LUA_TLNGSTR, ls.buff.buffer.join('')); + let ts = new TValue(CT.LUA_TLNGSTR, lua.to_luastring(ls.buff.buffer.join(''))); seminfo.ts = ts; let kidx = luaX_tokens.slice(0, 22).indexOf(ts.value); if (kidx >= 0) /* reserved word? */ diff --git a/src/lparser.js b/src/lparser.js index 7fa3f16..42337cc 100644 --- a/src/lparser.js +++ b/src/lparser.js @@ -248,7 +248,7 @@ const new_localvar = function(ls, name) { }; const new_localvarliteral = function(ls, name) { - new_localvar(ls, new TValue(lua.CT.LUA_TLNGSTR, name)); + new_localvar(ls, new TValue(lua.CT.LUA_TLNGSTR, lua.to_luastring(name))); }; const getlocvar = function(fs, i) { @@ -479,7 +479,7 @@ const enterblock = function(fs, bl, isloop) { ** create a label named 'break' to resolve break statements */ const breaklabel = function(ls) { - let n = new TValue(lua.CT.LUA_TLNGSTR, "break"); + let n = new TValue(lua.CT.LUA_TLNGSTR, lua.to_luastring("break")); let l = newlabelentry(ls, ls.dyd.label, n, 0, ls.fs.pc); findgotos(ls, ls.dyd.label.arr[l]); }; @@ -1141,7 +1141,7 @@ const gotostat = function(ls, pc) { label = str_checkname(ls); else { llex.luaX_next(ls); /* skip break */ - label = new TValue(lua.CT.LUA_TLNGSTR, "break"); + label = new TValue(lua.CT.LUA_TLNGSTR, lua.to_luastring("break")); } let g = newlabelentry(ls, ls.dyd.gt, label, line, pc); findlabel(ls, g); /* close it if label already defined */ @@ -1547,7 +1547,7 @@ const luaY_parser = function(L, z, buff, dyd, name, firstchar) { lexstate.h = new Table(); /* create table for scanner */ L.stack[L.top++] = lexstate.h; funcstate.f = cl.p = new Proto(L); - funcstate.f.source = new TValue(lua.CT.LUA_TLNGSTR, name); + funcstate.f.source = new TValue(lua.CT.LUA_TLNGSTR, lua.to_luastring(name)); lexstate.buff = buff; lexstate.dyd = dyd; dyd.actvar.n = dyd.gt.n = dyd.label.n = 0; diff --git a/src/lundump.js b/src/lundump.js index d215c60..c44c847 100644 --- a/src/lundump.js +++ b/src/lundump.js @@ -80,7 +80,7 @@ class BytecodeParser { return null; } - let string = [];//new Uint8Array(); + let string = []; for (let i = 0; i < size; i++) string.push(this.readByte()); diff --git a/tests/C/Makefile b/tests/C/Makefile deleted file mode 100644 index 2b753be..0000000 --- a/tests/C/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -CC= gcc-6 -std=gnu99 -CFLAGS= -g -Wall -Wextra - -LIBS= -lm -llua - -all: - $(CC) $(CFLAGS) $(LIBS) lua_pushnil.c -o lua_pushnil.out - $(CC) $(CFLAGS) $(LIBS) lua_pushnumber.c -o lua_pushnumber.out - $(CC) $(CFLAGS) $(LIBS) lua_pushinteger.c -o lua_pushinteger.out - $(CC) $(CFLAGS) $(LIBS) lua_pushstring.c -o lua_pushstring.out - $(CC) $(CFLAGS) $(LIBS) lua_pushboolean.c -o lua_pushboolean.out - $(CC) $(CFLAGS) $(LIBS) lua_pushvalue.c -o lua_pushvalue.out - $(CC) $(CFLAGS) $(LIBS) lua_pushcclosure-light.c -o lua_pushcclosure-light.out - $(CC) $(CFLAGS) $(LIBS) lua_call.c -o lua_call.out - $(CC) $(CFLAGS) $(LIBS) lua_call-jsclosure.c -o lua_call-jsclosure.out - $(CC) $(CFLAGS) $(LIBS) lua_pop.c -o lua_pop.out - $(CC) $(CFLAGS) $(LIBS) lua_setgettable.c -o lua_setgettable.out \ No newline at end of file diff --git a/tests/C/lua_call-jsclosure.c b/tests/C/lua_call-jsclosure.c deleted file mode 100644 index 98fa739..0000000 --- a/tests/C/lua_call-jsclosure.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include -#include -#include -#include - -int func(lua_State *L) { - const char *s = lua_tostring(L, lua_upvalueindex(1)); - lua_pushstring(L, s); - return 1; -} - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushstring(L, "upvalue hello !"); - lua_pushcclosure(L, func, 1); - - lua_call(L, 0, 1); - - printf("Lua returned: %s\n", lua_tostring(L, -1)); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_call.c b/tests/C/lua_call.c deleted file mode 100644 index 3e0e406..0000000 --- a/tests/C/lua_call.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include -#include - -int func(lua_State *L) { - lua_pushstring(L, "hello"); - return 1; -} - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushcfunction(L, func); - - lua_call(L, 0, 1); - - printf("Lua returned: %s\n", lua_tostring(L, -1)); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pop.c b/tests/C/lua_pop.c deleted file mode 100644 index 06b8ef1..0000000 --- a/tests/C/lua_pop.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushstring(L, "hello"); - lua_pushstring(L, "world"); - - lua_pop(L, 1); - - printf("L->top(%d): %s\n", lua_gettop(L), lua_tostring(L, -1)); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushboolean.c b/tests/C/lua_pushboolean.c deleted file mode 100644 index d592691..0000000 --- a/tests/C/lua_pushboolean.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushboolean(L, 1); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L))); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushcclosure-light.c b/tests/C/lua_pushcclosure-light.c deleted file mode 100644 index a891450..0000000 --- a/tests/C/lua_pushcclosure-light.c +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include -#include -#include - -int func(lua_State *L) { - return 0; -} - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushcclosure(L, func, 0); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L))); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushinteger.c b/tests/C/lua_pushinteger.c deleted file mode 100644 index da134b6..0000000 --- a/tests/C/lua_pushinteger.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushinteger(L, 10); - - printf("L->top(%d): type %s, value %ld\n", lua_gettop(L), luaL_typename(L, lua_gettop(L)), lua_tointeger(L, -1)); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushnil.c b/tests/C/lua_pushnil.c deleted file mode 100644 index bb31246..0000000 --- a/tests/C/lua_pushnil.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushnil(L); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L))); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushnumber.c b/tests/C/lua_pushnumber.c deleted file mode 100644 index 697258f..0000000 --- a/tests/C/lua_pushnumber.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushnumber(L, 10.5); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L))); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushstring.c b/tests/C/lua_pushstring.c deleted file mode 100644 index fc675c7..0000000 --- a/tests/C/lua_pushstring.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushstring(L, "hello"); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L))); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_pushvalue.c b/tests/C/lua_pushvalue.c deleted file mode 100644 index 055ee23..0000000 --- a/tests/C/lua_pushvalue.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_pushstring(L, "hello"); - - lua_pushvalue(L, -1); - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, -1)); - printf("L->top - 1(%d): %s\n", lua_gettop(L) - 1, luaL_typename(L, -2)); - - lua_close(L); - - return 0; - -} \ No newline at end of file diff --git a/tests/C/lua_setgettable.c b/tests/C/lua_setgettable.c deleted file mode 100644 index af3d9f8..0000000 --- a/tests/C/lua_setgettable.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include -#include -#include - -int main(void) { - - lua_State *L = luaL_newstate(); - - luaL_openlibs(L); - - lua_newtable(L); - - lua_pushstring(L, "key"); - lua_pushstring(L, "value"); - - lua_settable(L, -3); - - lua_pushstring(L, "key"); - lua_gettable(L, -2); - - - printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, -1)); - printf("Table has value: %s\n", lua_tostring(L, -1)); - - lua_close(L); - - return 0; - -} \ No newline at end of file -- cgit v1.2.3-70-g09d2