aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 20:27:43 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 20:27:43 +0100
commit95b00d8003ac8f801212149b350f36a6649b1b86 (patch)
tree897b3e74ab5c9d10caa58bcf1e333d5d4193049c /src/main/java
parentd5760a6e10a17d98ab3f7ae439c2387f371f605c (diff)
Add global definition
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java21
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmGlobalDefinition.java13
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmTopLevelEntity.java2
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 {
}