From cb79027f3045b979b964d5dd4e6229a6d0212b0e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Sep 2023 19:23:35 +0100 Subject: Compile tuple target to stack IR --- .../org/shedlang/compiler/stackir/StackCompiler.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java index 12a32125..8c5bea8c 100644 --- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java +++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java @@ -384,7 +384,23 @@ public class StackCompiler { } case TypedTargetNode.Tuple tuple -> { - throw new UnsupportedOperationException("TODO"); + if (tuple.elements().size() == 0) { + context = context.addInstruction(new DiscardInstruction(tuple.source())); + } + + for (var elementIndex = 0; elementIndex < tuple.elements().size(); elementIndex++) { + if (elementIndex < tuple.elements().size() - 1) { + context = context + .addInstruction(new DuplicateInstruction(tuple.source())); + } + + context = context + .addInstruction(new TupleGetInstruction(elementIndex, tuple.source())); + + context = compileTarget(tuple.elements().get(elementIndex), context); + } + + yield context; } case TypedTargetNode.Val val -> { -- cgit v1.2.3