diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-18 14:48:54 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-18 14:48:54 +0000 |
| commit | 686fe85364d87aa995bf080ea934674a2ece35d9 (patch) | |
| tree | 1f41fc295823b11d48e200c18bf8fbe0c30bae94 /src/test/java | |
| parent | 240cf4b6b2c4135d9b6b9150426798f6cc8508df (diff) | |
Generate stack IR for effect field access
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 fee566cb..23d87b61 100644 --- a/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerFieldAccessTests.java @@ -3,6 +3,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.Effects; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; @@ -52,4 +53,26 @@ public class StackCompilerFieldAccessTests { isFieldLoadInstruction(structType, "name") )); } + + @Test + public void userDefinedEffectFieldAccessIsCompiledToFieldLoad() { + var effect = Effects.userDefined(NamespaceName.of("Example", "Project"), "State"); + var node = Typed.fieldAccess( + Typed.reference("State", Types.effectType(effect)), + "read", + Types.STRING + ); + var context = StackCompiler.Context.EMPTY + .addShedVariable("State"); + + var result = StackCompiler.compileExpression(node, context); + + assertThat(result.instructions(), isSequence( + isLocalLoadInstruction("State__0"), + isFieldLoadInstruction( + new FieldLoadInstruction.Receiver.Effect(effect), + "read" + ) + )); + } } |
