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