diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-11 00:29:06 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-11 00:29:06 +0000 |
| commit | 1b56846cfdf7e25408920bdeb4f46edb721a218f (patch) | |
| tree | e8b5192b1d3708c7669068a4c4436482cd66a1d3 /src/test/java | |
| parent | d1b3124cf2ef0b8d88f7e996248779b08a519878 (diff) | |
Type check calls to positional structs
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java | 34 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java | 8 |
2 files changed, 37 insertions, 5 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java index cfae87ed..bef0039c 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java @@ -356,6 +356,7 @@ public class TypeCheckerCallTests { var structType = Types.struct(NamespaceName.of("Example"), "User"); var structTypeInfo = StructTypeInfo.builder() .addField("name", Types.STRING) + .withFieldsArePositional(false) .build(); var context = TypeCheckerContext.EMPTY .enterGlobal(P.map(Map.entry("User", Types.metaType(structType)))) @@ -380,6 +381,39 @@ public class TypeCheckerCallTests { } @Test + public void canCallStructWithPositionalFields() { + var untyped = UntypedCallNode.builder() + .withReceiver(Untyped.reference("User")) + .addPositionalArg(Untyped.stringLiteral("Bob")) + .build(); + var structType = Types.struct(NamespaceName.of("Example"), "User"); + var structTypeInfo = StructTypeInfo.builder() + .addField("name", Types.STRING) + .withFieldsArePositional(true) + .build(); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map(Map.entry("User", Types.metaType(structType)))) + .addStructTypeInfo(structType, structTypeInfo); + + var typed = typeCheckExpression(untyped, context); + + assertThat( + typed.value(), + isTypedCallNode() + .withReceiver(isTypedReferenceNode("User", Types.metaType(structType))) + .withArgs( + isTypedArgsNode() + .withPositional(isSequence( + isTypedStringLiteralNode("Bob") + )) + .withNamed(isSequence()) + ) + .withHasEffects(false) + .withType(structType) + ); + } + + @Test public void canCallGenericStructWithExplicitTypeArgs() { var untyped = UntypedCallNode.builder() .withReceiver(Untyped.reference("Box")) diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java index e41bc2fa..c6fd0480 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java @@ -303,11 +303,9 @@ public class TypeCheckerWhenTests { ))) .addStructTypeInfo( VARIANT_TYPE_1, - new StructTypeInfo( - FieldsInfo.builder() - .addField("value", TypeParam.forStructType(VARIANT_TYPE_1, "T")) - .build() - ) + StructTypeInfo.builder() + .addField("value", TypeParam.forStructType(VARIANT_TYPE_1, "T")) + .build() ) .enterGlobal(P.map( Map.entry("x", SUM_TYPE), |
