aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-10-12 16:56:21 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-12 16:56:21 -0700
commit0726c459a15ca35c4f3edb5cbd5b84eb790536a0 (patch)
treebc68ed3cf615f81ab8b24a7dd4d6bf8e170476f1 /src
parentea871e65dd75ef5a12a8700ce4b6adba5a2f6946 (diff)
support demangling const
Diffstat (limited to 'src')
-rw-r--r--src/preamble.js21
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;
}