aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 1555b7e8..e0bc492b 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -717,8 +717,7 @@ public class TypeChecker {
.map(untypedEffect -> typeCheckEffect(untypedEffect, context));
var typedReturnType = untyped.returnType()
- .map(untypedReturnType -> typeCheckTypeLevelExpression(
- TypeSets.META_TYPE,
+ .map(untypedReturnType -> typeCheckTypeExpression(
untypedReturnType,
context
));
@@ -778,8 +777,7 @@ public class TypeChecker {
TypeCheckerContext context
) {
var positionalParams = untyped.params().positional().stream()
- .map(param -> typeCheckTypeLevelExpression(
- TypeSets.META_TYPE,
+ .map(param -> typeCheckTypeExpression(
param,
context
).value())
@@ -806,8 +804,7 @@ public class TypeChecker {
.map(untypedEffect -> typeCheckEffect(untypedEffect, context).value())
.orElse(Effects.NONE);
- var returnType = typeCheckTypeLevelExpression(
- TypeSets.META_TYPE,
+ var returnType = typeCheckTypeExpression(
untyped.returnType(),
context
).value();
@@ -829,7 +826,7 @@ public class TypeChecker {
) {
return new TypedParamNode(
untyped.name(),
- typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped.type(), context),
+ typeCheckTypeExpression(untyped.type(), context),
untyped.source()
);
}
@@ -1050,7 +1047,7 @@ public class TypeChecker {
return new TypedParamNode(
untyped.name(),
// TODO: handle param without type
- typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped.type().orElseThrow(), context),
+ typeCheckTypeExpression(untyped.type().orElseThrow(), context),
untyped.source()
);
}
@@ -1117,7 +1114,7 @@ public class TypeChecker {
for (var untypedField : untyped.fields()) {
var typedFieldNode = new TypedStructFieldDefinitionNode(
untypedField.name(),
- typeCheckTypeLevelExpression(TypeSets.META_TYPE, untypedField.type(), context),
+ typeCheckTypeExpression(untypedField.type(), context),
untypedField.source()
);
typedFieldNodes.add(typedFieldNode);
@@ -1171,8 +1168,7 @@ public class TypeChecker {
// TODO: restrict variants to structs. Do we allow other sum types?
var variants = untyped.variants().stream()
.map(untypedVariant -> {
- var variantType = typeCheckTypeLevelExpression(
- TypeSets.META_TYPE,
+ var variantType = typeCheckTypeExpression(
untypedVariant,
context
).value();
@@ -1203,6 +1199,13 @@ public class TypeChecker {
};
}
+ private static TypedTypeLevelExpressionNode<Type> typeCheckTypeExpression(
+ UntypedTypeLevelExpressionNode untyped,
+ TypeCheckerContext context
+ ) {
+ return typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context);
+ }
+
@SuppressWarnings("unchecked")
static <T extends TypeLevelValue> TypedTypeLevelExpressionNode<T> typeCheckTypeLevelExpression(
TypeSetTypeLevelValue<T> valueType,
@@ -1271,8 +1274,7 @@ public class TypeChecker {
TypeCheckerContext context
) {
var elementTypes = untyped.elements().stream()
- .map(elementType -> typeCheckTypeLevelExpression(
- TypeSets.META_TYPE,
+ .map(elementType -> typeCheckTypeExpression(
elementType,
context
).value())