From 7488757d0386b7770d321177e2c893ba1c060f26 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 7 Nov 2023 19:47:34 +0000 Subject: Add define-effect instruction --- .../compiler/stackir/InstructionSerializerTests.java | 14 ++++++++++++++ .../compiler/stackir/instructions/Instructions.java | 5 +++++ 2 files changed, 19 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 e2294588..4fd9c54a 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -6,6 +6,7 @@ import org.shedlang.compiler.sources.Sources; 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.Effects; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; @@ -24,6 +25,19 @@ public class InstructionSerializerTests { assertThat(string, equalTo("(call positional-arg-count=1 named-arg-names=(\"x\" \"y\"))")); } + @Test + public void canSerializeDefineEffect() { + var instruction = Instructions.defineEffect( + Effects.userDefined(NamespaceName.of("Example", "Project"), "State") + ); + + var string = serialize(instruction); + + assertThat(string, equalTo(""" + (define-effect "Example/Project.State")""" + )); + } + @Test public void canSerializeDefineFunction() { // TODO: make a builder 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 4971575c..643d9446 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -3,6 +3,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 org.shedlang.compiler.types.UserDefinedEffect; import java.math.BigInteger; import java.util.List; @@ -15,6 +16,10 @@ public class Instructions { return new CallInstruction(positionalArgCount, namedArgNames, Sources.NULL); } + public static Instruction defineEffect(UserDefinedEffect effect) { + return new DefineEffectInstruction(effect, Sources.NULL); + } + public static Instruction defineStruct( StructType type, List fields -- cgit v1.2.3