aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-13 19:20:39 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-13 19:20:39 +0000
commit0f4b398649e64a328b06345120ea2992f645b106 (patch)
treed97fad094d4190dc58e6adcf55bb36cf95555b49 /src/main/java
parentc109b45a80078e306d983b27c91e31a0cae50eac (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.java21
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java8
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;
}
}