diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-28 11:36:25 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-28 11:36:25 +0000 |
| commit | 4e4f98062c07afdeef14d4031ca69668649e5873 (patch) | |
| tree | 6415aea98dc33ab50c490fbb3f812412f6dad8f0 /src/main/java/org/zwobble/couscous/interpreter | |
| parent | c588167505864bece6cbb2dc68814f7d967d9a6a (diff) | |
Introduce InterfaceNode
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/JavaProject.java | 3 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java | 20 |
2 files changed, 16 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java index bcb4db6..8038ce1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java +++ b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.interpreter; import java.util.List; import org.zwobble.couscous.ast.ClassNode; +import org.zwobble.couscous.ast.TypeNode; import org.zwobble.couscous.interpreter.values.BoxedIntegerInterpreterValue; import org.zwobble.couscous.interpreter.values.ConcreteType; import org.zwobble.couscous.interpreter.values.InternalCouscousInterpreterValue; @@ -20,7 +21,7 @@ public class JavaProject { .addClass(BoxedIntegerInterpreterValue.TYPE); } - public static Project of(List<ClassNode> classNodes) { + public static Project of(List<TypeNode> classNodes) { Iterable<ConcreteType> concreteTypes = Iterables.transform(classNodes, ConcreteType::fromNode); return builder() .addClasses(concreteTypes) 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 cf48d3c..98036f1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java @@ -91,13 +91,21 @@ public class ConcreteType { } } - public static ConcreteType fromNode(ClassNode classNode) { + public static ConcreteType fromNode(TypeNode typeNode) { + ClassNode classNode = (ClassNode)typeNode; Map<String, FieldDeclarationNode> fields = classNode.getFields().stream() .collect(toMap( field -> field.getName(), field -> field)); - MethodValue constructor = new MethodValue(getArgumentTypes(classNode.getConstructor().getArguments()), (environment, arguments) -> Executor.callMethod(environment, classNode.getConstructor(), Optional.of(arguments.getReceiver()), arguments.getPositionalArguments())); - Map<MethodSignature, MethodValue> methods = classNode.getMethods() + MethodValue constructor = new MethodValue( + getArgumentTypes(classNode.getConstructor().getArguments()), + (environment, arguments) -> Executor.callMethod( + environment, + classNode.getConstructor(), + Optional.of(arguments.getReceiver()), + arguments.getPositionalArguments())); + + Map<MethodSignature, MethodValue> methods = typeNode.getMethods() .stream() .filter(method -> !method.isStatic()) .collect(toMap(method -> method.signature(), method -> { @@ -106,7 +114,7 @@ public class ConcreteType { return Executor.callMethod(environment, method, Optional.of(arguments.getReceiver()), arguments.getPositionalArguments()); }); })); - Map<MethodSignature, StaticMethodValue> staticMethods = classNode.getMethods() + Map<MethodSignature, StaticMethodValue> staticMethods = typeNode.getMethods() .stream() .filter(method -> method.isStatic()) .collect(toMap(method -> method.signature(), method -> { @@ -116,8 +124,8 @@ public class ConcreteType { }); })); return new ConcreteType( - classNode.getName(), - classNode.getSuperTypes(), + typeNode.getName(), + typeNode.getSuperTypes(), fields, classNode.getStaticConstructor(), constructor, |
