diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-22 18:42:45 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-22 18:42:45 +0000 |
| commit | 2fad94a05e879072af65ed1a995939d3249c2443 (patch) | |
| tree | 34fd14d81124813b9dcf63049bb4a5fba5270d2d /src/main/java | |
| parent | 0a6b38ca7ee956cab5818c195856d5c159966f7a (diff) | |
Serialize Patio operands to flatbuffers
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java | 155 |
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( |
