From ae0f6f8ce9a82a17f44e31f21e437bd66a910f23 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 12 Jun 2023 20:36:35 +0100 Subject: Add LLVM array operand --- .../compiler/backends/llvm/ir/LlvmIrSerializer.java | 17 +++++++++++++++++ .../backends/llvm/ir/ast/operands/LlvmOperand.java | 2 +- .../backends/llvm/ir/ast/operands/LlvmOperandArray.java | 11 +++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandArray.java (limited to 'src/main/java') 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 elements +) implements LlvmOperand { +} -- cgit v1.2.3