aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-23 17:04:31 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-26 20:01:32 +0100
commit537aefec06307139899e3f2f2cd74842a3af6345 (patch)
tree3af4c0729cf61225b4d4da10109a8eda497b83d3 /src/main/java
parentac51f8470a58caeb611a4c55bb19c1c2281c4960 (diff)
Generate code for zero-element tuple without alloc
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
index b7198683..c3e1c964 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.patio;
import org.shedlang.compiler.patio.ast.instructions.*;
+import org.shedlang.compiler.patio.ast.operands.PatioInt;
import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.operands.PatioOperand;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
@@ -20,6 +21,23 @@ public class PatioCodeGenTuples {
Source source,
PatioCodeGenContext context
) {
+ var tupleResult = context.allocateVal(
+ PatioCodeGenLocalSpace.TUPLE,
+ PatioCodeGenTypes.VALUE_TYPE
+ );
+ var tuple = tupleResult.value();
+ context = tupleResult.context();
+
+ if (elements.size() == 0) {
+ context = context.addInstruction(new PatioLocalStore(
+ tuple,
+ new PatioInt(0),
+ source
+ ));
+
+ return context.toResult(tuple);
+ }
+
var tuplePointerResult = context.allocateVal(
PatioCodeGenLocalSpace.TUPLE_POINTER,
PatioTypes.DATA_POINTER
@@ -47,13 +65,6 @@ public class PatioCodeGenTuples {
));
}
- var tupleResult = context.allocateVal(
- PatioCodeGenLocalSpace.TUPLE,
- PatioCodeGenTypes.VALUE_TYPE
- );
- var tuple = tupleResult.value();
- context = tupleResult.context();
-
context = context.addInstruction(new PatioDataPtrToInt(
tuple,
tuplePointer,