From 09da904f2de0b16f883add671469989bafc726e9 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 28 Sep 2023 13:59:18 +0100 Subject: Add struct receiver for field loads --- .../compiler/stackir/InstructionSerializerTests.java | 15 ++++++++++++++- .../compiler/stackir/instructions/Instructions.java | 9 +++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) (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 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" @@ -84,6 +85,18 @@ public class InstructionSerializerTests { assertThat(string, equalTo("(field-load (namespace \"Example/Lib\") \"x\")")); } + @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_( 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 trueBody, -- cgit v1.2.3