aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-28 17:44:37 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-28 17:44:37 +0000
commit60cf1b347241855b2741949443fc7008554a482c (patch)
tree8223cf713e9d20f672650067c00536b568dc3fd1 /src/main/java
parent9b7919f545f71b60d769ef5a57b240c9dc770a3c (diff)
Add Patio byte-const
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java3
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java11
-rw-r--r--src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java2
5 files changed, 21 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
index ee9e36f8..c3cc1a60 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
@@ -1083,6 +1083,9 @@ public class PatioToLlvm {
case PatioBoolConst patioBoolConst ->
new LlvmOperandInt(patioBoolConst.value() ? 1 : 0);
+ case PatioByteConst patioByteConst ->
+ new LlvmOperandInt(patioByteConst.value());
+
case PatioDataPtrConst patioDataPtrConst ->
new LlvmVariableGlobal(patioDataPtrConst.name());
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
index c9d862ac..70319ff3 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -530,6 +530,9 @@ public class PatioToWasm {
case PatioBoolConst patioBoolConst ->
context.addInstruction(new WasmI32Const(patioBoolConst.value() ? 1 : 0));
+ case PatioByteConst patioByteConst ->
+ context.addInstruction(new WasmI32Const(Byte.toUnsignedInt(patioByteConst.value())));
+
case PatioDataPtrConst patioDataPtrConst -> {
var wasmMemoryAddress = new WasmMemoryAddress(patioDataPtrConst.name());
yield context.addInstruction(new WasmMemoryAddressConst(
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
index dc7f7c20..06185778 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -418,6 +418,9 @@ public class PatioSerializer {
case PatioBoolConst bool ->
treeList(treeIdentifier("bool-const"), treeBool(bool.value()));
+ case PatioByteConst byte_ ->
+ treeList(treeIdentifier("byte-const"), treeInt(byte_.value()));
+
case PatioDataPtrConst dataPtr ->
treeList(treeIdentifier("data-ptr-const"), treeString(dataPtr.name()));
diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java
new file mode 100644
index 00000000..460e2bff
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioByteConst.java
@@ -0,0 +1,11 @@
+package org.shedlang.compiler.patio.operands;
+
+import org.shedlang.compiler.patio.types.PatioType;
+import org.shedlang.compiler.patio.types.PatioTypes;
+
+public record PatioByteConst(byte value) implements PatioOperandConst {
+ @Override
+ public PatioType type() {
+ return PatioTypes.BYTE;
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java
index 0a31824f..cb702ddb 100644
--- a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java
+++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java
@@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.operands;
import org.shedlang.compiler.patio.types.PatioType;
-public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioInt32Const {
+public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioByteConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioInt32Const, PatioIntConst {
PatioType type();
}