aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 17:52:18 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 17:52:18 +0000
commit8711de89810f1cd6782d98e0e4745c30532a77ac (patch)
treefd99c496f52eeaaa2dee10cfb71ea2dc9580bae8 /src/main/java/org/zwobble/couscous/interpreter
parent7dab9cb11a7181094144e4319716c4d91262a289 (diff)
Support type literals in the backends
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java3
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java44
2 files changed, 45 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
index c405fe3..db33b9d 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java
@@ -39,8 +39,7 @@ public class InterpreterValues {
@Override
public InterpreterValue visit(TypeValue value) {
- // TODO:
- throw new UnsupportedOperationException();
+ return TypeInterpreterValue.of(value.getValue());
}
});
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java
new file mode 100644
index 0000000..97cf6ec
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java
@@ -0,0 +1,44 @@
+package org.zwobble.couscous.interpreter.values;
+
+import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.interpreter.NoSuchField;
+import org.zwobble.couscous.values.ObjectValues;
+import org.zwobble.couscous.values.PrimitiveValue;
+import org.zwobble.couscous.values.PrimitiveValues;
+
+import java.util.Optional;
+
+public class TypeInterpreterValue implements InterpreterValue {
+ public static final ConcreteType TYPE = ConcreteType.builder(TypeInterpreterValue.class, ObjectValues.CLASS)
+ .build();
+
+ public static InterpreterValue of(TypeName type) {
+ return new TypeInterpreterValue(type);
+ }
+
+ private final TypeName type;
+
+ public TypeInterpreterValue(TypeName type) {
+ this.type = type;
+ }
+
+ @Override
+ public ConcreteType getType() {
+ return TYPE;
+ }
+
+ @Override
+ public Optional<PrimitiveValue> toPrimitiveValue() {
+ return Optional.of(PrimitiveValues.value(type));
+ }
+
+ @Override
+ public InterpreterValue getField(String fieldName) {
+ throw new NoSuchField(fieldName);
+ }
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ throw new NoSuchField(fieldName);
+ }
+}