From 7ff726e1f4ee42c5eaa1ce533cda7e34a08a82be Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 12 Jun 2023 21:29:51 +0100 Subject: Add LLVM pointer type --- .../backends/llvm/ir/LlvmIrSerializer.java | 22 +++++++--------------- .../backends/llvm/ir/ast/types/LlvmType.java | 2 +- .../llvm/ir/ast/types/LlvmTypePointer.java | 4 ++++ .../backends/llvm/ir/ast/types/LlvmTypes.java | 4 ++++ 4 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.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 b3e87ac7..c9f6b072 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 @@ -1,21 +1,9 @@ package org.shedlang.compiler.backends.llvm.ir; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmGlobalDefinition; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam; -import org.shedlang.compiler.backends.llvm.ir.ast.LlvmTopLevelEntity; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmAdd; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmInstruction; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn; -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.*; +import org.shedlang.compiler.backends.llvm.ir.ast.instructions.*; 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 org.shedlang.compiler.backends.llvm.ir.ast.types.*; import static org.shedlang.compiler.util.Iterables.forEachInterspersed; @@ -154,6 +142,10 @@ public class LlvmIrSerializer { ); builder.append("}"); } + case LlvmTypePointer pointer -> { + serializeType(pointer.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 067ad6d8..dec3db7e 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, LlvmTypeStructure { +public sealed interface LlvmType permits LlvmTypeArray, LlvmTypePointer, LlvmTypeScalar, LlvmTypeStructure { } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java new file mode 100644 index 00000000..64d3bfe3 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.backends.llvm.ir.ast.types; + +public record LlvmTypePointer(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 e93308fd..4362618a 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 @@ -14,6 +14,10 @@ public class LlvmTypes { return new LlvmTypeArray(size, elementType); } + public static LlvmTypePointer pointer(LlvmType elementType) { + return new LlvmTypePointer(elementType); + } + public static LlvmTypeStructure structure(List elementTypes) { return new LlvmTypeStructure(elementTypes); } -- cgit v1.2.3