aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-22 18:42:45 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-22 18:42:45 +0000
commit2fad94a05e879072af65ed1a995939d3249c2443 (patch)
tree34fd14d81124813b9dcf63049bb4a5fba5270d2d /src/main/java
parent0a6b38ca7ee956cab5818c195856d5c159966f7a (diff)
Serialize Patio operands to flatbuffers
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
index 7eaae88e..d12465ce 100644
--- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
+++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.patio.serialization;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.IntVector;
import org.shedlang.compiler.patio.flatbuffers.*;
+import org.shedlang.compiler.patio.operands.*;
import org.shedlang.compiler.patio.types.*;
import org.shedlang.compiler.patio.values.*;
@@ -11,6 +12,160 @@ import java.util.List;
import java.util.function.Function;
public class PatioToFlatbuffers {
+ // == Operands ==
+
+ public static int serializeOperand(
+ FlatBufferBuilder builder,
+ PatioOperand operand
+ ) {
+ return switch (operand) {
+ case PatioBoolConst boolConst -> {
+ PatioBoolConstFbs.startPatioBoolConstFbs(builder);
+ PatioBoolConstFbs.addValue(builder, boolConst.value());
+ var boolConstFbs = PatioBoolConstFbs.endPatioBoolConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioBoolConstFbs);
+ PatioOperandFbs.addValue(builder, boolConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioByteConst byteConst -> {
+ PatioByteConstFbs.startPatioByteConstFbs(builder);
+ PatioByteConstFbs.addValue(builder, byteConst.value());
+ var byteConstFbs = PatioByteConstFbs.endPatioByteConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioByteConstFbs);
+ PatioOperandFbs.addValue(builder, byteConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioDataPtrConst dataPtrConst -> {
+ var dataPtrValueFbs = serializeDataPtrValue(builder, dataPtrConst.value());
+
+ PatioDataPtrConstFbs.startPatioDataPtrConstFbs(builder);
+ PatioDataPtrConstFbs.addValue(builder, dataPtrValueFbs);
+ var dataPtrConstFbs = PatioDataPtrConstFbs.endPatioDataPtrConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioDataPtrConstFbs);
+ PatioOperandFbs.addValue(builder, dataPtrConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioFunctionPtrConst functionPtrConst -> {
+ var nameFbs = builder.createString(functionPtrConst.name());
+
+ PatioFunctionPtrConstFbs.startPatioFunctionPtrConstFbs(builder);
+ PatioFunctionPtrConstFbs.addName(builder, nameFbs);
+ var functionPtrConstFbs = PatioFunctionPtrConstFbs.endPatioFunctionPtrConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioFunctionPtrConstFbs);
+ PatioOperandFbs.addValue(builder, functionPtrConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioLocalRef localRef -> {
+ var nameFbs = builder.createString(localRef.name());
+
+ PatioLocalRefFbs.startPatioLocalRefFbs(builder);
+ PatioLocalRefFbs.addName(builder, nameFbs);
+ var localRefFbs = PatioLocalRefFbs.endPatioLocalRefFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioLocalRefFbs);
+ PatioOperandFbs.addValue(builder, localRefFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioIntConst intConst -> {
+ var intValueFbs = serializeIntValue(builder, intConst.value());
+
+ PatioIntConstFbs.startPatioIntConstFbs(builder);
+ PatioIntConstFbs.addValue(builder, intValueFbs);
+ var intConstFbs = PatioIntConstFbs.endPatioIntConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioIntConstFbs);
+ PatioOperandFbs.addValue(builder, intConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ case PatioInt32Const int32Const -> {
+ var intValueFbs = serializeIntValue(builder, int32Const.value());
+
+ PatioInt32ConstFbs.startPatioInt32ConstFbs(builder);
+ PatioInt32ConstFbs.addValue(builder, intValueFbs);
+ var int32ConstFbs = PatioInt32ConstFbs.endPatioInt32ConstFbs(builder);
+
+ PatioOperandFbs.startPatioOperandFbs(builder);
+ PatioOperandFbs.addValueType(builder, PatioOperandValueFbs.PatioInt32ConstFbs);
+ PatioOperandFbs.addValue(builder, int32ConstFbs);
+ yield PatioOperandFbs.endPatioOperandFbs(builder);
+ }
+
+ default ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
+
+ public static PatioOperand deserializeOperand(PatioOperandFbs operandFbs) {
+ return switch (operandFbs.valueType()) {
+ case PatioOperandValueFbs.PatioBoolConstFbs -> {
+ var boolConstFbs = (PatioBoolConstFbs) operandFbs.value(new PatioBoolConstFbs());
+
+ yield new PatioBoolConst(boolConstFbs.value());
+ }
+
+ case PatioOperandValueFbs.PatioByteConstFbs -> {
+ var byteConstFbs = (PatioByteConstFbs) operandFbs.value(new PatioByteConstFbs());
+
+ yield new PatioByteConst((byte) byteConstFbs.value());
+ }
+
+ case PatioOperandValueFbs.PatioDataPtrConstFbs -> {
+ var dataPtrConstFbs = (PatioDataPtrConstFbs) operandFbs.value(new PatioDataPtrConstFbs());
+
+ var dataPtrValue = deserializeDataPtrValue(dataPtrConstFbs.value());
+
+ yield new PatioDataPtrConst(dataPtrValue);
+ }
+
+ case PatioOperandValueFbs.PatioFunctionPtrConstFbs -> {
+ var functionPtrConstFbs = (PatioFunctionPtrConstFbs) operandFbs.value(new PatioFunctionPtrConstFbs());
+
+ yield new PatioFunctionPtrConst(functionPtrConstFbs.name());
+ }
+
+ case PatioOperandValueFbs.PatioIntConstFbs -> {
+ var intConstFbs = (PatioIntConstFbs) operandFbs.value(new PatioIntConstFbs());
+
+ var intValue = deserializeIntValue(intConstFbs.value());
+
+ yield new PatioIntConst(intValue);
+ }
+
+ case PatioOperandValueFbs.PatioInt32ConstFbs -> {
+ var int32ConstFbs = (PatioInt32ConstFbs) operandFbs.value(new PatioInt32ConstFbs());
+
+ var intValue = deserializeIntValue(int32ConstFbs.value());
+
+ yield new PatioInt32Const(intValue);
+ }
+
+ case PatioOperandValueFbs.PatioLocalRefFbs -> {
+ var localRefFbs = (PatioLocalRefFbs) operandFbs.value(new PatioLocalRefFbs());
+
+ yield new PatioLocalRef(localRefFbs.name());
+ }
+
+ default ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
+
// == Data ptr values ==
public static int serializeDataPtrValue(