diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:36:35 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 20:36:35 +0100 |
| commit | ae0f6f8ce9a82a17f44e31f21e437bd66a910f23 (patch) | |
| tree | b6c89cbe9c71fae93911ee25febdfc95fbdeb4a3 /src/main/java | |
| parent | f67078f6cf8eb1d1da9dad8bb043344b13387ada (diff) | |
Add LLVM array operand
Diffstat (limited to 'src/main/java')
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 { +} |
