aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-10-12 20:46:11 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-12 20:51:01 -0700
commit5e6b5e313cb2fa9c699934df72a7c975d1d02ad2 (patch)
tree5efd7ea54a370f4b3012ac198424db2d91a59ed1 /src
parent5e00090b128125f8d6de1f69f2983b9416dc8347 (diff)
demangle stacks in abort(), using new stackTrace utility
Diffstat (limited to 'src')
-rw-r--r--src/library.js2
-rw-r--r--src/postamble.js2
-rw-r--r--src/preamble.js12
3 files changed, 12 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js
index 5e71b087..aeebe8bb 100644
--- a/src/library.js
+++ b/src/library.js
@@ -4296,7 +4296,7 @@ LibraryManager.library = {
},
llvm_trap: function() {
- throw 'trap! ' + new Error().stack;
+ abort('trap!');
},
__assert_fail: function(condition, filename, line, func) {
diff --git a/src/postamble.js b/src/postamble.js
index 62edeeb6..d64fb220 100644
--- a/src/postamble.js
+++ b/src/postamble.js
@@ -180,7 +180,7 @@ function abort(text) {
ABORT = true;
EXITSTATUS = 1;
- throw 'abort() at ' + (new Error().stack);
+ throw 'abort() at ' + stackTrace();
}
Module['abort'] = Module.abort = abort;
diff --git a/src/preamble.js b/src/preamble.js
index 63fab34e..a85cf2f5 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -644,7 +644,7 @@ function demangle(func) {
try {
if (typeof func === 'number') func = Pointer_stringify(func);
if (func[0] !== '_') return func;
- if (func[1] !== '_') return func.substr(1); // C function
+ if (func[1] !== '_') return func; // C function
if (func[2] !== 'Z') return func;
var i = 3;
// params, etc.
@@ -747,10 +747,18 @@ function demangle(func) {
}
return parse();
} catch(e) {
- return func + '<demangle-err>' + e;
+ return func;
}
}
+function demangleAll(text) {
+ return text.replace(/__Z[\w\d_]+/, function(x) { var y = demangle(x); return x === y ? x : (x + ' (' + y + ')') });
+}
+
+function stackTrace() {
+ return demangleAll(new Error().stack);
+}
+
// Memory management
var PAGE_SIZE = 4096;