diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-08-05 18:02:55 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-08-05 18:02:55 -0700 |
commit | b63082e4b35a2001bb3029c1fab3e403445feaec (patch) | |
tree | 2c7e95a2107a31044bc7728c5ae0fac27028140e | |
parent | 15d64a10cc64d2da2ee3d6e2b941c8707765d751 (diff) |
improve Debugging.getIdentifier
-rw-r--r-- | src/modules.js | 17 | ||||
-rw-r--r-- | src/parseTools.js | 20 |
2 files changed, 24 insertions, 13 deletions
diff --git a/src/modules.js b/src/modules.js index 6b8d880a..e2509965 100644 --- a/src/modules.js +++ b/src/modules.js @@ -163,9 +163,20 @@ var Debugging = { getIdentifier: function(lineNum) { if (!this.on) return null; - var sourceFile = this.llvmLineToSourceFile[lineNum]; - if (!sourceFile) return null; - return sourceFile.split('/').slice(-1)[0] + ':' + this.llvmLineToSourceLine[lineNum]; + if (lineNum === undefined) { + lineNum = Framework.currItem.lineNum; + assert(lineNum !== undefined); + } + var approx = false; + var sourceFile; + while (lineNum >= 0) { + var sourceFile = this.llvmLineToSourceFile[lineNum]; + if (sourceFile) break; + lineNum--; + approx = true; + } + if (!sourceFile) return 'UNKNOWN'; + return sourceFile.split('/').slice(-1)[0] + ':' + (approx ? '~' : '') + this.llvmLineToSourceLine[lineNum]; } }; diff --git a/src/parseTools.js b/src/parseTools.js index a2fa67a3..0a795dfa 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -633,8 +633,8 @@ function indentify(text, indent) { function correctSpecificSign() { assert(!(CORRECT_SIGNS >= 2 && !Debugging.on), 'Need debugging for line-specific corrections'); if (!Framework.currItem) return false; - return (CORRECT_SIGNS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_SIGNS_LINES) || - (CORRECT_SIGNS === 3 && !(Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_SIGNS_LINES)); + return (CORRECT_SIGNS === 2 && Debugging.getIdentifier() in CORRECT_SIGNS_LINES) || + (CORRECT_SIGNS === 3 && !(Debugging.getIdentifier() in CORRECT_SIGNS_LINES)); } function correctSigns() { return CORRECT_SIGNS === 1 || correctSpecificSign(); @@ -643,8 +643,8 @@ function correctSigns() { function correctSpecificOverflow() { assert(!(CORRECT_OVERFLOWS >= 2 && !Debugging.on), 'Need debugging for line-specific corrections'); if (!Framework.currItem) return false; - return (CORRECT_OVERFLOWS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_OVERFLOWS_LINES) || - (CORRECT_OVERFLOWS === 3 && !(Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_OVERFLOWS_LINES)); + return (CORRECT_OVERFLOWS === 2 && Debugging.getIdentifier() in CORRECT_OVERFLOWS_LINES) || + (CORRECT_OVERFLOWS === 3 && !(Debugging.getIdentifier() in CORRECT_OVERFLOWS_LINES)); } function correctOverflows() { return CORRECT_OVERFLOWS === 1 || correctSpecificOverflow(); @@ -653,8 +653,8 @@ function correctOverflows() { function correctSpecificRounding() { assert(!(CORRECT_ROUNDINGS >= 2 && !Debugging.on), 'Need debugging for line-specific corrections'); if (!Framework.currItem) return false; - return (CORRECT_ROUNDINGS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_ROUNDINGS_LINES) || - (CORRECT_ROUNDINGS === 3 && !(Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_ROUNDINGS_LINES)); + return (CORRECT_ROUNDINGS === 2 && Debugging.getIdentifier() in CORRECT_ROUNDINGS_LINES) || + (CORRECT_ROUNDINGS === 3 && !(Debugging.getIdentifier() in CORRECT_ROUNDINGS_LINES)); } function correctRoundings() { return CORRECT_ROUNDINGS === 1 || correctSpecificRounding(); @@ -663,8 +663,8 @@ function correctRoundings() { function checkSpecificSafeHeap() { assert(!(SAFE_HEAP >= 2 && !Debugging.on), 'Need debugging for line-specific checks'); if (!Framework.currItem) return false; - return (SAFE_HEAP === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in SAFE_HEAP_LINES) || - (SAFE_HEAP === 3 && !(Debugging.getIdentifier(Framework.currItem.lineNum) in SAFE_HEAP_LINES)); + return (SAFE_HEAP === 2 && Debugging.getIdentifier() in SAFE_HEAP_LINES) || + (SAFE_HEAP === 3 && !(Debugging.getIdentifier() in SAFE_HEAP_LINES)); } function checkSafeHeap() { return SAFE_HEAP === 1 || checkSpecificSafeHeap(); @@ -1026,7 +1026,7 @@ function handleOverflow(text, bits) { var correct = correctOverflows(); warn(!correct || bits <= 32, 'Cannot correct overflows of this many bits: ' + bits + ' at line ' + Framework.currItem.lineNum); if (CHECK_OVERFLOWS) return 'CHECK_OVERFLOW(' + text + ', ' + bits + ', ' + Math.floor(correctSpecificOverflow() && !AUTO_OPTIMIZE) + ( - AUTO_OPTIMIZE ? ', "' + Debugging.getIdentifier(Framework.currItem.lineNum) + '"' : '' + AUTO_OPTIMIZE ? ', "' + Debugging.getIdentifier() + '"' : '' ) + ')'; if (!correct) return text; if (bits <= 32) { @@ -1066,7 +1066,7 @@ function makeSignOp(value, type, op) { if (type in Runtime.INT_TYPES) { bits = parseInt(type.substr(1)); full = op + 'Sign(' + value + ', ' + bits + ', ' + Math.floor(correctSpecificSign() && !AUTO_OPTIMIZE) + ( - AUTO_OPTIMIZE ? ', "' + Debugging.getIdentifier(Framework.currItem.lineNum) + '"' : '' + AUTO_OPTIMIZE ? ', "' + Debugging.getIdentifier() + '"' : '' ) + ')'; // Always sign/unsign constants at compile time, regardless of CHECK/CORRECT if (isNumber(value)) { |