From b9d07132efcadde006a07eff7bd5ad27b4a6bd2e Mon Sep 17 00:00:00 2001 From: daurnimator Date: Wed, 12 Apr 2017 19:13:39 +1000 Subject: Try CLI input with 'return' prepended --- tests/manual-tests/lua-cli.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'tests/manual-tests') diff --git a/tests/manual-tests/lua-cli.js b/tests/manual-tests/lua-cli.js index 6c7801c..6938a8b 100755 --- a/tests/manual-tests/lua-cli.js +++ b/tests/manual-tests/lua-cli.js @@ -12,6 +12,8 @@ readlineSync.setDefaultOptions({ prompt: '> ' }); +const stdin = lua.to_luastring("=stdin"); + const L = lauxlib.luaL_newstate(); linit.luaL_openlibs(L); @@ -24,10 +26,26 @@ for (;;) { if (input.length === 0) continue; - let buffer = lua.to_luastring(input); - if (lauxlib.luaL_loadbuffer(L, buffer, buffer.length, lua.to_luastring("=stdin")) - || lapi.lua_pcall(L, 0, 0, 0)) { + let status; + { + let buffer = lua.to_luastring("return " + input); + status = lauxlib.luaL_loadbuffer(L, buffer, buffer.length, stdin); + } + if (status !== lua.thread_status.LUA_OK) { + lapi.lua_pop(L, 1); + let buffer = lua.to_luastring(input); + if (lauxlib.luaL_loadbuffer(L, buffer, buffer.length, stdin) === lua.thread_status.LUA_OK) { + status = lua.thread_status.LUA_OK; + } + } + if (status !== lua.thread_status.LUA_OK) { lauxlib.lua_writestringerror(`${lapi.lua_tojsstring(L, -1)}\n`); + continue; + } + if (lapi.lua_pcall(L, 0, 0, 0) !== lua.thread_status.LUA_OK) { + lauxlib.lua_writestringerror(`${lapi.lua_tojsstring(L, -1)}\n`); + lapi.lua_settop(L, 0); + continue; } lapi.lua_settop(L, 0); /* remove eventual returns */ } -- cgit v1.2.3-70-g09d2