From 736b902c75ec39872180c2639a9b33d9436b7908 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Dec 2023 12:02:29 +0000 Subject: Add Patio data value null data ptr --- .../shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java | 3 +++ .../org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 3 +++ .../java/org/shedlang/compiler/patio/ast/PatioSerializer.java | 3 +++ .../org/shedlang/compiler/patio/ast/types/PatioDataValue.java | 2 +- .../compiler/patio/ast/types/PatioDataValueDataPointerNull.java | 8 ++++++++ .../org/shedlang/compiler/patio/ast/types/PatioDataValues.java | 4 ++++ 6 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueDataPointerNull.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 7e98d814..d16dabcf 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 @@ -1187,6 +1187,9 @@ public class LlvmPatioCodeGen { case PatioDataValueByte patioDataValueByte -> new LlvmOperandInt(patioDataValueByte.value()); + case PatioDataValueDataPointerNull patioDataValueDataPointerNull -> + new LlvmOperandNull(); + case PatioDataValueInt patioDataValueInt -> new LlvmOperandInt(patioDataValueInt.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 17b26efa..1e22c558 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -612,6 +612,9 @@ public class WasmPatioCodeGen { case PatioDataValueByte patioDataValueByte -> { bytes.put(patioDataValueByte.value()); } + case PatioDataValueDataPointerNull patioDataValueDataPointerNull -> { + bytes.putInt(0); + } case PatioDataValueInt patioDataValueInt -> { bytes.putInt(patioDataValueInt.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 cc2903c5..53508766 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -521,6 +521,9 @@ public class PatioSerializer { treeIdentifier(String.format("0x%02x", byte_.value())) ); + case PatioDataValueDataPointerNull dataPointerNull -> + treeList(treeIdentifier("data-ptr"), treeIdentifier("null")); + case PatioDataValueInt int_ -> treeList( treeIdentifier("int"), 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 1181353e..0726ba3d 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, PatioDataValueBool, PatioDataValueByte, PatioDataValueInt, PatioDataValueStruct { +public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueBool, PatioDataValueByte, PatioDataValueDataPointerNull, PatioDataValueInt, PatioDataValueStruct { PatioDataLayout layout(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueDataPointerNull.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueDataPointerNull.java new file mode 100644 index 00000000..a305d00c --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueDataPointerNull.java @@ -0,0 +1,8 @@ +package org.shedlang.compiler.patio.ast.types; + +public record PatioDataValueDataPointerNull() implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.DATA_POINTER; + } +} 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 c7b1a1d3..10c09e74 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 @@ -20,6 +20,10 @@ public class PatioDataValues { return new PatioDataValueByte((byte) value); } + public static PatioDataValue dataPointerNull() { + return new PatioDataValueDataPointerNull(); + } + public static PatioDataValue int_(int value) { return new PatioDataValueInt(value); } -- cgit v1.2.3