From 02d0212a2695275d25783932982d14a8a3c1a1ec Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 2 Mar 2025 19:59:51 +0000 Subject: Support accessing native methods --- .../typechecker/TypeCheckerMemberAccessTests.java | 30 ++++++++++++++++++++++ 1 file changed, 30 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 4e0d31fc..d9f7455a 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerMemberAccessTests.java @@ -18,6 +18,36 @@ import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; public class TypeCheckerMemberAccessTests { + @Test + public void canAccessMethodOnNativeType() { + var untyped = Untyped.memberAccess( + Untyped.reference("user"), + "name" + ); + var nativeType = Types.nativeType(NamespaceName.of("Example"), "User"); + var methodType = FunctionType.builder() + .withReturnType(Types.BOOL) + .build(); + var nativeTypeInfo = NativeTypeInfo.builder() + .addMethod("name", methodType) + .build(); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map(Map.entry("user", nativeType))) + .addNativeTypeInfo(nativeType, nativeTypeInfo); + + var typed = typeCheckExpression(untyped, context); + + assertThat( + typed.value(), + isTypedMemberAccessNode( + isTypedReferenceNode("user", nativeType), + "name", + MemberKind.METHOD, + methodType + ) + ); + } + @Test public void canAccessFieldOnStructType() { var untyped = Untyped.memberAccess( -- cgit v1.2.3