aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-27 10:54:48 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-27 10:54:48 +0000
commit179e0fbaf8eace47a02a94b78700d11b94554d64 (patch)
treef628319b95b4404b60c41a0b6937c4197630acb6 /src/main/java
parent4e116e25a5c0d9b9b7f92e3c363a93902eaf19d6 (diff)
Extract PatioOffsets
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java38
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioOffsets.java46
2 files changed, 50 insertions, 34 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
index c185c016..d646be12 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
@@ -1046,40 +1046,10 @@ public class PatioToLlvm {
PVector<Integer> patioOffsets,
LlvmTarget target
) {
- // TODO: check that offset is valid?
- return switch (patioDataLayout) {
- case PatioDataLayoutArray patioDataLayoutArray ->
- patioDataOffsetToLlvmType(
- patioDataLayoutArray.element(),
- patioOffsets.minus(0),
- target
- );
-
- case PatioDataLayoutBool patioDataLayoutBool ->
- LlvmTypes.INT_1;
-
- case PatioDataLayoutByte patioDataLayoutByte ->
- LlvmTypes.INT_8;
-
- case PatioDataLayoutDataPointer patioDataLayoutDataPointer ->
- LlvmTypes.pointer(LlvmTypes.VOID);
-
- case PatioDataLayoutFunctionPointer patioDataLayoutFunctionPointer ->
- LlvmTypes.pointer(LlvmTypes.VOID);
-
- case PatioDataLayoutInt patioDataLayoutInt ->
- target.patioIntType();
-
- case PatioDataLayoutInt32 patioDataLayoutInt32 ->
- LlvmTypes.INT_32;
-
- case PatioDataLayoutStruct patioDataLayoutStruct ->
- patioDataOffsetToLlvmType(
- patioDataLayoutStruct.elements().get(patioOffsets.get(0)),
- patioOffsets.minus(0),
- target
- );
- };
+ return patioDataLayoutToLlvmType(
+ PatioOffsets.offsetDataLayout(patioDataLayout, patioOffsets),
+ target
+ );
}
private static LlvmTypedOperand patioOperandToLlvmTypedOperand(
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioOffsets.java b/src/main/java/org/shedlang/compiler/patio/types/PatioOffsets.java
new file mode 100644
index 00000000..f4a13bb0
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioOffsets.java
@@ -0,0 +1,46 @@
+package org.shedlang.compiler.patio.types;
+
+import org.pcollections.PVector;
+
+public class PatioOffsets {
+ private PatioOffsets() {
+ }
+
+ public static PatioDataLayout offsetDataLayout(
+ PatioDataLayout patioDataLayout,
+ PVector<Integer> patioOffsets
+ ) {
+ // TODO: check that offset is valid?
+ return switch (patioDataLayout) {
+ case PatioDataLayoutArray patioDataLayoutArray ->
+ offsetDataLayout(
+ patioDataLayoutArray.element(),
+ patioOffsets.minus(0)
+ );
+
+ case PatioDataLayoutBool patioDataLayoutBool ->
+ patioDataLayout;
+
+ case PatioDataLayoutByte patioDataLayoutByte ->
+ patioDataLayout;
+
+ case PatioDataLayoutDataPointer patioDataLayoutDataPointer ->
+ patioDataLayout;
+
+ case PatioDataLayoutFunctionPointer patioDataLayoutFunctionPointer ->
+ patioDataLayout;
+
+ case PatioDataLayoutInt patioDataLayoutInt ->
+ patioDataLayout;
+
+ case PatioDataLayoutInt32 patioDataLayoutInt32 ->
+ patioDataLayout;
+
+ case PatioDataLayoutStruct patioDataLayoutStruct ->
+ offsetDataLayout(
+ patioDataLayoutStruct.elements().get(patioOffsets.get(0)),
+ patioOffsets.minus(0)
+ );
+ };
+ }
+}