From d76118bdc14ba8d6ad69a788d24ca194a0c700bd Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 16 Dec 2023 22:01:18 +0000 Subject: Add PatioDataValueBool --- .../shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java | 3 +++ .../org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 3 +++ .../java/org/shedlang/compiler/patio/ast/PatioSerializer.java | 6 ++++++ .../org/shedlang/compiler/patio/ast/types/PatioDataValue.java | 2 +- .../org/shedlang/compiler/patio/ast/types/PatioDataValueBool.java | 8 ++++++++ .../org/shedlang/compiler/patio/ast/types/PatioDataValues.java | 4 ++++ 6 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueBool.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java index da9c0c37..7fdad03e 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java @@ -1181,6 +1181,9 @@ public class LlvmPatioCodeGen { yield new LlvmOperandArray(llvmType, llvmElements); } + case PatioDataValueBool patioDataValueByte -> + new LlvmOperandInt(patioDataValueByte.value() ? 1 : 0); + case PatioDataValueByte patioDataValueByte -> new LlvmOperandInt(patioDataValueByte.value()); diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java index d53a4044..a0d69f70 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -606,6 +606,9 @@ public class WasmPatioCodeGen { patioDataValueToBytes(element, bytes); } } + case PatioDataValueBool patioDataValueBool -> { + bytes.put(patioDataValueBool.value() ? (byte) 1 : (byte) 0); + } case PatioDataValueByte patioDataValueByte -> { bytes.put(patioDataValueByte.value()); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java index 3e4fb96a..05703e24 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -509,6 +509,12 @@ public class PatioSerializer { ) ); + case PatioDataValueBool bool -> + treeList( + treeIdentifier("bool"), + treeIdentifier(bool.value() ? "true" : "false") + ); + case PatioDataValueByte byte_ -> treeList( treeIdentifier("byte"), diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java index b55dc07b..1181353e 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java @@ -1,5 +1,5 @@ package org.shedlang.compiler.patio.ast.types; -public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueByte, PatioDataValueInt, PatioDataValueStruct { +public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueBool, PatioDataValueByte, PatioDataValueInt, PatioDataValueStruct { PatioDataLayout layout(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueBool.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueBool.java new file mode 100644 index 00000000..57ca6851 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueBool.java @@ -0,0 +1,8 @@ +package org.shedlang.compiler.patio.ast.types; + +public record PatioDataValueBool(boolean value) implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.BOOL; + } +} diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java index fa158b6b..c7b1a1d3 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java @@ -12,6 +12,10 @@ public class PatioDataValues { return new PatioDataValueArray(elementLayout, elements); } + public static PatioDataValue bool(boolean value) { + return new PatioDataValueBool(value); + } + public static PatioDataValue byte_(int value) { return new PatioDataValueByte((byte) value); } -- cgit v1.2.3