From a4332b8774199677efb9d6941127ddf19868d927 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 12 Jun 2023 20:42:33 +0100 Subject: Add LLVM type array --- .../org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java | 8 ++++++++ .../shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java | 2 +- .../compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java | 4 ++++ .../shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java (limited to 'src/main/java') 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); + } } -- cgit v1.2.3