aboutsummaryrefslogtreecommitdiff
path: root/src/parseTools.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-04-21 13:17:24 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-04-21 13:17:24 -0700
commite1de4d430a370a9cbf72e949307639b50f399c75 (patch)
tree2957bcdc35d8d52c9d302854620ca9584507d8e3 /src/parseTools.js
parent3d4cc9e9312a954a79ee7df7ffe0fc0495c37b24 (diff)
line-specific exceptions to SAFE_HEAP
Diffstat (limited to 'src/parseTools.js')
-rw-r--r--src/parseTools.js18
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('; ') + ';';
}