diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:31:13 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-06 08:31:13 +0000 |
| commit | b69c8f7c8e2c16aade681ceaae046456a5ef2a85 (patch) | |
| tree | 6737fa9da75bc4dc5cd9cf620ac6b8f686aebae6 /src/main/java/org/zwobble/couscous/interpreter/values | |
| parent | e4229671c4cf6db860fc6cf68bcfb8fdd69fdcb8 (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.java | 17 |
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()); } |
