From 240cf4b6b2c4135d9b6b9150426798f6cc8508df Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 18 Nov 2023 14:45:25 +0000 Subject: Add effect as receiver in stack IR --- .../compiler/stackir/InstructionSerializerTests.java | 12 ++++++++++++ .../shedlang/compiler/stackir/instructions/Instructions.java | 8 ++++++++ 2 files changed, 20 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java index 1ba7fb6a..2f8c4c44 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -128,6 +128,18 @@ public class InstructionSerializerTests { assertThat(string, equalTo("(field-load (struct \"Example/Project.User\") \"name\")")); } + @Test + public void canSerializeUserDefinedEffectFieldLoad() { + var instruction = Instructions.fieldLoad( + Effects.userDefined(NamespaceName.of("Example", "Project"), "State"), + "read" + ); + + var string = serialize(instruction); + + assertThat(string, equalTo("(field-load (effect \"Example/Project.State\") \"read\")")); + } + @Test public void canSerializeIf() { var instruction = Instructions.if_( diff --git a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java index fe820b55..ae776fc7 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -59,6 +59,14 @@ public class Instructions { ); } + public static Instruction fieldLoad(UserDefinedEffect effect, String fieldName) { + return new FieldLoadInstruction( + new FieldLoadInstruction.Receiver.Effect(effect), + fieldName, + Sources.NULL + ); + } + public static Instruction if_( int resultCount, List trueBody, -- cgit v1.2.3