From 44f8b1ba1342af8d2088dd7c038f0753c7346db4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Jul 2016 19:16:30 +0100 Subject: Create new block when desugaring for loops --- src/main/java/org/zwobble/couscous/interpreter/Executor.java | 4 ++++ src/main/java/org/zwobble/couscous/transforms/DesugarForToWhile.java | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/main/java') 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 visit(StatementBlockNode block) { + return exec(block.getStatements()); + } + private Optional exec(List statements) { for (StatementNode statement : statements) { Optional 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 desugar(ForNode forNode) { - return append( + List statements = append( forNode.getInitializers(), whileLoop( forNode.getCondition(), @@ -38,5 +40,6 @@ public class DesugarForToWhile { ) ) ); + return list(new StatementBlockNode(statements)); } } -- cgit v1.2.3