aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 00:46:51 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 00:47:00 +0100
commitaa5297791ff229c54931b79e9781ebb03b5e079c (patch)
treed78de4f240c8bf29d4f4b6047d7642acd7a38d58 /src/main/java
parente0b8a6d542817ca464c46033e0c6323c23d2aeac (diff)
Serialize LLVM function definitions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java15
1 files changed, 15 insertions, 0 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 8555b720..eb99abb9 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
@@ -175,6 +175,21 @@ public class LlvmIrSerializer {
public static void serializeTopLevelEntity(LlvmTopLevelEntity entity, StringBuilder builder) {
switch (entity) {
case LlvmFunctionDefinition functionDefinition -> {
+ builder.append("define ");
+ serializeType(functionDefinition.returnType(), builder);
+ builder.append(" @");
+ builder.append(functionDefinition.name());
+ builder.append("(");
+ forEachInterspersed(
+ functionDefinition.params(),
+ param -> serializeParam(param, builder),
+ () -> builder.append(", ")
+ );
+ builder.append(") {\n");
+ for (var basicBlock : functionDefinition.body()) {
+ serializeBasicBlock(basicBlock, builder);
+ }
+ builder.append("}\n");
}
case LlvmGlobalDefinition globalDefinition -> {
builder.append("@");