aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-14 19:18:32 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-14 19:18:32 +0100
commit825e851df3bb56e00d6d434bb0491ffd4112cead (patch)
treea221443dfa10b5f81a9e7caad31e6fc7fb0a7acf /src/main/java
parent8a0add6981fef214b910a5fce4f79561b85e3d0d (diff)
Add LLVM function type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java10
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypeFunction.java9
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java7
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);
}