From 386df535db2970c6ab8acc47adaf803d61934a3f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 21 Oct 2023 13:47:49 +0100 Subject: Generate stack IR for field access on namespace --- .../stackir/StackCompilerFieldAccessTests.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/test/java') 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; @@ -11,6 +12,28 @@ import static org.zwobble.precisely.AssertThat.assertThat; 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"); -- cgit v1.2.3