diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 21:29:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 21:29:51 +0100 |
| commit | 7ff726e1f4ee42c5eaa1ce533cda7e34a08a82be (patch) | |
| tree | b82e8514e94dddf034cd2770ad4f3276d5ac417d /src/main/java | |
| parent | 5fe757cc079c3df936638b9e7a1b3ca4df7211a3 (diff) | |
Add LLVM pointer type
Diffstat (limited to 'src/main/java')
4 files changed, 16 insertions, 16 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 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<LlvmType> elementTypes) { return new LlvmTypeStructure(elementTypes); } |
