diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-28 19:18:28 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-29 08:04:42 +0000 |
| commit | b7e0010d6e8e5413fcd66eae158111db509eb27b (patch) | |
| tree | 35fafacd7819788b185f803a0c3797a2f54a1dca /src/main/java/org/zwobble/couscous/interpreter/values | |
| parent | d3e9fb5ce2a13bdb0ee39e9625494e8c5d2a9383 (diff) | |
Split ConcreteType up into specialised type implementations
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values')
13 files changed, 49 insertions, 267 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java index 2ac6e3a..a183206 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java @@ -2,6 +2,8 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.errors.NoSuchField; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -18,7 +20,7 @@ public final class BooleanInterpreterValue implements InterpreterValue { return value ? TRUE : FALSE; } - private static final ConcreteType TYPE = ConcreteType.builder(BooleanInterpreterValue.class, "boolean") + private static final InterpreterType TYPE = IntrinsicInterpreterType.builder(BooleanInterpreterValue.class, "boolean") .method(Operator.BOOLEAN_NOT.getSymbol(), list(), BooleanValue.REF, (environment, arguments) -> of(!arguments.getReceiver().getValue())) @@ -46,7 +48,7 @@ public final class BooleanInterpreterValue implements InterpreterValue { } @Override - public ConcreteType getType() { + public InterpreterType getType() { return TYPE; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java index 951d57d..5c477af 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/BoxedIntegerInterpreterValue.java @@ -1,5 +1,7 @@ package org.zwobble.couscous.interpreter.values; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.ObjectValues; @@ -18,7 +20,7 @@ public class BoxedIntegerInterpreterValue { return obj; } - public static final ConcreteType TYPE = ConcreteType.classBuilder("java.lang.Integer") + public static final InterpreterType TYPE = IntrinsicInterpreterType.classBuilder("java.lang.Integer") .field("value", IntegerValue.REF) .staticMethod("parseInt", list(StringValue.REF), IntegerValue.REF, diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java b/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java deleted file mode 100644 index ed01d59..0000000 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ConcreteType.java +++ /dev/null @@ -1,240 +0,0 @@ -package org.zwobble.couscous.interpreter.values; - -import com.google.common.collect.ImmutableMap; -import org.zwobble.couscous.ast.*; -import org.zwobble.couscous.interpreter.Environment; -import org.zwobble.couscous.interpreter.Executor; -import org.zwobble.couscous.interpreter.InterpreterTypes; -import org.zwobble.couscous.interpreter.PositionalArguments; -import org.zwobble.couscous.interpreter.errors.NoSuchMethod; -import org.zwobble.couscous.interpreter.errors.WrongNumberOfArguments; - -import java.util.*; -import java.util.function.BiFunction; -import java.util.stream.Collectors; - -import static java.util.stream.Collectors.toMap; -import static org.zwobble.couscous.util.Casts.tryCast; -import static org.zwobble.couscous.util.ExtraLists.list; -import static org.zwobble.couscous.util.ExtraMaps.map; -import static org.zwobble.couscous.util.ExtraSets.set; - -public class ConcreteType { - public static <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, TypeName reference) { - return new Builder<>(interpreterValueType, reference); - } - - public static <T> ConcreteType.Builder<T> builder(Class<T> interpreterValueType, String name) { - return builder(interpreterValueType, TypeName.of(name)); - } - - public static ConcreteType.Builder<ObjectInterpreterValue> classBuilder(String name) { - return builder(ObjectInterpreterValue.class, name); - } - - public static class Builder<T> { - private final ImmutableMap.Builder<String, FieldDeclarationNode> fields = ImmutableMap.builder(); - private MethodValue constructor = new MethodValue(list(), (environment, arguments) -> InterpreterValues.UNIT); - private final ImmutableMap.Builder<MethodSignature, MethodValue> methods = ImmutableMap.builder(); - private final ImmutableMap.Builder<MethodSignature, StaticMethodValue> staticMethods = ImmutableMap.builder(); - private final Class<T> interpreterValueType; - private final TypeName name; - - public Builder(Class<T> interpreterValueType, TypeName name) { - this.interpreterValueType = interpreterValueType; - this.name = name; - } - - public Builder<T> field(String name, TypeName type) { - fields.put(name, FieldDeclarationNode.field(name, type)); - return this; - } - - public Builder<T> constructor(List<TypeName> argumentsTypes, BiFunction<Environment, MethodCallArguments<T>, InterpreterValue> method) { - constructor = toMethodValue(argumentsTypes, method); - return this; - } - - public Builder<T> method( - String name, - List<TypeName> argumentsTypes, - TypeName returnType, - BiFunction<Environment, MethodCallArguments<T>, InterpreterValue> method) - { - methods.put(new MethodSignature(name, argumentsTypes, returnType), toMethodValue(argumentsTypes, method)); - return this; - } - - private MethodValue toMethodValue(List<TypeName> argumentsTypes, BiFunction<Environment, MethodCallArguments<T>, InterpreterValue> method) { - return new MethodValue( - argumentsTypes, - (environment, arguments) -> - tryCast(interpreterValueType, arguments.getReceiver()) - .map(typedReceiver -> method.apply(environment, MethodCallArguments.of(typedReceiver, arguments.getPositionalArguments()))) - .orElseThrow(() -> new RuntimeException("receiver is of wrong type"))); - } - - public Builder<T> staticMethod( - String name, - List<TypeName> argumentsTypes, - TypeName returnType, - BiFunction<Environment, PositionalArguments, InterpreterValue> method) - { - staticMethods.put(new MethodSignature(name, argumentsTypes, returnType), new StaticMethodValue(argumentsTypes, method)); - return this; - } - - public ConcreteType build() { - return new ConcreteType( - name, - Collections.emptySet(), - fields.build(), - list(), - constructor, - methods.build(), - staticMethods.build()); - } - } - - public static ConcreteType fromNode(TypeNode typeNode) { - return tryCast(ClassNode.class, typeNode) - .map(ConcreteType::fromNode) - // TODO: tidy this up -- type hierarchy instead of one ConcreteType? - .orElseGet(() -> new ConcreteType( - typeNode.getName(), - set(), - map(), - list(), - null, - map(), - map())); - } - - private static ConcreteType fromNode(ClassNode classNode) { - Map<String, FieldDeclarationNode> fields = classNode.getFields().stream() - .collect(toMap( - field -> field.getName(), - field -> field)); - MethodValue constructor = new MethodValue( - getArgumentTypes(classNode.getConstructor().getArguments()), - (environment, arguments) -> Executor.callConstructor( - environment, - classNode.getConstructor(), - Optional.of(arguments.getReceiver()), - arguments.getPositionalArguments())); - - Map<MethodSignature, MethodValue> methods = classNode.getMethods() - .stream() - .filter(method -> !method.isStatic()) - .collect(toMap(method -> method.signature(), method -> { - List<TypeName> argumentTypes = getArgumentTypes(method.getArguments()); - return new MethodValue(argumentTypes, (environment, arguments) -> { - return Executor.callMethod(environment, method, Optional.of(arguments.getReceiver()), arguments.getPositionalArguments()); - }); - })); - Map<MethodSignature, StaticMethodValue> staticMethods = classNode.getMethods() - .stream() - .filter(method -> method.isStatic()) - .collect(toMap(method -> method.signature(), method -> { - List<TypeName> argumentTypes = getArgumentTypes(method.getArguments()); - return new StaticMethodValue(argumentTypes, (environment, arguments) -> { - return Executor.callMethod(environment, method, Optional.empty(), arguments); - }); - })); - return new ConcreteType( - classNode.getName(), - classNode.getSuperTypes(), - fields, - classNode.getStaticConstructor(), - constructor, - methods, - staticMethods); - } - - private static List<TypeName> getArgumentTypes(List<FormalArgumentNode> arguments) { - return arguments.stream().map(arg -> arg.getType()).collect(Collectors.toList()); - } - private final TypeName name; - private final Set<TypeName> superTypes; - private final Map<String, FieldDeclarationNode> fields; - private final List<StatementNode> staticConstructor; - private final MethodValue constructor; - private final Map<MethodSignature, MethodValue> methods; - private final Map<MethodSignature, StaticMethodValue> staticMethods; - - private ConcreteType( - TypeName name, - Set<TypeName> superTypes, - Map<String, FieldDeclarationNode> fields, - List<StatementNode> staticConstructor, - MethodValue constructor, - Map<MethodSignature, MethodValue> methods, - Map<MethodSignature, StaticMethodValue> staticMethods) - { - this.name = name; - this.superTypes = superTypes; - this.fields = fields; - this.staticConstructor = staticConstructor; - this.constructor = constructor; - this.methods = methods; - this.staticMethods = staticMethods; - } - - public TypeName getName() { - return name; - } - - public Set<TypeName> getSuperTypes() { - return superTypes; - } - - public Optional<FieldDeclarationNode> getField(boolean isStatic, String fieldName) { - return Optional.ofNullable(fields.get(fieldName)) - .filter(field -> field.isStatic() == isStatic); - } - - public List<StatementNode> getStaticConstructor() { - return staticConstructor; - } - - public InterpreterValue callMethod(Environment environment, InterpreterValue receiver, MethodSignature signature, List<InterpreterValue> arguments) { - MethodValue method = findMethod(methods, signature, arguments); - return method.apply(environment, MethodCallArguments.of(receiver, new PositionalArguments(arguments))); - } - - public InterpreterValue callStaticMethod(Environment environment, MethodSignature signature, List<InterpreterValue> arguments) { - StaticMethodValue method = findMethod(staticMethods, signature, arguments); - return method.apply(environment, new PositionalArguments(arguments)); - } - - public InterpreterValue callConstructor(Environment environment, List<InterpreterValue> arguments) { - final org.zwobble.couscous.interpreter.values.ObjectInterpreterValue object = new ObjectInterpreterValue(this); - checkMethodArguments(constructor, arguments); - constructor.apply(environment, MethodCallArguments.of(object, new PositionalArguments(arguments))); - return object; - } - - private static <T extends Callable> T findMethod(Map<MethodSignature, T> methods, MethodSignature signature, List<InterpreterValue> arguments) { - if (!methods.containsKey(signature)) { - throw new NoSuchMethod(signature); - } - final T method = methods.get(signature); - checkMethodArguments(method, arguments); - return method; - } - - private static void checkMethodArguments(final Callable method, List<InterpreterValue> arguments) { - if (method.getArgumentTypes().size() != arguments.size()) { - throw new WrongNumberOfArguments(method.getArgumentTypes().size(), arguments.size()); - } - for (int index = 0; index < arguments.size(); index++) { - final org.zwobble.couscous.ast.TypeName formalArgumentType = method.getArgumentTypes().get(index); - InterpreterTypes.checkIsInstance(formalArgumentType, arguments.get(index)); - } - } - - @Override - public String toString() { - return "ConcreteType<" + name + ">"; - } -}
\ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java index 8179394..cdc2167 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java @@ -2,6 +2,7 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.interpreter.Environment; +import org.zwobble.couscous.interpreter.types.InterpreterType; import java.util.List; @@ -14,7 +15,7 @@ public class InstanceReceiverValue implements ReceiverValue { @Override public InterpreterValue callMethod(Environment environment, MethodSignature signature, List<InterpreterValue> arguments) { - ConcreteType type = value.getType(); + InterpreterType type = value.getType(); return type.callMethod(environment, value, signature, arguments); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java index 78da460..f0ce783 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java @@ -3,6 +3,8 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.errors.NoSuchField; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.PrimitiveValue; @@ -14,7 +16,7 @@ import java.util.function.BiFunction; import static org.zwobble.couscous.util.ExtraLists.list; public final class IntegerInterpreterValue implements InterpreterValue { - public static final ConcreteType TYPE = ConcreteType.builder(IntegerInterpreterValue.class, IntegerValue.REF) + public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(IntegerInterpreterValue.class, IntegerValue.REF) .method(Operator.ADD.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, infixReturningInteger((left, right) -> left + right)) .method(Operator.SUBTRACT.getSymbol(), list(IntegerValue.REF), IntegerValue.REF, @@ -71,7 +73,7 @@ public final class IntegerInterpreterValue implements InterpreterValue { private final int value; @Override - public ConcreteType getType() { + public InterpreterType getType() { return TYPE; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java index e39f576..faab2a8 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InternalCouscousInterpreterValue.java @@ -1,12 +1,14 @@ package org.zwobble.couscous.interpreter.values; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.ObjectValues; import static org.zwobble.couscous.util.ExtraLists.list; public class InternalCouscousInterpreterValue { - public static final ConcreteType TYPE = ConcreteType.classBuilder("_couscous") + public static final InterpreterType TYPE = IntrinsicInterpreterType.classBuilder("_couscous") .staticMethod("same", list(ObjectValues.OBJECT, ObjectValues.OBJECT), BooleanValue.REF, (environment, arguments) -> BooleanInterpreterValue.of(arguments.get(0) == arguments.get(1))) diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java index 1661ee7..50ed24f 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterFields.java @@ -4,24 +4,25 @@ import org.zwobble.couscous.ast.FieldDeclarationNode; import org.zwobble.couscous.interpreter.InterpreterTypes; import org.zwobble.couscous.interpreter.errors.NoSuchField; import org.zwobble.couscous.interpreter.errors.UnboundField; +import org.zwobble.couscous.interpreter.types.InterpreterType; import java.util.HashMap; import java.util.Map; public class InterpreterFields { - public static InterpreterFields forClass(ConcreteType type) { + public static InterpreterFields forClass(InterpreterType type) { return new InterpreterFields(true, type); } - public static InterpreterFields forInstanceOf(ConcreteType type) { + public static InterpreterFields forInstanceOf(InterpreterType type) { return new InterpreterFields(false, type); } private final boolean isStatic; - private final ConcreteType type; + private final InterpreterType type; private final Map<String, InterpreterValue> fields; - private InterpreterFields(boolean isStatic, ConcreteType type) { + private InterpreterFields(boolean isStatic, InterpreterType type) { this.isStatic = isStatic; this.type = type; this.fields = new HashMap<>(); @@ -43,7 +44,8 @@ public class InterpreterFields { } private FieldDeclarationNode getFieldDefinition(String fieldName) { - return type.getField(isStatic, fieldName) + return type.getField(fieldName) + .filter(field -> field.isStatic() == isStatic) .orElseThrow(() -> new NoSuchField(fieldName)); } } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java index e02387b..831ba2c 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java @@ -1,11 +1,12 @@ package org.zwobble.couscous.interpreter.values; -import java.util.Optional; - +import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.values.PrimitiveValue; +import java.util.Optional; + public interface InterpreterValue { - ConcreteType getType(); + InterpreterType getType(); Optional<PrimitiveValue> toPrimitiveValue(); InterpreterValue getField(String fieldName); void setField(String fieldName, InterpreterValue value); diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java index e15c01d..aadf44b 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java @@ -1,20 +1,21 @@ package org.zwobble.couscous.interpreter.values; +import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.values.PrimitiveValue; import java.util.Optional; public class ObjectInterpreterValue implements InterpreterValue { - private final ConcreteType type; + private final InterpreterType type; private final InterpreterFields fields; - public ObjectInterpreterValue(ConcreteType type) { + public ObjectInterpreterValue(InterpreterType type) { this.type = type; this.fields = InterpreterFields.forInstanceOf(type); } @Override - public ConcreteType getType() { + public InterpreterType getType() { return type; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java index 2595623..cf2c9b7 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java @@ -3,14 +3,15 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.MethodSignature; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.Executor; +import org.zwobble.couscous.interpreter.types.InterpreterType; import java.util.List; public class StaticReceiverValue implements ReceiverValue { - private final ConcreteType type; + private final InterpreterType type; private final InterpreterFields fields; - public StaticReceiverValue(ConcreteType type) { + public StaticReceiverValue(InterpreterType type) { this.type = type; this.fields = InterpreterFields.forClass(type); } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java index ae7d141..2fe72d7 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java @@ -2,6 +2,8 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.Operator; import org.zwobble.couscous.interpreter.errors.NoSuchField; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.*; import java.util.Optional; @@ -9,7 +11,7 @@ import java.util.Optional; import static org.zwobble.couscous.util.ExtraLists.list; public final class StringInterpreterValue implements InterpreterValue { - public static final ConcreteType TYPE = ConcreteType.builder(StringInterpreterValue.class, StringValue.REF) + public static final InterpreterType TYPE = IntrinsicInterpreterType.builder(StringInterpreterValue.class, StringValue.REF) .method("length", list(), IntegerValue.REF, (environment, arguments) -> new IntegerInterpreterValue(arguments.getReceiver().value.length())) @@ -49,7 +51,7 @@ public final class StringInterpreterValue implements InterpreterValue { } @Override - public ConcreteType getType() { + public InterpreterType getType() { return TYPE; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java index 5938ce3..f221ea0 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/TypeInterpreterValue.java @@ -2,6 +2,8 @@ package org.zwobble.couscous.interpreter.values; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.interpreter.errors.NoSuchField; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.ObjectValues; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; @@ -9,7 +11,8 @@ 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) + public static final InterpreterType TYPE = IntrinsicInterpreterType + .builder(TypeInterpreterValue.class, ObjectValues.CLASS) .build(); public static InterpreterValue of(TypeName type) { @@ -23,7 +26,7 @@ public class TypeInterpreterValue implements InterpreterValue { } @Override - public ConcreteType getType() { + public InterpreterType getType() { return TYPE; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java index 54f5605..59792c6 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java @@ -1,19 +1,22 @@ package org.zwobble.couscous.interpreter.values; -import java.util.Optional; import org.zwobble.couscous.interpreter.errors.NoSuchField; +import org.zwobble.couscous.interpreter.types.InterpreterType; +import org.zwobble.couscous.interpreter.types.IntrinsicInterpreterType; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; +import java.util.Optional; + public class UnitInterpreterValue implements InterpreterValue { - private static final ConcreteType TYPE = ConcreteType.builder(UnitInterpreterValue.class, "Unit").build(); + private static final InterpreterType TYPE = IntrinsicInterpreterType.builder(UnitInterpreterValue.class, "Unit").build(); public static final UnitInterpreterValue UNIT = new UnitInterpreterValue(); private UnitInterpreterValue() { } @Override - public ConcreteType getType() { + public InterpreterType getType() { return TYPE; } |
