aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
-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);
+ }
+}