aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-31 19:16:30 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-31 19:16:30 +0100
commit44f8b1ba1342af8d2088dd7c038f0753c7346db4 (patch)
treefd88c66d3d06d50d53748127b1a7f8ae80c1bfe8 /src/main/java/org
parent4aefec4897c6010c6b05cd7aaa49113b380d1f93 (diff)
Create new block when desugaring for loops
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Executor.java4
-rw-r--r--src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java5
2 files changed, 8 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
index 0acb253..5e19761 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
@@ -135,6 +135,10 @@ public class Executor {
return Optional.empty();
}
+ public Optional<InterpreterValue> visit(StatementBlockNode block) {
+ return exec(block.getStatements());
+ }
+
private Optional<InterpreterValue> exec(List<StatementNode> statements) {
for (StatementNode statement : statements) {
Optional<InterpreterValue> result = exec(environment, statement);
diff --git a/src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java b/src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java
index 6481c7a..68b961c 100644
--- a/src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java
+++ b/src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.transforms;
import org.zwobble.couscous.ast.ForNode;
import org.zwobble.couscous.ast.NodeTypes;
+import org.zwobble.couscous.ast.StatementBlockNode;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
@@ -13,6 +14,7 @@ import static org.zwobble.couscous.ast.WhileNode.whileLoop;
import static org.zwobble.couscous.util.ExtraIterables.lazyMap;
import static org.zwobble.couscous.util.ExtraLists.append;
import static org.zwobble.couscous.util.ExtraLists.concat;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class DesugarForToWhile {
public static NodeTransformer transformer() {
@@ -28,7 +30,7 @@ public class DesugarForToWhile {
}
public static List<StatementNode> desugar(ForNode forNode) {
- return append(
+ List<StatementNode> statements = append(
forNode.getInitializers(),
whileLoop(
forNode.getCondition(),
@@ -38,5 +40,6 @@ public class DesugarForToWhile {
)
)
);
+ return list(new StatementBlockNode(statements));
}
}