diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-17 18:07:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-17 18:07:16 +0100 |
| commit | 486a1a499da88239f625c0bcc913c41c01496e3c (patch) | |
| tree | 2a9a80321b49a168609ac409a6d7711f77572e5f /src/main/java | |
| parent | 65e3321942082459badd006f0fed8efee474e8e0 (diff) | |
Add tuple-create instruction
Diffstat (limited to 'src/main/java')
4 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java index 42a606de..3332a117 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java @@ -467,6 +467,10 @@ public class PatioCodeGen { context ); + case TupleCreateInstruction tupleCreate -> { + throw new UnsupportedOperationException("TODO"); + } + case VarLoadInstruction varLoad -> { var varValueResult = context.allocateVal( PatioCodeGenLocalSpace.VAR_VALUE, diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java index cc4d2390..d2dfc37b 100644 --- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java +++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java @@ -171,6 +171,12 @@ public class InstructionSerializer { case StringAddInstruction stringAddInstruction -> treeList(treeIdentifier("string-add")); + case TupleCreateInstruction tupleCreateInstruction -> + treeList( + treeIdentifier("tuple-create"), + treeInt(tupleCreateInstruction.elementCount()) + ); + case VarLoadInstruction varLoadInstruction -> treeList( treeIdentifier("var-load"), 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 01af3588..25b14e93 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, DefineFunctionInstruction, DiscardInstruction, FieldLoadInstruction, IfInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, IntSubInstruction, LocalLoadInstruction, LocalStoreInstruction, LoopBreakInstruction, LoopContinueInstruction, LoopInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction, StringAddInstruction, VarLoadInstruction, VarStoreInstruction { + permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, FieldLoadInstruction, IfInstruction, IntAddInstruction, IntEqualsInstruction, IntNotEqualInstruction, IntSubInstruction, LocalLoadInstruction, LocalStoreInstruction, LoopBreakInstruction, LoopContinueInstruction, LoopInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction, StringAddInstruction, TupleCreateInstruction, VarLoadInstruction, VarStoreInstruction { Source source(); } diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/TupleCreateInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/TupleCreateInstruction.java new file mode 100644 index 00000000..0888d947 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/TupleCreateInstruction.java @@ -0,0 +1,13 @@ +package org.shedlang.compiler.stackir.instructions; + +import org.shedlang.compiler.sources.Source; + +/** + * Pop {@code elementCount} values from the stack and create a tuple from those + * elements. Elements should have been pushed onto the stack in index order. + */ +public record TupleCreateInstruction( + int elementCount, + Source source +) implements Instruction { +} |
