From 0f4b398649e64a328b06345120ea2992f645b106 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Jan 2024 19:20:39 +0000 Subject: Update TypeSetStructMetaType to match all struct types --- .../shedlang/compiler/typechecker/TypeChecker.java | 21 +++++---------------- .../typechecker/typesets/TypeSetStructMetaType.java | 8 ++++---- 2 files changed, 9 insertions(+), 20 deletions(-) (limited to 'src/main/java') 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) 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) 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) 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 { +public final class TypeSetStructMetaType implements TypeSetTypeLevelValue { private TypeSetStructMetaType() { } @@ -14,7 +14,7 @@ public final class TypeSetStructMetaType implements TypeSetTypeLevelValue valueClass() { - return SimpleStructType.class; + public Class valueClass() { + return StructType.class; } } -- cgit v1.2.3