From 36e3fb39cf5355fbc3c4d897c6a8bafbb1bee2a9 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Tue, 30 Aug 2011 12:53:07 -0400 Subject: [PATCH] trying to fix stack tracing --- js-assembler/package.rkt | 21 +++++++++++++++++++ js-assembler/runtime-src/baselib-contmarks.js | 5 +++-- js-assembler/runtime-src/runtime.js | 9 ++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/js-assembler/package.rkt b/js-assembler/package.rkt index f991b07..05c228e 100644 --- a/js-assembler/package.rkt +++ b/js-assembler/package.rkt @@ -419,12 +419,33 @@ var invokeMainModule = function() { } }, function(MACHINE, e) { + var contMarkSet, appNames, i, appName; // On main module invokation failure if (console && console.log) { console.log(e.stack || e); } + MACHINE.params.currentErrorDisplayer( MACHINE, $(plt.baselib.format.toDomNode(e.stack || e)).css('color', 'red')); + + if (e.hasOwnProperty('racketError') && + plt.baselib.exceptions.isExn(e.racketError)) { + contMarkSet = plt.baselib.exceptions.exnContMarks(e.racketError); + if (contMarkSet) { + appNames = contMarkSet.ref(plt.runtime.getTracedAppKey(MACHINE)); + while (plt.baselib.lists.isPair(appNames)) { + appName = appNames.first; + console.log(appName); + MACHINE.params.currentErrorDisplayer( + MACHINE, + $('
').text(' at ' + appName.elts[0] + + ', line ' + appName.elts[2] + + ', column ' + appName.elts[3]) + .css('color', 'red')); + appNames = appNames.rest; + } + } + } })}, function() { // On module loading failure diff --git a/js-assembler/runtime-src/baselib-contmarks.js b/js-assembler/runtime-src/baselib-contmarks.js index 259daa0..c836ac7 100644 --- a/js-assembler/runtime-src/baselib-contmarks.js +++ b/js-assembler/runtime-src/baselib-contmarks.js @@ -28,9 +28,10 @@ ContinuationMarkSet.prototype.ref = function(key) { var i, j; var result = []; + var kvlist; for (i = 0; i < this.kvlists.length; i++) { - var kvlist = this.kvlists[i]; - for (j = 0; j < this.kvlist.length; j++) { + kvlist = this.kvlists[i]; + for (j = 0; j < kvlist.length; j++) { if (baselib.equality.equals(kvlist[j][0], key)) { result.push(kvlist[j][1]); } diff --git a/js-assembler/runtime-src/runtime.js b/js-assembler/runtime-src/runtime.js index 1a888d7..6a2fd27 100644 --- a/js-assembler/runtime-src/runtime.js +++ b/js-assembler/runtime-src/runtime.js @@ -509,6 +509,14 @@ + // Try to get the continuation mark key used for procedure application tracing. + var getTracedAppKey = function(MACHINE) { + if (MACHINE.modules['whalesong/lang/private/traced-app.rkt']) { + return MACHINE.modules['whalesong/lang/private/traced-app.rkt'].namespace['traced-app-key']; + } + return undefined; + }; + @@ -746,5 +754,6 @@ exports['Struct'] = Struct; exports['StructType'] = StructType; + exports['getTracedAppKey'] = getTracedAppKey; }(this.plt, this.plt.baselib)); \ No newline at end of file