diff options
Diffstat (limited to 'src/main')
| -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.java | 10 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java | 12 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java | 8 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/MethodCallArguments.java | 18 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/StaticMethodValue.java | 8 |
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; } |
