From 8711de89810f1cd6782d98e0e4745c30532a77ac Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 17:52:18 +0000 Subject: Support type literals in the backends --- .../interpreter/values/InterpreterValues.java | 3 +- .../interpreter/values/TypeInterpreterValue.java | 44 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java (limited to 'src/main/java/org/zwobble/couscous/interpreter/values') 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 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); + } +} -- cgit v1.2.3