diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analyzer.js | 5 | ||||
-rw-r--r-- | src/intertyper.js | 13 | ||||
-rw-r--r-- | src/jsifier.js | 9 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 0f2e6b95..80860aa6 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -312,8 +312,9 @@ function analyzer(data) { func.labels.forEach(function(label) { label.lines.forEach(function(line) { if (line.value && line.value.intertype == 'phi') { - func.remarkableLabels.push(toNiceIdent(line.value.label1)); - func.remarkableLabels.push(toNiceIdent(line.value.label2)); + for (var i = 0; i < line.value.params.length; i++) { + func.remarkableLabels.push(line.value.params[i].label); + } func.hasPhi = true; } }); diff --git a/src/intertyper.js b/src/intertyper.js index 7c93750f..a3a07ca8 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -483,11 +483,14 @@ function intertyper(data) { substrate.addZyme('Phi', { processItem: function(item) { item.intertype = 'phi'; - item.type = item.tokens[1].text - item.label1 = item.tokens[2].item[0].tokens[2].text; - item.value1 = item.tokens[2].item[0].tokens[0].text; - item.label2 = item.tokens[4].item[0].tokens[2].text; - item.value2 = item.tokens[4].item[0].tokens[0].text; + item.type = item.tokens[1].text; + var last = getTokenIndexByText(item.tokens, ';'); + item.params = splitTokenList(item.tokens.slice(2, last)).map(function(segment) { + return { + label: toNiceIdent(segment[0].item[0].tokens[2].text), + value: toNiceIdent(segment[0].item[0].tokens[0].text), + }; + }); this.forwardItem(item, 'Reintegrator'); }, }); diff --git a/src/jsifier.js b/src/jsifier.js index d20409ea..f82a497c 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -620,7 +620,14 @@ function JSify(data) { } }); makeFuncLineZyme('phi', function(item) { - return '__lastLabel__ == ' + getLabelId(item.label1) + ' ? ' + toNiceIdent(item.value1) + ' : ' + toNiceIdent(item.value2); + var params = item.params; + function makeOne(i) { + if (i === params.length-1) { + return params[i].value; + } + return '__lastLabel__ == ' + getLabelId(params[i].label) + ' ? ' + params[i].value + ' : (' + makeOne(i+1) + ')'; + } + return makeOne(0); }); function makeUnSign(value, type) { |