diff options
author | Benoit Giannangeli <giann008@gmail.com> | 2017-04-18 11:19:22 +0200 |
---|---|---|
committer | Benoit Giannangeli <giann008@gmail.com> | 2017-04-18 11:21:15 +0200 |
commit | 4f415e5ca594c5b60e6fa6315b69acb41273ee7e (patch) | |
tree | 625990bf30d2f07bb03063acd8e5f3c0f0eb5d5b /src | |
parent | 5f6d2e34f69d14c57e7f2964aa951c8dab4efc99 (diff) | |
download | fengari-4f415e5ca594c5b60e6fa6315b69acb41273ee7e.tar.gz fengari-4f415e5ca594c5b60e6fa6315b69acb41273ee7e.tar.bz2 fengari-4f415e5ca594c5b60e6fa6315b69acb41273ee7e.zip |
Fixed debug.getinfo bad name lookup
Diffstat (limited to 'src')
-rw-r--r-- | src/ldblib.js | 2 | ||||
-rw-r--r-- | src/ldebug.js | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/ldblib.js b/src/ldblib.js index 5c78724..dfc7819 100644 --- a/src/ldblib.js +++ b/src/ldblib.js @@ -153,7 +153,7 @@ const db_getinfo = function(L) { settabsi(L, lua.to_luastring("nparams"), ar.nparams); settabsb(L, lua.to_luastring("isvararg"), ar.isvararg); if (options.indexOf(char['n']) > - 1) { - settabss(L, lua.to_luastring("name"), ar.name ? ar.name.value : null); + settabss(L, lua.to_luastring("name"), ar.name ? ar.name : null); settabss(L, lua.to_luastring("namewhat"), ar.namewhat ? ar.namewhat : null); } if (options.indexOf(char['t']) > - 1) diff --git a/src/ldebug.js b/src/ldebug.js index 0a0e22c..d769500 100644 --- a/src/ldebug.js +++ b/src/ldebug.js @@ -79,10 +79,11 @@ const lua_getstack = function(L, level, ar) { return status; }; +// TODO: returns TValue or String array ? const upvalname = function(p, uv) { assert(uv < p.upvalues.length); let s = p.upvalues[uv].name; - if (s === null) return "?".charCodeAt(0); + if (s === null) return ["?".charCodeAt(0)]; return s; }; @@ -301,8 +302,8 @@ const kname = function(p, pc, c) { /* else no reasonable name found */ } else { /* 'c' is a register */ let what = getobjname(p, pc, c); /* search for 'c' */ - if (what && what.name[0] === 'c'.charCodeAt(0)) { - return what; + if (what && what.funcname[0] === 'c'.charCodeAt(0)) { /* found a constant name? */ + return what; /* 'name' already filled */ } /* else no reasonable name found */ } @@ -393,8 +394,9 @@ const getobjname = function(p, lastpc, reg) { let k = i.C; /* key index */ let t = i.B; /* table index */ let vn = op === 'OP_GETTABLE' ? lfunc.luaF_getlocalname(p, t + 1, pc) : upvalname(p, t); - r.name = kname(p, pc, k); - r.funcname = vn && vn === lua.to_luastring("_ENV") ? lua.to_luastring("global") : lua.to_luastring("field"); + vn = vn ? vn.jsstring() : null; + r.name = kname(p, pc, k).name; + r.funcname = vn && vn === "_ENV" ? lua.to_luastring("global") : lua.to_luastring("field"); return r; } case 'OP_GETUPVAL': { @@ -414,7 +416,7 @@ const getobjname = function(p, lastpc, reg) { } case 'OP_SELF': { let k = i.C; - r.name = kname(p, pc, k); + r.name = kname(p, pc, k).name; r.funcname = lua.to_luastring("method"); return r; } |