aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-06 08:31:13 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-06 08:31:13 +0000
commitb69c8f7c8e2c16aade681ceaae046456a5ef2a85 (patch)
tree6737fa9da75bc4dc5cd9cf620ac6b8f686aebae6 /src/main/java/org/zwobble/couscous/interpreter/values
parente4229671c4cf6db860fc6cf68bcfb8fdd69fdcb8 (diff)
Partially implement method overloading
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java17
1 files changed, 4 insertions, 13 deletions
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());
}