aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-10 14:16:07 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-10 14:16:07 +0100
commit5116bf791a6360627e6683d818623b49e25900a5 (patch)
tree1b74dfcfdba4ee8989ddaf4cb49d86e87ccbdc9f /src/main/java/org/zwobble/couscous/interpreter
parent854993655d4318d565226413645268f0885df0cb (diff)
Move project classes into correct package
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Environment.java1
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Interpreter.java1
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/JavaProject.java25
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java56
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Project.java8
5 files changed, 89 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Environment.java b/src/main/java/org/zwobble/couscous/interpreter/Environment.java
index 111e18d..9a884f3 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Environment.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Environment.java
@@ -3,7 +3,6 @@ package org.zwobble.couscous.interpreter;
import java.util.Map;
import java.util.Optional;
-import org.zwobble.couscous.Project;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.VariableDeclaration;
import org.zwobble.couscous.ast.VariableNode;
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
index 88e9d0e..0506a59 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
@@ -4,7 +4,6 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-import org.zwobble.couscous.Project;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
diff --git a/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java
new file mode 100644
index 0000000..fd01053
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/JavaProject.java
@@ -0,0 +1,25 @@
+package org.zwobble.couscous.interpreter;
+
+import java.util.List;
+
+import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.interpreter.values.BoxedIntegerInterpreterValue;
+import org.zwobble.couscous.interpreter.values.ConcreteType;
+
+import com.google.common.collect.Iterables;
+
+import lombok.val;
+
+public class JavaProject {
+ public static MapBackedProject.Builder builder() {
+ return MapBackedProject.builder()
+ .addClass(BoxedIntegerInterpreterValue.TYPE);
+ }
+
+ public static Project of(List<ClassNode> classNodes) {
+ val concreteTypes = Iterables.transform(classNodes, ConcreteType::fromNode);
+ return builder()
+ .addClasses(concreteTypes)
+ .build();
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java b/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
new file mode 100644
index 0000000..7206b1a
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/MapBackedProject.java
@@ -0,0 +1,56 @@
+package org.zwobble.couscous.interpreter;
+
+import java.util.Map;
+
+import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.interpreter.values.ConcreteType;
+
+import com.google.common.collect.ImmutableMap;
+
+import lombok.val;
+
+public class MapBackedProject implements Project {
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private final ImmutableMap.Builder<TypeName, ConcreteType> classes;
+
+ private Builder() {
+ classes = ImmutableMap.builder();
+ }
+
+ public Builder addClass(ConcreteType clazz) {
+ classes.put(clazz.getName(), clazz);
+ return this;
+ }
+
+ public Builder addClasses(Iterable<ConcreteType> classes) {
+ for (val clazz : classes) {
+ addClass(clazz);
+ }
+ return this;
+ }
+
+ public Project build() {
+ return new MapBackedProject(classes.build());
+ }
+ }
+
+ private Map<TypeName, ConcreteType> classes;
+
+ public MapBackedProject(Map<TypeName, ConcreteType> classes) {
+ this.classes = classes;
+ }
+
+ @Override
+ public ConcreteType findClass(TypeName name) {
+ if (classes.containsKey(name)) {
+ return classes.get(name);
+ } else {
+ throw new IllegalArgumentException("Cannot find class: " + name);
+ }
+
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Project.java b/src/main/java/org/zwobble/couscous/interpreter/Project.java
new file mode 100644
index 0000000..287ac9c
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/Project.java
@@ -0,0 +1,8 @@
+package org.zwobble.couscous.interpreter;
+
+import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.interpreter.values.ConcreteType;
+
+public interface Project {
+ ConcreteType findClass(TypeName name);
+}