diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-13 19:20:39 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-13 19:20:39 +0000 |
| commit | 0f4b398649e64a328b06345120ea2992f645b106 (patch) | |
| tree | d97fad094d4190dc58e6adcf55bb36cf95555b49 /src/main/java | |
| parent | c109b45a80078e306d983b27c91e31a0cae50eac (diff) | |
Update TypeSetStructMetaType to match all struct types
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 21 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java | 8 |
2 files changed, 9 insertions, 20 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index ca33cf0a..769944c2 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -1722,7 +1722,7 @@ public class TypeChecker { var constructedType = Types.constructedType(constructor, args); // TODO: tidy this (and other similar checks in this function) up - if (valueType.valueClass().equals(Type.class)) { + if (valueType.valueClass().isAssignableFrom(constructedType.getClass())) { yield (TypedTypeLevelExpressionNode<T>) new TypedConstructedTypeNode( constructedType, constructedTypeNode.source() @@ -1739,7 +1739,7 @@ public class TypeChecker { case UntypedFunctionTypeNode functionType -> { var typedFunctionTypeNode = typeCheckFunctionType(functionType, context); - if (valueType.valueClass().equals(Type.class)) { + if (valueType.valueClass().isAssignableFrom(typedFunctionTypeNode.value().getClass())) { yield (TypedTypeLevelExpressionNode<T>) typedFunctionTypeNode; } else { throw new UnexpectedTypeError( @@ -1753,7 +1753,7 @@ public class TypeChecker { case UntypedTupleTypeNode tuple -> { var typedTupleTypeNode = typeCheckTupleType(tuple, context); - if (valueType.valueClass().equals(Type.class)) { + if (valueType.valueClass().isAssignableFrom(typedTupleTypeNode.value().getClass())) { yield (TypedTypeLevelExpressionNode<T>) typedTupleTypeNode; } else { throw new UnexpectedTypeError( @@ -2169,23 +2169,12 @@ public class TypeChecker { TypeCheckerContext context ) { var typedCaseType = typeCheckTypeLevelExpression( - TypeSets.META_TYPE, + TypeSets.STRUCT_META_TYPE, untyped.caseType(), context ); - var variant = switch (typedCaseType.value()) { - case StructType structType -> - structType; - - default -> - throw new UnexpectedTypeError( - // TODO: somehow update TypeSets.STRUCT_META_TYPE to allow constructed struct types - TypeSets.STRUCT_META_TYPE, - typedCaseType.value(), - untyped.caseType().source() - ); - }; + var variant = typedCaseType.value(); var declaredVariables = DeclaredVariables.forFunctionStatements( untyped.body().statements(), diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java index c5641dcf..b6db14cc 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java +++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java @@ -1,8 +1,8 @@ package org.shedlang.compiler.typechecker.typesets; -import org.shedlang.compiler.types.SimpleStructType; +import org.shedlang.compiler.types.StructType; -public final class TypeSetStructMetaType implements TypeSetTypeLevelValue<SimpleStructType> { +public final class TypeSetStructMetaType implements TypeSetTypeLevelValue<StructType> { private TypeSetStructMetaType() { } @@ -14,7 +14,7 @@ public final class TypeSetStructMetaType implements TypeSetTypeLevelValue<Simple } @Override - public Class<SimpleStructType> valueClass() { - return SimpleStructType.class; + public Class<StructType> valueClass() { + return StructType.class; } } |
