aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 20:42:33 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 20:42:33 +0100
commita4332b8774199677efb9d6941127ddf19868d927 (patch)
treea892a707e99200776b84db0bf8331c1960ab331c /src/main/java
parentc359976e1f9456248c1d1cbebf8c58db5379709c (diff)
Add LLVM type array
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java8
-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/LlvmTypeArray.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java4
4 files changed, 17 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 4309df32..c098f32d 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
@@ -13,6 +13,7 @@ import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturnVoid;
import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTerminatorInstruction;
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 static org.shedlang.compiler.util.Iterables.forEachInterspersed;
@@ -136,6 +137,13 @@ public class LlvmIrSerializer {
case LlvmTypeScalar scalar -> {
builder.append(scalar.name());
}
+ case LlvmTypeArray array -> {
+ builder.append("[");
+ builder.append(array.size());
+ builder.append(" x ");
+ serializeType(array.elementType(), builder);
+ 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 55540f2c..a0b2dbc8 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 LlvmTypeScalar {
+public sealed interface LlvmType permits LlvmTypeArray, LlvmTypeScalar {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java
new file mode 100644
index 00000000..b70755c9
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.types;
+
+public record LlvmTypeArray(int size, LlvmType elementType) 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 322167e0..27a0bd60 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
@@ -6,4 +6,8 @@ public class LlvmTypes {
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);
+ }
}