From dfced83cd4ba6e49c395ea4106fc6f9fd7250de0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Mar 2024 14:07:54 +0000 Subject: Introduce TypeLevelParam --- .../ast/typed/TypedFunctionSignatureNodeMatcher.java | 4 ++-- .../java/org/shedlang/compiler/ast/untyped/Untyped.java | 4 ++++ .../typechecker/TypeCheckerTypeLevelParamTests.java | 14 ++++++++++++++ .../java/org/shedlang/compiler/types/TypeMatchers.java | 2 +- 4 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java index d6038729..3e51962d 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java @@ -3,7 +3,7 @@ package org.shedlang.compiler.ast.typed; import org.pcollections.Empty; import org.pcollections.PVector; import org.shedlang.compiler.testing.MatcherBuilder; -import org.shedlang.compiler.types.TypeParam; +import org.shedlang.compiler.types.TypeLevelParam; import org.zwobble.precisely.Matcher; import java.util.Optional; @@ -51,7 +51,7 @@ public class TypedFunctionSignatureNodeMatcher extends MatcherBuilder< } public TypedFunctionSignatureNodeMatcher withTypeLevelParams( - Matcher>> typeLevelParams + Matcher>> typeLevelParams ) { return with(has("typeLevelParams", x -> x.typeLevelParams(), typeLevelParams)); } diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java index c7a99fce..2eacfade 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -86,6 +86,10 @@ public class Untyped { return new UntypedConstructedTypeNode(receiver, args, Sources.NULL); } + public static UntypedEffectParamNode effectParam(String name) { + return new UntypedEffectParamNode(name, Sources.NULL); + } + public static UntypedBinaryOperationNode equals( UntypedExpressionNode left, UntypedExpressionNode right diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelParamTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelParamTests.java index 08ba5d6b..43030e4a 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelParamTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelParamTests.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.typechecker; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.Untyped; +import org.shedlang.compiler.types.EffectParam; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Scope; import org.shedlang.compiler.types.TypeParam; @@ -12,6 +13,19 @@ import static org.zwobble.precisely.Matchers.equalTo; public class TypeCheckerTypeLevelParamTests { private static final NamespaceName NAMESPACE_NAME = NamespaceName.of("Example"); + @Test + public void canTypeCheckEffectParam() { + var untyped = Untyped.effectParam("T"); + var scope = new Scope.Function(NAMESPACE_NAME, "f"); + + var result = TypeChecker.typeCheckTypeLevelParam( + untyped, + scope + ); + + assertThat(result, equalTo(new EffectParam(scope, "T"))); + } + @Test public void canTypeCheckTypeParam() { var untyped = Untyped.typeParam("T"); diff --git a/src/test/java/org/shedlang/compiler/types/TypeMatchers.java b/src/test/java/org/shedlang/compiler/types/TypeMatchers.java index 1112ff64..2c777c76 100644 --- a/src/test/java/org/shedlang/compiler/types/TypeMatchers.java +++ b/src/test/java/org/shedlang/compiler/types/TypeMatchers.java @@ -87,7 +87,7 @@ public class TypeMatchers { public static Matcher> isConstructedType( Matcher> constructor, - Matcher> args + Matcher> args ) { return allOf( has("constructor", x -> x.constructor(), constructor), -- cgit v1.2.3