From 8f812ba74b95cfb68f8792b6b0dde61e42c36a5f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 19 Dec 2024 18:28:41 +0000 Subject: Support access methods on structs --- .../typechecker/TypeCheckerMemberAccessTests.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/test/java') 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 @@ -44,6 +44,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( -- cgit v1.2.3