diff options
Diffstat (limited to 'src/main/java')
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); + } } |
