diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:42:33 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:42:33 +0100 |
| commit | a4332b8774199677efb9d6941127ddf19868d927 (patch) | |
| tree | a892a707e99200776b84db0bf8331c1960ab331c /src/main/java | |
| parent | c359976e1f9456248c1d1cbebf8c58db5379709c (diff) | |
Add LLVM type array
Diffstat (limited to 'src/main/java')
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); + } } |
