aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-31 14:45:04 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-31 15:22:40 +0100
commit91860485774924e82da9b0774179d4c3c8da810a (patch)
treee06f52f147502e80aea139c20adac706479cb7ea /src
parent410fff7b7ecf6f36a0a46ab1d90553169e3728f1 (diff)
Use transient-0 instead of flatbuffersmain
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/cranelift/CraneliftBackend.java15
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java2712
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToTransient0.java141
-rw-r--r--src/main/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffers.java141
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java273
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java144
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToTransient0Tests.java125
-rw-r--r--src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java104
-rw-r--r--src/test/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffersTests.java25
-rw-r--r--src/transient-0/java/org/shedlang/compiler/patio/instructions/transient0/HobgoblinTransient0Instructions.java712
-rw-r--r--src/transient-0/java/org/shedlang/compiler/patio/operands/transient0/HobgoblinTransient0Operands.java144
-rw-r--r--src/transient-0/java/org/shedlang/compiler/patio/transient0/HobgoblinTransient0Patio.java257
-rw-r--r--src/transient-0/java/org/shedlang/compiler/patio/types/transient0/HobgoblinTransient0Types.java414
-rw-r--r--src/transient-0/java/org/shedlang/compiler/patio/values/transient0/HobgoblinTransient0Values.java132
-rw-r--r--src/transient-0/java/org/shedlang/compiler/sources/transient0/HobgoblinTransient0Sources.java72
-rw-r--r--src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0Builtins.java79
-rw-r--r--src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0TaggedSharedValue.java22
-rw-r--r--src/transient-0/java/org/zwobble/sourcetext/transient0/HobgoblinTransient0Sourcetext.java95
18 files changed, 2318 insertions, 3289 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/cranelift/CraneliftBackend.java b/src/main/java/org/shedlang/compiler/backends/cranelift/CraneliftBackend.java
index 75794092..31fdb1af 100644
--- a/src/main/java/org/shedlang/compiler/backends/cranelift/CraneliftBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/cranelift/CraneliftBackend.java
@@ -1,18 +1,17 @@
package org.shedlang.compiler.backends.cranelift;
-import com.google.flatbuffers.FlatBufferBuilder;
import org.pcollections.PVector;
import org.shedlang.compiler.backends.Backend;
import org.shedlang.compiler.backends.PatioBackends;
import org.shedlang.compiler.backends.llvm.LlvmBackend;
-import org.shedlang.compiler.backends.targets.NativeTarget;
import org.shedlang.compiler.backends.paths.PartialTargetPath;
import org.shedlang.compiler.backends.paths.TargetDir;
+import org.shedlang.compiler.backends.targets.NativeTarget;
import org.shedlang.compiler.config.ProfileConfig;
import org.shedlang.compiler.config.ProjectConfig;
import org.shedlang.compiler.filesystem.ShedCompilerFiles;
import org.shedlang.compiler.patio.PatioCompilationUnit;
-import org.shedlang.compiler.patio.serialization.PatioToFlatbuffers;
+import org.shedlang.compiler.patio.serialization.PatioToTransient0;
import org.shedlang.compiler.runtime.ShedRuntime;
import org.shedlang.compiler.shid.ShidNamespace;
import org.shedlang.compiler.typechecker.TypeInfos;
@@ -20,6 +19,7 @@ import org.shedlang.compiler.types.NamespaceName;
import org.shedlang.compiler.util.P;
import org.shedlang.compiler.util.processes.ProcessError;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -62,14 +62,11 @@ public class CraneliftBackend implements Backend {
Optional<String> mainFunctionName,
PartialTargetPath partialTargetPath
) throws IOException, InterruptedException {
- var fbsBuilder = new FlatBufferBuilder();
- var compilationUnitOffset = PatioToFlatbuffers.serializeCompilationUnit(fbsBuilder, patio);
- fbsBuilder.finish(compilationUnitOffset);
-
- // TODO: avoid the copy
var patioPath = partialTargetPath.withExtension(".patio");
Files.createDirectories(patioPath.getParent());
- Files.write(patioPath, fbsBuilder.sizedByteArray());
+ try (var outputStream = new FileOutputStream(patioPath.toFile())) {
+ PatioToTransient0.serializeCompilationUnit(patio, outputStream);
+ }
var patioToCraneliftArgs = new ArrayList<String>();
patioToCraneliftArgs.add(
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
deleted file mode 100644
index 1f2e34c8..00000000
--- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
+++ /dev/null
@@ -1,2712 +0,0 @@
-package org.shedlang.compiler.patio.serialization;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import com.google.flatbuffers.IntVector;
-import org.shedlang.compiler.patio.*;
-import org.shedlang.compiler.patio.flatbuffers.*;
-import org.shedlang.compiler.patio.instructions.*;
-import org.shedlang.compiler.patio.operands.*;
-import org.shedlang.compiler.patio.types.*;
-import org.shedlang.compiler.patio.values.*;
-import org.shedlang.compiler.sources.Source;
-import org.shedlang.compiler.sources.serialization.SourceToFlatbuffers;
-
-import java.util.ArrayList;
-import java.util.List;
-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(
- FlatBufferBuilder builder,
- PatioCompilationUnitElement element,
- Source parentSource
- ) {
- return switch (element) {
- case PatioDataElementImmutableDefinition dataElementImmutableDefinition -> {
- var valueFbs = serializeDataElementImmutableDefinition(builder, dataElementImmutableDefinition, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioDataElementImmutableDefinitionFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
-
- case PatioDataElementMutableDeclaration dataElementMutableDeclaration -> {
- var valueFbs = serializeDataElementMutableDeclaration(builder, dataElementMutableDeclaration, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioDataElementMutableDeclarationFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
-
- case PatioDataElementMutableDefinition dataElementMutableDefinition -> {
- var valueFbs = serializeDataElementMutableDefinition(builder, dataElementMutableDefinition, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioDataElementMutableDefinitionFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
-
- case PatioExceptionTypeDefinition exceptionTypeDefinition -> {
- var valueFbs = serializeExceptionTypeDefinition(builder, exceptionTypeDefinition, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioExceptionTypeDefinitionFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
-
- case PatioFunctionDeclaration functionDeclaration -> {
- var valueFbs = serializeFunctionDeclaration(builder, functionDeclaration, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioFunctionDeclarationFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
-
- case PatioFunctionDefinition functionDefinition -> {
- var valueFbs = serializeFunctionDefinition(builder, functionDefinition, parentSource);
-
- PatioCompilationUnitElementFbs.startPatioCompilationUnitElementFbs(builder);
- PatioCompilationUnitElementFbs.addValueType(
- builder,
- PatioCompilationUnitElementValueFbs.PatioFunctionDefinitionFbs
- );
- PatioCompilationUnitElementFbs.addValue(builder, valueFbs);
- yield PatioCompilationUnitElementFbs.endPatioCompilationUnitElementFbs(builder);
- }
- };
- }
-
- public static PatioCompilationUnitElement deserializeCompilationUnitElement(
- PatioCompilationUnitElementFbs elementFbs,
- Source parentSource
- ) {
- return switch (elementFbs.valueType()) {
- case PatioCompilationUnitElementValueFbs.PatioDataElementImmutableDefinitionFbs -> {
- var dataElementImmutableDefinitionFbs =
- (PatioDataElementImmutableDefinitionFbs) elementFbs.value(new PatioDataElementImmutableDefinitionFbs());
- yield deserializeDataElementImmutableDefinition(dataElementImmutableDefinitionFbs, parentSource);
- }
-
- case PatioCompilationUnitElementValueFbs.PatioDataElementMutableDeclarationFbs -> {
- var dataElementMutableDeclarationFbs =
- (PatioDataElementMutableDeclarationFbs) elementFbs.value(new PatioDataElementMutableDeclarationFbs());
- yield deserializeDataElementMutableDeclaration(dataElementMutableDeclarationFbs, parentSource);
- }
-
- case PatioCompilationUnitElementValueFbs.PatioDataElementMutableDefinitionFbs -> {
- var dataElementMutableDefinitionFbs =
- (PatioDataElementMutableDefinitionFbs) elementFbs.value(new PatioDataElementMutableDefinitionFbs());
- yield deserializeDataElementMutableDefinition(dataElementMutableDefinitionFbs, parentSource);
- }
-
- case PatioCompilationUnitElementValueFbs.PatioExceptionTypeDefinitionFbs -> {
- var exceptionTypeDefinitionFbs =
- (PatioExceptionTypeDefinitionFbs) elementFbs.value(new PatioExceptionTypeDefinitionFbs());
- yield deserializeExceptionTypeDefinition(exceptionTypeDefinitionFbs, parentSource);
- }
-
- case PatioCompilationUnitElementValueFbs.PatioFunctionDeclarationFbs -> {
- var functionDeclarationFbs =
- (PatioFunctionDeclarationFbs) elementFbs.value(new PatioFunctionDeclarationFbs());
- yield deserializeFunctionDeclaration(functionDeclarationFbs, parentSource);
- }
-
- case PatioCompilationUnitElementValueFbs.PatioFunctionDefinitionFbs -> {
- var functionDefinitionFbs =
- (PatioFunctionDefinitionFbs) elementFbs.value(new PatioFunctionDefinitionFbs());
- yield deserializeFunctionDefinition(functionDefinitionFbs, parentSource);
- }
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- private static int serializeDataElementImmutableDefinition(
- FlatBufferBuilder builder,
- PatioDataElementImmutableDefinition dataElementImmutableDefinition,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- dataElementImmutableDefinition.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(dataElementImmutableDefinition.name());
-
- var visibilityFbs = serializeVisibility(dataElementImmutableDefinition.visibility());
-
- var valueFbs = serializeDataValue(builder, dataElementImmutableDefinition.value());
-
- PatioDataElementImmutableDefinitionFbs.startPatioDataElementImmutableDefinitionFbs(builder);
- PatioDataElementImmutableDefinitionFbs.addSource(builder, sourceFbs);
- PatioDataElementImmutableDefinitionFbs.addName(builder, nameFbs);
- PatioDataElementImmutableDefinitionFbs.addVisibility(
- builder,
- visibilityFbs
- );
- PatioDataElementImmutableDefinitionFbs.addValue(builder, valueFbs);
- return PatioDataElementImmutableDefinitionFbs.endPatioDataElementImmutableDefinitionFbs(builder);
- }
-
- private static PatioDataElementImmutableDefinition deserializeDataElementImmutableDefinition(
- PatioDataElementImmutableDefinitionFbs dataElementImmutableDefinitionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- dataElementImmutableDefinitionFbs.source(),
- parentSource
- );
-
- var name = dataElementImmutableDefinitionFbs.name();
- var visibility = deserializeVisibility(dataElementImmutableDefinitionFbs.visibility());
- var value = deserializeDataValue(dataElementImmutableDefinitionFbs.value());
-
- return new PatioDataElementImmutableDefinition(name, visibility, value, source);
- }
-
- private static int serializeDataElementMutableDeclaration(
- FlatBufferBuilder builder,
- PatioDataElementMutableDeclaration dataElementMutableDeclaration,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- dataElementMutableDeclaration.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(dataElementMutableDeclaration.name());
-
- var layoutFbs = serializeDataLayout(builder, dataElementMutableDeclaration.layout());
-
- PatioDataElementMutableDeclarationFbs.startPatioDataElementMutableDeclarationFbs(builder);
- PatioDataElementMutableDeclarationFbs.addSource(builder, sourceFbs);
- PatioDataElementMutableDeclarationFbs.addName(builder, nameFbs);
- PatioDataElementMutableDeclarationFbs.addLayout(builder, layoutFbs);
- return PatioDataElementMutableDeclarationFbs.endPatioDataElementMutableDeclarationFbs(builder);
- }
-
- private static PatioDataElementMutableDeclaration deserializeDataElementMutableDeclaration(
- PatioDataElementMutableDeclarationFbs dataElementMutableDeclarationFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- dataElementMutableDeclarationFbs.source(),
- parentSource
- );
-
- var name = dataElementMutableDeclarationFbs.name();
- var layout = deserializeDataLayout(dataElementMutableDeclarationFbs.layout());
-
- return new PatioDataElementMutableDeclaration(name, layout, source);
- }
-
- private static int serializeDataElementMutableDefinition(
- FlatBufferBuilder builder,
- PatioDataElementMutableDefinition dataElementMutableDefinition,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- dataElementMutableDefinition.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(dataElementMutableDefinition.name());
-
- var visibilityFbs = serializeVisibility(dataElementMutableDefinition.visibility());
-
- var initialValueFbs = serializeDataValue(builder, dataElementMutableDefinition.initialValue());
-
- PatioDataElementMutableDefinitionFbs.startPatioDataElementMutableDefinitionFbs(builder);
- PatioDataElementMutableDefinitionFbs.addSource(builder, sourceFbs);
- PatioDataElementMutableDefinitionFbs.addName(builder, nameFbs);
- PatioDataElementMutableDefinitionFbs.addVisibility(
- builder,
- visibilityFbs
- );
- PatioDataElementMutableDefinitionFbs.addInitialValue(builder, initialValueFbs);
- return PatioDataElementMutableDefinitionFbs.endPatioDataElementMutableDefinitionFbs(builder);
- }
-
- private static PatioDataElementMutableDefinition deserializeDataElementMutableDefinition(
- PatioDataElementMutableDefinitionFbs dataElementMutableDefinitionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- dataElementMutableDefinitionFbs.source(),
- parentSource
- );
-
- var name = dataElementMutableDefinitionFbs.name();
- var visibility = deserializeVisibility(dataElementMutableDefinitionFbs.visibility());
- var initialValue = deserializeDataValue(dataElementMutableDefinitionFbs.initialValue());
-
- return new PatioDataElementMutableDefinition(name, visibility, initialValue, source);
- }
-
- private static int serializeExceptionTypeDefinition(
- FlatBufferBuilder builder,
- PatioExceptionTypeDefinition exceptionTypeDefinition,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- exceptionTypeDefinition.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(exceptionTypeDefinition.name());
- var valueTypeFbs = serializeType(builder, exceptionTypeDefinition.valueType());
-
- PatioExceptionTypeDefinitionFbs.startPatioExceptionTypeDefinitionFbs(builder);
- PatioExceptionTypeDefinitionFbs.addSource(builder, sourceFbs);
- PatioExceptionTypeDefinitionFbs.addName(builder, nameFbs);
- PatioExceptionTypeDefinitionFbs.addValueType(builder, valueTypeFbs);
- return PatioExceptionTypeDefinitionFbs.endPatioExceptionTypeDefinitionFbs(builder);
- }
-
- private static PatioExceptionTypeDefinition deserializeExceptionTypeDefinition(
- PatioExceptionTypeDefinitionFbs exceptionTypeDefinitionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- exceptionTypeDefinitionFbs.source(),
- parentSource
- );
-
- var name = exceptionTypeDefinitionFbs.name();
- var valueType = deserializeType(exceptionTypeDefinitionFbs.valueType());
-
- return new PatioExceptionTypeDefinition(name, valueType, source);
- }
-
- private static int serializeFunctionDeclaration(
- FlatBufferBuilder builder,
- PatioFunctionDeclaration functionDeclaration,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- functionDeclaration.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(functionDeclaration.name());
-
- var paramsOffsetsFbs = functionDeclaration.params().stream()
- .mapToInt(param -> serializeLocal(builder, param))
- .toArray();
- var paramsVectorFbs = PatioFunctionDeclarationFbs.createParamsVector(builder, paramsOffsetsFbs);
-
- var returnTypesOffsetsFbs = functionDeclaration.returnTypes().stream()
- .mapToInt(returnType -> serializeType(builder, returnType))
- .toArray();
- var returnTypesVectorFbs = PatioFunctionDeclarationFbs.createReturnTypesVector(builder, returnTypesOffsetsFbs);
-
- PatioFunctionDeclarationFbs.startPatioFunctionDeclarationFbs(builder);
- PatioFunctionDeclarationFbs.addSource(builder, sourceFbs);
- PatioFunctionDeclarationFbs.addName(builder, nameFbs);
- PatioFunctionDeclarationFbs.addParams(builder, paramsVectorFbs);
- PatioFunctionDeclarationFbs.addReturnTypes(builder, returnTypesVectorFbs);
- return PatioFunctionDeclarationFbs.endPatioFunctionDeclarationFbs(builder);
- }
-
- private static PatioFunctionDeclaration deserializeFunctionDeclaration(
- PatioFunctionDeclarationFbs functionDeclarationFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- functionDeclarationFbs.source(),
- parentSource
- );
-
- var name = functionDeclarationFbs.name();
- var params = deserializeVector(
- functionDeclarationFbs::params,
- functionDeclarationFbs.paramsLength(),
- PatioToFlatbuffers::deserializeLocal
- );
- var returnTypes = deserializeVector(
- functionDeclarationFbs::returnTypes,
- functionDeclarationFbs.returnTypesLength(),
- PatioToFlatbuffers::deserializeType
- );
-
- return new PatioFunctionDeclaration(name, params, returnTypes, source);
- }
-
- private static int serializeFunctionDefinition(
- FlatBufferBuilder builder,
- PatioFunctionDefinition functionDefinition,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- functionDefinition.source(),
- parentSource
- );
-
- var nameFbs = builder.createString(functionDefinition.name());
-
- var visibilityFbs = serializeVisibility(functionDefinition.visibility());
-
- var localsOffsetsFbs = functionDefinition.locals().stream()
- .mapToInt(local -> serializeLocal(builder, local))
- .toArray();
- var localsVectorFbs = PatioFunctionDefinitionFbs.createLocalsVector(builder, localsOffsetsFbs);
-
- var returnTypesOffsetsFbs = functionDefinition.returnTypes().stream()
- .mapToInt(returnType -> serializeType(builder, returnType))
- .toArray();
- var returnTypesVectorFbs = PatioFunctionDefinitionFbs.createReturnTypesVector(builder, returnTypesOffsetsFbs);
-
- var bodyOffsetsFbs = functionDefinition.body().stream()
- .mapToInt(bodyInstruction -> serializeInstruction(builder, bodyInstruction, functionDefinition.source()))
- .toArray();
- var bodyVectorFbs = PatioFunctionDefinitionFbs.createBodyVector(builder, bodyOffsetsFbs);
-
- PatioFunctionDefinitionFbs.startPatioFunctionDefinitionFbs(builder);
- PatioFunctionDefinitionFbs.addSource(builder, sourceFbs);
- PatioFunctionDefinitionFbs.addName(builder, nameFbs);
- PatioFunctionDefinitionFbs.addVisibility(
- builder,
- visibilityFbs
- );
- PatioFunctionDefinitionFbs.addLocals(builder, localsVectorFbs);
- PatioFunctionDefinitionFbs.addReturnTypes(builder, returnTypesVectorFbs);
- PatioFunctionDefinitionFbs.addBody(builder, bodyVectorFbs);
- return PatioFunctionDefinitionFbs.endPatioFunctionDefinitionFbs(builder);
- }
-
- private static PatioFunctionDefinition deserializeFunctionDefinition(
- PatioFunctionDefinitionFbs functionDefinitionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- functionDefinitionFbs.source(),
- parentSource
- );
-
- var name = functionDefinitionFbs.name();
- var visibility = deserializeVisibility(functionDefinitionFbs.visibility());
- var locals = deserializeVector(
- functionDefinitionFbs::locals,
- functionDefinitionFbs.localsLength(),
- PatioToFlatbuffers::deserializeLocal
- );
- var returnTypes = deserializeVector(
- functionDefinitionFbs::returnTypes,
- functionDefinitionFbs.returnTypesLength(),
- PatioToFlatbuffers::deserializeType
- );
- var body = deserializeVector(
- functionDefinitionFbs::body,
- functionDefinitionFbs.bodyLength(),
- instructionFbs -> deserializeInstruction(instructionFbs, source)
- );
-
- return new PatioFunctionDefinition(name, visibility, locals, returnTypes, body, source);
- }
-
- // == Visibility ==
-
- private static int serializeVisibility(PatioVisibility visibility) {
- return switch (visibility) {
- case PRIVATE ->
- PatioVisibilityFbs.PRIVATE;
-
- case PUBLIC ->
- PatioVisibilityFbs.PUBLIC;
- };
- }
-
- private static PatioVisibility deserializeVisibility(int visibilityFbs) {
- return switch (visibilityFbs) {
- case PatioVisibilityFbs.PRIVATE ->
- PatioVisibility.PRIVATE;
-
- case PatioVisibilityFbs.PUBLIC ->
- PatioVisibility.PUBLIC;
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Locals ==
-
- private static int serializeLocal(FlatBufferBuilder builder, PatioLocal local) {
- var nameFbs = builder.createString(local.name());
- var typeFbs = serializeType(builder, local.type());
- var localTypeFbs = serializeLocalType(local.localType());
-
- PatioLocalFbs.startPatioLocalFbs(builder);
- PatioLocalFbs.addName(builder, nameFbs);
- PatioLocalFbs.addType(builder, typeFbs);
- PatioLocalFbs.addLocalType(builder, localTypeFbs);
- return PatioLocalFbs.endPatioLocalFbs(builder);
- }
-
- private static PatioLocal deserializeLocal(PatioLocalFbs localFbs) {
- var name = localFbs.name();
- var type = deserializeType(localFbs.type());
- var localType = deserializeLocalType(localFbs.localType());
-
- return new PatioLocal(name, type, localType);
- }
-
- private static int serializeLocalType(PatioLocalType localType) {
- return switch (localType) {
- case PARAM ->
- PatioLocalTypeFbs.PARAM;
-
- case VAL ->
- PatioLocalTypeFbs.VAL;
-
- case VAR ->
- PatioLocalTypeFbs.VAR;
- };
- }
-
- private static PatioLocalType deserializeLocalType(int localTypeFbs) {
- return switch (localTypeFbs) {
- case PatioLocalTypeFbs.PARAM ->
- PatioLocalType.PARAM;
-
- case PatioLocalTypeFbs.VAL ->
- PatioLocalType.VAL;
-
- case PatioLocalTypeFbs.VAR ->
- PatioLocalType.VAR;
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Instructions ==
-
- public static int serializeInstruction(
- FlatBufferBuilder builder,
- PatioInstruction instruction,
- Source parentSource
- ) {
- return switch (instruction) {
- case PatioBlock block -> {
- var blockFbs = serializeBlock(builder, block, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioBlockFbs);
- PatioInstructionFbs.addValue(builder, blockFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioBoolToInt boolToInt -> {
- var boolToIntFbs = serializeBoolToInt(builder, boolToInt, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioBoolToIntFbs);
- PatioInstructionFbs.addValue(builder, boolToIntFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioCall call -> {
- var callFbs = serializeCall(builder, call, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioCallFbs);
- PatioInstructionFbs.addValue(builder, callFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioCallPointer callPointer -> {
- var callPointerFbs = serializeCallPointer(builder, callPointer, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioCallPointerFbs);
- PatioInstructionFbs.addValue(builder, callPointerFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioDataPtrToInt dataPtrToInt -> {
- var dataPtrToIntFbs = serializeDataPtrToInt(builder, dataPtrToInt, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioDataPtrToIntFbs);
- PatioInstructionFbs.addValue(builder, dataPtrToIntFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIf if_ -> {
- var ifFbs = serializeIf(builder, if_, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIfFbs);
- PatioInstructionFbs.addValue(builder, ifFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntAdd intAdd -> {
- var intAddFbs = serializeIntAdd(builder, intAdd, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntAddFbs);
- PatioInstructionFbs.addValue(builder, intAddFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntEquals intEquals -> {
- var intEqualsFbs = serializeIntEquals(builder, intEquals, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntEqualsFbs);
- PatioInstructionFbs.addValue(builder, intEqualsFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntNotEqual intNotEqual -> {
- var intNotEqualFbs = serializeIntNotEqual(builder, intNotEqual, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntNotEqualFbs);
- PatioInstructionFbs.addValue(builder, intNotEqualFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntSub intSub -> {
- var intSubFbs = serializeIntSub(builder, intSub, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntSubFbs);
- PatioInstructionFbs.addValue(builder, intSubFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntToBool intToBool -> {
- var intToBoolFbs = serializeIntToBool(builder, intToBool, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntToBoolFbs);
- PatioInstructionFbs.addValue(builder, intToBoolFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioIntToDataPtr intToDataPtr -> {
- var intToDataPtrFbs = serializeIntToDataPtr(builder, intToDataPtr, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioIntToDataPtrFbs);
- PatioInstructionFbs.addValue(builder, intToDataPtrFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioLocalStore localStore -> {
- var localStoreFbs = serializeLocalStore(builder, localStore, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioLocalStoreFbs);
- PatioInstructionFbs.addValue(builder, localStoreFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioLoop loop -> {
- var loopFbs = serializeLoop(builder, loop, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioLoopFbs);
- PatioInstructionFbs.addValue(builder, loopFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioLoopBreak loopBreak -> {
- var loopBreakFbs = serializeLoopBreak(builder, loopBreak, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioLoopBreakFbs);
- PatioInstructionFbs.addValue(builder, loopBreakFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioLoopContinue loopContinue -> {
- var loopContinueFbs = serializeLoopContinue(builder, loopContinue, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioLoopContinueFbs);
- PatioInstructionFbs.addValue(builder, loopContinueFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioMemoryLoad memoryLoad -> {
- var memoryLoadFbs = serializeMemoryLoad(builder, memoryLoad, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioMemoryLoadFbs);
- PatioInstructionFbs.addValue(builder, memoryLoadFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioMemoryStore memoryStore -> {
- var memoryStoreFbs = serializeMemoryStore(builder, memoryStore, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioMemoryStoreFbs);
- PatioInstructionFbs.addValue(builder, memoryStoreFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioReturn return_ -> {
- var returnFbs = serializeReturn(builder, return_, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioReturnFbs);
- PatioInstructionFbs.addValue(builder, returnFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioSwitch switch_ -> {
- var switchFbs = serializeSwitch(builder, switch_, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioSwitchFbs);
- PatioInstructionFbs.addValue(builder, switchFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioThrow throw_ -> {
- var throwFbs = serializeThrow(builder, throw_, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioThrowFbs);
- PatioInstructionFbs.addValue(builder, throwFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioTry try_ -> {
- var tryFbs = serializeTry(builder, try_, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioTryFbs);
- PatioInstructionFbs.addValue(builder, tryFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioUnreachable unreachable -> {
- var unreachableFbs = serializeUnreachable(builder, unreachable, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioUnreachableFbs);
- PatioInstructionFbs.addValue(builder, unreachableFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioVarLoad varLoad -> {
- var varLoadFbs = serializeVarLoad(builder, varLoad, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioVarLoadFbs);
- PatioInstructionFbs.addValue(builder, varLoadFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
-
- case PatioVarStore varStore -> {
- var varStoreFbs = serializeVarStore(builder, varStore, parentSource);
-
- PatioInstructionFbs.startPatioInstructionFbs(builder);
- PatioInstructionFbs.addValueType(builder, PatioInstructionValueFbs.PatioVarStoreFbs);
- PatioInstructionFbs.addValue(builder, varStoreFbs);
- yield PatioInstructionFbs.endPatioInstructionFbs(builder);
- }
- };
- }
-
- public static PatioInstruction deserializeInstruction(
- PatioInstructionFbs instructionFbs,
- Source parentSource
- ) {
- return switch (instructionFbs.valueType()) {
- case PatioInstructionValueFbs.PatioBlockFbs ->
- deserializeBlock(
- (PatioBlockFbs) instructionFbs.value(new PatioBlockFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioBoolToIntFbs ->
- deserializeBoolToInt(
- (PatioBoolToIntFbs) instructionFbs.value(new PatioBoolToIntFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioCallFbs ->
- deserializeCall(
- (PatioCallFbs) instructionFbs.value(new PatioCallFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioCallPointerFbs ->
- deserializeCallPointer(
- (PatioCallPointerFbs) instructionFbs.value(new PatioCallPointerFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioDataPtrToIntFbs ->
- deserializeDataPtrToInt(
- (PatioDataPtrToIntFbs) instructionFbs.value(new PatioDataPtrToIntFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIfFbs ->
- deserializeIf(
- (PatioIfFbs) instructionFbs.value(new PatioIfFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntAddFbs ->
- deserializeIntAdd(
- (PatioIntAddFbs) instructionFbs.value(new PatioIntAddFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntEqualsFbs ->
- deserializeIntEquals(
- (PatioIntEqualsFbs) instructionFbs.value(new PatioIntEqualsFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntNotEqualFbs ->
- deserializeIntNotEqual(
- (PatioIntNotEqualFbs) instructionFbs.value(new PatioIntNotEqualFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntSubFbs ->
- deserializeIntSub(
- (PatioIntSubFbs) instructionFbs.value(new PatioIntSubFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntToBoolFbs ->
- deserializeIntToBool(
- (PatioIntToBoolFbs) instructionFbs.value(new PatioIntToBoolFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioIntToDataPtrFbs ->
- deserializeIntToDataPtr(
- (PatioIntToDataPtrFbs) instructionFbs.value(new PatioIntToDataPtrFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioLocalStoreFbs ->
- deserializeLocalStore(
- (PatioLocalStoreFbs) instructionFbs.value(new PatioLocalStoreFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioLoopFbs ->
- deserializeLoop(
- (PatioLoopFbs) instructionFbs.value(new PatioLoopFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioLoopBreakFbs ->
- deserializeLoopBreak(
- (PatioLoopBreakFbs) instructionFbs.value(new PatioLoopBreakFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioLoopContinueFbs ->
- deserializeLoopContinue(
- (PatioLoopContinueFbs) instructionFbs.value(new PatioLoopContinueFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioMemoryLoadFbs ->
- deserializeMemoryLoad(
- (PatioMemoryLoadFbs) instructionFbs.value(new PatioMemoryLoadFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioMemoryStoreFbs ->
- deserializeMemoryStore(
- (PatioMemoryStoreFbs) instructionFbs.value(new PatioMemoryStoreFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioReturnFbs ->
- deserializeReturn(
- (PatioReturnFbs) instructionFbs.value(new PatioReturnFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioSwitchFbs ->
- deserializeSwitch(
- (PatioSwitchFbs) instructionFbs.value(new PatioSwitchFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioThrowFbs ->
- deserializeThrow(
- (PatioThrowFbs) instructionFbs.value(new PatioThrowFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioTryFbs ->
- deserializeTry(
- (PatioTryFbs) instructionFbs.value(new PatioTryFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioUnreachableFbs ->
- deserializeUnreachable(
- (PatioUnreachableFbs) instructionFbs.value(new PatioUnreachableFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioVarLoadFbs ->
- deserializeVarLoad(
- (PatioVarLoadFbs) instructionFbs.value(new PatioVarLoadFbs()),
- parentSource
- );
-
- case PatioInstructionValueFbs.PatioVarStoreFbs ->
- deserializeVarStore(
- (PatioVarStoreFbs) instructionFbs.value(new PatioVarStoreFbs()),
- parentSource
- );
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- public static int serializeBlock(
- FlatBufferBuilder builder,
- PatioBlock instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var bodyOffsetsFbs = instruction.body().stream()
- .mapToInt(bodyInstruction -> serializeInstruction(builder, bodyInstruction, instruction.source()))
- .toArray();
- var bodyVectorFbs = PatioBlockFbs.createBodyVector(builder, bodyOffsetsFbs);
-
- var resultsOffsetsFbs = instruction.results().stream()
- .mapToInt(result -> serializeOperand(builder, result))
- .toArray();
- var resultsVectorFbs = PatioBlockFbs.createResultsVector(builder, resultsOffsetsFbs);
-
- PatioBlockFbs.startPatioBlockFbs(builder);
- PatioBlockFbs.addBody(builder, bodyVectorFbs);
- PatioBlockFbs.addResults(builder, resultsVectorFbs);
- PatioBlockFbs.addSource(builder, sourceFbs);
- return PatioBlockFbs.endPatioBlockFbs(builder);
- }
-
- private static PatioBlock deserializeBlock(PatioBlockFbs instructionFbs, Source parentSource) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var body = deserializeVector(
- instructionFbs::body,
- instructionFbs.bodyLength(),
- bodyInstructionFbs -> deserializeInstruction(bodyInstructionFbs, source)
- );
-
- var results = deserializeVector(
- instructionFbs::results,
- instructionFbs.resultsLength(),
- resultFbs -> deserializeOperand(resultFbs)
- );
-
- return new PatioBlock(
- body,
- results,
- source
- );
- }
-
- public static int serializeBoolToInt(
- FlatBufferBuilder builder,
- PatioBoolToInt instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioBoolToIntFbs.startPatioBoolToIntFbs(builder);
- PatioBoolToIntFbs.addSource(builder, sourceFbs);
- PatioBoolToIntFbs.addDestination(builder, destinationFbs);
- PatioBoolToIntFbs.addValue(builder, valueFbs);
- return PatioBoolToIntFbs.endPatioBoolToIntFbs(builder);
- }
-
- private static PatioBoolToInt deserializeBoolToInt(
- PatioBoolToIntFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioBoolToInt(destination, value, source);
- }
-
- public static int serializeCall(
- FlatBufferBuilder builder,
- PatioCall instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationsOffsetsFbs = instruction.destinations().stream()
- .mapToInt(destination -> serializeLocalRef(builder, destination))
- .toArray();
- var destinationsVectorFbs = PatioCallFbs.createDestinationsVector(builder, destinationsOffsetsFbs);
-
- var functionNameFbs = builder.createString(instruction.functionName());
-
- var argsOffsetsFbs = instruction.args().stream()
- .mapToInt(arg -> serializeOperand(builder, arg))
- .toArray();
- var argsVectorFbs = PatioCallFbs.createArgsVector(builder, argsOffsetsFbs);
-
- PatioCallFbs.startPatioCallFbs(builder);
- PatioCallFbs.addSource(builder, sourceFbs);
- PatioCallFbs.addDestinations(builder, destinationsVectorFbs);
- PatioCallFbs.addFunctionName(builder, functionNameFbs);
- PatioCallFbs.addArgs(builder, argsVectorFbs);
- return PatioCallFbs.endPatioCallFbs(builder);
- }
-
- private static PatioCall deserializeCall(
- PatioCallFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destinations = deserializeVector(
- instructionFbs::destinations,
- instructionFbs.destinationsLength(),
- PatioToFlatbuffers::deserializeLocalRef
- );
-
- var functionName = instructionFbs.functionName();
-
- var args = deserializeVector(
- instructionFbs::args,
- instructionFbs.argsLength(),
- argFbs -> deserializeOperand(argFbs)
- );
-
- return new PatioCall(destinations, functionName, args, source);
- }
-
- public static int serializeCallPointer(
- FlatBufferBuilder builder,
- PatioCallPointer instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationsOffsetsFbs = instruction.destinations().stream()
- .mapToInt(destination -> serializeLocalRef(builder, destination))
- .toArray();
- var destinationsVectorFbs = PatioCallFbs.createDestinationsVector(builder, destinationsOffsetsFbs);
-
- var functionPointerFbs = serializeOperand(builder, instruction.functionPointer());
-
- var argsOffsetsFbs = instruction.args().stream()
- .mapToInt(arg -> serializeOperand(builder, arg))
- .toArray();
- var argsVectorFbs = PatioCallPointerFbs.createArgsVector(builder, argsOffsetsFbs);
-
- PatioCallPointerFbs.startPatioCallPointerFbs(builder);
- PatioCallPointerFbs.addSource(builder, sourceFbs);
- PatioCallPointerFbs.addDestinations(builder, destinationsVectorFbs);
- PatioCallPointerFbs.addFunctionPointer(builder, functionPointerFbs);
- PatioCallPointerFbs.addArgs(builder, argsVectorFbs);
- return PatioCallPointerFbs.endPatioCallPointerFbs(builder);
- }
-
- private static PatioCallPointer deserializeCallPointer(
- PatioCallPointerFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destinations = deserializeVector(
- instructionFbs::destinations,
- instructionFbs.destinationsLength(),
- PatioToFlatbuffers::deserializeLocalRef
- );
-
- var functionPointer = deserializeOperand(instructionFbs.functionPointer());
-
- var args = deserializeVector(
- instructionFbs::args,
- instructionFbs.argsLength(),
- argFbs -> deserializeOperand(argFbs)
- );
-
- return new PatioCallPointer(destinations, functionPointer, args, source);
- }
-
- public static int serializeDataPtrToInt(
- FlatBufferBuilder builder,
- PatioDataPtrToInt instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioDataPtrToIntFbs.startPatioDataPtrToIntFbs(builder);
- PatioDataPtrToIntFbs.addSource(builder, sourceFbs);
- PatioDataPtrToIntFbs.addDestination(builder, destinationFbs);
- PatioDataPtrToIntFbs.addValue(builder, valueFbs);
- return PatioDataPtrToIntFbs.endPatioDataPtrToIntFbs(builder);
- }
-
- private static PatioDataPtrToInt deserializeDataPtrToInt(
- PatioDataPtrToIntFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioDataPtrToInt(destination, value, source);
- }
-
- public static int serializeIf(
- FlatBufferBuilder builder,
- PatioIf instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationsOffsetsFbs = instruction.destinations().stream()
- .mapToInt(destination -> serializeLocalRef(builder, destination))
- .toArray();
- var destinationsVectorFbs = PatioIfFbs.createDestinationsVector(builder, destinationsOffsetsFbs);
-
- var conditionFbs = serializeOperand(builder, instruction.condition());
-
- var trueBody = serializeBlock(builder, instruction.trueBody(), instruction.source());
- var falseBody = serializeBlock(builder, instruction.falseBody(), instruction.source());
-
- PatioIfFbs.startPatioIfFbs(builder);
- PatioIfFbs.addSource(builder, sourceFbs);
- PatioIfFbs.addDestinations(builder, destinationsVectorFbs);
- PatioIfFbs.addCondition(builder, conditionFbs);
- PatioIfFbs.addTrueBody(builder, trueBody);
- PatioIfFbs.addFalseBody(builder, falseBody);
- return PatioIfFbs.endPatioIfFbs(builder);
- }
-
- private static PatioIf deserializeIf(
- PatioIfFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destinations = deserializeVector(
- instructionFbs::destinations,
- instructionFbs.destinationsLength(),
- PatioToFlatbuffers::deserializeLocalRef
- );
- var condition = deserializeOperand(instructionFbs.condition());
- var trueBody = deserializeBlock(instructionFbs.trueBody(), source);
- var falseBody = deserializeBlock(instructionFbs.falseBody(), source);
-
- return new PatioIf(destinations, condition, trueBody, falseBody, source);
- }
-
- public static int serializeIntAdd(
- FlatBufferBuilder builder,
- PatioIntAdd instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var leftFbs = serializeOperand(builder, instruction.left());
- var rightFbs = serializeOperand(builder, instruction.right());
-
- PatioIntAddFbs.startPatioIntAddFbs(builder);
- PatioIntAddFbs.addSource(builder, sourceFbs);
- PatioIntAddFbs.addDestination(builder, destinationFbs);
- PatioIntAddFbs.addLeft(builder, leftFbs);
- PatioIntAddFbs.addRight(builder, rightFbs);
- return PatioIntAddFbs.endPatioIntAddFbs(builder);
- }
-
- private static PatioIntAdd deserializeIntAdd(
- PatioIntAddFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var left = deserializeOperand(instructionFbs.left());
- var right = deserializeOperand(instructionFbs.right());
-
- return new PatioIntAdd(destination, left, right, source);
- }
-
- public static int serializeIntEquals(
- FlatBufferBuilder builder,
- PatioIntEquals instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var leftFbs = serializeOperand(builder, instruction.left());
- var rightFbs = serializeOperand(builder, instruction.right());
-
- PatioIntEqualsFbs.startPatioIntEqualsFbs(builder);
- PatioIntEqualsFbs.addSource(builder, sourceFbs);
- PatioIntEqualsFbs.addDestination(builder, destinationFbs);
- PatioIntEqualsFbs.addLeft(builder, leftFbs);
- PatioIntEqualsFbs.addRight(builder, rightFbs);
- return PatioIntEqualsFbs.endPatioIntEqualsFbs(builder);
- }
-
- private static PatioIntEquals deserializeIntEquals(
- PatioIntEqualsFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var left = deserializeOperand(instructionFbs.left());
- var right = deserializeOperand(instructionFbs.right());
-
- return new PatioIntEquals(destination, left, right, source);
- }
-
- public static int serializeIntNotEqual(
- FlatBufferBuilder builder,
- PatioIntNotEqual instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var leftFbs = serializeOperand(builder, instruction.left());
- var rightFbs = serializeOperand(builder, instruction.right());
-
- PatioIntNotEqualFbs.startPatioIntNotEqualFbs(builder);
- PatioIntNotEqualFbs.addSource(builder, sourceFbs);
- PatioIntNotEqualFbs.addDestination(builder, destinationFbs);
- PatioIntNotEqualFbs.addLeft(builder, leftFbs);
- PatioIntNotEqualFbs.addRight(builder, rightFbs);
- return PatioIntNotEqualFbs.endPatioIntNotEqualFbs(builder);
- }
-
- private static PatioIntNotEqual deserializeIntNotEqual(
- PatioIntNotEqualFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var left = deserializeOperand(instructionFbs.left());
- var right = deserializeOperand(instructionFbs.right());
-
- return new PatioIntNotEqual(destination, left, right, source);
- }
-
- public static int serializeIntSub(
- FlatBufferBuilder builder,
- PatioIntSub instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var leftFbs = serializeOperand(builder, instruction.left());
- var rightFbs = serializeOperand(builder, instruction.right());
-
- PatioIntSubFbs.startPatioIntSubFbs(builder);
- PatioIntSubFbs.addSource(builder, sourceFbs);
- PatioIntSubFbs.addDestination(builder, destinationFbs);
- PatioIntSubFbs.addLeft(builder, leftFbs);
- PatioIntSubFbs.addRight(builder, rightFbs);
- return PatioIntSubFbs.endPatioIntSubFbs(builder);
- }
-
- private static PatioIntSub deserializeIntSub(
- PatioIntSubFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var left = deserializeOperand(instructionFbs.left());
- var right = deserializeOperand(instructionFbs.right());
-
- return new PatioIntSub(destination, left, right, source);
- }
-
- public static int serializeIntToBool(
- FlatBufferBuilder builder,
- PatioIntToBool instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioIntToBoolFbs.startPatioIntToBoolFbs(builder);
- PatioIntToBoolFbs.addSource(builder, sourceFbs);
- PatioIntToBoolFbs.addDestination(builder, destinationFbs);
- PatioIntToBoolFbs.addValue(builder, valueFbs);
- return PatioIntToBoolFbs.endPatioIntToBoolFbs(builder);
- }
-
- private static PatioIntToBool deserializeIntToBool(
- PatioIntToBoolFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioIntToBool(destination, value, source);
- }
-
- public static int serializeIntToDataPtr(
- FlatBufferBuilder builder,
- PatioIntToDataPtr instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioIntToDataPtrFbs.startPatioIntToDataPtrFbs(builder);
- PatioIntToDataPtrFbs.addSource(builder, sourceFbs);
- PatioIntToDataPtrFbs.addDestination(builder, destinationFbs);
- PatioIntToDataPtrFbs.addValue(builder, valueFbs);
- return PatioIntToDataPtrFbs.endPatioIntToDataPtrFbs(builder);
- }
-
- private static PatioIntToDataPtr deserializeIntToDataPtr(
- PatioIntToDataPtrFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioIntToDataPtr(destination, value, source);
- }
-
- public static int serializeLocalStore(
- FlatBufferBuilder builder,
- PatioLocalStore instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioLocalStoreFbs.startPatioLocalStoreFbs(builder);
- PatioLocalStoreFbs.addSource(builder, sourceFbs);
- PatioLocalStoreFbs.addDestination(builder, destinationFbs);
- PatioLocalStoreFbs.addValue(builder, valueFbs);
- return PatioLocalStoreFbs.endPatioLocalStoreFbs(builder);
- }
-
- private static PatioLocalStore deserializeLocalStore(
- PatioLocalStoreFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioLocalStore(destination, value, source);
- }
-
- public static int serializeLoopBreak(
- FlatBufferBuilder builder,
- PatioLoopBreak instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- PatioLoopBreakFbs.startPatioLoopBreakFbs(builder);
- PatioLoopBreakFbs.addSource(builder, sourceFbs);
- return PatioLoopBreakFbs.endPatioLoopBreakFbs(builder);
- }
-
- private static PatioLoopBreak deserializeLoopBreak(
- PatioLoopBreakFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- return new PatioLoopBreak(source);
- }
-
- public static int serializeLoop(
- FlatBufferBuilder builder,
- PatioLoop instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var bodyOffsetsFbs = instruction.body().stream()
- .mapToInt(bodyInstruction -> serializeInstruction(builder, bodyInstruction, instruction.source()))
- .toArray();
- var bodyVectorFbs = PatioLoopFbs.createBodyVector(builder, bodyOffsetsFbs);
-
- PatioLoopFbs.startPatioLoopFbs(builder);
- PatioLoopFbs.addSource(builder, sourceFbs);
- PatioLoopFbs.addBody(builder, bodyVectorFbs);
- return PatioLoopFbs.endPatioLoopFbs(builder);
- }
-
- private static PatioLoop deserializeLoop(
- PatioLoopFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var body = deserializeVector(
- instructionFbs::body,
- instructionFbs.bodyLength(),
- bodyInstructionFbs -> deserializeInstruction(bodyInstructionFbs, source)
- );
-
- return new PatioLoop(body, source);
- }
-
- public static int serializeLoopContinue(
- FlatBufferBuilder builder,
- PatioLoopContinue instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- PatioLoopContinueFbs.startPatioLoopContinueFbs(builder);
- PatioLoopContinueFbs.addSource(builder, sourceFbs);
- return PatioLoopContinueFbs.endPatioLoopContinueFbs(builder);
- }
-
- private static PatioLoopContinue deserializeLoopContinue(
- PatioLoopContinueFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- return new PatioLoopContinue(source);
- }
-
- public static int serializeMemoryLoad(
- FlatBufferBuilder builder,
- PatioMemoryLoad instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var pointerFbs = serializeOperand(builder, instruction.pointer());
- var layoutFbs = serializeDataLayout(builder, instruction.layout());
- var elementOffsetsFb = PatioMemoryLoadFbs.createElementOffsetsVector(
- builder,
- serializeListOfInts(instruction.elementOffsets())
- );
-
- PatioMemoryLoadFbs.startPatioMemoryLoadFbs(builder);
- PatioMemoryLoadFbs.addSource(builder, sourceFbs);
- PatioMemoryLoadFbs.addDestination(builder, destinationFbs);
- PatioMemoryLoadFbs.addPointer(builder, pointerFbs);
- PatioMemoryLoadFbs.addLayout(builder, layoutFbs);
- PatioMemoryLoadFbs.addElementOffsets(builder, elementOffsetsFb);
- return PatioMemoryLoadFbs.endPatioMemoryLoadFbs(builder);
- }
-
- private static PatioMemoryLoad deserializeMemoryLoad(
- PatioMemoryLoadFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(instructionFbs.destination());
- var pointer = deserializeOperand(instructionFbs.pointer());
- var layout = deserializeDataLayout(instructionFbs.layout());
- var elementOffsets = deserializeListOfInts(instructionFbs.elementOffsetsVector());
-
- return new PatioMemoryLoad(destination, pointer, layout, elementOffsets, source);
- }
-
- public static int serializeMemoryStore(
- FlatBufferBuilder builder,
- PatioMemoryStore instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var pointerFbs = serializeOperand(builder, instruction.pointer());
- var layoutFbs = serializeDataLayout(builder, instruction.layout());
- var elementOffsetsFbs = PatioMemoryStoreFbs.createElementOffsetsVector(
- builder,
- serializeListOfInts(instruction.elementOffsets())
- );
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioMemoryStoreFbs.startPatioMemoryStoreFbs(builder);
- PatioMemoryStoreFbs.addSource(builder, sourceFbs);
- PatioMemoryStoreFbs.addPointer(builder, pointerFbs);
- PatioMemoryStoreFbs.addLayout(builder, layoutFbs);
- PatioMemoryStoreFbs.addElementOffsets(builder, elementOffsetsFbs);
- PatioMemoryStoreFbs.addValue(builder, valueFbs);
- return PatioMemoryStoreFbs.endPatioMemoryStoreFbs(builder);
- }
-
- private static PatioMemoryStore deserializeMemoryStore(
- PatioMemoryStoreFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var pointer = deserializeOperand(instructionFbs.pointer());
- var layout = deserializeDataLayout(instructionFbs.layout());
- var elementOffsets = deserializeListOfInts(instructionFbs.elementOffsetsVector());
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioMemoryStore(pointer, layout, elementOffsets, value, source);
- }
-
- public static int serializeReturn(
- FlatBufferBuilder builder,
- PatioReturn instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var valuesOffsetsFbs = instruction.values().stream()
- .mapToInt(value -> serializeOperand(builder, value))
- .toArray();
- var valuesVectorFbs = PatioReturnFbs.createValuesVector(builder, valuesOffsetsFbs);
-
- PatioReturnFbs.startPatioReturnFbs(builder);
- PatioReturnFbs.addSource(builder, sourceFbs);
- PatioReturnFbs.addValues(builder, valuesVectorFbs);
- return PatioReturnFbs.endPatioReturnFbs(builder);
- }
-
- private static PatioReturn deserializeReturn(
- PatioReturnFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var values = deserializeVector(
- instructionFbs::values,
- instructionFbs.valuesLength(),
- PatioToFlatbuffers::deserializeOperand
- );
-
- return new PatioReturn(values, source);
- }
-
- public static int serializeSwitch(
- FlatBufferBuilder builder,
- PatioSwitch instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationsOffsetsFbs = instruction.destinations().stream()
- .mapToInt(destination -> serializeLocalRef(builder, destination))
- .toArray();
- var destinationsVectorFbs = PatioSwitchFbs.createDestinationsVector(builder, destinationsOffsetsFbs);
-
- var valueFbs = serializeOperand(builder, instruction.value());
-
- var casesOffsetsFbs = instruction.cases().stream()
- .mapToInt(case_ -> serializeSwitchCase(builder, case_, instruction.source()))
- .toArray();
- var casesVectorFbs = PatioSwitchFbs.createCasesVector(builder, casesOffsetsFbs);
-
- var defaultBodyFbs = serializeBlock(builder, instruction.defaultBody(), instruction.source());
-
- PatioSwitchFbs.startPatioSwitchFbs(builder);
- PatioSwitchFbs.addSource(builder, sourceFbs);
- PatioSwitchFbs.addDestinations(builder, destinationsVectorFbs);
- PatioSwitchFbs.addValue(builder, valueFbs);
- PatioSwitchFbs.addCases(builder, casesVectorFbs);
- PatioSwitchFbs.addDefaultBody(builder, defaultBodyFbs);
- return PatioSwitchFbs.endPatioSwitchFbs(builder);
- }
-
- private static PatioSwitch deserializeSwitch(
- PatioSwitchFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var destinations = deserializeVector(
- instructionFbs::destinations,
- instructionFbs.destinationsLength(),
- PatioToFlatbuffers::deserializeLocalRef
- );
-
- var value = deserializeOperand(instructionFbs.value());
-
- var cases = deserializeVector(
- instructionFbs::cases,
- instructionFbs.casesLength(),
- caseFbs -> deserializeSwitchCase(caseFbs, source)
- );
-
- var defaultBody = deserializeBlock(instructionFbs.defaultBody(), source);
-
- return new PatioSwitch(destinations, value, cases, defaultBody, source);
- }
-
- private static int serializeSwitchCase(
- FlatBufferBuilder builder,
- PatioSwitchCase case_,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- case_.source(),
- parentSource
- );
-
- var bodyFbs = serializeBlock(builder, case_.body(), case_.source());
-
- PatioSwitchCaseFbs.startPatioSwitchCaseFbs(builder);
- PatioSwitchCaseFbs.addSource(builder, sourceFbs);
- PatioSwitchCaseFbs.addValue(builder, case_.value());
- PatioSwitchCaseFbs.addBody(builder, bodyFbs);
- return PatioSwitchCaseFbs.endPatioSwitchCaseFbs(builder);
- }
-
- private static PatioSwitchCase deserializeSwitchCase(
- PatioSwitchCaseFbs caseFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- caseFbs.source(),
- parentSource
- );
-
- var body = deserializeBlock(caseFbs.body(), source);
-
- return new PatioSwitchCase((int) caseFbs.value(), body, source);
- }
-
- public static int serializeThrow(
- FlatBufferBuilder builder,
- PatioThrow instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var exceptionTypeNameFbs = builder.createString(instruction.exceptionTypeName());
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioThrowFbs.startPatioThrowFbs(builder);
- PatioThrowFbs.addSource(builder, sourceFbs);
- PatioThrowFbs.addExceptionTypeName(builder, exceptionTypeNameFbs);
- PatioThrowFbs.addValue(builder, valueFbs);
- return PatioThrowFbs.endPatioThrowFbs(builder);
- }
-
- private static PatioThrow deserializeThrow(
- PatioThrowFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioThrow(
- instructionFbs.exceptionTypeName(),
- value,
- source
- );
- }
-
- public static int serializeTry(
- FlatBufferBuilder builder,
- PatioTry instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationsOffsetsFbs = instruction.destinations().stream()
- .mapToInt(destination -> serializeLocalRef(builder, destination))
- .toArray();
- var destinationsVectorFbs = PatioTryFbs.createDestinationsVector(builder, destinationsOffsetsFbs);
-
- var catchClausesOffsetsFbs = instruction.catchClauses().stream()
- .mapToInt(catchClauseFbs -> serializeCatchClause(builder, catchClauseFbs, instruction.source()))
- .toArray();
- var catchClausesVectorFbs = PatioTryFbs.createCatchClausesVector(builder, catchClausesOffsetsFbs);
-
- var bodyFbs = serializeBlock(builder, instruction.body(), instruction.source());
-
- PatioTryFbs.startPatioTryFbs(builder);
- PatioTryFbs.addSource(builder, sourceFbs);
- PatioTryFbs.addDestinations(builder, destinationsVectorFbs);
- PatioTryFbs.addCatchClauses(builder, catchClausesVectorFbs);
- PatioTryFbs.addBody(builder, bodyFbs);
- return PatioTryFbs.endPatioTryFbs(builder);
- }
-
- private static PatioTry deserializeTry(
- PatioTryFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- var destinations = deserializeVector(
- instructionFbs::destinations,
- instructionFbs.destinationsLength(),
- PatioToFlatbuffers::deserializeLocalRef
- );
-
- var catchClauses = deserializeVector(
- instructionFbs::catchClauses,
- instructionFbs.catchClausesLength(),
- catchClauseFbs -> deserializeCatchClause(catchClauseFbs, source)
- );
-
- var body = deserializeBlock(instructionFbs.body(), source);
-
- return new PatioTry(destinations, catchClauses, body, source);
- }
-
- private static int serializeCatchClause(
- FlatBufferBuilder builder,
- PatioCatchClause catchClause,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- catchClause.source(),
- parentSource
- );
-
- var exceptionTypeNameFbs = builder.createString(catchClause.exceptionTypeName());
-
- var destinationFbs = serializeLocalRef(builder, catchClause.destination());
-
- var bodyFbs = serializeBlock(builder, catchClause.body(), catchClause.source());
-
- PatioCatchClauseFbs.startPatioCatchClauseFbs(builder);
- PatioCatchClauseFbs.addSource(builder, sourceFbs);
- PatioCatchClauseFbs.addExceptionTypeName(builder, exceptionTypeNameFbs);
- PatioCatchClauseFbs.addDestination(builder, destinationFbs);
- PatioCatchClauseFbs.addBody(builder, bodyFbs);
- return PatioCatchClauseFbs.endPatioCatchClauseFbs(builder);
- }
-
- private static PatioCatchClause deserializeCatchClause(
- PatioCatchClauseFbs catchClauseFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(catchClauseFbs.source(), parentSource);
-
- var destination = deserializeLocalRef(catchClauseFbs.destination());
-
- var body = deserializeBlock(catchClauseFbs.body(), source);
-
- return new PatioCatchClause(
- catchClauseFbs.exceptionTypeName(),
- destination,
- body,
- source
- );
- }
-
- public static int serializeUnreachable(
- FlatBufferBuilder builder,
- PatioUnreachable instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- PatioUnreachableFbs.startPatioUnreachableFbs(builder);
- PatioUnreachableFbs.addSource(builder, sourceFbs);
- return PatioUnreachableFbs.endPatioUnreachableFbs(builder);
- }
-
- private static PatioUnreachable deserializeUnreachable(
- PatioUnreachableFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(instructionFbs.source(), parentSource);
-
- return new PatioUnreachable(source);
- }
-
- public static int serializeVarLoad(
- FlatBufferBuilder builder,
- PatioVarLoad instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var destinationFbs = serializeLocalRef(builder, instruction.destination());
- var varFbs = serializeLocalRef(builder, instruction.var());
-
- PatioVarLoadFbs.startPatioVarLoadFbs(builder);
- PatioVarLoadFbs.addSource(builder, sourceFbs);
- PatioVarLoadFbs.addDestination(builder, destinationFbs);
- PatioVarLoadFbs.addVar(builder, varFbs);
- return PatioVarLoadFbs.endPatioVarLoadFbs(builder);
- }
-
- private static PatioVarLoad deserializeVarLoad(
- PatioVarLoadFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var destination = deserializeLocalRef(instructionFbs.destination());
-
- var var = deserializeLocalRef(instructionFbs.var());
-
- return new PatioVarLoad(destination, var, source);
- }
-
- public static int serializeVarStore(
- FlatBufferBuilder builder,
- PatioVarStore instruction,
- Source parentSource
- ) {
- var sourceFbs = SourceToFlatbuffers.serializeSource(
- builder,
- instruction.source(),
- parentSource
- );
-
- var varFbs = serializeLocalRef(builder, instruction.var());
-
- var valueFbs = serializeOperand(builder, instruction.value());
-
- PatioVarStoreFbs.startPatioVarStoreFbs(builder);
- PatioVarStoreFbs.addSource(builder, sourceFbs);
- PatioVarStoreFbs.addVar(builder, varFbs);
- PatioVarStoreFbs.addValue(builder, valueFbs);
- return PatioVarStoreFbs.endPatioVarStoreFbs(builder);
- }
-
- private static PatioVarStore deserializeVarStore(
- PatioVarStoreFbs instructionFbs,
- Source parentSource
- ) {
- var source = SourceToFlatbuffers.deserializeSource(
- instructionFbs.source(),
- parentSource
- );
-
- var var = deserializeLocalRef(instructionFbs.var());
-
- var value = deserializeOperand(instructionFbs.value());
-
- return new PatioVarStore(var, value, source);
- }
-
- // == 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 localRefFbs = serializeLocalRef(builder, localRef);
-
- 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);
- }
- };
- }
-
- 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 deserializeLocalRef(localRefFbs);
- }
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- private static int serializeLocalRef(FlatBufferBuilder builder, PatioLocalRef localRef) {
- var nameFbs = builder.createString(localRef.name());
-
- PatioLocalRefFbs.startPatioLocalRefFbs(builder);
- PatioLocalRefFbs.addName(builder, nameFbs);
- return PatioLocalRefFbs.endPatioLocalRefFbs(builder);
- }
-
- private static PatioLocalRef deserializeLocalRef(PatioLocalRefFbs localRefFbs) {
- return new PatioLocalRef(localRefFbs.name());
- }
-
- // == Data ptr values ==
-
- public static int serializeDataPtrValue(
- FlatBufferBuilder builder,
- PatioDataPtrValue value
- ) {
- switch (value) {
- case PatioDataPtrValueDataElement dataElement -> {
- var nameFbs = builder.createString(dataElement.name());
-
- var dataElementFbs = PatioDataPtrValueDataElementFbs
- .createPatioDataPtrValueDataElementFbs(builder, nameFbs);
-
- return PatioDataPtrValueFbs.createPatioDataPtrValueFbs(
- builder,
- PatioDataPtrValueValueFbs.PatioDataPtrValueDataElementFbs,
- dataElementFbs
- );
- }
-
- case PatioDataPtrValueNull _ -> {
- PatioDataPtrValueNullFbs.startPatioDataPtrValueNullFbs(builder);
- var nullFbs = PatioDataPtrValueNullFbs.endPatioDataPtrValueNullFbs(builder);
-
- return PatioDataPtrValueFbs.createPatioDataPtrValueFbs(
- builder,
- PatioDataPtrValueValueFbs.PatioDataPtrValueNullFbs,
- nullFbs
- );
- }
- }
- }
-
- public static PatioDataPtrValue deserializeDataPtrValue(PatioDataPtrValueFbs valueFbs) {
- return switch (valueFbs.valueType()) {
- case PatioDataPtrValueValueFbs.PatioDataPtrValueDataElementFbs -> {
- var dataElementFbs = (PatioDataPtrValueDataElementFbs) valueFbs.value(new PatioDataPtrValueDataElementFbs());
- yield new PatioDataPtrValueDataElement(dataElementFbs.name());
- }
-
- case PatioDataPtrValueValueFbs.PatioDataPtrValueNullFbs ->
- new PatioDataPtrValueNull();
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Int values ==
-
- public static int serializeIntValue(FlatBufferBuilder builder, PatioIntValue value) {
- return switch (value) {
- case PatioIntValueByteOffsetOf byteOffsetOf -> {
- var layoutFbs = serializeDataLayout(builder, byteOffsetOf.layout());
- var elementOffsetsFbs = PatioIntValueByteOffsetOfFbs.createElementOffsetsVector(
- builder,
- serializeListOfInts(byteOffsetOf.elementOffsets())
- );
-
- var byteOffsetOfFbs = PatioIntValueByteOffsetOfFbs.createPatioIntValueByteOffsetOfFbs(
- builder,
- layoutFbs,
- elementOffsetsFbs
- );
-
- PatioIntValueFbs.startPatioIntValueFbs(builder);
- PatioIntValueFbs.addValueType(builder, PatioIntValueValueFbs.PatioIntValueByteOffsetOfFbs);
- PatioIntValueFbs.addValue(builder, byteOffsetOfFbs);
- yield PatioIntValueFbs.endPatioIntValueFbs(builder);
- }
-
- case PatioIntValueByteSizeOf byteSizeOf -> {
- var layoutFbs = serializeDataLayout(builder, byteSizeOf.layout());
-
- var byteSizeOfFbs = PatioIntValueByteSizeOfFbs.createPatioIntValueByteSizeOfFbs(builder, layoutFbs);
-
- PatioIntValueFbs.startPatioIntValueFbs(builder);
- PatioIntValueFbs.addValueType(builder, PatioIntValueValueFbs.PatioIntValueByteSizeOfFbs);
- PatioIntValueFbs.addValue(builder, byteSizeOfFbs);
- yield PatioIntValueFbs.endPatioIntValueFbs(builder);
- }
-
- case PatioIntValueLiteral literal -> {
- var literalFbs = PatioIntValueLiteralFbs.createPatioIntValueLiteralFbs(builder, literal.value());
-
- PatioIntValueFbs.startPatioIntValueFbs(builder);
- PatioIntValueFbs.addValueType(builder, PatioIntValueValueFbs.PatioIntValueLiteralFbs);
- PatioIntValueFbs.addValue(builder, literalFbs);
- yield PatioIntValueFbs.endPatioIntValueFbs(builder);
- }
- };
- }
-
- public static PatioIntValue deserializeIntValue(PatioIntValueFbs valueFbs) {
- return switch (valueFbs.valueType()) {
- case PatioIntValueValueFbs.PatioIntValueByteOffsetOfFbs -> {
- var byteOffsetOfFbs = (PatioIntValueByteOffsetOfFbs) valueFbs.value(new PatioIntValueByteOffsetOfFbs());
- var layout = deserializeDataLayout(byteOffsetOfFbs.layout());
- var elementOffsets = deserializeListOfInts(byteOffsetOfFbs.elementOffsetsVector());
- yield new PatioIntValueByteOffsetOf(layout, elementOffsets);
- }
-
- case PatioIntValueValueFbs.PatioIntValueByteSizeOfFbs -> {
- var byteSizeOfFbs = (PatioIntValueByteSizeOfFbs) valueFbs.value(new PatioIntValueByteSizeOfFbs());
- var layout = deserializeDataLayout(byteSizeOfFbs.layout());
- yield new PatioIntValueByteSizeOf(layout);
- }
-
- case PatioIntValueValueFbs.PatioIntValueLiteralFbs -> {
- var literalFbs = (PatioIntValueLiteralFbs) valueFbs.value(new PatioIntValueLiteralFbs());
- yield new PatioIntValueLiteral(literalFbs.value());
- }
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Types ==
-
- public static int serializeType(
- FlatBufferBuilder builder,
- PatioType type
- ) {
- return switch (type) {
- case PatioBoolType _ -> {
- PatioBoolTypeFbs.startPatioBoolTypeFbs(builder);
- var boolTypeFbs = PatioBoolTypeFbs.endPatioBoolTypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioBoolTypeFbs);
- PatioTypeFbs.addValue(builder, boolTypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
-
- case PatioByteType _ -> {
- PatioByteTypeFbs.startPatioByteTypeFbs(builder);
- var byteTypeFbs = PatioByteTypeFbs.endPatioByteTypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioByteTypeFbs);
- PatioTypeFbs.addValue(builder, byteTypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
-
- case PatioDataPtrType _ -> {
- PatioDataPtrTypeFbs.startPatioDataPtrTypeFbs(builder);
- var dataPtrTypeFbs = PatioDataPtrTypeFbs.endPatioDataPtrTypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioDataPtrTypeFbs);
- PatioTypeFbs.addValue(builder, dataPtrTypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
-
- case PatioFunctionPtrType _ -> {
- PatioFunctionPtrTypeFbs.startPatioFunctionPtrTypeFbs(builder);
- var functionPtrTypeFbs = PatioFunctionPtrTypeFbs.endPatioFunctionPtrTypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioFunctionPtrTypeFbs);
- PatioTypeFbs.addValue(builder, functionPtrTypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
-
- case PatioIntType _ -> {
- PatioIntTypeFbs.startPatioIntTypeFbs(builder);
- var intTypeFbs = PatioIntTypeFbs.endPatioIntTypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioIntTypeFbs);
- PatioTypeFbs.addValue(builder, intTypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
-
- case PatioInt32Type _ -> {
- PatioInt32TypeFbs.startPatioInt32TypeFbs(builder);
- var int32TypeFbs = PatioInt32TypeFbs.endPatioInt32TypeFbs(builder);
-
- PatioTypeFbs.startPatioTypeFbs(builder);
- PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioInt32TypeFbs);
- PatioTypeFbs.addValue(builder, int32TypeFbs);
- yield PatioTypeFbs.endPatioTypeFbs(builder);
- }
- };
- }
-
- public static PatioType deserializeType(PatioTypeFbs typeFbs) {
- return switch (typeFbs.valueType()) {
- case PatioTypeValueFbs.PatioBoolTypeFbs ->
- PatioBoolType.INSTANCE;
-
- case PatioTypeValueFbs.PatioByteTypeFbs ->
- PatioByteType.INSTANCE;
-
- case PatioTypeValueFbs.PatioDataPtrTypeFbs ->
- PatioDataPtrType.INSTANCE;
-
- case PatioTypeValueFbs.PatioFunctionPtrTypeFbs ->
- PatioFunctionPtrType.INSTANCE;
-
- case PatioTypeValueFbs.PatioIntTypeFbs ->
- PatioIntType.INSTANCE;
-
- case PatioTypeValueFbs.PatioInt32TypeFbs ->
- PatioInt32Type.INSTANCE;
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Data layouts ==
-
- public static int serializeDataLayout(
- FlatBufferBuilder builder,
- PatioDataLayout layout
- ) {
- return switch (layout) {
- case PatioDataLayoutArray array -> {
- var elementFbs = serializeDataLayout(builder, array.element());
-
- PatioDataLayoutArrayFbs.startPatioDataLayoutArrayFbs(builder);
- PatioDataLayoutArrayFbs.addElement(builder, elementFbs);
- PatioDataLayoutArrayFbs.addSize(builder, array.size());
- var arrayFbs = PatioDataLayoutArrayFbs.endPatioDataLayoutArrayFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutArrayFbs);
- PatioDataLayoutFbs.addValue(builder, arrayFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutBool _ -> {
- PatioDataLayoutBoolFbs.startPatioDataLayoutBoolFbs(builder);
- var boolFbs = PatioDataLayoutBoolFbs.endPatioDataLayoutBoolFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutBoolFbs);
- PatioDataLayoutFbs.addValue(builder, boolFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutByte _ -> {
- PatioDataLayoutByteFbs.startPatioDataLayoutByteFbs(builder);
- var byteFbs = PatioDataLayoutByteFbs.endPatioDataLayoutByteFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutByteFbs);
- PatioDataLayoutFbs.addValue(builder, byteFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutDataPtr _ -> {
- PatioDataLayoutDataPtrFbs.startPatioDataLayoutDataPtrFbs(builder);
- var dataPtrFbs = PatioDataLayoutDataPtrFbs.endPatioDataLayoutDataPtrFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutDataPtrFbs);
- PatioDataLayoutFbs.addValue(builder, dataPtrFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutFunctionPtr _ -> {
- PatioDataLayoutFunctionPtrFbs.startPatioDataLayoutFunctionPtrFbs(builder);
- var functionPtrFbs = PatioDataLayoutFunctionPtrFbs.endPatioDataLayoutFunctionPtrFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutFunctionPtrFbs);
- PatioDataLayoutFbs.addValue(builder, functionPtrFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutInt _ -> {
- PatioDataLayoutIntFbs.startPatioDataLayoutIntFbs(builder);
- var intFbs = PatioDataLayoutIntFbs.endPatioDataLayoutIntFbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutIntFbs);
- PatioDataLayoutFbs.addValue(builder, intFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutInt32 _ -> {
- PatioDataLayoutInt32Fbs.startPatioDataLayoutInt32Fbs(builder);
- var int32Fbs = PatioDataLayoutInt32Fbs.endPatioDataLayoutInt32Fbs(builder);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutInt32Fbs);
- PatioDataLayoutFbs.addValue(builder, int32Fbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
-
- case PatioDataLayoutStruct struct -> {
- var elementsOffsetsFbs = struct.elements().stream()
- .mapToInt(element -> serializeDataLayout(builder, element))
- .toArray();
- var elementsVectorFbs = PatioDataLayoutStructFbs.createElementsVector(builder, elementsOffsetsFbs);
-
- var structFbs = PatioDataLayoutStructFbs.createPatioDataLayoutStructFbs(builder, elementsVectorFbs);
-
- PatioDataLayoutFbs.startPatioDataLayoutFbs(builder);
- PatioDataLayoutFbs.addValueType(builder, PatioDataLayoutValueFbs.PatioDataLayoutStructFbs);
- PatioDataLayoutFbs.addValue(builder, structFbs);
- yield PatioDataLayoutFbs.endPatioDataLayoutFbs(builder);
- }
- };
- }
-
- public static PatioDataLayout deserializeDataLayout(PatioDataLayoutFbs layoutFbs) {
- return switch (layoutFbs.valueType()) {
- case PatioDataLayoutValueFbs.PatioDataLayoutArrayFbs -> {
- var arrayFbs = (PatioDataLayoutArrayFbs) layoutFbs.value(new PatioDataLayoutArrayFbs());
- var element = deserializeDataLayout(arrayFbs.element());
- var size = (int) arrayFbs.size();
- yield new PatioDataLayoutArray(element, size);
- }
-
- case PatioDataLayoutValueFbs.PatioDataLayoutBoolFbs ->
- PatioDataLayoutBool.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutByteFbs ->
- PatioDataLayoutByte.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutDataPtrFbs ->
- PatioDataLayoutDataPtr.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutFunctionPtrFbs ->
- PatioDataLayoutFunctionPtr.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutIntFbs ->
- PatioDataLayoutInt.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutInt32Fbs ->
- PatioDataLayoutInt32.INSTANCE;
-
- case PatioDataLayoutValueFbs.PatioDataLayoutStructFbs -> {
- var structFbs = (PatioDataLayoutStructFbs) layoutFbs.value(new PatioDataLayoutStructFbs());
- var elements = deserializeVector(
- structFbs::elements,
- structFbs.elementsLength(),
- PatioToFlatbuffers::deserializeDataLayout
- );
- yield new PatioDataLayoutStruct(elements);
- }
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Data values ==
-
- public static int serializeDataValue(FlatBufferBuilder builder, PatioDataValue value) {
- return switch (value) {
- case PatioDataValueArray array -> {
- var elementLayoutFbs = serializeDataLayout(builder, array.elementLayout());
-
- var elementsOffsetsFbs = array.elements().stream()
- .mapToInt(element -> serializeDataValue(builder, element))
- .toArray();
- var elementsVectorFbs = PatioDataValueArrayFbs.createElementsVector(builder, elementsOffsetsFbs);
-
- PatioDataValueArrayFbs.startPatioDataValueArrayFbs(builder);
- PatioDataValueArrayFbs.addElementLayout(builder, elementLayoutFbs);
- PatioDataValueArrayFbs.addElements(builder, elementsVectorFbs);
- var arrayFbs = PatioDataValueArrayFbs.endPatioDataValueArrayFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueArrayFbs);
- PatioDataValueFbs.addValue(builder, arrayFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueBool bool -> {
- PatioDataValueBoolFbs.startPatioDataValueBoolFbs(builder);
- PatioDataValueBoolFbs.addValue(builder, bool.value());
- var boolFbs = PatioDataValueBoolFbs.endPatioDataValueBoolFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueBoolFbs);
- PatioDataValueFbs.addValue(builder, boolFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueByte byte_ -> {
- PatioDataValueByteFbs.startPatioDataValueByteFbs(builder);
- PatioDataValueByteFbs.addValue(builder, byte_.value());
- var byteFbs = PatioDataValueByteFbs.endPatioDataValueByteFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueByteFbs);
- PatioDataValueFbs.addValue(builder, byteFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueDataPtr dataPtr -> {
- var dataPtrValueFbs = serializeDataPtrValue(builder, dataPtr.value());
-
- PatioDataValueDataPtrFbs.startPatioDataValueDataPtrFbs(builder);
- PatioDataValueDataPtrFbs.addValue(builder, dataPtrValueFbs);
- var dataPtrFbs = PatioDataValueDataPtrFbs.endPatioDataValueDataPtrFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueDataPtrFbs);
- PatioDataValueFbs.addValue(builder, dataPtrFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueInt int_ -> {
- var intValueFbs = serializeIntValue(builder, int_.value());
-
- PatioDataValueIntFbs.startPatioDataValueIntFbs(builder);
- PatioDataValueIntFbs.addValue(builder, intValueFbs);
- var intFbs = PatioDataValueIntFbs.endPatioDataValueIntFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueIntFbs);
- PatioDataValueFbs.addValue(builder, intFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueInt32 int32 -> {
- var intValueFbs = serializeIntValue(builder, int32.value());
-
- PatioDataValueInt32Fbs.startPatioDataValueInt32Fbs(builder);
- PatioDataValueInt32Fbs.addValue(builder, intValueFbs);
- var int32Fbs = PatioDataValueInt32Fbs.endPatioDataValueInt32Fbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueInt32Fbs);
- PatioDataValueFbs.addValue(builder, int32Fbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
-
- case PatioDataValueStruct struct -> {
- var elementsOffsetsFbs = struct.elements().stream()
- .mapToInt(element -> serializeDataValue(builder, element))
- .toArray();
- var elementsVectorFbs = PatioDataValueStructFbs.createElementsVector(builder, elementsOffsetsFbs);
-
- PatioDataValueStructFbs.startPatioDataValueStructFbs(builder);
- PatioDataValueStructFbs.addElements(builder, elementsVectorFbs);
- var structFbs = PatioDataValueStructFbs.endPatioDataValueStructFbs(builder);
-
- PatioDataValueFbs.startPatioDataValueFbs(builder);
- PatioDataValueFbs.addValueType(builder, PatioDataValueValueFbs.PatioDataValueStructFbs);
- PatioDataValueFbs.addValue(builder, structFbs);
- yield PatioDataValueFbs.endPatioDataValueFbs(builder);
- }
- };
- }
-
- public static PatioDataValue deserializeDataValue(PatioDataValueFbs valueFbs) {
- return switch (valueFbs.valueType()) {
- case PatioDataValueValueFbs.PatioDataValueArrayFbs -> {
- var arrayFbs = (PatioDataValueArrayFbs) valueFbs.value(new PatioDataValueArrayFbs());
-
- var elementLayout = deserializeDataLayout(arrayFbs.elementLayout());
-
- var elements = deserializeVector(
- arrayFbs::elements,
- arrayFbs.elementsLength(),
- PatioToFlatbuffers::deserializeDataValue
- );
-
- yield new PatioDataValueArray(elementLayout, elements);
- }
-
- case PatioDataValueValueFbs.PatioDataValueBoolFbs -> {
- var boolFbs = (PatioDataValueBoolFbs) valueFbs.value(new PatioDataValueBoolFbs());
-
- yield new PatioDataValueBool(boolFbs.value());
- }
-
- case PatioDataValueValueFbs.PatioDataValueByteFbs -> {
- var byteFbs = (PatioDataValueByteFbs) valueFbs.value(new PatioDataValueByteFbs());
-
- yield new PatioDataValueByte((byte) byteFbs.value());
- }
-
- case PatioDataValueValueFbs.PatioDataValueDataPtrFbs -> {
- var dataPtrFbs = (PatioDataValueDataPtrFbs) valueFbs.value(new PatioDataValueDataPtrFbs());
-
- var value = deserializeDataPtrValue(dataPtrFbs.value());
-
- yield new PatioDataValueDataPtr(value);
- }
-
- case PatioDataValueValueFbs.PatioDataValueIntFbs -> {
- var intFbs = (PatioDataValueIntFbs) valueFbs.value(new PatioDataValueIntFbs());
-
- var value = deserializeIntValue(intFbs.value());
-
- yield new PatioDataValueInt(value);
- }
-
- case PatioDataValueValueFbs.PatioDataValueInt32Fbs -> {
- var int32Fbs = (PatioDataValueInt32Fbs) valueFbs.value(new PatioDataValueInt32Fbs());
-
- var value = deserializeIntValue(int32Fbs.value());
-
- yield new PatioDataValueInt32(value);
- }
-
- case PatioDataValueValueFbs.PatioDataValueStructFbs -> {
- var structFbs = (PatioDataValueStructFbs) valueFbs.value(new PatioDataValueStructFbs());
-
- var elements = deserializeVector(
- structFbs::elements,
- structFbs.elementsLength(),
- PatioToFlatbuffers::deserializeDataValue
- );
-
- yield new PatioDataValueStruct(elements);
- }
-
- default ->
- throw new UnsupportedOperationException("TODO");
- };
- }
-
- // == Flatbuffers ==
-
- private static <T, R> List<R> deserializeVector(
- Function<Integer, T> get,
- int length,
- Function<T, R> deserializeElement
- ) {
- var result = new ArrayList<R>();
- for (var index = 0; index < length; index++) {
- var elementFbs = get.apply(index);
- var element = deserializeElement.apply(elementFbs);
- result.add(element);
- }
- return result;
- }
-
- private static long[] serializeListOfInts(List<Integer> list) {
- var array = new long[list.size()];
- for (var index = 0; index < list.size(); index++) {
- array[index] = list.get(index);
- }
- return array;
- }
-
- private static List<Integer> deserializeListOfInts(IntVector vector) {
- var result = new ArrayList<Integer>();
- for (var index = 0; index < vector.length(); index++) {
- result.add(vector.get(index));
- }
- return result;
- }
-}
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToTransient0.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToTransient0.java
new file mode 100644
index 00000000..666100dc
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToTransient0.java
@@ -0,0 +1,141 @@
+package org.shedlang.compiler.patio.serialization;
+
+import org.shedlang.compiler.patio.PatioCompilationUnit;
+import org.shedlang.compiler.patio.PatioCompilationUnitElement;
+import org.shedlang.compiler.patio.instructions.PatioInstruction;
+import org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions;
+import org.shedlang.compiler.patio.operands.PatioOperand;
+import org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands;
+import org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio;
+import org.shedlang.compiler.patio.types.PatioDataLayout;
+import org.shedlang.compiler.patio.types.PatioDataValue;
+import org.shedlang.compiler.patio.types.PatioType;
+import org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types;
+import org.shedlang.compiler.patio.values.PatioDataPtrValue;
+import org.shedlang.compiler.patio.values.PatioIntValue;
+import org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class PatioToTransient0 {
+ public static void serializeCompilationUnit(
+ PatioCompilationUnit value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Patio.encodePatioCompilationUnit(value, outputStream, new HashMap<>());
+ }
+
+ public static PatioCompilationUnit deserializeCompilationUnit(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Patio.decodePatioCompilationUnit(inputStream, new ArrayList<>());
+ }
+
+ static void serializeCompilationUnitElement(
+ PatioCompilationUnitElement value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Patio.encodePatioCompilationUnitElement(value, outputStream, new HashMap<>());
+ }
+
+ static PatioCompilationUnitElement deserializeCompilationUnitElement(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Patio.decodePatioCompilationUnitElement(inputStream, new ArrayList<>());
+ }
+
+ static void serializeInstruction(
+ PatioInstruction value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Instructions.encodePatioInstruction(value, outputStream, new HashMap<>());
+ }
+
+ static PatioInstruction deserializeInstruction(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Instructions.decodePatioInstruction(inputStream, new ArrayList<>());
+ }
+
+ static void serializeOperand(
+ PatioOperand value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Operands.encodePatioOperand(value, outputStream, new HashMap<>());
+ }
+
+ static PatioOperand deserializeOperand(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Operands.decodePatioOperand(inputStream, new ArrayList<>());
+ }
+
+ static void serializeDataPtrValue(
+ PatioDataPtrValue value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Values.encodePatioDataPtrValue(value, outputStream, new HashMap<>());
+ }
+
+ static PatioDataPtrValue deserializeDataPtrValue(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Values.decodePatioDataPtrValue(inputStream, new ArrayList<>());
+ }
+
+ static void serializeIntValue(
+ PatioIntValue value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Values.encodePatioIntValue(value, outputStream, new HashMap<>());
+ }
+
+ static PatioIntValue deserializeIntValue(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Values.decodePatioIntValue(inputStream, new ArrayList<>());
+ }
+
+ static void serializeType(
+ PatioType value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Types.encodePatioType(value, outputStream, new HashMap<>());
+ }
+
+ static PatioType deserializeType(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Types.decodePatioType(inputStream, new ArrayList<>());
+ }
+
+ static void serializeDataLayout(
+ PatioDataLayout value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Types.encodePatioDataLayout(value, outputStream, new HashMap<>());
+ }
+
+ static PatioDataLayout deserializeDataLayout(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Types.decodePatioDataLayout(inputStream, new ArrayList<>());
+ }
+
+ static void serializeDataValue(
+ PatioDataValue value,
+ OutputStream outputStream
+ ) throws IOException {
+ HobgoblinTransient0Types.encodePatioDataValue(value, outputStream, new HashMap<>());
+ }
+
+ static PatioDataValue deserializeDataValue(
+ InputStream inputStream
+ ) throws IOException {
+ return HobgoblinTransient0Types.decodePatioDataValue(inputStream, new ArrayList<>());
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffers.java b/src/main/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffers.java
deleted file mode 100644
index 7c1bb074..00000000
--- a/src/main/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffers.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.shedlang.compiler.sources.serialization;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import org.shedlang.compiler.sources.*;
-import org.shedlang.compiler.sources.flatbuffers.*;
-import org.zwobble.sourcetext.SourcePosition;
-import org.zwobble.sourcetext.SourceRange;
-import org.zwobble.sourcetext.SourceText;
-
-import java.util.Optional;
-
-public class SourceToFlatbuffers {
- private SourceToFlatbuffers() {
- }
-
- public static int serializeSource(
- FlatBufferBuilder builder,
- Source source,
- Source parentSource
- ) {
- return serializeSource(builder, source, Optional.of(parentSource));
- }
-
- public static int serializeSource(
- FlatBufferBuilder builder,
- Source source,
- Optional<Source> parentSource
- ) {
- switch (source) {
- case NullSource nullSource -> {
- NullSourceFbs.startNullSourceFbs(builder);
- var nullSourceFbs = NullSourceFbs.endNullSourceFbs(builder);
-
- SourceFbs.startSourceFbs(builder);
- SourceFbs.addValueType(builder, SourceValueFbs.NullSourceFbs);
- SourceFbs.addValue(builder, nullSourceFbs);
- return SourceFbs.endSourceFbs(builder);
- }
- case RuntimeSource runtimeSource -> {
- RuntimeSourceFbs.startRuntimeSourceFbs(builder);
- var runtimeSourceFbs = RuntimeSourceFbs.endRuntimeSourceFbs(builder);
-
- SourceFbs.startSourceFbs(builder);
- SourceFbs.addValueType(builder, SourceValueFbs.RuntimeSourceFbs);
- SourceFbs.addValue(builder, runtimeSourceFbs);
- return SourceFbs.endSourceFbs(builder);
- }
- case FileFragmentSource fileFragmentSource -> {
- var fileFragmentSourceFbs = serializeFileFragmentSource(builder, fileFragmentSource, parentSource);
-
- SourceFbs.startSourceFbs(builder);
- SourceFbs.addValueType(builder, SourceValueFbs.FileFragmentSourceFbs);
- SourceFbs.addValue(
- builder,
- fileFragmentSourceFbs
- );
- return SourceFbs.endSourceFbs(builder);
- }
- default -> {
- throw new UnsupportedOperationException("Unhandled source: " + source);
- }
- }
- }
-
- public static Source deserializeSource(
- SourceFbs sourceFbs,
- Source parentSource
- ) {
- return deserializeSource(sourceFbs, Optional.of(parentSource));
- }
-
- public static Source deserializeSource(
- SourceFbs sourceFbs,
- Optional<Source> parentSource
- ) {
- return switch (sourceFbs.valueType()) {
- case SourceValueFbs.NullSourceFbs ->
- Sources.NULL;
-
- case SourceValueFbs.RuntimeSourceFbs ->
- Sources.RUNTIME;
-
- case SourceValueFbs.FileFragmentSourceFbs ->
- deserializeFileFragmentSource(
- (FileFragmentSourceFbs) sourceFbs.value(new FileFragmentSourceFbs()),
- parentSource
- );
-
- default -> {
- throw new UnsupportedOperationException("TODO");
- }
- };
- }
-
- private static int serializeFileFragmentSource(
- FlatBufferBuilder builder,
- FileFragmentSource source,
- Optional<Source> parentSource
- ) {
- var sourceTextName = source.sourceRange().sourceText().name();
- if (!(
- parentSource.isPresent() &&
- parentSource.get() instanceof FileFragmentSource(
- SourceRange parentSourceRange) &&
- parentSourceRange.sourceText().name().equals(sourceTextName)
- )) {
- var sourceTextNameFbs = builder.createString(sourceTextName);
- var sourceTextContentsFbs = builder.createString(source.sourceRange().sourceText().charSequence());
- var sourceTextFbs = SourceTextFbs.createSourceTextFbs(builder, sourceTextNameFbs, sourceTextContentsFbs);
- FileFragmentSourceFbs.startFileFragmentSourceFbs(builder);
- FileFragmentSourceFbs.addSourceText(builder, sourceTextFbs);
- } else {
- FileFragmentSourceFbs.startFileFragmentSourceFbs(builder);
- }
-
- FileFragmentSourceFbs.addStartCharacterIndex(builder, source.sourceRange().start().characterIndex());
- FileFragmentSourceFbs.addEndCharacterIndex(builder, source.sourceRange().end().characterIndex());
-
- return FileFragmentSourceFbs.endFileFragmentSourceFbs(builder);
- }
-
- private static FileFragmentSource deserializeFileFragmentSource(
- FileFragmentSourceFbs sourceFbs,
- Optional<Source> parentSource
- ) {
- SourceText sourceText;
- if (sourceFbs.sourceText() != null) {
- sourceText = SourceText.fromString(
- sourceFbs.sourceText().name(),
- sourceFbs.sourceText().contents()
- );
- } else {
- // TODO: handle missing parent
- sourceText = ((FileFragmentSource) parentSource.orElseThrow()).sourceRange().sourceText();
- }
-
- var start = new SourcePosition(sourceText, (int) sourceFbs.startCharacterIndex());
- var end = new SourcePosition(sourceText, (int) sourceFbs.endCharacterIndex());
- return new FileFragmentSource(new SourceRange(sourceText, start, end));
- }
-}
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
index 2f2990bb..ae554bb8 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
@@ -8,9 +8,8 @@ import org.shedlang.compiler.patio.operands.PatioOperand;
import org.shedlang.compiler.patio.types.*;
import org.shedlang.compiler.patio.values.PatioDataPtrValue;
import org.shedlang.compiler.patio.values.PatioIntValue;
-import org.shedlang.compiler.sources.Source;
-import org.shedlang.compiler.sources.Sources;
+import java.io.IOException;
import java.util.List;
import java.util.Optional;
@@ -21,11 +20,11 @@ public abstract class PatioSerializationTests {
// == Compilation unit ==
- protected abstract PatioCompilationUnit deserializeCompilationUnit(byte[] buffer);
- protected abstract byte[] serializeCompilationUnit(PatioCompilationUnit value);
+ protected abstract PatioCompilationUnit deserializeCompilationUnit(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeCompilationUnit(PatioCompilationUnit value) throws IOException;
@Test
- public void canSerializeCompilationUnit() {
+ public void canSerializeCompilationUnit() throws IOException {
var element = PatioFunctionDefinition.builder()
.withName("f")
.build();
@@ -40,11 +39,11 @@ public abstract class PatioSerializationTests {
// == Compilation unit elements ==
- protected abstract PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer, Source parentSource);
- protected abstract byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource);
+ protected abstract PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value) throws IOException;
@Test
- public void canSerializeDataElementImmutableDefinition() {
+ public void canSerializeDataElementImmutableDefinition() throws IOException {
var element = Patio.dataElementImmutableDefinition(
"x",
PatioVisibility.PRIVATE,
@@ -55,30 +54,28 @@ public abstract class PatioSerializationTests {
);
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
}
@Test
- public void canSerializeDataElementMutableDeclaration() {
+ public void canSerializeDataElementMutableDeclaration() throws IOException {
var element = Patio.dataElementMutableDeclaration(
"x",
PatioDataLayouts.INT
);
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
}
@Test
- public void canSerializeDataElementMutableDefinition() {
+ public void canSerializeDataElementMutableDefinition() throws IOException {
var element = Patio.dataElementMutableDefinition(
"x",
PatioVisibility.PRIVATE,
@@ -86,27 +83,25 @@ public abstract class PatioSerializationTests {
);
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
}
@Test
- public void canSerializeExceptionTypeDefinition() {
+ public void canSerializeExceptionTypeDefinition() throws IOException {
var element = Patio.exceptionTypeDefinition("Error", PatioTypes.INT);
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
}
@Test
- public void canSerializeFunctionDeclaration() {
+ public void canSerializeFunctionDeclaration() throws IOException {
var element = PatioFunctionDeclaration.builder()
.withName("f")
.addParam(Patio.param("param1", PatioTypes.INT))
@@ -115,15 +110,14 @@ public abstract class PatioSerializationTests {
.build();
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
}
@Test
- public void canSerializeFunctionDefinition() {
+ public void canSerializeFunctionDefinition() throws IOException {
var element = PatioFunctionDefinition.builder()
.withName("f")
.withVisibility(PatioVisibility.PRIVATE)
@@ -136,8 +130,7 @@ public abstract class PatioSerializationTests {
.build();
var deserializedElement = deserializeCompilationUnitElement(
- serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
+ serializeCompilationUnitElement(element)
);
assertThat(deserializedElement, equalTo(element));
@@ -145,11 +138,11 @@ public abstract class PatioSerializationTests {
// == Instructions ==
- protected abstract PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource);
- protected abstract byte[] serializeInstruction(PatioInstruction value, Source parentSource);
+ protected abstract PatioInstruction deserializeInstruction(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeInstruction(PatioInstruction value) throws IOException;
@Test
- public void canSerializeBlock() {
+ public void canSerializeBlock() throws IOException {
var instruction = Patio.block(
List.of(
Patio.localStore(Patio.localRef("x1"), Patio.intConst(1)),
@@ -162,27 +155,25 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeBoolToInt() {
+ public void canSerializeBoolToInt() throws IOException {
var instruction = Patio.boolToInt(Patio.localRef("destination"), Patio.localRef("value"));
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeCallWithoutDestination() {
+ public void canSerializeCallWithoutDestination() throws IOException {
var instruction = Patio.call(
Optional.empty(),
"f",
@@ -190,15 +181,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeCallWithDestination() {
+ public void canSerializeCallWithDestination() throws IOException {
var instruction = Patio.call(
Optional.of(Patio.localRef("destination")),
"f",
@@ -206,15 +196,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeCallPointer() {
+ public void canSerializeCallPointer() throws IOException {
var instruction = Patio.callPointer(
Patio.localRef("destination"),
Patio.localRef("f"),
@@ -222,27 +211,25 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeDataPtrToInt() {
+ public void canSerializeDataPtrToInt() throws IOException {
var instruction = Patio.dataPtrToInt(Patio.localRef("destination"), Patio.localRef("value"));
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIf() {
+ public void canSerializeIf() throws IOException {
var instruction = Patio.if_(
List.of(
Patio.localRef("x"),
@@ -272,15 +259,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntAdd() {
+ public void canSerializeIntAdd() throws IOException {
var instruction = Patio.intAdd(
Patio.localRef("destination"),
Patio.localRef("left"),
@@ -288,15 +274,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntEquals() {
+ public void canSerializeIntEquals() throws IOException {
var instruction = Patio.intEquals(
Patio.localRef("destination"),
Patio.localRef("left"),
@@ -304,15 +289,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntNotEqual() {
+ public void canSerializeIntNotEqual() throws IOException {
var instruction = Patio.intNotEqual(
Patio.localRef("destination"),
Patio.localRef("left"),
@@ -320,15 +304,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntSub() {
+ public void canSerializeIntSub() throws IOException {
var instruction = Patio.intSub(
Patio.localRef("destination"),
Patio.localRef("left"),
@@ -336,57 +319,53 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntToBool() {
+ public void canSerializeIntToBool() throws IOException {
var instruction = Patio.intToBool(Patio.localRef("destination"), Patio.localRef("value"));
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeIntToDataPtr() {
+ public void canSerializeIntToDataPtr() throws IOException {
var instruction = Patio.intToDataPtr(
Patio.localRef("destination"),
Patio.localRef("value")
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeLocalStore() {
+ public void canSerializeLocalStore() throws IOException {
var instruction = Patio.localStore(
Patio.localRef("destination"),
Patio.localRef("x")
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeLoop() {
+ public void canSerializeLoop() throws IOException {
var instruction = Patio.loop(
List.of(
Patio.localStore(Patio.localRef("x"), Patio.intConst(1))
@@ -394,39 +373,36 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeLoopBreak() {
+ public void canSerializeLoopBreak() throws IOException {
var instruction = Patio.loopBreak();
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeLoopContinue() {
+ public void canSerializeLoopContinue() throws IOException {
var instruction = Patio.loopContinue();
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeMemoryLoad() {
+ public void canSerializeMemoryLoad() throws IOException {
var instruction = Patio.memoryLoad(
Patio.localRef("destination"),
Patio.localRef("pointer"),
@@ -435,15 +411,14 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeMemoryStore() {
+ public void canSerializeMemoryStore() throws IOException {
var instruction = Patio.memoryStore(
Patio.localRef("pointer"),
PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE)),
@@ -452,39 +427,36 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeReturn() {
+ public void canSerializeReturn() throws IOException {
var instruction = Patio.return_(Patio.localRef("value"));
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeReturnVoid() {
+ public void canSerializeReturnVoid() throws IOException {
var instruction = Patio.returnVoid();
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeSwitch() {
+ public void canSerializeSwitch() throws IOException {
var instruction = Patio.switch_(
List.of(
Patio.localRef("x"),
@@ -532,27 +504,25 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeThrow() {
+ public void canSerializeThrow() throws IOException {
var instruction = Patio.throw_("Error", Patio.localRef("value"));
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeTry() {
+ public void canSerializeTry() throws IOException {
var instruction = Patio.try_(
List.of(Patio.localRef("x"), Patio.localRef("y")),
List.of(
@@ -589,50 +559,46 @@ public abstract class PatioSerializationTests {
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeUnreachable() {
+ public void canSerializeUnreachable() throws IOException {
var instruction = Patio.unreachable();
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeVarLoad() {
+ public void canSerializeVarLoad() throws IOException {
var instruction = Patio.varLoad(
Patio.localRef("destination"),
Patio.localRef("v")
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
}
@Test
- public void canSerializeVarStore() {
+ public void canSerializeVarStore() throws IOException {
var instruction = Patio.varStore(
Patio.localRef("destination"),
Patio.localRef("value")
);
var deserializedInstruction = deserializeInstruction(
- serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
+ serializeInstruction(instruction)
);
assertThat(deserializedInstruction, equalTo(instruction));
@@ -640,11 +606,11 @@ public abstract class PatioSerializationTests {
// == Operands ==
- protected abstract PatioOperand deserializeOperand(byte[] buffer);
- protected abstract byte[] serializeOperand(PatioOperand value);
+ protected abstract PatioOperand deserializeOperand(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeOperand(PatioOperand value) throws IOException;
@Test
- public void canSerializeBoolConst() {
+ public void canSerializeBoolConst() throws IOException {
var operand = Patio.boolConst(true);
var deserializedOperand = deserializeOperand(
@@ -655,7 +621,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeByteConst() {
+ public void canSerializeByteConst() throws IOException {
var operand = Patio.byteConst((byte) 42);
var deserializedOperand = deserializeOperand(
@@ -666,7 +632,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataPtrConst() {
+ public void canSerializeDataPtrConst() throws IOException {
var operand = Patio.dataPtrConst("x");
var deserializedOperand = deserializeOperand(
@@ -677,7 +643,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeFunctionPtrConst() {
+ public void canSerializeFunctionPtrConst() throws IOException {
var operand = Patio.functionPtrConst("x");
var deserializedOperand = deserializeOperand(
@@ -688,7 +654,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeIntConst() {
+ public void canSerializeIntConst() throws IOException {
var operand = Patio.intConst(42);
var deserializedOperand = deserializeOperand(
@@ -699,7 +665,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeInt32Const() {
+ public void canSerializeInt32Const() throws IOException {
var operand = Patio.int32Const(42);
var deserializedOperand = deserializeOperand(
@@ -710,7 +676,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeLocalRef() {
+ public void canSerializeLocalRef() throws IOException {
var operand = Patio.localRef("x");
var deserializedOperand = deserializeOperand(
@@ -722,11 +688,11 @@ public abstract class PatioSerializationTests {
// == Data ptr values ==
- protected abstract PatioDataPtrValue deserializeDataPtrValue(byte[] buffer);
- protected abstract byte[] serializeDataPtrValue(PatioDataPtrValue value);
+ protected abstract PatioDataPtrValue deserializeDataPtrValue(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeDataPtrValue(PatioDataPtrValue value) throws IOException;
@Test
- public void canSerializeDataPtrValueDataElement() {
+ public void canSerializeDataPtrValueDataElement() throws IOException {
var dataPtrValue = Patio.dataPtrValueDataElement("string");
var deserializedDataPtrValue = deserializeDataPtrValue(
@@ -737,7 +703,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataPtrValueNull() {
+ public void canSerializeDataPtrValueNull() throws IOException {
var dataPtrValue = Patio.dataPtrValueNull();
var deserializedDataPtrValue = deserializeDataPtrValue(
@@ -749,11 +715,11 @@ public abstract class PatioSerializationTests {
// == Int values ==
- protected abstract PatioIntValue deserializeIntValue(byte[] buffer);
- protected abstract byte[] serializeIntValue(PatioIntValue value);
+ protected abstract PatioIntValue deserializeIntValue(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeIntValue(PatioIntValue value) throws IOException;
@Test
- public void canSerializeIntValueByteOffsetOf() {
+ public void canSerializeIntValueByteOffsetOf() throws IOException {
var intValue = Patio.intValueByteOffsetOf(
PatioDataLayouts.struct(List.of(
PatioDataLayouts.INT,
@@ -770,7 +736,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeIntValueByteSizeOf() {
+ public void canSerializeIntValueByteSizeOf() throws IOException {
var intValue = Patio.intValueByteSizeOf(
PatioDataLayouts.struct(List.of(
PatioDataLayouts.INT,
@@ -786,7 +752,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeIntValueLiteral() {
+ public void canSerializeIntValueLiteral() throws IOException {
var intValue = Patio.intValueLiteral(42);
var deserializedIntValue = deserializeIntValue(
@@ -798,11 +764,11 @@ public abstract class PatioSerializationTests {
// == Types ==
- protected abstract PatioType deserializeType(byte[] buffer);
- protected abstract byte[] serializeType(PatioType value);
+ protected abstract PatioType deserializeType(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeType(PatioType value) throws IOException;
@Test
- public void canSerializeBoolType() {
+ public void canSerializeBoolType() throws IOException {
var type = PatioTypes.BOOL;
var deserializedType = deserializeType(
@@ -813,7 +779,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeByteType() {
+ public void canSerializeByteType() throws IOException {
var type = PatioTypes.BYTE;
var deserializedType = deserializeType(
@@ -824,7 +790,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataPtrType() {
+ public void canSerializeDataPtrType() throws IOException {
var type = PatioTypes.DATA_PTR;
var deserializedType = deserializeType(
@@ -835,7 +801,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeFunctionPtrType() {
+ public void canSerializeFunctionPtrType() throws IOException {
var type = PatioTypes.FUNCTION_PTR;
var deserializedType = deserializeType(
@@ -846,7 +812,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeIntType() {
+ public void canSerializeIntType() throws IOException {
var type = PatioTypes.INT;
var deserializedType = deserializeType(
@@ -857,7 +823,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeInt32Type() {
+ public void canSerializeInt32Type() throws IOException {
var type = PatioTypes.INT32;
var deserializedType = deserializeType(
@@ -869,11 +835,11 @@ public abstract class PatioSerializationTests {
// == Data layouts ==
- protected abstract PatioDataLayout deserializeDataLayout(byte[] buffer);
- protected abstract byte[] serializeDataLayout(PatioDataLayout value);
+ protected abstract PatioDataLayout deserializeDataLayout(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeDataLayout(PatioDataLayout value) throws IOException;
@Test
- public void canSerializeDataLayoutArray() {
+ public void canSerializeDataLayoutArray() throws IOException {
var layout = PatioDataLayouts.array(PatioDataLayouts.INT, 4);
var deserializedLayout = deserializeDataLayout(
@@ -884,7 +850,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutBool() {
+ public void canSerializeDataLayoutBool() throws IOException {
var layout = PatioDataLayouts.BOOL;
var deserializedLayout = deserializeDataLayout(
@@ -895,7 +861,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutByte() {
+ public void canSerializeDataLayoutByte() throws IOException {
var layout = PatioDataLayouts.BYTE;
var deserializedLayout = deserializeDataLayout(
@@ -906,7 +872,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutDataPtr() {
+ public void canSerializeDataLayoutDataPtr() throws IOException {
var layout = PatioDataLayouts.DATA_PTR;
var deserializedLayout = deserializeDataLayout(
@@ -917,7 +883,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutFunctionPtr() {
+ public void canSerializeDataLayoutFunctionPtr() throws IOException {
var layout = PatioDataLayouts.FUNCTION_PTR;
var deserializedLayout = deserializeDataLayout(
@@ -928,7 +894,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutInt() {
+ public void canSerializeDataLayoutInt() throws IOException {
var layout = PatioDataLayouts.INT;
var deserializedLayout = deserializeDataLayout(
@@ -939,7 +905,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutInt32() {
+ public void canSerializeDataLayoutInt32() throws IOException {
var layout = PatioDataLayouts.INT32;
var deserializedLayout = deserializeDataLayout(
@@ -950,7 +916,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataLayoutStruct() {
+ public void canSerializeDataLayoutStruct() throws IOException {
var layout = PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE));
var deserializedLayout = deserializeDataLayout(
@@ -962,12 +928,11 @@ public abstract class PatioSerializationTests {
// == Data values ==
- protected abstract PatioDataValue deserializeDataValue(byte[] buffer);
- protected abstract byte[] serializeDataValue(PatioDataValue value);
-
+ protected abstract PatioDataValue deserializeDataValue(byte[] buffer) throws IOException;
+ protected abstract byte[] serializeDataValue(PatioDataValue value) throws IOException;
@Test
- public void canSerializeDataValueArray() {
+ public void canSerializeDataValueArray() throws IOException {
var value = PatioDataValues.array(
PatioDataLayouts.BYTE,
List.of(
@@ -985,7 +950,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueBool() {
+ public void canSerializeDataValueBool() throws IOException {
var value = PatioDataValues.bool(true);
var deserializedValue = deserializeDataValue(
@@ -996,7 +961,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueByte() {
+ public void canSerializeDataValueByte() throws IOException {
var value = PatioDataValues.byte_(0xc8);
var deserializedValue = deserializeDataValue(
@@ -1007,7 +972,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueDataPtr() {
+ public void canSerializeDataValueDataPtr() throws IOException {
var value = PatioDataValues.dataPtrNull();
var deserializedValue = deserializeDataValue(
@@ -1018,7 +983,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueInt() {
+ public void canSerializeDataValueInt() throws IOException {
var value = PatioDataValues.int_(42);
var deserializedValue = deserializeDataValue(
@@ -1029,7 +994,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueInt32() {
+ public void canSerializeDataValueInt32() throws IOException {
var value = PatioDataValues.int32(42);
var deserializedValue = deserializeDataValue(
@@ -1040,7 +1005,7 @@ public abstract class PatioSerializationTests {
}
@Test
- public void canSerializeDataValueStruct() {
+ public void canSerializeDataValueStruct() throws IOException {
var value = PatioDataValues.struct(List.of(
PatioDataValues.byte_(0x01),
PatioDataValues.byte_(0x02),
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
deleted file mode 100644
index 9ff08678..00000000
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.shedlang.compiler.patio.serialization;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import org.shedlang.compiler.patio.PatioCompilationUnit;
-import org.shedlang.compiler.patio.PatioCompilationUnitElement;
-import org.shedlang.compiler.patio.flatbuffers.*;
-import org.shedlang.compiler.patio.instructions.PatioInstruction;
-import org.shedlang.compiler.patio.operands.PatioOperand;
-import org.shedlang.compiler.patio.types.PatioDataLayout;
-import org.shedlang.compiler.patio.types.PatioDataValue;
-import org.shedlang.compiler.patio.types.PatioType;
-import org.shedlang.compiler.patio.values.PatioDataPtrValue;
-import org.shedlang.compiler.patio.values.PatioIntValue;
-import org.shedlang.compiler.sources.Source;
-
-import java.nio.ByteBuffer;
-
-public class PatioToFlatbuffersTests extends PatioSerializationTests {
- @Override
- protected byte[] serializeCompilationUnit(PatioCompilationUnit value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeCompilationUnit(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioCompilationUnit deserializeCompilationUnit(byte[] buffer) {
- var valueFbs = PatioCompilationUnitFbs.getRootAsPatioCompilationUnitFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeCompilationUnit(valueFbs);
- }
-
- @Override
- protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeCompilationUnitElement(builder, value, parentSource);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer, Source parentSource) {
- var valueFbs = PatioCompilationUnitElementFbs.getRootAsPatioCompilationUnitElementFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeCompilationUnitElement(valueFbs, parentSource);
- }
-
- @Override
- protected byte[] serializeInstruction(PatioInstruction value, Source parentSource) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeInstruction(builder, value, parentSource);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource) {
- var valueFbs = PatioInstructionFbs.getRootAsPatioInstructionFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeInstruction(valueFbs, parentSource);
- }
-
- @Override
- protected byte[] serializeOperand(PatioOperand value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeOperand(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioOperand deserializeOperand(byte[] buffer) {
- var valueFbs = PatioOperandFbs.getRootAsPatioOperandFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeOperand(valueFbs);
- }
-
- @Override
- protected byte[] serializeDataPtrValue(PatioDataPtrValue value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeDataPtrValue(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioDataPtrValue deserializeDataPtrValue(byte[] buffer) {
- var valueFbs = PatioDataPtrValueFbs.getRootAsPatioDataPtrValueFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeDataPtrValue(valueFbs);
- }
-
- @Override
- protected byte[] serializeIntValue(PatioIntValue value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeIntValue(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioIntValue deserializeIntValue(byte[] buffer) {
- var valueFbs = PatioIntValueFbs.getRootAsPatioIntValueFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeIntValue(valueFbs);
- }
-
- @Override
- protected byte[] serializeType(PatioType value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeType(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioType deserializeType(byte[] buffer) {
- var valueFbs = PatioTypeFbs.getRootAsPatioTypeFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeType(valueFbs);
- }
-
- @Override
- protected byte[] serializeDataLayout(PatioDataLayout value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeDataLayout(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioDataLayout deserializeDataLayout(byte[] buffer) {
- var valueFbs = PatioDataLayoutFbs.getRootAsPatioDataLayoutFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeDataLayout(valueFbs);
- }
-
- @Override
- protected byte[] serializeDataValue(PatioDataValue value) {
- var builder = new FlatBufferBuilder();
- var valueFbs = PatioToFlatbuffers.serializeDataValue(builder, value);
- builder.finish(valueFbs);
- return builder.sizedByteArray();
- }
-
- @Override
- protected PatioDataValue deserializeDataValue(byte[] buffer) {
- var valueFbs = PatioDataValueFbs.getRootAsPatioDataValueFbs(ByteBuffer.wrap(buffer));
- return PatioToFlatbuffers.deserializeDataValue(valueFbs);
- }
-}
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToTransient0Tests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToTransient0Tests.java
new file mode 100644
index 00000000..34d54ca2
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToTransient0Tests.java
@@ -0,0 +1,125 @@
+package org.shedlang.compiler.patio.serialization;
+
+import org.shedlang.compiler.patio.PatioCompilationUnit;
+import org.shedlang.compiler.patio.PatioCompilationUnitElement;
+import org.shedlang.compiler.patio.instructions.PatioInstruction;
+import org.shedlang.compiler.patio.operands.PatioOperand;
+import org.shedlang.compiler.patio.types.PatioDataLayout;
+import org.shedlang.compiler.patio.types.PatioDataValue;
+import org.shedlang.compiler.patio.types.PatioType;
+import org.shedlang.compiler.patio.values.PatioDataPtrValue;
+import org.shedlang.compiler.patio.values.PatioIntValue;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+public class PatioToTransient0Tests extends PatioSerializationTests {
+ @Override
+ protected byte[] serializeCompilationUnit(PatioCompilationUnit value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeCompilationUnit(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioCompilationUnit deserializeCompilationUnit(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeCompilationUnit(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeCompilationUnitElement(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeCompilationUnitElement(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeInstruction(PatioInstruction value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeInstruction(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioInstruction deserializeInstruction(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeInstruction(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeOperand(PatioOperand value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeOperand(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioOperand deserializeOperand(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeOperand(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeDataPtrValue(PatioDataPtrValue value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeDataPtrValue(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioDataPtrValue deserializeDataPtrValue(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeDataPtrValue(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeIntValue(PatioIntValue value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeIntValue(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioIntValue deserializeIntValue(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeIntValue(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeType(PatioType value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeType(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioType deserializeType(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeType(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeDataLayout(PatioDataLayout value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeDataLayout(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioDataLayout deserializeDataLayout(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeDataLayout(new ByteArrayInputStream(buffer));
+ }
+
+ @Override
+ protected byte[] serializeDataValue(PatioDataValue value) throws IOException {
+ var outputStream = new ByteArrayOutputStream();
+ PatioToTransient0.serializeDataValue(value, outputStream);
+ return outputStream.toByteArray();
+ }
+
+ @Override
+ protected PatioDataValue deserializeDataValue(byte[] buffer) throws IOException {
+ return PatioToTransient0.deserializeDataValue(new ByteArrayInputStream(buffer));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java b/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java
deleted file mode 100644
index cf54479a..00000000
--- a/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.shedlang.compiler.sources;
-
-import org.junit.jupiter.api.Test;
-import org.zwobble.sourcetext.SourcePosition;
-import org.zwobble.sourcetext.SourceRange;
-import org.zwobble.sourcetext.SourceText;
-
-import java.util.Optional;
-import java.util.function.BiFunction;
-
-import static org.zwobble.precisely.AssertThat.assertThat;
-import static org.zwobble.precisely.Matchers.equalTo;
-
-public abstract class SourceSerializationTests {
- private final BiFunction<Source, Optional<Source>, byte[]> serialize;
- private final BiFunction<byte[], Optional<Source>, Source> deserialize;
-
- public SourceSerializationTests(
- BiFunction<Source, Optional<Source>, byte[]> serialize,
- BiFunction<byte[], Optional<Source>, Source> deserialize
- ) {
- this.serialize = serialize;
- this.deserialize = deserialize;
- }
-
- private byte[] serializeSource(
- Source source,
- Optional<Source> parentSource
- ) {
- return this.serialize.apply(source, parentSource);
- }
-
- private Source deserializeSource(
- byte[] serializedSource,
- Optional<Source> parentSource
- ) {
- return this.deserialize.apply(serializedSource, parentSource);
- }
-
- @Test
- public void canSerializeNullSource() {
- var source = Sources.NULL;
-
- var deserializedSource = deserializeSource(
- serializeSource(source, Optional.empty()),
- Optional.empty()
- );
-
- assertThat(deserializedSource, equalTo(source));
- }
-
- @Test
- public void canSerializeRuntimeSource() {
- var source = Sources.RUNTIME;
-
- var deserializedSource = deserializeSource(
- serializeSource(source, Optional.empty()),
- Optional.empty()
- );
-
- assertThat(deserializedSource, equalTo(source));
- }
-
- @Test
- public void whenFileFragmentSourceHasNoParentThenSourceTextIsPreserved() {
- var sourceText = SourceText.fromString("a/b", "<contents>");
- var source = new FileFragmentSource(new SourceRange(
- sourceText,
- new SourcePosition(sourceText, 2),
- new SourcePosition(sourceText, 5)
- ));
-
- var deserializedSource = deserializeSource(
- serializeSource(source, Optional.empty()),
- Optional.empty()
- );
-
- assertThat(deserializedSource.describe(), equalTo(source.describe()));
- }
-
- @Test
- public void whenFileFragmentSourceNoExplicitSourceTextThenSourceTextFromParentIsReused() {
- var sourceText = SourceText.fromString("a/b", "<contents>");
- var sourceRange = new SourceRange(
- sourceText,
- new SourcePosition(sourceText, 2),
- new SourcePosition(sourceText, 5)
- );
- var source = new FileFragmentSource(sourceRange);
- var parentSource = new FileFragmentSource(new SourceRange(
- sourceText,
- new SourcePosition(sourceText, 0),
- new SourcePosition(sourceText, 10)
- ));
-
- var deserializedSource = (FileFragmentSource) deserializeSource(
- serializeSource(source, Optional.of(parentSource)),
- Optional.of(parentSource)
- );
-
- assertThat(deserializedSource.describe(), equalTo(source.describe()));
- assertThat(deserializedSource.sourceRange().sourceText() == sourceText, equalTo(true));
- }
-}
diff --git a/src/test/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffersTests.java b/src/test/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffersTests.java
deleted file mode 100644
index 731c302d..00000000
--- a/src/test/java/org/shedlang/compiler/sources/serialization/SourceToFlatbuffersTests.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.shedlang.compiler.sources.serialization;
-
-import com.google.flatbuffers.FlatBufferBuilder;
-import org.shedlang.compiler.sources.SourceSerializationTests;
-import org.shedlang.compiler.sources.flatbuffers.SourceFbs;
-
-import java.nio.ByteBuffer;
-
-public class SourceToFlatbuffersTests extends SourceSerializationTests {
- public SourceToFlatbuffersTests() {
- super(
- (source, parentSource) -> {
- var builder = new FlatBufferBuilder();
- var sourceFbs = SourceToFlatbuffers.serializeSource(builder, source, parentSource);
- builder.finish(sourceFbs);
- return builder.sizedByteArray();
- },
-
- (serializedSource, parentSource) -> {
- var sourceFbs = SourceFbs.getRootAsSourceFbs(ByteBuffer.wrap(serializedSource));
- return SourceToFlatbuffers.deserializeSource(sourceFbs, parentSource);
- }
- );
- }
-}
diff --git a/src/transient-0/java/org/shedlang/compiler/patio/instructions/transient0/HobgoblinTransient0Instructions.java b/src/transient-0/java/org/shedlang/compiler/patio/instructions/transient0/HobgoblinTransient0Instructions.java
new file mode 100644
index 00000000..bf74f430
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/patio/instructions/transient0/HobgoblinTransient0Instructions.java
@@ -0,0 +1,712 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.patio.instructions.transient0;
+
+// Custom area start: org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions imports
+// Custom area end: org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions imports
+
+public final class HobgoblinTransient0Instructions {
+ public static void encodePatioInstruction(org.shedlang.compiler.patio.instructions.PatioInstruction value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.instructions.PatioBlock value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioBoolToInt value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBoolToInt(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioCall value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioCall(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioCallPointer value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioCallPointer(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioDataPtrToInt value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioDataPtrToInt(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIf value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIf(value$5, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntAdd value$6 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(6, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntAdd(value$6, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntEquals value$7 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(7, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntEquals(value$7, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntNotEqual value$8 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(8, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntNotEqual(value$8, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntSub value$9 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(9, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntSub(value$9, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntToBool value$10 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(10, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntToBool(value$10, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioIntToDataPtr value$11 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(11, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioIntToDataPtr(value$11, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioLocalStore value$12 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(12, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioLocalStore(value$12, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioLoop value$13 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(13, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioLoop(value$13, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioLoopBreak value$14 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(14, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioLoopBreak(value$14, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioLoopContinue value$15 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(15, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioLoopContinue(value$15, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioMemoryLoad value$16 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(16, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioMemoryLoad(value$16, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioMemoryStore value$17 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(17, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioMemoryStore(value$17, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioReturn value$18 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(18, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioReturn(value$18, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioSwitch value$19 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(19, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioSwitch(value$19, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioThrow value$20 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(20, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioThrow(value$20, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioTry value$21 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(21, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioTry(value$21, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioUnreachable value$22 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(22, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioUnreachable(value$22, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioVarLoad value$23 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(23, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioVarLoad(value$23, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.instructions.PatioVarStore value$24 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(24, outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioVarStore(value$24, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioInstruction decodePatioInstruction(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBoolToInt(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioCall(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioCallPointer(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioDataPtrToInt(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIf(inputStream, sharedValues);
+ return value$5;
+ }
+ case 6 -> {
+ var value$6 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntAdd(inputStream, sharedValues);
+ return value$6;
+ }
+ case 7 -> {
+ var value$7 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntEquals(inputStream, sharedValues);
+ return value$7;
+ }
+ case 8 -> {
+ var value$8 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntNotEqual(inputStream, sharedValues);
+ return value$8;
+ }
+ case 9 -> {
+ var value$9 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntSub(inputStream, sharedValues);
+ return value$9;
+ }
+ case 10 -> {
+ var value$10 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntToBool(inputStream, sharedValues);
+ return value$10;
+ }
+ case 11 -> {
+ var value$11 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioIntToDataPtr(inputStream, sharedValues);
+ return value$11;
+ }
+ case 12 -> {
+ var value$12 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioLocalStore(inputStream, sharedValues);
+ return value$12;
+ }
+ case 13 -> {
+ var value$13 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioLoop(inputStream, sharedValues);
+ return value$13;
+ }
+ case 14 -> {
+ var value$14 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioLoopBreak(inputStream, sharedValues);
+ return value$14;
+ }
+ case 15 -> {
+ var value$15 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioLoopContinue(inputStream, sharedValues);
+ return value$15;
+ }
+ case 16 -> {
+ var value$16 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioMemoryLoad(inputStream, sharedValues);
+ return value$16;
+ }
+ case 17 -> {
+ var value$17 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioMemoryStore(inputStream, sharedValues);
+ return value$17;
+ }
+ case 18 -> {
+ var value$18 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioReturn(inputStream, sharedValues);
+ return value$18;
+ }
+ case 19 -> {
+ var value$19 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioSwitch(inputStream, sharedValues);
+ return value$19;
+ }
+ case 20 -> {
+ var value$20 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioThrow(inputStream, sharedValues);
+ return value$20;
+ }
+ case 21 -> {
+ var value$21 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioTry(inputStream, sharedValues);
+ return value$21;
+ }
+ case 22 -> {
+ var value$22 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioUnreachable(inputStream, sharedValues);
+ return value$22;
+ }
+ case 23 -> {
+ var value$23 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioVarLoad(inputStream, sharedValues);
+ return value$23;
+ }
+ case 24 -> {
+ var value$24 = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioVarStore(inputStream, sharedValues);
+ return value$24;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/instructions.PatioInstruction variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioBlock(org.shedlang.compiler.patio.instructions.PatioBlock value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.body().size(), outputStream, sharedValues);
+ for (var element : value.body()) {
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioInstruction(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.results().size(), outputStream, sharedValues);
+ for (var element : value.results()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioBlock decodePatioBlock(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var body$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var body = new java.util.ArrayList<org.shedlang.compiler.patio.instructions.PatioInstruction>((int) body$size);
+ for (long body$index = 0; body$index < body$size; body$index++) {
+ var body$element = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioInstruction(inputStream, sharedValues);
+ body.add(body$element);
+ }
+ var results$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var results = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioOperand>((int) results$size);
+ for (long results$index = 0; results$index < results$size; results$index++) {
+ var results$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ results.add(results$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioBlock(body, results, source);
+ }
+
+ public static void encodePatioBoolToInt(org.shedlang.compiler.patio.instructions.PatioBoolToInt value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioBoolToInt decodePatioBoolToInt(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioBoolToInt(destination, value, source);
+ }
+
+ public static void encodePatioCall(org.shedlang.compiler.patio.instructions.PatioCall value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.destinations().size(), outputStream, sharedValues);
+ for (var element : value.destinations()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.functionName(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.args().size(), outputStream, sharedValues);
+ for (var element : value.args()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioCall decodePatioCall(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destinations$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var destinations = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioLocalRef>((int) destinations$size);
+ for (long destinations$index = 0; destinations$index < destinations$size; destinations$index++) {
+ var destinations$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ destinations.add(destinations$element);
+ }
+ var functionName = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var args$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var args = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioOperand>((int) args$size);
+ for (long args$index = 0; args$index < args$size; args$index++) {
+ var args$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ args.add(args$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioCall(destinations, functionName, args, source);
+ }
+
+ public static void encodePatioCallPointer(org.shedlang.compiler.patio.instructions.PatioCallPointer value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.destinations().size(), outputStream, sharedValues);
+ for (var element : value.destinations()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.functionPointer(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.args().size(), outputStream, sharedValues);
+ for (var element : value.args()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioCallPointer decodePatioCallPointer(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destinations$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var destinations = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioLocalRef>((int) destinations$size);
+ for (long destinations$index = 0; destinations$index < destinations$size; destinations$index++) {
+ var destinations$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ destinations.add(destinations$element);
+ }
+ var functionPointer = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var args$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var args = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioOperand>((int) args$size);
+ for (long args$index = 0; args$index < args$size; args$index++) {
+ var args$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ args.add(args$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioCallPointer(destinations, functionPointer, args, source);
+ }
+
+ public static void encodePatioDataPtrToInt(org.shedlang.compiler.patio.instructions.PatioDataPtrToInt value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioDataPtrToInt decodePatioDataPtrToInt(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioDataPtrToInt(destination, value, source);
+ }
+
+ public static void encodePatioIf(org.shedlang.compiler.patio.instructions.PatioIf value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.destinations().size(), outputStream, sharedValues);
+ for (var element : value.destinations()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.condition(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.trueBody(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.falseBody(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIf decodePatioIf(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destinations$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var destinations = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioLocalRef>((int) destinations$size);
+ for (long destinations$index = 0; destinations$index < destinations$size; destinations$index++) {
+ var destinations$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ destinations.add(destinations$element);
+ }
+ var condition = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var trueBody = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var falseBody = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIf(destinations, condition, trueBody, falseBody, source);
+ }
+
+ public static void encodePatioIntAdd(org.shedlang.compiler.patio.instructions.PatioIntAdd value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.left(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.right(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntAdd decodePatioIntAdd(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var left = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var right = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntAdd(destination, left, right, source);
+ }
+
+ public static void encodePatioIntEquals(org.shedlang.compiler.patio.instructions.PatioIntEquals value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.left(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.right(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntEquals decodePatioIntEquals(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var left = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var right = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntEquals(destination, left, right, source);
+ }
+
+ public static void encodePatioIntNotEqual(org.shedlang.compiler.patio.instructions.PatioIntNotEqual value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.left(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.right(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntNotEqual decodePatioIntNotEqual(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var left = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var right = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntNotEqual(destination, left, right, source);
+ }
+
+ public static void encodePatioIntSub(org.shedlang.compiler.patio.instructions.PatioIntSub value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.left(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.right(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntSub decodePatioIntSub(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var left = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var right = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntSub(destination, left, right, source);
+ }
+
+ public static void encodePatioIntToBool(org.shedlang.compiler.patio.instructions.PatioIntToBool value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntToBool decodePatioIntToBool(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntToBool(destination, value, source);
+ }
+
+ public static void encodePatioIntToDataPtr(org.shedlang.compiler.patio.instructions.PatioIntToDataPtr value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioIntToDataPtr decodePatioIntToDataPtr(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioIntToDataPtr(destination, value, source);
+ }
+
+ public static void encodePatioLocalStore(org.shedlang.compiler.patio.instructions.PatioLocalStore value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioLocalStore decodePatioLocalStore(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioLocalStore(destination, value, source);
+ }
+
+ public static void encodePatioLoop(org.shedlang.compiler.patio.instructions.PatioLoop value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.body().size(), outputStream, sharedValues);
+ for (var element : value.body()) {
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioInstruction(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioLoop decodePatioLoop(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var body$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var body = new java.util.ArrayList<org.shedlang.compiler.patio.instructions.PatioInstruction>((int) body$size);
+ for (long body$index = 0; body$index < body$size; body$index++) {
+ var body$element = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioInstruction(inputStream, sharedValues);
+ body.add(body$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioLoop(body, source);
+ }
+
+ public static void encodePatioLoopBreak(org.shedlang.compiler.patio.instructions.PatioLoopBreak value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioLoopBreak decodePatioLoopBreak(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioLoopBreak(source);
+ }
+
+ public static void encodePatioLoopContinue(org.shedlang.compiler.patio.instructions.PatioLoopContinue value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioLoopContinue decodePatioLoopContinue(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioLoopContinue(source);
+ }
+
+ public static void encodePatioMemoryLoad(org.shedlang.compiler.patio.instructions.PatioMemoryLoad value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.pointer(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.layout(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elementOffsets().size(), outputStream, sharedValues);
+ for (var element : value.elementOffsets()) {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioMemoryLoad decodePatioMemoryLoad(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var pointer = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var layout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var elementOffsets$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elementOffsets = new java.util.ArrayList<java.lang.Integer>((int) elementOffsets$size);
+ for (long elementOffsets$index = 0; elementOffsets$index < elementOffsets$size; elementOffsets$index++) {
+ var elementOffsets$element = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ elementOffsets.add(elementOffsets$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioMemoryLoad(destination, pointer, layout, elementOffsets, source);
+ }
+
+ public static void encodePatioMemoryStore(org.shedlang.compiler.patio.instructions.PatioMemoryStore value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.pointer(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.layout(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elementOffsets().size(), outputStream, sharedValues);
+ for (var element : value.elementOffsets()) {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioMemoryStore decodePatioMemoryStore(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var pointer = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var layout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var elementOffsets$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elementOffsets = new java.util.ArrayList<java.lang.Integer>((int) elementOffsets$size);
+ for (long elementOffsets$index = 0; elementOffsets$index < elementOffsets$size; elementOffsets$index++) {
+ var elementOffsets$element = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ elementOffsets.add(elementOffsets$element);
+ }
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioMemoryStore(pointer, layout, elementOffsets, value, source);
+ }
+
+ public static void encodePatioReturn(org.shedlang.compiler.patio.instructions.PatioReturn value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.values().size(), outputStream, sharedValues);
+ for (var element : value.values()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioReturn decodePatioReturn(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var values$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var values = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioOperand>((int) values$size);
+ for (long values$index = 0; values$index < values$size; values$index++) {
+ var values$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ values.add(values$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioReturn(values, source);
+ }
+
+ public static void encodePatioSwitch(org.shedlang.compiler.patio.instructions.PatioSwitch value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.destinations().size(), outputStream, sharedValues);
+ for (var element : value.destinations()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.cases().size(), outputStream, sharedValues);
+ for (var element : value.cases()) {
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioSwitchCase(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.defaultBody(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioSwitch decodePatioSwitch(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destinations$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var destinations = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioLocalRef>((int) destinations$size);
+ for (long destinations$index = 0; destinations$index < destinations$size; destinations$index++) {
+ var destinations$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ destinations.add(destinations$element);
+ }
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var cases$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var cases = new java.util.ArrayList<org.shedlang.compiler.patio.instructions.PatioSwitchCase>((int) cases$size);
+ for (long cases$index = 0; cases$index < cases$size; cases$index++) {
+ var cases$element = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioSwitchCase(inputStream, sharedValues);
+ cases.add(cases$element);
+ }
+ var defaultBody = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioSwitch(destinations, value, cases, defaultBody, source);
+ }
+
+ public static void encodePatioSwitchCase(org.shedlang.compiler.patio.instructions.PatioSwitchCase value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.body(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioSwitchCase decodePatioSwitchCase(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ var body = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioSwitchCase(value, body, source);
+ }
+
+ public static void encodePatioThrow(org.shedlang.compiler.patio.instructions.PatioThrow value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.exceptionTypeName(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioThrow decodePatioThrow(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var exceptionTypeName = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioThrow(exceptionTypeName, value, source);
+ }
+
+ public static void encodePatioTry(org.shedlang.compiler.patio.instructions.PatioTry value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.destinations().size(), outputStream, sharedValues);
+ for (var element : value.destinations()) {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.catchClauses().size(), outputStream, sharedValues);
+ for (var element : value.catchClauses()) {
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioCatchClause(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.body(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioTry decodePatioTry(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destinations$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var destinations = new java.util.ArrayList<org.shedlang.compiler.patio.operands.PatioLocalRef>((int) destinations$size);
+ for (long destinations$index = 0; destinations$index < destinations$size; destinations$index++) {
+ var destinations$element = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ destinations.add(destinations$element);
+ }
+ var catchClauses$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var catchClauses = new java.util.ArrayList<org.shedlang.compiler.patio.instructions.PatioCatchClause>((int) catchClauses$size);
+ for (long catchClauses$index = 0; catchClauses$index < catchClauses$size; catchClauses$index++) {
+ var catchClauses$element = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioCatchClause(inputStream, sharedValues);
+ catchClauses.add(catchClauses$element);
+ }
+ var body = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioTry(destinations, catchClauses, body, source);
+ }
+
+ public static void encodePatioCatchClause(org.shedlang.compiler.patio.instructions.PatioCatchClause value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.exceptionTypeName(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioBlock(value.body(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioCatchClause decodePatioCatchClause(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var exceptionTypeName = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var body = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioBlock(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioCatchClause(exceptionTypeName, destination, body, source);
+ }
+
+ public static void encodePatioUnreachable(org.shedlang.compiler.patio.instructions.PatioUnreachable value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioUnreachable decodePatioUnreachable(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioUnreachable(source);
+ }
+
+ public static void encodePatioVarLoad(org.shedlang.compiler.patio.instructions.PatioVarLoad value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.destination(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.var(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioVarLoad decodePatioVarLoad(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var destination = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var var = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioVarLoad(destination, var, source);
+ }
+
+ public static void encodePatioVarStore(org.shedlang.compiler.patio.instructions.PatioVarStore value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value.var(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioOperand(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.instructions.PatioVarStore decodePatioVarStore(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var var = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioOperand(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.instructions.PatioVarStore(var, value, source);
+ }
+
+ // Custom area start: org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions body
+ // Custom area end: org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/patio/operands/transient0/HobgoblinTransient0Operands.java b/src/transient-0/java/org/shedlang/compiler/patio/operands/transient0/HobgoblinTransient0Operands.java
new file mode 100644
index 00000000..6ef7b90f
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/patio/operands/transient0/HobgoblinTransient0Operands.java
@@ -0,0 +1,144 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.patio.operands.transient0;
+
+// Custom area start: org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands imports
+// Custom area end: org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands imports
+
+public final class HobgoblinTransient0Operands {
+ public static void encodePatioOperand(org.shedlang.compiler.patio.operands.PatioOperand value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.operands.PatioLocalRef value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioLocalRef(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioBoolConst value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioBoolConst(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioByteConst value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioByteConst(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioDataPtrConst value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioDataPtrConst(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioFunctionPtrConst value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioFunctionPtrConst(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioInt32Const value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioInt32Const(value$5, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.operands.PatioIntConst value$6 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(6, outputStream, sharedValues);
+ org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.encodePatioIntConst(value$6, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioOperand decodePatioOperand(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioLocalRef(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioBoolConst(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioByteConst(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioDataPtrConst(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioFunctionPtrConst(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioInt32Const(inputStream, sharedValues);
+ return value$5;
+ }
+ case 6 -> {
+ var value$6 = org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands.decodePatioIntConst(inputStream, sharedValues);
+ return value$6;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/operands.PatioOperand variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioLocalRef(org.shedlang.compiler.patio.operands.PatioLocalRef value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioLocalRef decodePatioLocalRef(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioLocalRef(name);
+ }
+
+ public static void encodePatioBoolConst(org.shedlang.compiler.patio.operands.PatioBoolConst value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeBool(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioBoolConst decodePatioBoolConst(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioBoolConst(value);
+ }
+
+ public static void encodePatioByteConst(org.shedlang.compiler.patio.operands.PatioByteConst value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt8(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioByteConst decodePatioByteConst(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioByteConst(value);
+ }
+
+ public static void encodePatioDataPtrConst(org.shedlang.compiler.patio.operands.PatioDataPtrConst value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioDataPtrValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioDataPtrConst decodePatioDataPtrConst(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioDataPtrValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioDataPtrConst(value);
+ }
+
+ public static void encodePatioFunctionPtrConst(org.shedlang.compiler.patio.operands.PatioFunctionPtrConst value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioFunctionPtrConst decodePatioFunctionPtrConst(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioFunctionPtrConst(name);
+ }
+
+ public static void encodePatioInt32Const(org.shedlang.compiler.patio.operands.PatioInt32Const value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioInt32Const decodePatioInt32Const(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioInt32Const(value);
+ }
+
+ public static void encodePatioIntConst(org.shedlang.compiler.patio.operands.PatioIntConst value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.operands.PatioIntConst decodePatioIntConst(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.operands.PatioIntConst(value);
+ }
+
+ // Custom area start: org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands body
+ // Custom area end: org.shedlang.compiler.patio.operands.transient0.HobgoblinTransient0Operands body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/patio/transient0/HobgoblinTransient0Patio.java b/src/transient-0/java/org/shedlang/compiler/patio/transient0/HobgoblinTransient0Patio.java
new file mode 100644
index 00000000..77b4f6d6
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/patio/transient0/HobgoblinTransient0Patio.java
@@ -0,0 +1,257 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.patio.transient0;
+
+// Custom area start: org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio imports
+// Custom area end: org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio imports
+
+public final class HobgoblinTransient0Patio {
+ public static void encodePatioCompilationUnit(org.shedlang.compiler.patio.PatioCompilationUnit value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elements().size(), outputStream, sharedValues);
+ for (var element : value.elements()) {
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioCompilationUnitElement(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioCompilationUnit decodePatioCompilationUnit(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var elements$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elements = new java.util.ArrayList<org.shedlang.compiler.patio.PatioCompilationUnitElement>((int) elements$size);
+ for (long elements$index = 0; elements$index < elements$size; elements$index++) {
+ var elements$element = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioCompilationUnitElement(inputStream, sharedValues);
+ elements.add(elements$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioCompilationUnit(elements, source);
+ }
+
+ public static void encodePatioCompilationUnitElement(org.shedlang.compiler.patio.PatioCompilationUnitElement value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.PatioDataElementImmutableDefinition value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioDataElementImmutableDefinition(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.PatioDataElementMutableDeclaration value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioDataElementMutableDeclaration(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.PatioDataElementMutableDefinition value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioDataElementMutableDefinition(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.PatioExceptionTypeDefinition value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioExceptionTypeDefinition(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.PatioFunctionDeclaration value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioFunctionDeclaration(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.PatioFunctionDefinition value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioFunctionDefinition(value$5, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.PatioCompilationUnitElement decodePatioCompilationUnitElement(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioDataElementImmutableDefinition(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioDataElementMutableDeclaration(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioDataElementMutableDefinition(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioExceptionTypeDefinition(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioFunctionDeclaration(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioFunctionDefinition(inputStream, sharedValues);
+ return value$5;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio.PatioCompilationUnitElement variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioDataElementImmutableDefinition(org.shedlang.compiler.patio.PatioDataElementImmutableDefinition value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioVisibility(value.visibility(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValue(value.value(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioDataElementImmutableDefinition decodePatioDataElementImmutableDefinition(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var visibility = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioVisibility(inputStream, sharedValues);
+ var value = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValue(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioDataElementImmutableDefinition(name, visibility, value, source);
+ }
+
+ public static void encodePatioDataElementMutableDeclaration(org.shedlang.compiler.patio.PatioDataElementMutableDeclaration value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.layout(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioDataElementMutableDeclaration decodePatioDataElementMutableDeclaration(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var layout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioDataElementMutableDeclaration(name, layout, source);
+ }
+
+ public static void encodePatioDataElementMutableDefinition(org.shedlang.compiler.patio.PatioDataElementMutableDefinition value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioVisibility(value.visibility(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValue(value.initialValue(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioDataElementMutableDefinition decodePatioDataElementMutableDefinition(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var visibility = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioVisibility(inputStream, sharedValues);
+ var initialValue = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValue(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioDataElementMutableDefinition(name, visibility, initialValue, source);
+ }
+
+ public static void encodePatioExceptionTypeDefinition(org.shedlang.compiler.patio.PatioExceptionTypeDefinition value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioType(value.valueType(), outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioExceptionTypeDefinition decodePatioExceptionTypeDefinition(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var valueType = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioType(inputStream, sharedValues);
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioExceptionTypeDefinition(name, valueType, source);
+ }
+
+ public static void encodePatioFunctionDeclaration(org.shedlang.compiler.patio.PatioFunctionDeclaration value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.params().size(), outputStream, sharedValues);
+ for (var element : value.params()) {
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioLocal(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.returnTypes().size(), outputStream, sharedValues);
+ for (var element : value.returnTypes()) {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioType(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioFunctionDeclaration decodePatioFunctionDeclaration(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var params$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var params = new java.util.ArrayList<org.shedlang.compiler.patio.PatioLocal>((int) params$size);
+ for (long params$index = 0; params$index < params$size; params$index++) {
+ var params$element = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioLocal(inputStream, sharedValues);
+ params.add(params$element);
+ }
+ var returnTypes$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var returnTypes = new java.util.ArrayList<org.shedlang.compiler.patio.types.PatioType>((int) returnTypes$size);
+ for (long returnTypes$index = 0; returnTypes$index < returnTypes$size; returnTypes$index++) {
+ var returnTypes$element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioType(inputStream, sharedValues);
+ returnTypes.add(returnTypes$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioFunctionDeclaration(name, params, returnTypes, source);
+ }
+
+ public static void encodePatioFunctionDefinition(org.shedlang.compiler.patio.PatioFunctionDefinition value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioVisibility(value.visibility(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.locals().size(), outputStream, sharedValues);
+ for (var element : value.locals()) {
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioLocal(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.returnTypes().size(), outputStream, sharedValues);
+ for (var element : value.returnTypes()) {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioType(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.body().size(), outputStream, sharedValues);
+ for (var element : value.body()) {
+ org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.encodePatioInstruction(element, outputStream, sharedValues);
+ }
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeSource(value.source(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioFunctionDefinition decodePatioFunctionDefinition(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var visibility = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioVisibility(inputStream, sharedValues);
+ var locals$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var locals = new java.util.ArrayList<org.shedlang.compiler.patio.PatioLocal>((int) locals$size);
+ for (long locals$index = 0; locals$index < locals$size; locals$index++) {
+ var locals$element = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioLocal(inputStream, sharedValues);
+ locals.add(locals$element);
+ }
+ var returnTypes$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var returnTypes = new java.util.ArrayList<org.shedlang.compiler.patio.types.PatioType>((int) returnTypes$size);
+ for (long returnTypes$index = 0; returnTypes$index < returnTypes$size; returnTypes$index++) {
+ var returnTypes$element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioType(inputStream, sharedValues);
+ returnTypes.add(returnTypes$element);
+ }
+ var body$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var body = new java.util.ArrayList<org.shedlang.compiler.patio.instructions.PatioInstruction>((int) body$size);
+ for (long body$index = 0; body$index < body$size; body$index++) {
+ var body$element = org.shedlang.compiler.patio.instructions.transient0.HobgoblinTransient0Instructions.decodePatioInstruction(inputStream, sharedValues);
+ body.add(body$element);
+ }
+ var source = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeSource(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioFunctionDefinition(name, visibility, locals, returnTypes, body, source);
+ }
+
+ public static void encodePatioVisibility(org.shedlang.compiler.patio.PatioVisibility value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.ordinal(), outputStream, sharedValues);
+ }
+
+ private static final org.shedlang.compiler.patio.PatioVisibility[] PatioVisibility$values = org.shedlang.compiler.patio.PatioVisibility.values();
+
+ public static org.shedlang.compiler.patio.PatioVisibility decodePatioVisibility(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var ordinal = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ return PatioVisibility$values[ordinal];
+ }
+
+ public static void encodePatioLocal(org.shedlang.compiler.patio.PatioLocal value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioType(value.type(), outputStream, sharedValues);
+ org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.encodePatioLocalType(value.localType(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.PatioLocal decodePatioLocal(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var type = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioType(inputStream, sharedValues);
+ var localType = org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio.decodePatioLocalType(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.PatioLocal(name, type, localType);
+ }
+
+ public static void encodePatioLocalType(org.shedlang.compiler.patio.PatioLocalType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.ordinal(), outputStream, sharedValues);
+ }
+
+ private static final org.shedlang.compiler.patio.PatioLocalType[] PatioLocalType$values = org.shedlang.compiler.patio.PatioLocalType.values();
+
+ public static org.shedlang.compiler.patio.PatioLocalType decodePatioLocalType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var ordinal = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ return PatioLocalType$values[ordinal];
+ }
+
+ // Custom area start: org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio body
+ // Custom area end: org.shedlang.compiler.patio.transient0.HobgoblinTransient0Patio body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/patio/types/transient0/HobgoblinTransient0Types.java b/src/transient-0/java/org/shedlang/compiler/patio/types/transient0/HobgoblinTransient0Types.java
new file mode 100644
index 00000000..efc0b55f
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/patio/types/transient0/HobgoblinTransient0Types.java
@@ -0,0 +1,414 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.patio.types.transient0;
+
+// Custom area start: org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types imports
+// Custom area end: org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types imports
+
+public final class HobgoblinTransient0Types {
+ public static void encodePatioType(org.shedlang.compiler.patio.types.PatioType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.types.PatioBoolType value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioBoolType(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioByteType value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioByteType(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataPtrType value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataPtrType(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioFunctionPtrType value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioFunctionPtrType(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioInt32Type value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioInt32Type(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioIntType value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioIntType(value$5, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioType decodePatioType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioBoolType(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioByteType(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataPtrType(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioFunctionPtrType(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioInt32Type(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioIntType(inputStream, sharedValues);
+ return value$5;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/types.PatioType variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioBoolType(org.shedlang.compiler.patio.types.PatioBoolType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioBoolType decodePatioBoolType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioBoolType.INSTANCE;
+ }
+
+ public static void encodePatioByteType(org.shedlang.compiler.patio.types.PatioByteType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioByteType decodePatioByteType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioByteType.INSTANCE;
+ }
+
+ public static void encodePatioDataPtrType(org.shedlang.compiler.patio.types.PatioDataPtrType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataPtrType decodePatioDataPtrType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataPtrType.INSTANCE;
+ }
+
+ public static void encodePatioFunctionPtrType(org.shedlang.compiler.patio.types.PatioFunctionPtrType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioFunctionPtrType decodePatioFunctionPtrType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioFunctionPtrType.INSTANCE;
+ }
+
+ public static void encodePatioInt32Type(org.shedlang.compiler.patio.types.PatioInt32Type value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioInt32Type decodePatioInt32Type(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioInt32Type.INSTANCE;
+ }
+
+ public static void encodePatioIntType(org.shedlang.compiler.patio.types.PatioIntType value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioIntType decodePatioIntType(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioIntType.INSTANCE;
+ }
+
+ public static void encodePatioDataLayout(org.shedlang.compiler.patio.types.PatioDataLayout value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.types.PatioDataLayoutArray value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutArray(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutBool value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutBool(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutByte value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutByte(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutDataPtr value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutDataPtr(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutFunctionPtr value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutFunctionPtr(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutInt value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutInt(value$5, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutInt32 value$6 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(6, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutInt32(value$6, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataLayoutStruct value$7 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(7, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayoutStruct(value$7, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayout decodePatioDataLayout(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutArray(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutBool(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutByte(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutDataPtr(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutFunctionPtr(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutInt(inputStream, sharedValues);
+ return value$5;
+ }
+ case 6 -> {
+ var value$6 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutInt32(inputStream, sharedValues);
+ return value$6;
+ }
+ case 7 -> {
+ var value$7 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayoutStruct(inputStream, sharedValues);
+ return value$7;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/types.PatioDataLayout variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioDataLayoutArray(org.shedlang.compiler.patio.types.PatioDataLayoutArray value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.element(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.size(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutArray decodePatioDataLayoutArray(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataLayoutArray(element, size);
+ }
+
+ public static void encodePatioDataLayoutBool(org.shedlang.compiler.patio.types.PatioDataLayoutBool value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutBool decodePatioDataLayoutBool(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutBool.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutByte(org.shedlang.compiler.patio.types.PatioDataLayoutByte value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutByte decodePatioDataLayoutByte(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutByte.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutDataPtr(org.shedlang.compiler.patio.types.PatioDataLayoutDataPtr value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutDataPtr decodePatioDataLayoutDataPtr(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutDataPtr.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutFunctionPtr(org.shedlang.compiler.patio.types.PatioDataLayoutFunctionPtr value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutFunctionPtr decodePatioDataLayoutFunctionPtr(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutFunctionPtr.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutInt(org.shedlang.compiler.patio.types.PatioDataLayoutInt value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutInt decodePatioDataLayoutInt(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutInt.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutInt32(org.shedlang.compiler.patio.types.PatioDataLayoutInt32 value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutInt32 decodePatioDataLayoutInt32(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.patio.types.PatioDataLayoutInt32.INSTANCE;
+ }
+
+ public static void encodePatioDataLayoutStruct(org.shedlang.compiler.patio.types.PatioDataLayoutStruct value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elements().size(), outputStream, sharedValues);
+ for (var element : value.elements()) {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(element, outputStream, sharedValues);
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataLayoutStruct decodePatioDataLayoutStruct(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var elements$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elements = new java.util.ArrayList<org.shedlang.compiler.patio.types.PatioDataLayout>((int) elements$size);
+ for (long elements$index = 0; elements$index < elements$size; elements$index++) {
+ var elements$element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ elements.add(elements$element);
+ }
+ return new org.shedlang.compiler.patio.types.PatioDataLayoutStruct(elements);
+ }
+
+ public static void encodePatioDataValue(org.shedlang.compiler.patio.types.PatioDataValue value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.types.PatioDataValueArray value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueArray(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueBool value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueBool(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueByte value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueByte(value$2, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueDataPtr value$3 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(3, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueDataPtr(value$3, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueInt value$4 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(4, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueInt(value$4, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueInt32 value$5 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(5, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueInt32(value$5, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.types.PatioDataValueStruct value$6 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(6, outputStream, sharedValues);
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValueStruct(value$6, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValue decodePatioDataValue(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueArray(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueBool(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueByte(inputStream, sharedValues);
+ return value$2;
+ }
+ case 3 -> {
+ var value$3 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueDataPtr(inputStream, sharedValues);
+ return value$3;
+ }
+ case 4 -> {
+ var value$4 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueInt(inputStream, sharedValues);
+ return value$4;
+ }
+ case 5 -> {
+ var value$5 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueInt32(inputStream, sharedValues);
+ return value$5;
+ }
+ case 6 -> {
+ var value$6 = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValueStruct(inputStream, sharedValues);
+ return value$6;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/types.PatioDataValue variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioDataValueArray(org.shedlang.compiler.patio.types.PatioDataValueArray value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.elementLayout(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elements().size(), outputStream, sharedValues);
+ for (var element : value.elements()) {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValue(element, outputStream, sharedValues);
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueArray decodePatioDataValueArray(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var elementLayout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var elements$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elements = new java.util.ArrayList<org.shedlang.compiler.patio.types.PatioDataValue>((int) elements$size);
+ for (long elements$index = 0; elements$index < elements$size; elements$index++) {
+ var elements$element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValue(inputStream, sharedValues);
+ elements.add(elements$element);
+ }
+ return new org.shedlang.compiler.patio.types.PatioDataValueArray(elementLayout, elements);
+ }
+
+ public static void encodePatioDataValueBool(org.shedlang.compiler.patio.types.PatioDataValueBool value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeBool(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueBool decodePatioDataValueBool(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeBool(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataValueBool(value);
+ }
+
+ public static void encodePatioDataValueByte(org.shedlang.compiler.patio.types.PatioDataValueByte value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt8(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueByte decodePatioDataValueByte(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt8(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataValueByte(value);
+ }
+
+ public static void encodePatioDataValueDataPtr(org.shedlang.compiler.patio.types.PatioDataValueDataPtr value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioDataPtrValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueDataPtr decodePatioDataValueDataPtr(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioDataPtrValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataValueDataPtr(value);
+ }
+
+ public static void encodePatioDataValueInt(org.shedlang.compiler.patio.types.PatioDataValueInt value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueInt decodePatioDataValueInt(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataValueInt(value);
+ }
+
+ public static void encodePatioDataValueInt32(org.shedlang.compiler.patio.types.PatioDataValueInt32 value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValue(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueInt32 decodePatioDataValueInt32(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValue(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.types.PatioDataValueInt32(value);
+ }
+
+ public static void encodePatioDataValueStruct(org.shedlang.compiler.patio.types.PatioDataValueStruct value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elements().size(), outputStream, sharedValues);
+ for (var element : value.elements()) {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataValue(element, outputStream, sharedValues);
+ }
+ }
+
+ public static org.shedlang.compiler.patio.types.PatioDataValueStruct decodePatioDataValueStruct(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var elements$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elements = new java.util.ArrayList<org.shedlang.compiler.patio.types.PatioDataValue>((int) elements$size);
+ for (long elements$index = 0; elements$index < elements$size; elements$index++) {
+ var elements$element = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataValue(inputStream, sharedValues);
+ elements.add(elements$element);
+ }
+ return new org.shedlang.compiler.patio.types.PatioDataValueStruct(elements);
+ }
+
+ // Custom area start: org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types body
+ // Custom area end: org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/patio/values/transient0/HobgoblinTransient0Values.java b/src/transient-0/java/org/shedlang/compiler/patio/values/transient0/HobgoblinTransient0Values.java
new file mode 100644
index 00000000..05523dc2
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/patio/values/transient0/HobgoblinTransient0Values.java
@@ -0,0 +1,132 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.patio.values.transient0;
+
+// Custom area start: org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values imports
+// Custom area end: org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values imports
+
+public final class HobgoblinTransient0Values {
+ public static void encodePatioDataPtrValue(org.shedlang.compiler.patio.values.PatioDataPtrValue value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.values.PatioDataPtrValueDataElement value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioDataPtrValueDataElement(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.values.PatioDataPtrValueNull value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioDataPtrValueNull(value$1, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioDataPtrValue decodePatioDataPtrValue(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioDataPtrValueDataElement(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioDataPtrValueNull(inputStream, sharedValues);
+ return value$1;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/values.PatioDataPtrValue variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioDataPtrValueDataElement(org.shedlang.compiler.patio.values.PatioDataPtrValueDataElement value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeString(value.name(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioDataPtrValueDataElement decodePatioDataPtrValueDataElement(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var name = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.values.PatioDataPtrValueDataElement(name);
+ }
+
+ public static void encodePatioDataPtrValueNull(org.shedlang.compiler.patio.values.PatioDataPtrValueNull value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioDataPtrValueNull decodePatioDataPtrValueNull(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return new org.shedlang.compiler.patio.values.PatioDataPtrValueNull();
+ }
+
+ public static void encodePatioIntValue(org.shedlang.compiler.patio.values.PatioIntValue value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.patio.values.PatioIntValueByteOffsetOf value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValueByteOffsetOf(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.values.PatioIntValueByteSizeOf value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValueByteSizeOf(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.patio.values.PatioIntValueLiteral value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.encodePatioIntValueLiteral(value$2, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioIntValue decodePatioIntValue(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValueByteOffsetOf(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValueByteSizeOf(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values.decodePatioIntValueLiteral(inputStream, sharedValues);
+ return value$2;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected patio/values.PatioIntValue variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodePatioIntValueByteOffsetOf(org.shedlang.compiler.patio.values.PatioIntValueByteOffsetOf value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.layout(), outputStream, sharedValues);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) value.elementOffsets().size(), outputStream, sharedValues);
+ for (var element : value.elementOffsets()) {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(element, outputStream, sharedValues);
+ }
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioIntValueByteOffsetOf decodePatioIntValueByteOffsetOf(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var layout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ var elementOffsets$size = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var elementOffsets = new java.util.ArrayList<java.lang.Integer>((int) elementOffsets$size);
+ for (long elementOffsets$index = 0; elementOffsets$index < elementOffsets$size; elementOffsets$index++) {
+ var elementOffsets$element = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ elementOffsets.add(elementOffsets$element);
+ }
+ return new org.shedlang.compiler.patio.values.PatioIntValueByteOffsetOf(layout, elementOffsets);
+ }
+
+ public static void encodePatioIntValueByteSizeOf(org.shedlang.compiler.patio.values.PatioIntValueByteSizeOf value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.encodePatioDataLayout(value.layout(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioIntValueByteSizeOf decodePatioIntValueByteSizeOf(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var layout = org.shedlang.compiler.patio.types.transient0.HobgoblinTransient0Types.decodePatioDataLayout(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.values.PatioIntValueByteSizeOf(layout);
+ }
+
+ public static void encodePatioIntValueLiteral(org.shedlang.compiler.patio.values.PatioIntValueLiteral value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.value(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.patio.values.PatioIntValueLiteral decodePatioIntValueLiteral(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var value = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ return new org.shedlang.compiler.patio.values.PatioIntValueLiteral(value);
+ }
+
+ // Custom area start: org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values body
+ // Custom area end: org.shedlang.compiler.patio.values.transient0.HobgoblinTransient0Values body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/sources/transient0/HobgoblinTransient0Sources.java b/src/transient-0/java/org/shedlang/compiler/sources/transient0/HobgoblinTransient0Sources.java
new file mode 100644
index 00000000..94af36bb
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/sources/transient0/HobgoblinTransient0Sources.java
@@ -0,0 +1,72 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.sources.transient0;
+
+// Custom area start: org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources imports
+// Custom area end: org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources imports
+
+public final class HobgoblinTransient0Sources {
+ public static void encodeSource(org.shedlang.compiler.sources.Source value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ switch (value) {
+ case org.shedlang.compiler.sources.NullSource value$0 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(0, outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeNullSource(value$0, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.sources.RuntimeSource value$1 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(1, outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeRuntimeSource(value$1, outputStream, sharedValues);
+ }
+ case org.shedlang.compiler.sources.FileFragmentSource value$2 -> {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(2, outputStream, sharedValues);
+ org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.encodeFileFragmentSource(value$2, outputStream, sharedValues);
+ }
+ }
+ }
+
+ public static org.shedlang.compiler.sources.Source decodeSource(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var variantTag = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ switch (variantTag) {
+ case 0 -> {
+ var value$0 = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeNullSource(inputStream, sharedValues);
+ return value$0;
+ }
+ case 1 -> {
+ var value$1 = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeRuntimeSource(inputStream, sharedValues);
+ return value$1;
+ }
+ case 2 -> {
+ var value$2 = org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources.decodeFileFragmentSource(inputStream, sharedValues);
+ return value$2;
+ }
+ default -> {
+ throw new java.lang.RuntimeException("unexpected sources.Source variant tag: " + variantTag);
+ }
+ }
+ }
+
+ public static void encodeNullSource(org.shedlang.compiler.sources.NullSource value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.sources.NullSource decodeNullSource(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.sources.NullSource.INSTANCE;
+ }
+
+ public static void encodeRuntimeSource(org.shedlang.compiler.sources.RuntimeSource value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ }
+
+ public static org.shedlang.compiler.sources.RuntimeSource decodeRuntimeSource(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return org.shedlang.compiler.sources.RuntimeSource.INSTANCE;
+ }
+
+ public static void encodeFileFragmentSource(org.shedlang.compiler.sources.FileFragmentSource value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.encodeSourceRange(value.sourceRange(), outputStream, sharedValues);
+ }
+
+ public static org.shedlang.compiler.sources.FileFragmentSource decodeFileFragmentSource(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var sourceRange = org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.decodeSourceRange(inputStream, sharedValues);
+ return new org.shedlang.compiler.sources.FileFragmentSource(sourceRange);
+ }
+
+ // Custom area start: org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources body
+ // Custom area end: org.shedlang.compiler.sources.transient0.HobgoblinTransient0Sources body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0Builtins.java b/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0Builtins.java
new file mode 100644
index 00000000..4a272077
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0Builtins.java
@@ -0,0 +1,79 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.transient0;
+
+// Custom area start: org.shedlang.compiler.transient0.HobgoblinTransient0Builtins imports
+// Custom area end: org.shedlang.compiler.transient0.HobgoblinTransient0Builtins imports
+
+public final class HobgoblinTransient0Builtins {
+ public static void encodeBool(boolean value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ outputStream.write(value ? 1 : 0);
+ }
+
+ public static boolean decodeBool(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return inputStream.read() != 0;
+ }
+
+ public static void encodeInt8(byte value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ outputStream.write(value);
+ }
+
+ public static byte decodeInt8(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ return (byte) inputStream.read();
+ }
+
+ public static void encodeInt32(int value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ outputStream.write(value >>> 0 & 255);
+ outputStream.write(value >>> 8 & 255);
+ outputStream.write(value >>> 16 & 255);
+ outputStream.write(value >>> 24 & 255);
+ }
+
+ public static int decodeInt32(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ int value = 0;
+ value = value | inputStream.read() << 0;
+ value = value | inputStream.read() << 8;
+ value = value | inputStream.read() << 16;
+ value = value | inputStream.read() << 24;
+ return value;
+ }
+
+ public static void encodeInt64(long value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ outputStream.write((int) (value >>> 0 & 255));
+ outputStream.write((int) (value >>> 8 & 255));
+ outputStream.write((int) (value >>> 16 & 255));
+ outputStream.write((int) (value >>> 24 & 255));
+ outputStream.write((int) (value >>> 32 & 255));
+ outputStream.write((int) (value >>> 40 & 255));
+ outputStream.write((int) (value >>> 48 & 255));
+ outputStream.write((int) (value >>> 56 & 255));
+ }
+
+ public static long decodeInt64(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ long value = 0;
+ value = value | inputStream.read() << 0;
+ value = value | inputStream.read() << 8;
+ value = value | inputStream.read() << 16;
+ value = value | inputStream.read() << 24;
+ value = value | inputStream.read() << 32;
+ value = value | inputStream.read() << 40;
+ value = value | inputStream.read() << 48;
+ value = value | inputStream.read() << 56;
+ return value;
+ }
+
+ public static void encodeString(String value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ var bytes = value.getBytes(java.nio.charset.StandardCharsets.UTF_8);
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64((long) bytes.length, outputStream, sharedValues);
+ outputStream.write(bytes);
+ }
+
+ public static String decodeString(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var bytesLength = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ var bytes = inputStream.readNBytes((int) bytesLength);
+ return new String(bytes, java.nio.charset.StandardCharsets.UTF_8);
+ }
+
+ // Custom area start: org.shedlang.compiler.transient0.HobgoblinTransient0Builtins body
+ // Custom area end: org.shedlang.compiler.transient0.HobgoblinTransient0Builtins body
+}
diff --git a/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0TaggedSharedValue.java b/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0TaggedSharedValue.java
new file mode 100644
index 00000000..d918276f
--- /dev/null
+++ b/src/transient-0/java/org/shedlang/compiler/transient0/HobgoblinTransient0TaggedSharedValue.java
@@ -0,0 +1,22 @@
+// Generated by hobgoblin.
+
+package org.shedlang.compiler.transient0;
+
+// Custom area start: org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue imports
+// Custom area end: org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue imports
+
+public record HobgoblinTransient0TaggedSharedValue(
+ long typeId,
+ java.lang.Object value
+) {
+ public boolean equals(java.lang.Object other) {
+ return other instanceof org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue otherSharedValue && this.typeId == otherSharedValue.typeId && this.value == otherSharedValue.value;
+ }
+
+ public int hashCode() {
+ return 37 * (37 * 17 + java.lang.Long.hashCode(this.typeId)) + java.lang.System.identityHashCode(this.value);
+ }
+
+ // Custom area start: org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue body
+ // Custom area end: org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue body
+}
diff --git a/src/transient-0/java/org/zwobble/sourcetext/transient0/HobgoblinTransient0Sourcetext.java b/src/transient-0/java/org/zwobble/sourcetext/transient0/HobgoblinTransient0Sourcetext.java
new file mode 100644
index 00000000..75b369ae
--- /dev/null
+++ b/src/transient-0/java/org/zwobble/sourcetext/transient0/HobgoblinTransient0Sourcetext.java
@@ -0,0 +1,95 @@
+// Generated by hobgoblin.
+
+package org.zwobble.sourcetext.transient0;
+
+// Custom area start: org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext imports
+import org.shedlang.compiler.transient0.HobgoblinTransient0Builtins;
+import org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue;
+import org.zwobble.sourcetext.SourceText;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+// Custom area end: org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext imports
+
+public final class HobgoblinTransient0Sourcetext {
+ public static void encodeSourceRange(org.zwobble.sourcetext.SourceRange value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ {
+ var existingId = sharedValues.get(new org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue(0, value.sourceText()));
+ if (existingId != null) {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues);
+ } else {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues);
+ sharedValues.put(new org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue(0, value.sourceText()), (long) sharedValues.size());
+ org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.encodeSourceText(value.sourceText(), outputStream, sharedValues);
+ }
+ }
+ org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.encodeSourcePosition(value.start(), outputStream, sharedValues);
+ org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.encodeSourcePosition(value.end(), outputStream, sharedValues);
+ }
+
+ public static org.zwobble.sourcetext.SourceRange decodeSourceRange(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var sourceText$id = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ org.zwobble.sourcetext.SourceText sourceText;
+ if (sourceText$id < sharedValues.size()) {
+ sourceText = (org.zwobble.sourcetext.SourceText) sharedValues.get((int) sourceText$id);
+ } else {
+ var sourceText$decodedValue = org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.decodeSourceText(inputStream, sharedValues);
+ sharedValues.add(sourceText$decodedValue);
+ sourceText = sourceText$decodedValue;
+ }
+ var start = org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.decodeSourcePosition(inputStream, sharedValues);
+ var end = org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.decodeSourcePosition(inputStream, sharedValues);
+ return new org.zwobble.sourcetext.SourceRange(sourceText, start, end);
+ }
+
+ public static void encodeSourcePosition(org.zwobble.sourcetext.SourcePosition value, java.io.OutputStream outputStream, java.util.Map<org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException {
+ {
+ var existingId = sharedValues.get(new org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue(0, value.sourceText()));
+ if (existingId != null) {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64(existingId, outputStream, sharedValues);
+ } else {
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt64(sharedValues.size(), outputStream, sharedValues);
+ sharedValues.put(new org.shedlang.compiler.transient0.HobgoblinTransient0TaggedSharedValue(0, value.sourceText()), (long) sharedValues.size());
+ org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.encodeSourceText(value.sourceText(), outputStream, sharedValues);
+ }
+ }
+ org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.encodeInt32(value.characterIndex(), outputStream, sharedValues);
+ }
+
+ public static org.zwobble.sourcetext.SourcePosition decodeSourcePosition(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException {
+ var sourceText$id = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues);
+ org.zwobble.sourcetext.SourceText sourceText;
+ if (sourceText$id < sharedValues.size()) {
+ sourceText = (org.zwobble.sourcetext.SourceText) sharedValues.get((int) sourceText$id);
+ } else {
+ var sourceText$decodedValue = org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext.decodeSourceText(inputStream, sharedValues);
+ sharedValues.add(sourceText$decodedValue);
+ sourceText = sourceText$decodedValue;
+ }
+ var characterIndex = org.shedlang.compiler.transient0.HobgoblinTransient0Builtins.decodeInt32(inputStream, sharedValues);
+ return new org.zwobble.sourcetext.SourcePosition(sourceText, characterIndex);
+ }
+
+ // Custom area start: org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext body
+ private static void encodeSourceText(
+ SourceText sourceText,
+ OutputStream outputStream,
+ Map<HobgoblinTransient0TaggedSharedValue, Long> sharedValues
+ ) throws IOException {
+ HobgoblinTransient0Builtins.encodeString(sourceText.name(), outputStream, sharedValues);
+ HobgoblinTransient0Builtins.encodeString(sourceText.charSequence().toString(), outputStream, sharedValues);
+ }
+
+ private static SourceText decodeSourceText(
+ InputStream inputStream,
+ List<Object> sharedValues
+ ) throws IOException {
+ var name = HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ var contents = HobgoblinTransient0Builtins.decodeString(inputStream, sharedValues);
+ return SourceText.fromString(name, contents);
+ }
+ // Custom area end: org.zwobble.sourcetext.transient0.HobgoblinTransient0Sourcetext body
+}