diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-19 18:28:41 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-19 18:28:41 +0000 |
| commit | 8f812ba74b95cfb68f8792b6b0dde61e42c36a5f (patch) | |
| tree | 45ba4b92d5df16877766ffc3cd906d85fed0f5af /src/test/java | |
| parent | 5cc08d49a2cf7dc3d1794d39f49aff760372cffb (diff) | |
Support access methods on structs
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java index 1ed1aabe..921358f5 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java @@ -45,6 +45,35 @@ public class TypeCheckerMemberAccessTests { } @Test + public void canAccessMemberOnStructType() { + var untyped = Untyped.memberAccess( + Untyped.reference("user"), + "name" + ); + var structType = Types.struct(NamespaceName.of("Example"), "User"); + var methodType = FunctionType.builder() + .withReturnType(Types.BOOL) + .build(); + var structTypeInfo = StructTypeInfo.builder() + .addMethod("name", methodType) + .build(); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map(Map.entry("user", structType))) + .addStructTypeInfo(structType, structTypeInfo); + + var typed = typeCheckExpression(untyped, context); + + assertThat( + typed.value(), + isTypedMemberAccessNode( + isTypedReferenceNode("user", structType), + "name", + methodType + ) + ); + } + + @Test public void canAccessFieldWithFixedTypeOnConstructedStructType() { var untyped = Untyped.memberAccess( Untyped.reference("x"), |
