diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/shid/ShidCodeGenCallTests.java | 38 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java | 1 |
2 files changed, 38 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenCallTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenCallTests.java index e315b752..6a63be8f 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenCallTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenCallTests.java @@ -2,6 +2,9 @@ package org.shedlang.compiler.shid; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.typed.Typed; +import org.shedlang.compiler.types.FunctionType; +import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.Types; import java.util.List; @@ -38,4 +41,39 @@ public class ShidCodeGenCallTests { isShidCall(2, List.of("x2", "x1")) )); } + + @Test + public void methodCallIsCompiledToDirectCallWithoutMethodReference() { + var namespaceName = NamespaceName.of("Example", "Project"); + var structType = Types.struct(namespaceName, "User"); + var node = Typed.call( + Typed.methodAccess( + Typed.reference("x", structType), + "f", + FunctionType.builder().build() + ), + List.of( + Typed.stringLiteral("p1"), + Typed.stringLiteral("p2") + ), + List.of( + Typed.namedArg("x2", Typed.stringLiteral("n2")), + Typed.namedArg("x1", Typed.stringLiteral("n1")) + ) + ); + var context = ShidCodeGen.Context.EMPTY + .addShedVal("x"); + + var result = ShidCodeGen.compileExpression(node, context); + + assertThat(result.instructions(), isSequence( + isShidMethodLoad(structType, "f"), + isShidLocalLoad("x__0"), + isShidPushString("p1"), + isShidPushString("p2"), + isShidPushString("n2"), + isShidPushString("n1"), + isShidCall(3, List.of("x2", "x1")) + )); + } } diff --git a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java index d2a0e5ce..09c8103f 100644 --- a/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java +++ b/src/test/java/org/shedlang/compiler/shid/ShidCodeGenMemberAccessTests.java @@ -72,7 +72,6 @@ public class ShidCodeGenMemberAccessTests { var result = ShidCodeGen.compileExpression(node, context); - // TODO: optimise calls assertThat(result.instructions(), isSequence( isShidLocalLoad("user__0"), isShidLocalStore("receiver__0"), |
