diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:27:43 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:27:43 +0100 |
| commit | 95b00d8003ac8f801212149b350f36a6649b1b86 (patch) | |
| tree | 897b3e74ab5c9d10caa58bcf1e333d5d4193049c /src/main/java | |
| parent | d5760a6e10a17d98ab3f7ae439c2387f371f605c (diff) | |
Add global definition
Diffstat (limited to 'src/main/java')
3 files changed, 34 insertions, 2 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 9c6ecc55..4846f7ed 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,6 +1,8 @@ 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; @@ -85,7 +87,24 @@ public class LlvmIrSerializer { } public static void serializeTopLevelEntity(LlvmTopLevelEntity entity, StringBuilder builder) { - + switch (entity) { + case LlvmFunctionDefinition functionDefinition -> { + } + case LlvmGlobalDefinition globalDefinition -> { + builder.append("@"); + builder.append(globalDefinition.name()); + builder.append(" = "); + if (globalDefinition.unnamedAddr()) { + builder.append("unnamed_addr "); + } + builder.append(globalDefinition.constant() ? "constant" : "global"); + builder.append(" "); + serializeType(globalDefinition.type(), builder); + builder.append(" "); + serializeOperand(globalDefinition.value(), builder); + builder.append("\n"); + } + } } public static void serializeType(LlvmType type, StringBuilder builder) { diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java new file mode 100644 index 00000000..d7adb1e1 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java @@ -0,0 +1,13 @@ +package org.shedlang.compiler.backends.llvm.ir.ast; + +import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; +import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType; + +public record LlvmGlobalDefinition( + String name, + LlvmType type, + LlvmOperand value, + boolean constant, + boolean unnamedAddr +) implements LlvmTopLevelEntity { +} diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java index 96287920..86b3efc3 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.backends.llvm.ir.ast; -public sealed interface LlvmTopLevelEntity permits LlvmFunctionDefinition { +public sealed interface LlvmTopLevelEntity permits LlvmFunctionDefinition, LlvmGlobalDefinition { } |
