aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Arguments.java (renamed from src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java)10
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Executor.java10
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java12
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java8
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java2
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java2
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java18
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java8
8 files changed, 34 insertions, 36 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java b/src/main/java/org/zwobble/couscous/interpreter/Arguments.java
index 2ceb986..f562de6 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/PositionalArguments.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Arguments.java
@@ -2,13 +2,12 @@ package org.zwobble.couscous.interpreter;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
-import java.util.Iterator;
import java.util.List;
-public class PositionalArguments implements Iterable<InterpreterValue> {
+public class Arguments {
private List<InterpreterValue> values;
- public PositionalArguments(List<InterpreterValue> values) {
+ public Arguments(List<InterpreterValue> values) {
this.values = values;
}
@@ -16,8 +15,7 @@ public class PositionalArguments implements Iterable<InterpreterValue> {
return values.get(index);
}
- @Override
- public Iterator<InterpreterValue> iterator() {
- return values.iterator();
+ public List<InterpreterValue> getValues() {
+ return values;
}
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
index 75ace0a..f6c1c3a 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java
@@ -20,7 +20,7 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>>
Environment environment,
MethodNode method,
Optional<InterpreterValue> thisValue,
- PositionalArguments actualArguments)
+ Arguments actualArguments)
{
List<StatementNode> body = method.getBody().orElseThrow(() -> new RuntimeException("Cannot call abstract method"));
return callMethod(environment, method.getArguments(), body, thisValue, actualArguments);
@@ -30,7 +30,7 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>>
Environment environment,
ConstructorNode constructor,
InterpreterValue thisValue,
- PositionalArguments actualArguments)
+ Arguments actualArguments)
{
return callMethod(environment, constructor.getArguments(), constructor.getBody(), Optional.of(thisValue), actualArguments);
}
@@ -40,7 +40,7 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>>
List<FormalArgumentNode> formalArguments,
List<StatementNode> statements,
Optional<InterpreterValue> thisValue,
- PositionalArguments actualArguments)
+ Arguments actualArguments)
{
Environment innerEnvironment = buildEnvironment(environment, formalArguments, statements, thisValue, actualArguments);
return exec(innerEnvironment, statements)
@@ -52,10 +52,10 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>>
List<FormalArgumentNode> formalArguments,
List<StatementNode> statements,
Optional<InterpreterValue> thisValue,
- PositionalArguments arguments)
+ Arguments arguments)
{
StackFrameBuilder stackFrame = new StackFrameBuilder();
- forEach(formalArguments, arguments, stackFrame::declare);
+ forEach(formalArguments, arguments.getValues(), 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/types/IntrinsicInterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java
index 29b4fe1..050516d 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java
@@ -7,7 +7,7 @@ import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.interpreter.Environment;
-import org.zwobble.couscous.interpreter.PositionalArguments;
+import org.zwobble.couscous.interpreter.Arguments;
import org.zwobble.couscous.interpreter.errors.NoSuchMethod;
import org.zwobble.couscous.interpreter.values.*;
@@ -72,7 +72,7 @@ public class IntrinsicInterpreterType implements InterpreterType {
argumentsTypes,
(environment, arguments) ->
tryCast(interpreterValueType, arguments.getReceiver())
- .map(typedReceiver -> method.apply(environment, MethodCallArguments.of(typedReceiver, arguments.getPositionalArguments())))
+ .map(typedReceiver -> method.apply(environment, MethodCallArguments.of(typedReceiver, arguments.getArguments())))
.orElseThrow(() -> new RuntimeException("receiver is of wrong type")));
}
@@ -80,7 +80,7 @@ public class IntrinsicInterpreterType implements InterpreterType {
String name,
List<Type> argumentsTypes,
Type returnType,
- BiFunction<Environment, PositionalArguments, InterpreterValue> method)
+ BiFunction<Environment, Arguments, InterpreterValue> method)
{
staticMethods.put(new MethodSignature(name, argumentsTypes, returnType), new StaticMethodValue(argumentsTypes, method));
return this;
@@ -139,13 +139,13 @@ public class IntrinsicInterpreterType implements InterpreterType {
@Override
public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, MethodSignature signature, List<InterpreterValue> arguments) {
MethodValue method = findMethod(methods, signature);
- return method.apply(environment, MethodCallArguments.of(receiver, new PositionalArguments(arguments)));
+ return method.apply(environment, MethodCallArguments.of(receiver, new Arguments(arguments)));
}
@Override
public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List<InterpreterValue> arguments) {
StaticMethodValue method = findMethod(staticMethods, signature);
- return method.apply(environment, new PositionalArguments(arguments));
+ return method.apply(environment, new Arguments(arguments));
}
private static <T extends Callable> T findMethod(Map<MethodSignature, T> methods, MethodSignature signature) {
@@ -157,7 +157,7 @@ public class IntrinsicInterpreterType implements InterpreterType {
@Override
public void callConstructor(Environment environment, InterpreterValue thisValue, List<InterpreterValue> arguments) {
- constructor.apply(environment, MethodCallArguments.of(thisValue, new PositionalArguments(arguments)));
+ constructor.apply(environment, MethodCallArguments.of(thisValue, new Arguments(arguments)));
}
@Override
diff --git a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
index d702720..b701bd0 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
@@ -4,7 +4,7 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.interpreter.Environment;
import org.zwobble.couscous.interpreter.Executor;
import org.zwobble.couscous.interpreter.InterpreterTypes;
-import org.zwobble.couscous.interpreter.PositionalArguments;
+import org.zwobble.couscous.interpreter.Arguments;
import org.zwobble.couscous.interpreter.errors.NoSuchMethod;
import org.zwobble.couscous.interpreter.errors.WrongNumberOfArguments;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
@@ -74,7 +74,7 @@ public class UserDefinedInterpreterType implements InterpreterType {
environment,
constructor,
thisValue,
- new PositionalArguments(arguments));
+ new Arguments(arguments));
}
private static void checkMethodArguments(final List<Type> argumentTypes, List<InterpreterValue> arguments) {
@@ -93,7 +93,7 @@ public class UserDefinedInterpreterType implements InterpreterType {
environment,
findMethod(signature, false),
Optional.of(value),
- new PositionalArguments(arguments));
+ new Arguments(arguments));
}
@Override
@@ -102,7 +102,7 @@ public class UserDefinedInterpreterType implements InterpreterType {
environment,
findMethod(signature, true),
Optional.empty(),
- new PositionalArguments(arguments));
+ new Arguments(arguments));
}
private MethodNode findMethod(MethodSignature signature, boolean isStatic) {
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
index b4f8701..5e419aa 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java
@@ -34,7 +34,7 @@ public class BoxedIntegerInterpreterValue {
.method("equals", list(Types.OBJECT), Types.BOOLEAN,
(environment, arguments) -> {
- InterpreterValue right = arguments.getPositionalArguments().get(0);
+ InterpreterValue right = arguments.getArguments().get(0);
if (right.getType().getType().equals(Types.BOXED_INT)) {
IntegerInterpreterValue leftValue = (IntegerInterpreterValue)arguments.getReceiver().getField("value");
IntegerInterpreterValue rightValue = (IntegerInterpreterValue)right.getField("value");
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
index 00d4aa5..7e0c7c8 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
@@ -28,7 +28,7 @@ public final class IntegerInterpreterValue implements InterpreterValue {
infixReturningInteger((left, right) -> left % right))
.method(Operator.EQUALS.getSymbol(), list(Types.INT), Types.BOOLEAN,
(environment, arguments) -> {
- IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getPositionalArguments().get(0);
+ IntegerInterpreterValue right = (IntegerInterpreterValue)arguments.getArguments().get(0);
return integerEquals(arguments, right);
})
.method(Operator.NOT_EQUALS.getSymbol(), list(Types.INT), Types.BOOLEAN,
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java b/src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java
index 23af57f..7c18745 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java
@@ -1,29 +1,29 @@
package org.zwobble.couscous.interpreter.values;
-import org.zwobble.couscous.interpreter.PositionalArguments;
+import org.zwobble.couscous.interpreter.Arguments;
public class MethodCallArguments<T> {
private final T receiver;
- private final PositionalArguments positionalArguments;
+ private final Arguments arguments;
public InterpreterValue get(int index) {
- return positionalArguments.get(index);
+ return arguments.get(index);
}
- private MethodCallArguments(final T receiver, final PositionalArguments positionalArguments) {
+ private MethodCallArguments(final T receiver, final Arguments arguments) {
this.receiver = receiver;
- this.positionalArguments = positionalArguments;
+ this.arguments = arguments;
}
- public static <T> MethodCallArguments<T> of(final T receiver, final PositionalArguments positionalArguments) {
- return new MethodCallArguments<T>(receiver, positionalArguments);
+ public static <T> MethodCallArguments<T> of(final T receiver, final Arguments arguments) {
+ return new MethodCallArguments<T>(receiver, arguments);
}
public T getReceiver() {
return this.receiver;
}
- public PositionalArguments getPositionalArguments() {
- return this.positionalArguments;
+ public Arguments getArguments() {
+ return this.arguments;
}
} \ No newline at end of file
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
index c035070..88dd89f 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java
@@ -2,20 +2,20 @@ package org.zwobble.couscous.interpreter.values;
import org.zwobble.couscous.types.Type;
import org.zwobble.couscous.interpreter.Environment;
-import org.zwobble.couscous.interpreter.PositionalArguments;
+import org.zwobble.couscous.interpreter.Arguments;
import java.util.List;
import java.util.function.BiFunction;
public final class StaticMethodValue implements Callable {
private final List<Type> argumentTypes;
- private final BiFunction<Environment, PositionalArguments, InterpreterValue> apply;
+ private final BiFunction<Environment, Arguments, InterpreterValue> apply;
- public InterpreterValue apply(Environment environment, PositionalArguments arguments) {
+ public InterpreterValue apply(Environment environment, Arguments arguments) {
return apply.apply(environment, arguments);
}
- public StaticMethodValue(final List<Type> argumentTypes, final BiFunction<Environment, PositionalArguments, InterpreterValue> apply) {
+ public StaticMethodValue(final List<Type> argumentTypes, final BiFunction<Environment, Arguments, InterpreterValue> apply) {
this.argumentTypes = argumentTypes;
this.apply = apply;
}