diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-10-12 16:56:21 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-10-12 16:56:21 -0700 |
commit | 0726c459a15ca35c4f3edb5cbd5b84eb790536a0 (patch) | |
tree | bc68ed3cf615f81ab8b24a7dd4d6bf8e170476f1 /src | |
parent | ea871e65dd75ef5a12a8700ce4b6adba5a2f6946 (diff) |
support demangling const
Diffstat (limited to 'src')
-rw-r--r-- | src/preamble.js | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/preamble.js b/src/preamble.js index 016248ea..aa0787a0 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -646,17 +646,26 @@ function demangle(func) { if (func[0] !== '_') return func; if (func[1] !== '_') return func.substr(1); // C function if (func[2] !== 'Z') return func; - var i, ret; - if (func[3] !== 'N') { + var i = 3, ret, suffix = ''; + if (func[i] !== 'N') { // not namespaced - var m = /(\d+)([^\d].*)/.exec(func.substr(3)); + if (func[i] === 'K') { + suffix = ' const'; + i++; + } + var m = /(\d+)([^\d].*)/.exec(func.substr(i)); if (!m) return func; var size = parseInt(m[1]); - i = 3 + size.toString().length + size; + i += size.toString().length + size; ret = m[2].substr(0, size); } else { // namespaced N-E - var i = 4, ret = []; + i++; + if (func[i] === 'K') { + suffix = ' const'; + i++; + } + var ret = []; while (func[i] !== 'E') { var size = parseInt(func.substr(i)); var pre = size.toString().length; @@ -724,7 +733,7 @@ function demangle(func) { if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) return rawList ? list : ret + flushList(); } - return parse(ret); + return parse(ret) + suffix; } catch(e) { return func + '<demangle-err>' + e; } |