diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-28 13:59:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-28 13:59:18 +0100 |
| commit | 09da904f2de0b16f883add671469989bafc726e9 (patch) | |
| tree | d0ee8826637464901d27d4a5121ee517c78c2bb5 /src/test/java | |
| parent | e73983a9a1862a99f2efe3f1c6ed81f978d57403 (diff) | |
Add struct receiver for field loads
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java | 15 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java | 9 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java index f71d9885..9f3fc75f 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -7,6 +7,7 @@ import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction; import org.shedlang.compiler.stackir.instructions.Instruction; import org.shedlang.compiler.stackir.instructions.Instructions; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.Types; import java.util.List; @@ -73,7 +74,7 @@ public class InstructionSerializerTests { } @Test - public void canSerializeFieldLoad() { + public void canSerializeNamespaceFieldLoad() { var instruction = Instructions.fieldLoad( new NamespaceName(List.of("Example", "Lib")), "x" @@ -85,6 +86,18 @@ public class InstructionSerializerTests { } @Test + public void canSerializeStructFieldLoad() { + var instruction = Instructions.fieldLoad( + Types.struct(NamespaceName.of("Example", "Project"), "User"), + "name" + ); + + var string = serialize(instruction); + + assertThat(string, equalTo("(field-load (struct \"Example/Project.User\") \"name\")")); + } + + @Test public void canSerializeIf() { var instruction = Instructions.if_( 1, 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 d07709a9..f30c75c6 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.stackir.instructions; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.StructType; import java.math.BigInteger; import java.util.List; @@ -30,6 +31,14 @@ public class Instructions { ); } + public static Instruction fieldLoad(StructType type, String fieldName) { + return new FieldLoadInstruction( + new FieldLoadInstruction.Receiver.Struct(type), + fieldName, + Sources.NULL + ); + } + public static Instruction if_( int resultCount, List<Instruction> trueBody, |
