aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-28 11:36:25 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-28 11:36:25 +0000
commit4e4f98062c07afdeef14d4031ca69668649e5873 (patch)
tree6415aea98dc33ab50c490fbb3f812412f6dad8f0 /src/main/java/org/zwobble/couscous/interpreter
parentc588167505864bece6cbb2dc68814f7d967d9a6a (diff)
Introduce InterfaceNode
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/JavaProject.java3
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java20
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,