aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-08-05 18:02:55 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-08-05 18:02:55 -0700
commitb63082e4b35a2001bb3029c1fab3e403445feaec (patch)
tree2c7e95a2107a31044bc7728c5ae0fac27028140e
parent15d64a10cc64d2da2ee3d6e2b941c8707765d751 (diff)
improve Debugging.getIdentifier
-rw-r--r--src/modules.js17
-rw-r--r--src/parseTools.js20
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)) {