diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-14 19:18:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-14 19:18:32 +0100 |
| commit | 825e851df3bb56e00d6d434bb0491ffd4112cead (patch) | |
| tree | a221443dfa10b5f81a9e7caad31e6fc7fb0a7acf /src/main/java | |
| parent | 8a0add6981fef214b910a5fce4f79561b85e3d0d (diff) | |
Add LLVM function type
Diffstat (limited to 'src/main/java')
4 files changed, 27 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 9bceaf45..b78ed21e 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,6 +191,16 @@ public class LlvmIrSerializer { serializeType(pointer.elementType(), builder); builder.append(" *"); } + case LlvmTypeFunction function -> { + serializeType(function.returnType(), builder); + builder.append(" ("); + forEachInterspersed( + function.paramTypes(), + paramType -> serializeType(paramType, 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 dec3db7e..16e33790 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, LlvmTypePointer, LlvmTypeScalar, LlvmTypeStructure { +public sealed interface LlvmType permits LlvmTypeArray, LlvmTypeFunction, LlvmTypePointer, LlvmTypeScalar, LlvmTypeStructure { } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeFunction.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeFunction.java new file mode 100644 index 00000000..c6c3bfba --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeFunction.java @@ -0,0 +1,9 @@ +package org.shedlang.compiler.backends.llvm.ir.ast.types; + +import java.util.List; + +public record LlvmTypeFunction( + LlvmType returnType, + List<LlvmType> paramTypes +) 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 b22cda43..e507546a 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 @@ -15,6 +15,13 @@ public class LlvmTypes { return new LlvmTypeArray(size, elementType); } + public static LlvmTypeFunction function( + LlvmType returnType, + List<LlvmType> paramTypes + ) { + return new LlvmTypeFunction(returnType, paramTypes); + } + public static LlvmTypePointer pointer(LlvmType elementType) { return new LlvmTypePointer(elementType); } |
