aboutsummaryrefslogtreecommitdiff
path: root/src/parser.js
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-08-28 11:07:40 -0700
committeralon@honor <none@none>2010-08-28 11:07:40 -0700
commit926940a96b315021196dc79f5f9664ecc51dfbb4 (patch)
treeebad4b97147c82ef216025d184ed20731add6fcc /src/parser.js
parent47680a7bcaacad06a48555fe50aebf99ebd21937 (diff)
debug cleanup
Diffstat (limited to 'src/parser.js')
-rw-r--r--src/parser.js40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/parser.js b/src/parser.js
index 4a5fc3e9..6ad40d77 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -13,7 +13,21 @@ RELOOP = 1;
LINEDEBUG = 0;
-PARSER_DEBUG = 1;
+DEBUG_TAGS_SHOWING = ['labelbranching'];
+function dcheck(tag) {
+ return DEBUG_TAGS_SHOWING.indexOf(arguments[0]) != -1;
+}
+function dprint() {
+ var text;
+ if (arguments[1]) {
+ if (!dcheck(arguments[0])) return;
+ text = arguments[1];
+ } else {
+ text = arguments[0];
+ }
+ text = '// ' + text;
+ print(text);
+}
// Prep - allow this to run in both SpiderMonkey and V8
@@ -1113,7 +1127,7 @@ function analyzer(data) {
});
// Find direct branchings
labels.forEach(function(label) {
- if (PARSER_DEBUG) print('// find direct branchings at label: ' + label.ident + ':' + label.inLabels + ':' + label.outLabels);
+ dprint('find direct branchings at label: ' + label.ident + ':' + label.inLabels + ':' + label.outLabels);
label.lines.forEach(function(line) {
if (['branch', 'invoke'].indexOf(line.intertype) != -1) {
['label', 'labelTrue', 'labelFalse', 'toLabel', 'unwindLabel'].forEach(function(id) {
@@ -1196,7 +1210,7 @@ function analyzer(data) {
});
});
- if (PARSER_DEBUG) {
+ if (dcheck('labelbranching')) {
labels.forEach(function(label) {
print('// label: ' + label.ident + ' :out : ' + JSON.stringify(label.outLabels));
print('// ' + label.ident + ' :in : ' + JSON.stringify(label.inLabels));
@@ -1252,7 +1266,7 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
if (!RELOOP) return def;
function getLastLine(block) {
- //if (PARSER_DEBUG) print('// get last line at: ' + block.labels[0].ident);
+ //dprint('get last line at: ' + block.labels[0].ident);
if (block.next) return getLastLine(block.next);
switch(block.type) {
case 'loop':
@@ -1287,7 +1301,7 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
label.outLabels = [];
return label;
}
- if (PARSER_DEBUG) print("\n\n// XXX MAKEBLOCK " + entry + ', num labels: ' + labels.length + ' and they are: ' + getLabelIds(labels));
+ dprint("\n\n// XXX MAKEBLOCK " + entry + ', num labels: ' + labels.length + ' and they are: ' + getLabelIds(labels));
if (labels.length == 0 || !entry) {
print('//empty labels or entry');
return;
@@ -1310,12 +1324,12 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
}
var others = split.leftIn;
var lastLine = first.lines.slice(-1)[0];
- if (PARSER_DEBUG) print("// makeBlock " + entry + ' : ' + getLabelIds(labels) + ' IN: ' + first.inLabels + ' OUT: ' + first.outLabels);
+ dprint("// makeBlock " + entry + ' : ' + getLabelIds(labels) + ' IN: ' + first.inLabels + ' OUT: ' + first.outLabels);
// If we have one outgoing, and none incoming - make this a block of 1,
// and move on the others (forgetting ourself, so they are now also
// totally self-enclosed, once we start them)
if (first.inLabels.length == 0 && first.outLabels.length == 1) {
- if (PARSER_DEBUG) print('// Creating simple emulated');
+ dprint(' Creating simple emulated');
assertEq(lastLine.intertype, 'branch');
// assertEq(!!lastLine.label, true);
return {
@@ -1352,7 +1366,7 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
if (pivots.length >= 1) { // We have ourselves a loop
pivots.sort(function(a, b) { return b.mustGetTo.length - a.mustGetTo.length });
var pivot = pivots[0];
- if (PARSER_DEBUG) print('// Creating LOOP : ' + entry + ' insiders: ' + getLabelIds(insiders) + ' to pivot: ' + pivot.ident);
+ dprint(' Creating LOOP : ' + entry + ' insiders: ' + getLabelIds(insiders) + ' to pivot: ' + pivot.ident);
var otherLoopLabels = insiders;
var loopLabels = insiders.concat([first]);
var nextLabels = outsiders;
@@ -1385,7 +1399,7 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
inc: makeBlock([isolate(first)], entry, labelsDict),
rest: makeBlock(replaceInLabels(otherLoopLabels, entry), nextEntry, labelsDict),
};
- if (PARSER_DEBUG) print('// getting last line for block starting with ' + entry);
+ dprint(' getting last line for block starting with ' + entry);
var lastLoopLine = getLastLine(ret.rest);
if (lastLoopLine) {
replaceLabels(lastLoopLine, 'BCONT' + entry, 'BNOPP'); // Last line will feed back into the loop anyhow
@@ -1410,7 +1424,7 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
var nextLabels = getAll(outLabelId);
// If we can get to the outside in more than 2 ways (one from if, one from True clause) - have breaks
var breaking = labelsDict[outLabelId].allInLabels.length > 2;
- if (PARSER_DEBUG) print('// Creating XXX IF: ' + getLabelIds(ifTrueLabels) + ' to ' + outLabelId + ' ==> ' + getLabelIds(nextLabels) + ' breaking: ' + breaking);
+ dprint(' Creating XXX IF: ' + getLabelIds(ifTrueLabels) + ' to ' + outLabelId + ' ==> ' + getLabelIds(nextLabels) + ' breaking: ' + breaking);
//print('// if separation: ' + labels.length + ' = ' + ifLabels.length + ' + ' + nextLabels.length + ' (' + ifTrueLabels.length + ')');
if (breaking) {
// Rework branches out of the if into new 'break' labels
@@ -1434,13 +1448,13 @@ print('// zz Merged away! ' + label2.ident + ' into ' + label1.ident);
}
// Give up on this structure - emulate it
- if (PARSER_DEBUG) print('// Creating complex emulated');
+ dprint(' Creating complex emulated');
return def;
}
// TODO: each of these can be run in parallel
item.functions.forEach(function(func) {
- if (PARSER_DEBUG) print("// relooping function: " + func.ident);
+ dprint("// relooping function: " + func.ident);
func.labelsDict = {};
func.labels.forEach(function(label) {
func.labelsDict[label.ident] = label;
@@ -1714,7 +1728,7 @@ function JSify(data) {
}
function makeEmptyStruct(type) {
- if (PARSER_DEBUG) print('// ??makeemptystruct?? ' + dump(type) + ' : ' + dump(TYPES));
+ dprint('makeemptystruct', '??makeemptystruct?? ' + dump(type) + ' : ' + dump(TYPES));
// XXX hardcoded ptr impl
var ret = [];
var typeData = TYPES[type];