diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-04-07 20:05:31 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-04-07 20:35:29 +0100 |
| commit | 59b5294ffd1b5bf299f07cc0a586d67464a26cc3 (patch) | |
| tree | bb34e697732884162cb81afeff173834de00670c | |
| parent | 1bfac23fac8b749cdcbd0232253a57b29ec91142 (diff) | |
Remove Patio resume instruction
16 files changed, 9 insertions, 147 deletions
diff --git a/flatbuffers/patio.fbs b/flatbuffers/patio.fbs index b7715cd1..c0066ac3 100644 --- a/flatbuffers/patio.fbs +++ b/flatbuffers/patio.fbs @@ -236,7 +236,6 @@ union PatioInstructionValue { PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, - PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, @@ -366,11 +365,6 @@ table PatioMemoryStore { value:PatioOperand (required); } -table PatioResume { - source:Sources.Source (required); - value:PatioOperand (required); -} - table PatioReturn { source:Sources.Source (required); value:PatioOperand (required); diff --git a/patio-to-cranelift/src/codegen/mod.rs b/patio-to-cranelift/src/codegen/mod.rs index 29a8d949..bfa9a82a 100644 --- a/patio-to-cranelift/src/codegen/mod.rs +++ b/patio-to-cranelift/src/codegen/mod.rs @@ -19,8 +19,8 @@ use crate::{ PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioInstruction, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, - PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, - PatioReturnVoid, PatioSwitch, PatioUnreachable, PatioVarLoad, PatioVarStore, + PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioReturn, PatioReturnVoid, + PatioSwitch, PatioUnreachable, PatioVarLoad, PatioVarStore, }, operands::{PatioLocalRef, PatioOperand}, types::PatioType, @@ -356,10 +356,6 @@ fn compile_instruction(instruction: &PatioInstruction, context: &mut CompilerFun compile_memory_store(memory_store, context); } - PatioInstruction::Resume(resume) => { - compile_resume(resume, context); - } - PatioInstruction::Return(return_) => { compile_return(return_, context); } @@ -685,12 +681,6 @@ fn compile_memory_store( ); } -fn compile_resume(resume: &PatioResume, context: &mut CompilerFunctionContext<'_>) { - let cranelift_value = compile_operand(&resume.value, context); - - context.function_builder.ins().return_(&[cranelift_value]); -} - fn compile_return(return_: &PatioReturn, context: &mut CompilerFunctionContext<'_>) { let cranelift_value = compile_operand(&return_.value, context); diff --git a/patio-to-cranelift/src/patio/flatbuffers.rs b/patio-to-cranelift/src/patio/flatbuffers.rs index 4e391b66..5622259a 100644 --- a/patio-to-cranelift/src/patio/flatbuffers.rs +++ b/patio-to-cranelift/src/patio/flatbuffers.rs @@ -10,9 +10,8 @@ use crate::{ PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioInstruction, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, - PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, - PatioReturnVoid, PatioSwitch, PatioSwitchCase, PatioUnreachable, PatioVarLoad, - PatioVarStore, + PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioReturn, PatioReturnVoid, + PatioSwitch, PatioSwitchCase, PatioUnreachable, PatioVarLoad, PatioVarStore, }, operands::{PatioLocalRef, PatioOperand}, types::{PatioDataLayout, PatioType}, @@ -311,14 +310,6 @@ impl From<patio_generated::patio::PatioInstruction<'_>> for PatioInstruction { }) } - patio_generated::patio::PatioInstructionValue::PatioResume => { - let resume = value.value_as_patio_resume().unwrap(); - - Self::Resume(PatioResume { - value: resume.value().into(), - }) - } - patio_generated::patio::PatioInstructionValue::PatioReturn => { let return_ = value.value_as_patio_return().unwrap(); diff --git a/patio-to-cranelift/src/patio/instructions.rs b/patio-to-cranelift/src/patio/instructions.rs index 8d05f6a2..af354117 100644 --- a/patio-to-cranelift/src/patio/instructions.rs +++ b/patio-to-cranelift/src/patio/instructions.rs @@ -22,7 +22,6 @@ pub(crate) enum PatioInstruction { LoopContinue(PatioLoopContinue), MemoryLoad(PatioMemoryLoad), MemoryStore(PatioMemoryStore), - Resume(PatioResume), Return(PatioReturn), ReturnVoid(PatioReturnVoid), Switch(PatioSwitch), @@ -126,10 +125,6 @@ pub(crate) struct PatioMemoryStore { pub(crate) value: PatioOperand, } -pub(crate) struct PatioResume { - pub(crate) value: PatioOperand, -} - pub(crate) struct PatioReturn { pub(crate) value: PatioOperand, } diff --git a/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioDefineFunctionTests]/[method:effectHandlerMethodSwapsEffectHandlerInBody(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected b/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioDefineFunctionTests]/[method:effectHandlerMethodSwapsEffectHandlerInBody(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected index a8c929d9..7d1e48a9 100644 --- a/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioDefineFunctionTests]/[method:effectHandlerMethodSwapsEffectHandlerInBody(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected +++ b/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioDefineFunctionTests]/[method:effectHandlerMethodSwapsEffectHandlerInBody(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected @@ -51,7 +51,7 @@ Compilation unit elements: (call _ "shed__runtime__gc_set_root_stack_index" ((local "gcRootStackIndex__0"))) (call _ "shed__runtime__gc_push_root" ((local "tmp__0"))) (call _ "shed__runtime__effects_set_handler" ((local "effectHandler__0"))) - (resume (local "tmp__0")) + (return (local "tmp__0")) ) ) ( diff --git a/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioResumeTests]/[method:resumeInstructionGeneratesResumeInstruction(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected b/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioResumeTests]/[method:resumeInstructionGeneratesResumeInstruction(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected index 9e23e423..ccf83153 100644 --- a/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioResumeTests]/[method:resumeInstructionGeneratesResumeInstruction(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected +++ b/snapshots/[engine:junit-jupiter]/[class:org.shedlang.compiler.shidtopatio.ShidToPatioResumeTests]/[method:resumeInstructionGeneratesResumeInstruction(org.shedlang.compiler.testing.snapshots.Snapshotter)].expected @@ -21,7 +21,7 @@ Instructions: (call _ "shed__runtime__gc_set_root_stack_index" ((local "gc_root_stack_index"))) (call _ "shed__runtime__gc_push_root" ((local "b"))) (call _ "shed__runtime__effects_set_handler" ((local "effect_handler"))) - (resume (local "b")) + (return (local "b")) ) Temporary stack: diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java index 5f554710..3dfae913 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java @@ -616,12 +616,6 @@ public class PatioToLlvm { yield context; } - case PatioResume patioResume -> - context.addTerminatorInstruction(new LlvmReturn( - patioOperandToLlvmType(patioResume.value(), context), - patioOperandToLlvmOperand(patioResume.value(), context) - )); - case PatioReturn patioReturn -> context.addTerminatorInstruction(new LlvmReturn( patioOperandToLlvmType(patioReturn.value(), context), diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java index 356b016f..ed416976 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -340,14 +340,6 @@ public class PatioToWasm { yield context; } - case PatioResume patioResume -> { - context = generateOperand(patioResume.value(), context); - - context = context.addInstruction(new WasmReturn()); - - yield context; - } - case PatioReturn patioReturn -> { context = generateOperand(patioReturn.value(), context); diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java index d9ca8c37..d324c5e8 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java @@ -293,12 +293,6 @@ public class PatioSerializer { treeNamed("value", operandToTree(memoryStore.value())) ); - case PatioResume resume -> - treeList( - treeIdentifier("resume"), - operandToTree(resume.value()) - ); - case PatioReturn return_ -> treeList( treeIdentifier("return"), diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java index 76ab6632..00e30fe6 100644 --- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java +++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java @@ -2,7 +2,7 @@ package org.shedlang.compiler.patio.instructions; import org.shedlang.compiler.sources.Source; -public sealed interface PatioInstruction permits PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore { +public sealed interface PatioInstruction permits PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore { boolean isBlockTerminator(); Source source(); } diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioResume.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioResume.java deleted file mode 100644 index 6b1838d2..00000000 --- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioResume.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.shedlang.compiler.patio.instructions; - -import org.shedlang.compiler.patio.operands.PatioOperand; -import org.shedlang.compiler.sources.Source; - -/** - * Return with the given value from the effect handler method back to the effect - * call. - */ -public record PatioResume(PatioOperand value, Source source) implements PatioInstruction { - @Override - public boolean isBlockTerminator() { - return true; - } -} diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java index 20c5f9f9..870c8204 100644 --- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java +++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java @@ -706,15 +706,6 @@ public class PatioToFlatbuffers { yield PatioInstructionFbs.endPatioInstructionFbs(builder); } - case PatioResume resume -> { - var resumeFbs = serializeResume(builder, resume, parentSource); - - PatioInstructionFbs.startPatioInstructionFbs(builder); - PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioResumeFbs); - PatioInstructionFbs.addValue(builder, resumeFbs); - yield PatioInstructionFbs.endPatioInstructionFbs(builder); - } - case PatioReturn return_ -> { var returnFbs = serializeReturn(builder, return_, parentSource); @@ -902,12 +893,6 @@ public class PatioToFlatbuffers { parentSource ); - case PatioInstructionValueFbs.PatioResumeFbs -> - deserializeResume( - (PatioResumeFbs) instructionFbs.value(new PatioResumeFbs()), - parentSource - ); - case PatioInstructionValueFbs.PatioReturnFbs -> deserializeReturn( (PatioReturnFbs) instructionFbs.value(new PatioReturnFbs()), @@ -1631,39 +1616,6 @@ public class PatioToFlatbuffers { return new PatioMemoryStore(pointer, layout, elementOffsets, value, source); } - public static int serializeResume( - FlatBufferBuilder builder, - PatioResume instruction, - Source parentSource - ) { - var sourceFbs = SourceToFlatbuffers.serializeSource( - builder, - instruction.source(), - parentSource - ); - - var valueFbs = serializeOperand(builder, instruction.value()); - - PatioResumeFbs.startPatioResumeFbs(builder); - PatioResumeFbs.addSource(builder, sourceFbs); - PatioResumeFbs.addValue(builder, valueFbs); - return PatioResumeFbs.endPatioResumeFbs(builder); - } - - private static PatioResume deserializeResume( - PatioResumeFbs instructionFbs, - Source parentSource - ) { - var source = SourceToFlatbuffers.deserializeSource( - instructionFbs.source(), - parentSource - ); - - var value = deserializeOperand(instructionFbs.value()); - - return new PatioResume(value, source); - } - public static int serializeReturn( FlatBufferBuilder builder, PatioReturn instruction, @@ -1679,7 +1631,7 @@ public class PatioToFlatbuffers { PatioReturnFbs.startPatioReturnFbs(builder); PatioReturnFbs.addSource(builder, sourceFbs); - PatioResumeFbs.addValue(builder, valueFbs); + PatioReturnFbs.addValue(builder, valueFbs); return PatioReturnFbs.endPatioReturnFbs(builder); } diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java index 6d2ba0e3..a41ef9c7 100644 --- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java +++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java @@ -519,7 +519,7 @@ public class ShidToPatioEffects { source )); - context = context.addInstruction(new PatioResume(value, source)); + context = context.addInstruction(new PatioReturn(value, source)); return context; } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java index 525091ba..5cf44a1a 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -474,15 +474,6 @@ public class PatioSerializerTests { } @Test - public void canSerializeResume() { - var instruction = Patio.resume(Patio.localRef("value")); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(resume (local \"value\"))")); - } - - @Test public void canSerializeReturn() { var instruction = Patio.return_(Patio.localRef("value")); diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java index d6d236c6..5bdd24df 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -298,10 +298,6 @@ public class Patio { return new PatioLocal(name, type, PatioLocalType.PARAM); } - public static PatioInstruction resume(PatioOperand value) { - return new PatioResume(value, Sources.NULL); - } - public static PatioInstruction return_(PatioOperand value) { return new PatioReturn(value, Sources.NULL); } diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java index 7b894f40..be71c7ce 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java @@ -461,18 +461,6 @@ public abstract class PatioSerializationTests { } @Test - public void canSerializeResume() { - var instruction = Patio.resume(Patio.localRef("value")); - - var deserializedInstruction = deserializeInstruction( - serializeInstruction(instruction, Sources.NULL), - Sources.NULL - ); - - assertThat(deserializedInstruction, equalTo(instruction)); - } - - @Test public void canSerializeReturn() { var instruction = Patio.return_(Patio.localRef("value")); |
