aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-23 16:29:16 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-23 16:29:16 +0100
commit39b0d3dda4dc5a8c9c27f73a3c7f0be1dfe5a34d (patch)
tree09cb93b18218ba56f1cfde23bb87a37958ae23c6 /src/main/java
parent805abe0ba33875a0278c4a0c6e8fa76853fbd703 (diff)
Extract tupleDataLayout()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
index 5cf08c98..b7198683 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenTuples.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.patio;
import org.shedlang.compiler.patio.ast.instructions.*;
import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.operands.PatioOperand;
+import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioDataLayouts;
import org.shedlang.compiler.patio.ast.types.PatioTypes;
import org.shedlang.compiler.sources.Source;
@@ -26,10 +27,7 @@ public class PatioCodeGenTuples {
var tuplePointer = tuplePointerResult.value();
context = tuplePointerResult.context();
- var tupleLayout = PatioDataLayouts.struct(Lists.repeat(
- PatioDataLayouts.INT,
- elements.size()
- ));
+ var tupleLayout = tupleDataLayout(elements.size());
context = context.addInstruction(new PatioAllocHeap(
tuplePointer,
@@ -96,14 +94,18 @@ public class PatioCodeGenTuples {
context = context.addInstruction(new PatioMemoryLoad(
target,
tuplePointer,
- PatioDataLayouts.struct(Lists.repeat(
- PatioDataLayouts.INT,
- elementCount
- )),
+ tupleDataLayout(elementCount),
List.of(elementIndex),
source
));
return context.toResult(target);
}
+
+ private static PatioDataLayout tupleDataLayout(int elementCount) {
+ return PatioDataLayouts.struct(Lists.repeat(
+ PatioDataLayouts.INT,
+ elementCount
+ ));
+ }
}