diff options
author | alon@honor <none@none> | 2010-10-03 18:18:23 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-10-03 18:18:23 -0700 |
commit | a20e4b9f8704fd5e18e2ccc4e23dac98ec1563d0 (patch) | |
tree | b741ea6ea05fc6d046f75832ff8d3d5185a7ad99 /src | |
parent | c0ffc853665a8deef0c7b12f3450c1a81fc1640d (diff) |
cleanup fallback when no RELOOP
Diffstat (limited to 'src')
-rw-r--r-- | src/analyzer.js | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 9d14de25..809c7422 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -435,27 +435,27 @@ function analyzer(data) { // @param exitLabelsHit Exit labels which were actually encountered - we update that. XXX do we need this?! function makeBlock(labels, entries, labelsDict, exitLabels, exitLabelsHit) { dprint('relooping', 'prelooping: ' + entries + ',' + labels.length + ' labels'); - assert(entries); + assert(entries && entries[0]); // need at least 1 entry - calcLabelBranchingData(labels, labelsDict); + var emulated = { + type: 'emulated', + labels: labels, + entries: entries.slice(0), + }; + if (!RELOOP) return emulated; - function emulated() { + function getEmulated() { labels.forEach(function(label) { for (l in label.outLabels) { exitLabelsHit[l] = true; } }); - assert(entries[0]); - return { - type: 'emulated', - labels: labels, - entries: entries.slice(0), - }; + return emulated; } - if (!RELOOP) return emulated(); + + calcLabelBranchingData(labels, labelsDict); var s_entries = searchable(entries); - assert(entries[0]); // need at least 1 entry dprint('relooping', 'makeBlock: ' + entries + ',' + labels.length + ' labels'); var entryLabels = entries.map(function(entry) { return labelsDict[entry] }); @@ -521,7 +521,7 @@ function analyzer(data) { var inLabels = set(getLabelIds(internals)); externals.forEach(function(external) { if (values(setIntersect(external.outLabels, inLabels)).length > 0) { - dprint('relooping', 'Found an external that wants to reach an internal, fallback to |return emulated()|?'); + dprint('relooping', 'Found an external that wants to reach an internal, fallback to emulated?'); throw "Spaghetti label flow"; } }); @@ -563,7 +563,7 @@ function analyzer(data) { // Give up on this structure - emulate it dprint('relooping', ' Creating complex emulated'); - return emulated(); + return getEmulated(); } // TODO: each of these can be run in parallel |