aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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;