aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-28 14:45:56 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-28 14:45:56 +0000
commitea417d7c4d430d4bb6fcce14e64ffda82f475805 (patch)
treeeddfd9b3374610a7b1b1f0af86d7a1e9374e8eb8 /src/main/java/org/zwobble/couscous/interpreter
parent9600fba4a61e2e42da2221c1ec15e2a20072afa8 (diff)
Extract forEach over two iterabes
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Executor.java6
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java12
2 files changed, 11 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
index fcdca98..d85013e 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
@@ -13,6 +13,7 @@ import java.util.stream.Stream;
import static org.zwobble.couscous.ast.structure.NodeStructure.descendantNodesAndSelf;
import static org.zwobble.couscous.interpreter.Evaluator.eval;
import static org.zwobble.couscous.interpreter.Evaluator.evalCondition;
+import static org.zwobble.couscous.util.ExtraIterables.forEach;
public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> {
public static InterpreterValue callMethod(
@@ -53,11 +54,8 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>>
Optional<InterpreterValue> thisValue,
PositionalArguments arguments)
{
- // TODO use map with multiple iterables
StackFrameBuilder stackFrame = new StackFrameBuilder();
- for (int index = 0; index < formalArguments.size(); index++) {
- stackFrame.declare(formalArguments.get(index), arguments.get(index));
- }
+ forEach(formalArguments, arguments, stackFrame::declare);
findDeclarations(statements).forEach(declaration -> stackFrame.declare(declaration));
return environment.withStackFrame(thisValue, stackFrame.build());
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java b/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java
index 429b529..2ceb986 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java
@@ -1,10 +1,11 @@
package org.zwobble.couscous.interpreter;
-import java.util.List;
-
import org.zwobble.couscous.interpreter.values.InterpreterValue;
-public class PositionalArguments {
+import java.util.Iterator;
+import java.util.List;
+
+public class PositionalArguments implements Iterable<InterpreterValue> {
private List<InterpreterValue> values;
public PositionalArguments(List<InterpreterValue> values) {
@@ -14,4 +15,9 @@ public class PositionalArguments {
public InterpreterValue get(int index) {
return values.get(index);
}
+
+ @Override
+ public Iterator<InterpreterValue> iterator() {
+ return values.iterator();
+ }
}