diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java | 37 |
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( |
