diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
4 files changed, 7 insertions, 51 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java index b506fdf..da84de0 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.interpreter; import java.util.List; import java.util.Optional; +import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.interpreter.values.ConcreteType; import org.zwobble.couscous.interpreter.values.InterpreterValue; diff --git a/src/main/java/org/zwobble/couscous/interpreter/MethodSignature.java b/src/main/java/org/zwobble/couscous/interpreter/MethodSignature.java deleted file mode 100644 index 708bc9a..0000000 --- a/src/main/java/org/zwobble/couscous/interpreter/MethodSignature.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.zwobble.couscous.interpreter; - -import org.zwobble.couscous.ast.TypeName; - -import java.util.List; -import java.util.Objects; - -public class MethodSignature { - private String name; - private List<TypeName> arguments; - - public MethodSignature(String name, List<TypeName> arguments) { - this.name = name; - this.arguments = arguments; - } - - @Override - public String toString() { - return "MethodSignature(" + - "name='" + name + '\'' + - ", arguments=" + arguments + - ')'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - MethodSignature that = (MethodSignature) o; - return Objects.equals(name, that.name) && - Objects.equals(arguments, that.arguments); - } - - @Override - public int hashCode() { - return Objects.hash(name, arguments); - } -} diff --git a/src/main/java/org/zwobble/couscous/interpreter/NoSuchMethod.java b/src/main/java/org/zwobble/couscous/interpreter/NoSuchMethod.java index 1bb934e..734c254 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/NoSuchMethod.java +++ b/src/main/java/org/zwobble/couscous/interpreter/NoSuchMethod.java @@ -1,5 +1,7 @@ package org.zwobble.couscous.interpreter; +import org.zwobble.couscous.ast.MethodSignature; + public final class NoSuchMethod extends InterpreterException { private static final long serialVersionUID = 1L; private MethodSignature signature; diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java index 536aeb3..6abb56c 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java @@ -3,16 +3,13 @@ package org.zwobble.couscous.interpreter.values; import java.util.*; import java.util.function.BiFunction; import java.util.stream.Collectors; -import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.MethodNode; -import org.zwobble.couscous.ast.TypeName; + +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.interpreter.*; import org.zwobble.couscous.util.Casts; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import static java.util.stream.Collectors.toMap; -import static org.zwobble.couscous.util.ExtraLists.eagerMap; public class ConcreteType { @@ -74,7 +71,7 @@ public class ConcreteType { Map<MethodSignature, MethodValue> methods = classNode.getMethods() .stream() .filter(method -> !method.isStatic()) - .collect(toMap(method -> signature(method), method -> { + .collect(toMap(method -> method.signature(), method -> { List<TypeName> argumentTypes = getArgumentTypes(method.getArguments()); return new MethodValue(argumentTypes, (environment, arguments) -> { return Executor.callMethod(environment, method, Optional.of(arguments.getReceiver()), arguments.getPositionalArguments()); @@ -83,7 +80,7 @@ public class ConcreteType { Map<MethodSignature, StaticMethodValue> staticMethods = classNode.getMethods() .stream() .filter(method -> method.isStatic()) - .collect(toMap(method -> signature(method), method -> { + .collect(toMap(method -> method.signature(), method -> { List<TypeName> argumentTypes = getArgumentTypes(method.getArguments()); return new StaticMethodValue(argumentTypes, (environment, arguments) -> { return Executor.callMethod(environment, method, Optional.empty(), arguments); @@ -92,12 +89,6 @@ public class ConcreteType { return new ConcreteType(classNode.getName(), classNode.getSuperTypes(), fields, constructor, methods, staticMethods); } - private static MethodSignature signature(MethodNode method) { - return new MethodSignature( - method.getName(), - eagerMap(method.getArguments(), argument -> argument.getType())); - } - private static List<TypeName> getArgumentTypes(List<FormalArgumentNode> arguments) { return arguments.stream().map(arg -> arg.getType()).collect(Collectors.toList()); } |
