aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 14:40:55 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 14:40:55 +0100
commit01bd9f9bdfa3d6257d5fd0177c769b30de8f4930 (patch)
tree44fd4c285cdb012d4dae7d46950d2385102c0e8e /src/main/java
parent23dc359d91ac4a90b65d3c4927b3cd928b63da3a (diff)
Encode what type-level value type-level expressions hold
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelExpressionNode.java4
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelReferenceNode.java6
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java7
3 files changed, 9 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelExpressionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelExpressionNode.java
index 4b10483d..469f0bcf 100644
--- a/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelExpressionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelExpressionNode.java
@@ -2,6 +2,6 @@ package org.shedlang.compiler.ast.typed;
import org.shedlang.compiler.types.TypeLevelValue;
-public interface TypedTypeLevelExpressionNode extends TypedNode {
- TypeLevelValue value();
+public interface TypedTypeLevelExpressionNode<T extends TypeLevelValue> extends TypedNode {
+ T value();
}
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelReferenceNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelReferenceNode.java
index 009d0b8b..050061a6 100644
--- a/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelReferenceNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedTypeLevelReferenceNode.java
@@ -3,9 +3,9 @@ package org.shedlang.compiler.ast.typed;
import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.types.TypeLevelValue;
-public record TypedTypeLevelReferenceNode(
+public record TypedTypeLevelReferenceNode<T extends TypeLevelValue>(
String name,
- TypeLevelValue value,
+ T value,
Source source
-) implements TypedTypeLevelExpressionNode {
+) implements TypedTypeLevelExpressionNode<T> {
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index f2af9769..63699416 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -7,6 +7,7 @@ import org.shedlang.compiler.typechecker.errors.*;
import org.shedlang.compiler.typechecker.typesets.TypeSets;
import org.shedlang.compiler.types.FunctionType;
import org.shedlang.compiler.types.Type;
+import org.shedlang.compiler.types.TypeLevelValue;
import org.shedlang.compiler.types.TypeLevelValueType;
import java.util.HashSet;
@@ -201,7 +202,7 @@ public class TypeChecker {
);
}
- static TypedTypeLevelExpressionNode typeCheckTypeLevelExpression(
+ static TypedTypeLevelExpressionNode<TypeLevelValue> typeCheckTypeLevelExpression(
UntypedTypeLevelExpressionNode untyped,
TypeCheckerContext context
) {
@@ -211,7 +212,7 @@ public class TypeChecker {
};
}
- private static TypedTypeLevelExpressionNode typeCheckTypeLevelReference(
+ private static TypedTypeLevelExpressionNode<TypeLevelValue> typeCheckTypeLevelReference(
UntypedTypeLevelReferenceNode untyped,
TypeCheckerContext context
) {
@@ -221,7 +222,7 @@ public class TypeChecker {
throw new UnexpectedTypeError(TypeSets.TYPE_LEVEL_VALUE, type, untyped.source());
}
- return new TypedTypeLevelReferenceNode(
+ return new TypedTypeLevelReferenceNode<>(
untyped.name(),
typeLevelValueType.value(),
untyped.source()