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 | |
parent | ea871e65dd75ef5a12a8700ce4b6adba5a2f6946 (diff) |
support demangling const
-rw-r--r-- | src/preamble.js | 21 | ||||
-rw-r--r-- | tests/test_other.py | 1 |
2 files changed, 16 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; } diff --git a/tests/test_other.py b/tests/test_other.py index b1583b2c..cbf8f7e9 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -1921,6 +1921,7 @@ done. EM_ASM(Module.print(demangle('__Z3FooIiEvv'))); EM_ASM(Module.print(demangle('__Z3FooIidEvi'))); EM_ASM(Module.print(demangle('__ZN3Foo3BarILi5EEEvv'))); + EM_ASM(Module.print(demangle('__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib'))); return 0; } |