From b6dc495cf53e882d1c2e332d18322db1e8def9e4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 26 Mar 2026 21:09:32 +0000 Subject: Serialize Patio compilation units to flatbuffers --- .../patio/serialization/PatioToFlatbuffers.java | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/main/java') 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 614f368c..e7dd1522 100644 --- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java +++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java @@ -17,6 +17,46 @@ import java.util.Optional; import java.util.function.Function; public class PatioToFlatbuffers { + // == Compilation units == + + public static int serializeCompilationUnit( + FlatBufferBuilder builder, + PatioCompilationUnit compilationUnit + ) { + var sourceFbs = SourceToFlatbuffers.serializeSource( + builder, + compilationUnit.source(), + Optional.empty() + ); + + var elementsOffsetsFbs = compilationUnit.elements().stream() + .mapToInt(element -> serializeCompilationUnitElement(builder, element, compilationUnit.source())) + .toArray(); + var elementsVectorFbs = PatioCompilationUnitFbs.createElementsVector(builder, elementsOffsetsFbs); + + PatioCompilationUnitFbs.startPatioCompilationUnitFbs(builder); + PatioCompilationUnitFbs.addSource(builder, sourceFbs); + PatioCompilationUnitFbs.addElements(builder, elementsVectorFbs); + return PatioCompilationUnitFbs.endPatioCompilationUnitFbs(builder); + } + + public static PatioCompilationUnit deserializeCompilationUnit( + PatioCompilationUnitFbs compilationUnitFbs + ) { + var source = SourceToFlatbuffers.deserializeSource( + compilationUnitFbs.source(), + Optional.empty() + ); + + var elements = deserializeVector( + compilationUnitFbs::elements, + compilationUnitFbs.elementsLength(), + elementFbs -> deserializeCompilationUnitElement(elementFbs, source) + ); + + return new PatioCompilationUnit(elements, source); + } + // == Compilation unit elements == public static int serializeCompilationUnitElement( -- cgit v1.2.3