aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-13 19:29:38 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-13 19:29:38 +0000
commit67a50b8a79c963ec1790587d6af03d322454dc2a (patch)
tree10be5c5fc59c3cd6c9c94806aa7340adc7564b96 /src/main/java
parent0f4b398649e64a328b06345120ea2992f645b106 (diff)
Push instance checking into TypeSetTypeLevelValue
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java11
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetEffect.java5
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetMetaType.java5
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java5
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeConstructor.java5
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeLevelValue.java2
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetUserDefinedEffect.java5
7 files changed, 22 insertions, 16 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 769944c2..22519ef8 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().isAssignableFrom(constructedType.getClass())) {
+ if (valueType.isInstance(constructedType)) {
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().isAssignableFrom(typedFunctionTypeNode.value().getClass())) {
+ if (valueType.isInstance(typedFunctionTypeNode.value())) {
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().isAssignableFrom(typedTupleTypeNode.value().getClass())) {
+ if (valueType.isInstance(typedTupleTypeNode.value())) {
yield (TypedTypeLevelExpressionNode<T>) typedTupleTypeNode;
} else {
throw new UnexpectedTypeError(
@@ -1809,6 +1809,7 @@ public class TypeChecker {
return new TypedTupleTypeNode(tupleType, untyped.source());
}
+ @SuppressWarnings("unchecked")
private static <T extends TypeLevelValue> TypedTypeLevelExpressionNode<T> typeCheckTypeLevelReference(
TypeSetTypeLevelValue<T> valueType,
UntypedTypeLevelReferenceNode untyped,
@@ -1820,13 +1821,13 @@ public class TypeChecker {
throw new UnexpectedTypeError(valueType, type, untyped.source());
}
- if (!valueType.valueClass().isInstance(typeLevelValueType.value())) {
+ if (!valueType.isInstance(typeLevelValueType.value())) {
throw new UnexpectedTypeError(valueType, type, untyped.source());
}
return new TypedTypeLevelReferenceNode<>(
untyped.name(),
- valueType.valueClass().cast(typeLevelValueType.value()),
+ (T) typeLevelValueType.value(),
untyped.source()
);
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetEffect.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetEffect.java
index 6c250a7a..283d3ac7 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetEffect.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetEffect.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.typechecker.typesets;
import org.shedlang.compiler.types.Effect;
+import org.shedlang.compiler.types.TypeLevelValue;
public final class TypeSetEffect implements TypeSetTypeLevelValue<Effect> {
private TypeSetEffect() {
@@ -14,7 +15,7 @@ public final class TypeSetEffect implements TypeSetTypeLevelValue<Effect> {
}
@Override
- public Class<Effect> valueClass() {
- return Effect.class;
+ public boolean isInstance(TypeLevelValue value) {
+ return value instanceof Effect;
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetMetaType.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetMetaType.java
index 095c5c82..e325dcfa 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetMetaType.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetMetaType.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.typechecker.typesets;
import org.shedlang.compiler.types.Type;
+import org.shedlang.compiler.types.TypeLevelValue;
public final class TypeSetMetaType implements TypeSetTypeLevelValue<Type> {
private TypeSetMetaType() {
@@ -14,7 +15,7 @@ public final class TypeSetMetaType implements TypeSetTypeLevelValue<Type> {
}
@Override
- public Class<Type> valueClass() {
- return Type.class;
+ public boolean isInstance(TypeLevelValue value) {
+ return value instanceof Type;
}
}
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 b6db14cc..d6763a95 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetStructMetaType.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.typechecker.typesets;
import org.shedlang.compiler.types.StructType;
+import org.shedlang.compiler.types.TypeLevelValue;
public final class TypeSetStructMetaType implements TypeSetTypeLevelValue<StructType> {
private TypeSetStructMetaType() {
@@ -14,7 +15,7 @@ public final class TypeSetStructMetaType implements TypeSetTypeLevelValue<Struct
}
@Override
- public Class<StructType> valueClass() {
- return StructType.class;
+ public boolean isInstance(TypeLevelValue value) {
+ return value instanceof StructType;
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeConstructor.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeConstructor.java
index 4a5f5ad3..711fa31c 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeConstructor.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeConstructor.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.typechecker.typesets;
import org.shedlang.compiler.types.TypeConstructor;
+import org.shedlang.compiler.types.TypeLevelValue;
public final class TypeSetTypeConstructor implements TypeSetTypeLevelValue<TypeConstructor> {
private TypeSetTypeConstructor() {
@@ -14,7 +15,7 @@ public final class TypeSetTypeConstructor implements TypeSetTypeLevelValue<TypeC
}
@Override
- public Class<TypeConstructor> valueClass() {
- return TypeConstructor.class;
+ public boolean isInstance(TypeLevelValue value) {
+ return value instanceof TypeConstructor<?>;
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeLevelValue.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeLevelValue.java
index 9159a2d5..9d1e6c61 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeLevelValue.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetTypeLevelValue.java
@@ -3,5 +3,5 @@ package org.shedlang.compiler.typechecker.typesets;
import org.shedlang.compiler.types.TypeLevelValue;
public sealed interface TypeSetTypeLevelValue<T extends TypeLevelValue> extends TypeSet permits TypeSetEffect, TypeSetMetaType, TypeSetStructMetaType, TypeSetTypeConstructor, TypeSetUserDefinedEffect {
- Class<T> valueClass();
+ boolean isInstance(TypeLevelValue value);
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetUserDefinedEffect.java b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetUserDefinedEffect.java
index 3ee46d2c..9f39cc3f 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetUserDefinedEffect.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/typesets/TypeSetUserDefinedEffect.java
@@ -1,5 +1,6 @@
package org.shedlang.compiler.typechecker.typesets;
+import org.shedlang.compiler.types.TypeLevelValue;
import org.shedlang.compiler.types.UserDefinedEffect;
public final class TypeSetUserDefinedEffect implements TypeSetTypeLevelValue<UserDefinedEffect> {
@@ -14,7 +15,7 @@ public final class TypeSetUserDefinedEffect implements TypeSetTypeLevelValue<Use
}
@Override
- public Class<UserDefinedEffect> valueClass() {
- return UserDefinedEffect.class;
+ public boolean isInstance(TypeLevelValue value) {
+ return value instanceof UserDefinedEffect;
}
}