diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-21 13:47:49 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-21 13:47:49 +0100 |
| commit | 386df535db2970c6ab8acc47adaf803d61934a3f (patch) | |
| tree | 69b53e2e83b128feb2440f835a7e41230947b0d4 /src/test/java | |
| parent | 317f6fa18dfb5dd0020a086d2815c538fcb558ff (diff) | |
Generate stack IR for field access on namespace
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java b/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java index a9d76db3..fee566cb 100644 --- a/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.stackir; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.typed.Typed; +import org.shedlang.compiler.stackir.instructions.FieldLoadInstruction; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; @@ -12,6 +13,28 @@ import static org.zwobble.precisely.Matchers.isSequence; public class StackCompilerFieldAccessTests { @Test + public void namespaceFieldAccessIsCompiledToFieldLoad() { + var namespaceType = Types.namespace(NamespaceName.of("Example", "Project")); + var node = Typed.fieldAccess( + Typed.reference("Project", namespaceType), + "name", + Types.STRING + ); + var context = StackCompiler.Context.EMPTY + .addShedVariable("Project"); + + var result = StackCompiler.compileExpression(node, context); + + assertThat(result.instructions(), isSequence( + isLocalLoadInstruction("Project__0"), + isFieldLoadInstruction( + new FieldLoadInstruction.Receiver.Namespace(namespaceType.namespaceName()), + "name" + ) + )); + } + + @Test public void structFieldAccessIsCompiledToFieldLoad() { var structType = Types.struct(NamespaceName.of("Example", "Project"), "User"); var node = Typed.fieldAccess( |
