aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 20:45:38 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 20:45:38 +0100
commit5fe757cc079c3df936638b9e7a1b3ca4df7211a3 (patch)
treea2f70a641c321852537a7ebc868fe8ef094adc4e /src/main/java
parenta4332b8774199677efb9d6941127ddf19868d927 (diff)
Add LLVM structure type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java10
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeStructure.java8
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java7
4 files changed, 26 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
index c098f32d..b3e87ac7 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
@@ -15,6 +15,7 @@ import org.shedlang.compiler.backends.llvm.ir.ast.operands.*;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeArray;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeScalar;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeStructure;
import static org.shedlang.compiler.util.Iterables.forEachInterspersed;
@@ -144,6 +145,15 @@ public class LlvmIrSerializer {
serializeType(array.elementType(), builder);
builder.append("]");
}
+ case LlvmTypeStructure structure -> {
+ builder.append("{");
+ forEachInterspersed(
+ structure.elementTypes(),
+ elementType -> serializeType(elementType, builder),
+ () -> builder.append(", ")
+ );
+ builder.append("}");
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
index a0b2dbc8..067ad6d8 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.types;
-public sealed interface LlvmType permits LlvmTypeArray, LlvmTypeScalar {
+public sealed interface LlvmType permits LlvmTypeArray, LlvmTypeScalar, LlvmTypeStructure {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeStructure.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeStructure.java
new file mode 100644
index 00000000..0299197c
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeStructure.java
@@ -0,0 +1,8 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.types;
+
+import java.util.List;
+
+public record LlvmTypeStructure(
+ List<LlvmType> elementTypes
+) implements LlvmType {
+}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
index 27a0bd60..e93308fd 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
@@ -1,13 +1,20 @@
package org.shedlang.compiler.backends.llvm.ir.ast.types;
+import java.util.List;
+
public class LlvmTypes {
private LlvmTypes() {
}
+ public static final LlvmType INT_32 = new LlvmTypeScalar("i32");
public static final LlvmType INT_64 = new LlvmTypeScalar("i64");
public static final LlvmType VOID = new LlvmTypeScalar("void");
public static LlvmTypeArray array(int size, LlvmType elementType) {
return new LlvmTypeArray(size, elementType);
}
+
+ public static LlvmTypeStructure structure(List<LlvmType> elementTypes) {
+ return new LlvmTypeStructure(elementTypes);
+ }
}