aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-03-03 19:18:07 +0000
committerMichael Williamson <mike@zwobble.org>2025-03-03 19:18:07 +0000
commitc049f4cb221a83e934ffe05981c17450f17b3310 (patch)
tree0c2fd6554d30ae01546f8660762d4a3b358f3a35 /src/test/java
parentc44a2f17b6ca5e53035fe3b21ba6ed0b9107ed2d (diff)
Handle references to native type method
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java
index 09c8103f..8120e249 100644
--- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java
+++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java
@@ -139,6 +139,43 @@ public class ShidCodeGenMemberAccessTests {
}
@Test
+ public void nativeMethodAccessZeroParamsIsCompiledToDefineFunctionInstruction() {
+ var namespaceName = NamespaceName.of("Example", "Project");
+ var nativeType = Types.nativeType(namespaceName, "User");
+ var node = Typed.methodAccess(
+ Typed.reference("user", nativeType),
+ "name",
+ FunctionType.builder()
+ .withReturnType(Types.STRING)
+ .build()
+ );
+ var context = ShidCodeGen.Context.EMPTY
+ .addShedVal("user");
+
+ var result = ShidCodeGen.compileExpression(node, context);
+
+ assertThat(result.instructions(), isSequence(
+ isShidLocalLoad("user__0"),
+ isShidLocalStore("receiver__0"),
+ instanceOf(
+ ShidDefineFunction.class,
+ has("name", x -> x.name(), equalTo("name")),
+ has("positionalParams", x -> x.positionalParams(), isSequence()),
+ has("namedParams", x -> x.namedParams(), isSequence()),
+ has("freeVariables", x -> x.freeVariables(), containsExactly(
+ has("user", x -> x.name(), equalTo("receiver__0"))
+ )),
+ has("body", x -> x.body(), isShidBlock(isSequence(
+ isShidMethodLoad(nativeType, "name"),
+ isShidLocalLoad("receiver__0"),
+ isShidCall(1, List.of()),
+ isShidReturn()
+ )))
+ )
+ ));
+ }
+
+ @Test
public void constructedTypeFieldAccessIsCompiledToFieldLoad() {
var structType = Types.struct(NamespaceName.of("Example", "Project"), "Box");
var typeConstructor = Types.typeConstructor(