aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 20:36:35 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 20:36:35 +0100
commitae0f6f8ce9a82a17f44e31f21e437bd66a910f23 (patch)
treeb6c89cbe9c71fae93911ee25febdfc95fbdeb4a3 /src/main/java
parentf67078f6cf8eb1d1da9dad8bb043344b13387ada (diff)
Add LLVM array operand
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java17
-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/LlvmOperandArray.java11
3 files changed, 29 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 62b30246..2e5072ae 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
@@ -15,6 +15,8 @@ import org.shedlang.compiler.backends.llvm.ir.ast.operands.*;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeScalar;
+import static org.shedlang.compiler.util.Iterables.forEachInterspersed;
+
public class LlvmIrSerializer {
private LlvmIrSerializer() {
}
@@ -54,6 +56,21 @@ public class LlvmIrSerializer {
public static void serializeOperand(LlvmOperand operand, StringBuilder builder) {
switch (operand) {
+ case LlvmOperandArray array -> {
+ builder.append("[");
+ forEachInterspersed(
+ array.elements(),
+ element -> {
+ serializeType(array.type(), builder);
+ builder.append(" ");
+ serializeOperand(element, builder);
+ },
+ () -> {
+ builder.append(", ");
+ }
+ );
+ builder.append("]");
+ }
case LlvmOperandInt operandInt -> {
builder.append(operandInt.value());
}
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 bf86b833..35a1cfcd 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 LlvmOperandInt, LlvmVariable {
+public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandInt, LlvmVariable {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandArray.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandArray.java
new file mode 100644
index 00000000..dcd3fe55
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandArray.java
@@ -0,0 +1,11 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.operands;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
+
+import java.util.List;
+
+public record LlvmOperandArray(
+ LlvmType type,
+ List<LlvmOperand> elements
+) implements LlvmOperand {
+}