diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-04-21 13:17:24 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-04-21 13:17:24 -0700 |
commit | e1de4d430a370a9cbf72e949307639b50f399c75 (patch) | |
tree | 2957bcdc35d8d52c9d302854620ca9584507d8e3 /src/parseTools.js | |
parent | 3d4cc9e9312a954a79ee7df7ffe0fc0495c37b24 (diff) |
line-specific exceptions to SAFE_HEAP
Diffstat (limited to 'src/parseTools.js')
-rw-r--r-- | src/parseTools.js | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index fde8e703..ca6a44b2 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -577,7 +577,7 @@ function indentify(text, indent) { function correctSpecificSign() { assert(!(CORRECT_SIGNS === 2 && !Debugging.on), 'Need debugging for line-specific corrections'); - return CORRECT_SIGNS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_SIGNS_LINES; + return CORRECT_SIGNS === 2 && Framework.currItem && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_SIGNS_LINES; } function correctSigns() { return CORRECT_SIGNS === 1 || correctSpecificSign(); @@ -585,7 +585,7 @@ function correctSigns() { function correctSpecificOverflow() { assert(!(CORRECT_OVERFLOWS === 2 && !Debugging.on), 'Need debugging for line-specific corrections'); - return CORRECT_OVERFLOWS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_OVERFLOWS_LINES; + return CORRECT_OVERFLOWS === 2 && Framework.currItem && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_OVERFLOWS_LINES; } function correctOverflows() { return CORRECT_OVERFLOWS === 1 || correctSpecificOverflow(); @@ -593,12 +593,20 @@ function correctOverflows() { function correctSpecificRounding() { assert(!(CORRECT_ROUNDINGS === 2 && !Debugging.on), 'Need debugging for line-specific corrections'); - return CORRECT_ROUNDINGS === 2 && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_ROUNDINGS_LINES; + return CORRECT_ROUNDINGS === 2 && Framework.currItem && Debugging.getIdentifier(Framework.currItem.lineNum) in CORRECT_ROUNDINGS_LINES; } function correctRoundings() { return CORRECT_ROUNDINGS === 1 || correctSpecificRounding(); } +function checkSpecificSafeHeap() { + assert(!(SAFE_HEAP === 2 && !Debugging.on), 'Need debugging for line-specific checks'); + return SAFE_HEAP === 2 && Framework.currItem && !(Debugging.getIdentifier(Framework.currItem.lineNum) in SAFE_HEAP_LINES); +} +function checkSafeHeap() { + return SAFE_HEAP === 1 || checkSpecificSafeHeap(); +} + // See makeSetValue function makeGetValue(ptr, pos, type, noNeedFirst) { @@ -614,7 +622,7 @@ function makeGetValue(ptr, pos, type, noNeedFirst) { var offset = calcFastOffset(ptr, pos, noNeedFirst); if (SAFE_HEAP) { if (type !== 'null') type = '"' + safeQuote(type) + '"'; - return 'SAFE_HEAP_LOAD(' + offset + ', ' + type + ')'; + return 'SAFE_HEAP_LOAD(' + offset + ', ' + type + ', ' + !checkSafeHeap() + ')'; } else { return makeGetSlabs(ptr, type)[0] + '[' + offset + ']'; } @@ -651,7 +659,7 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst) { var offset = calcFastOffset(ptr, pos, noNeedFirst); if (SAFE_HEAP) { if (type !== 'null') type = '"' + safeQuote(type) + '"'; - return 'SAFE_HEAP_STORE(' + offset + ', ' + value + ', ' + type + ');'; + return 'SAFE_HEAP_STORE(' + offset + ', ' + value + ', ' + type + ', ' + !checkSafeHeap() + ');'; } else { return makeGetSlabs(ptr, type, true).map(function(slab) { return slab + '[' + offset + ']=' + value }).join('; ') + ';'; } |