aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/analyzer.js5
-rw-r--r--src/intertyper.js13
-rw-r--r--src/jsifier.js9
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) {