Tweaking logic (again) to more correctly reassign line numbers.

This commit is contained in:
Rob Greene 2018-07-13 21:21:59 -05:00
parent 442cb1cdeb
commit 486016d7d6

View File

@ -53,21 +53,21 @@ public class ReassignmentVisitor implements Visitor {
*/ */
@Override @Override
public Statement visit(Statement statement) { public Statement visit(Statement statement) {
boolean next = false; boolean trigger = false;
boolean multiple = false; boolean then = false; // Special case: Immediately after THEN, a number triggers reassignment.
Statement newStatement = new Statement(); Statement newStatement = new Statement();
for (Token t : statement.tokens) { for (Token t : statement.tokens) {
Token newToken = t; Token newToken = t;
if (next) { if (trigger || then) {
if (t.type == Type.NUMBER && reassignments.containsKey(t.number.intValue())) { if (t.type == Type.NUMBER && reassignments.containsKey(t.number.intValue())) {
newToken = Token.number(t.line, reassignments.get(t.number.intValue()).doubleValue()); newToken = Token.number(t.line, reassignments.get(t.number.intValue()).doubleValue());
} }
next = multiple; // preserve next based on if we have multiple line numbers or not. then = false;
} else { }
next = t.keyword == ApplesoftKeyword.GOSUB || t.keyword == ApplesoftKeyword.GOTO if (!trigger) {
|| t.keyword == ApplesoftKeyword.THEN || t.keyword == ApplesoftKeyword.RUN trigger = t.keyword == ApplesoftKeyword.GOSUB || t.keyword == ApplesoftKeyword.GOTO
|| t.keyword == ApplesoftKeyword.LIST; || t.keyword == ApplesoftKeyword.LIST || t.keyword == ApplesoftKeyword.RUN;
multiple |= t.keyword == ApplesoftKeyword.LIST || t.keyword == ApplesoftKeyword.ON; then = t.keyword == ApplesoftKeyword.THEN;
} }
newStatement.tokens.add(newToken); newStatement.tokens.add(newToken);
} }