aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-21 13:47:49 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-21 13:47:49 +0100
commit386df535db2970c6ab8acc47adaf803d61934a3f (patch)
tree69b53e2e83b128feb2440f835a7e41230947b0d4 /src/test/java
parent317f6fa18dfb5dd0020a086d2815c538fcb558ff (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.java23
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(