diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-02 14:25:46 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-02 14:26:37 +0000 |
| commit | 689c9c1e8af8fd2fff2b390649a59e613e85eb6a (patch) | |
| tree | c2172339570164b3d69db442bb971a5ba383cd8c /src/main/java/org/shedlang/compiler/stackir | |
| parent | ae2db7337845cde0c56cd99564060b974e125f65 (diff) | |
Add resume instruction
Diffstat (limited to 'src/main/java/org/shedlang/compiler/stackir')
4 files changed, 17 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java index 86e64df5..2cf812c4 100644 --- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java +++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java @@ -205,6 +205,11 @@ public class InstructionSerializer { treeIdentifier("push-unit") ); + case ResumeInstruction resumeInstruction -> + treeList( + treeIdentifier("resume") + ); + case ReturnInstruction returnInstruction -> treeList( treeIdentifier("return") diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java index a6da0635..2e2b43b7 100644 --- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java +++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java @@ -500,7 +500,7 @@ public class StackCompiler { private static Context compileResume(TypedResumeNode node, Context context) { context = compileExpression(node.expression(), context); - context = context.addInstruction(new ReturnInstruction(node.source())); + context = context.addInstruction(new ResumeInstruction(node.source())); return context; } diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java index 30216032..f84de210 100644 --- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java @@ -3,7 +3,7 @@ package org.shedlang.compiler.stackir.instructions; import org.shedlang.compiler.sources.Source; public sealed interface Instruction - permits CallInstruction, DefineEffectInstruction, DefineFunctionInstruction, DefineStructInstruction, DiscardInstruction, DuplicateInstruction, FieldLoadInstruction, IfInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, IntSubInstruction, LocalLoadInstruction, LocalStoreInstruction, LoopBreakInstruction, LoopContinueInstruction, LoopInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction, StringAddInstruction, SwitchInstruction, TryInstruction, TupleCreateInstruction, TupleGetInstruction, VarLoadInstruction, VarStoreInstruction { + permits CallInstruction, DefineEffectInstruction, DefineFunctionInstruction, DefineStructInstruction, DiscardInstruction, DuplicateInstruction, FieldLoadInstruction, IfInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, IntSubInstruction, LocalLoadInstruction, LocalStoreInstruction, LoopBreakInstruction, LoopContinueInstruction, LoopInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ResumeInstruction, ReturnInstruction, StringAddInstruction, SwitchInstruction, TryInstruction, TupleCreateInstruction, TupleGetInstruction, VarLoadInstruction, VarStoreInstruction { Source source(); } diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/ResumeInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/ResumeInstruction.java new file mode 100644 index 00000000..836b5bac --- /dev/null +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/ResumeInstruction.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.stackir.instructions; + +import org.shedlang.compiler.sources.Source; + +/** + * Pop a value from the temporary value stack and return with that value from + * the current effect handler method back to the effect call. + */ +public record ResumeInstruction(Source source) implements Instruction { +} |
