From 4ff0e8539505a28c26baa10db603c6271ae3a49a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 16 Jun 2023 23:20:50 +0100 Subject: Make size of LLVM array type optional --- .../org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java | 2 +- .../compiler/backends/llvm/ir/ast/types/LlvmTypeArray.java | 4 +++- .../shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) (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 0c916286..dc6eb3d3 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 @@ -191,7 +191,7 @@ public class LlvmIrSerializer { } case LlvmTypeArray array -> { builder.append("["); - builder.append(array.size()); + builder.append(array.size().orElse(0)); builder.append(" x "); serializeType(array.elementType(), builder); builder.append("]"); 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 index b70755c9..5934d5d8 100644 --- 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 @@ -1,4 +1,6 @@ package org.shedlang.compiler.backends.llvm.ir.ast.types; -public record LlvmTypeArray(int size, LlvmType elementType) implements LlvmType { +import java.util.OptionalInt; + +public record LlvmTypeArray(OptionalInt 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 afa7103f..90a8b1ee 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,6 +1,7 @@ package org.shedlang.compiler.backends.llvm.ir.ast.types; import java.util.List; +import java.util.OptionalInt; public class LlvmTypes { private LlvmTypes() { @@ -11,8 +12,12 @@ public class LlvmTypes { public static final LlvmTypeScalar INT_64 = new LlvmTypeScalar("i64"); public static final LlvmTypeScalar VOID = new LlvmTypeScalar("void"); + public static LlvmTypeArray array(LlvmType elementType) { + return new LlvmTypeArray(OptionalInt.empty(), elementType); + } + public static LlvmTypeArray array(int size, LlvmType elementType) { - return new LlvmTypeArray(size, elementType); + return new LlvmTypeArray(OptionalInt.of(size), elementType); } public static LlvmTypeFunction function( -- cgit v1.2.3