From bb107372f059eadf3c2f0f576d464e4232f2ca33 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 31 Mar 2016 21:25:22 +0100 Subject: Pass around Arguments instead of List --- .../java/org/zwobble/couscous/interpreter/Evaluator.java | 4 ++-- .../java/org/zwobble/couscous/interpreter/Interpreter.java | 2 +- .../couscous/interpreter/types/InterpreterType.java | 7 ++++--- .../interpreter/types/IntrinsicInterpreterType.java | 12 ++++++------ .../interpreter/types/ParameterizedInterpreterType.java | 7 ++++--- .../interpreter/types/UserDefinedInterpreterType.java | 14 +++++++------- .../couscous/interpreter/values/InstanceReceiverValue.java | 5 ++--- .../zwobble/couscous/interpreter/values/ReceiverValue.java | 5 ++--- .../couscous/interpreter/values/StaticReceiverValue.java | 5 +++-- 9 files changed, 31 insertions(+), 30 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 64f28ad..5488506 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -102,7 +102,7 @@ public class Evaluator implements ExpressionNodeMapper { MethodSignature signature = methodCall.signature(); return evalReceiver(methodCall.getReceiver()) - .callMethod(environment, signature, arguments); + .callMethod(environment, signature, new Arguments(arguments)); } @Override @@ -111,7 +111,7 @@ public class Evaluator implements ExpressionNodeMapper { List arguments = evalArguments(call.getArguments()); Optional> typeParameters = tryCast(ParameterizedType.class, call.getType()) .map(type -> type.getParameters()); - return clazz.callConstructor(environment, typeParameters, arguments); + return clazz.callConstructor(environment, typeParameters, new Arguments(arguments)); } @Override diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java index 1d8f1b0..b447367 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java @@ -30,6 +30,6 @@ public class Interpreter { methodName, eagerMap(arguments, argument -> argument.getType().getType()), returnType); - return clazz.callMethod(environment, signature, arguments); + return clazz.callMethod(environment, signature, new Arguments(arguments)); } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/interpreter/types/InterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/InterpreterType.java index 7ffe5d5..37d5c12 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/types/InterpreterType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/types/InterpreterType.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.interpreter.types; import org.zwobble.couscous.ast.FieldDeclarationNode; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.StatementNode; +import org.zwobble.couscous.interpreter.Arguments; import org.zwobble.couscous.types.Type; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.values.InterpreterValue; @@ -16,7 +17,7 @@ public interface InterpreterType { Set getSuperTypes(); Optional getField(String fieldName); List getStaticConstructor(); - void callConstructor(Environment environment, InterpreterValue thisValue, List arguments); - InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, List arguments); - InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List arguments); + void callConstructor(Environment environment, InterpreterValue thisValue, Arguments arguments); + InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, Arguments arguments); + InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, Arguments arguments); } 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 050516d..01418fa 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/types/IntrinsicInterpreterType.java @@ -137,15 +137,15 @@ public class IntrinsicInterpreterType implements InterpreterType { } @Override - public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, MethodSignature signature, List arguments) { + public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, MethodSignature signature, Arguments arguments) { MethodValue method = findMethod(methods, signature); - return method.apply(environment, MethodCallArguments.of(receiver, new Arguments(arguments))); + return method.apply(environment, MethodCallArguments.of(receiver, arguments)); } @Override - public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List arguments) { + public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, Arguments arguments) { StaticMethodValue method = findMethod(staticMethods, signature); - return method.apply(environment, new Arguments(arguments)); + return method.apply(environment, arguments); } private static T findMethod(Map methods, MethodSignature signature) { @@ -156,8 +156,8 @@ public class IntrinsicInterpreterType implements InterpreterType { } @Override - public void callConstructor(Environment environment, InterpreterValue thisValue, List arguments) { - constructor.apply(environment, MethodCallArguments.of(thisValue, new Arguments(arguments))); + public void callConstructor(Environment environment, InterpreterValue thisValue, Arguments arguments) { + constructor.apply(environment, MethodCallArguments.of(thisValue, arguments)); } @Override diff --git a/src/main/java/org/zwobble/couscous/interpreter/types/ParameterizedInterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/ParameterizedInterpreterType.java index f890fb1..52ec6e1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/types/ParameterizedInterpreterType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/types/ParameterizedInterpreterType.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.interpreter.types; import org.zwobble.couscous.ast.FieldDeclarationNode; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.StatementNode; +import org.zwobble.couscous.interpreter.Arguments; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.values.InterpreterValue; import org.zwobble.couscous.types.ScalarType; @@ -49,17 +50,17 @@ public class ParameterizedInterpreterType implements InterpreterType { } @Override - public void callConstructor(Environment environment, InterpreterValue thisValue, List arguments) { + public void callConstructor(Environment environment, InterpreterValue thisValue, Arguments arguments) { throw new UnsupportedOperationException(); } @Override - public InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, List arguments) { + public InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, Arguments arguments) { throw new UnsupportedOperationException(); } @Override - public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List arguments) { + public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, Arguments arguments) { throw new UnsupportedOperationException(); } } 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 b701bd0..3b056f1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java @@ -61,7 +61,7 @@ public class UserDefinedInterpreterType implements InterpreterType { } @Override - public void callConstructor(Environment environment, InterpreterValue thisValue, List arguments) { + public void callConstructor(Environment environment, InterpreterValue thisValue, Arguments arguments) { ConstructorNode constructor = tryCast(ClassNode.class, type) // TODO: add test for this case .orElseThrow(() -> new RuntimeException("Cannot instantiate non-class types")) @@ -69,12 +69,12 @@ public class UserDefinedInterpreterType implements InterpreterType { List formalArgumentTypes = eagerMap( constructor.getArguments(), FormalArgumentNode::getType); - checkMethodArguments(formalArgumentTypes, arguments); + checkMethodArguments(formalArgumentTypes, arguments.getValues()); Executor.callConstructor( environment, constructor, thisValue, - new Arguments(arguments)); + arguments); } private static void checkMethodArguments(final List argumentTypes, List arguments) { @@ -88,21 +88,21 @@ public class UserDefinedInterpreterType implements InterpreterType { } @Override - public InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, List arguments) { + public InterpreterValue callMethod(Environment environment, InterpreterValue value, MethodSignature signature, Arguments arguments) { return Executor.callMethod( environment, findMethod(signature, false), Optional.of(value), - new Arguments(arguments)); + arguments); } @Override - public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List arguments) { + public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, Arguments arguments) { return Executor.callMethod( environment, findMethod(signature, true), Optional.empty(), - new Arguments(arguments)); + arguments); } private MethodNode findMethod(MethodSignature signature, boolean isStatic) { diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java index cdc2167..77effc9 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java @@ -1,11 +1,10 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Arguments; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.types.InterpreterType; -import java.util.List; - public class InstanceReceiverValue implements ReceiverValue { private final InterpreterValue value; @@ -14,7 +13,7 @@ public class InstanceReceiverValue implements ReceiverValue { } @Override - public InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments) { + public InterpreterValue callMethod(Environment environment, MethodSignature signature, Arguments arguments) { InterpreterType type = value.getType(); return type.callMethod(environment, value, signature, arguments); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java index 5d6d804..b4c0dbc 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java @@ -1,12 +1,11 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Arguments; import org.zwobble.couscous.interpreter.Environment; -import java.util.List; - public interface ReceiverValue { - InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments); + InterpreterValue callMethod(Environment environment, MethodSignature signature, Arguments arguments); InterpreterValue getField(String fieldName); void setField(String fieldName, InterpreterValue value); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java index deca938..51a1736 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Arguments; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.Executor; import org.zwobble.couscous.interpreter.types.InterpreterType; @@ -20,7 +21,7 @@ public class StaticReceiverValue implements ReceiverValue { } @Override - public InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments) { + public InterpreterValue callMethod(Environment environment, MethodSignature signature, Arguments arguments) { return type.callStaticMethod(environment, signature, arguments); } @@ -38,7 +39,7 @@ public class StaticReceiverValue implements ReceiverValue { Executor.exec(environment, type.getStaticConstructor()); } - public InterpreterValue callConstructor(Environment environment, Optional> typeParameters, List arguments) { + public InterpreterValue callConstructor(Environment environment, Optional> typeParameters, Arguments arguments) { InterpreterType objectType = typeParameters .map(parameters -> new ParameterizedInterpreterType(type, parameters)) .orElse(type); -- cgit v1.2.3