diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 17:52:18 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 17:52:18 +0000 |
| commit | 8711de89810f1cd6782d98e0e4745c30532a77ac (patch) | |
| tree | fd99c496f52eeaaa2dee10cfb71ea2dc9580bae8 /src/main/java/org/zwobble/couscous/interpreter/values | |
| parent | 7dab9cb11a7181094144e4319716c4d91262a289 (diff) | |
Support type literals in the backends
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValues.java | 3 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java | 44 |
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); + } +} |
