aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 20:39:52 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 20:39:52 +0100
commitc359976e1f9456248c1d1cbebf8c58db5379709c (patch)
tree2afd767a513214be57f0856a58c01a33b422245f /src/main/java
parentae0f6f8ce9a82a17f44e31f21e437bd66a910f23 (diff)
Add LLVM operand structure
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java13
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandStructure.java8
3 files changed, 19 insertions, 4 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 2e5072ae..4309df32 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
@@ -65,15 +65,22 @@ public class LlvmIrSerializer {
builder.append(" ");
serializeOperand(element, builder);
},
- () -> {
- builder.append(", ");
- }
+ () -> builder.append(", ")
);
builder.append("]");
}
case LlvmOperandInt operandInt -> {
builder.append(operandInt.value());
}
+ case LlvmOperandStructure structure -> {
+ builder.append("{");
+ forEachInterspersed(
+ structure.elements(),
+ element -> serializeTypedOperand(element, builder),
+ () -> builder.append(", ")
+ );
+ builder.append("}");
+ }
case LlvmVariable variable -> {
serializeVariable(variable, builder);
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
index 35a1cfcd..6f53dab1 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.operands;
-public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandInt, LlvmVariable {
+public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandInt, LlvmOperandStructure, LlvmVariable {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandStructure.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandStructure.java
new file mode 100644
index 00000000..a12d7512
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandStructure.java
@@ -0,0 +1,8 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.operands;
+
+import java.util.List;
+
+public record LlvmOperandStructure(
+ List<LlvmTypedOperand> elements
+) implements LlvmOperand {
+}