diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java index 5565ca6..ac38727 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java @@ -442,28 +442,34 @@ public class JavaTransient0Generator implements Generator { decodeStatements.addAll(generateDecode(variantTag, NativeTypes.INT_32)); - decodeStatements.add(new JavaSwitchStatement( - new JavaRef(variantTag), - IntStream.range(0, sumDefinition.variants().size()) - .mapToObj(variantIndex -> { - var variantType = sumDefinition.variants().get(variantIndex).type().value(); - var variantVariable = JavaIdentifier.of(VALUE_NAME.value() + "$" + variantIndex); + var cases = new ArrayList<JavaSwitchRule>(); - var statements = new ArrayList<JavaBlockStatement>(); + for (var variantIndex = 0; variantIndex < sumDefinition.variants().size(); variantIndex++) { + var variantType = sumDefinition.variants().get(variantIndex).type().value(); + var variantVariable = JavaIdentifier.of(VALUE_NAME.value() + "$" + variantIndex); - statements.addAll(generateDecode(variantVariable, variantType)); + var statements = new ArrayList<JavaBlockStatement>(); - statements.add(new JavaReturn(new JavaRef(variantVariable))); + statements.addAll(generateDecode(variantVariable, variantType)); - return new JavaSwitchRule( - new JavaCaseConstant(new JavaIntegerLiteral(variantIndex)), - new JavaBlock(statements) - ); - }).toList() + statements.add(new JavaReturn(new JavaRef(variantVariable))); + + cases.add(new JavaSwitchRule( + new JavaCaseConstant(new JavaIntegerLiteral(variantIndex)), + new JavaBlock(statements) + )); + } + + cases.add(new JavaSwitchRule( + new JavaCaseDefault(), + // TODO: throw an exception + new JavaBlock(List.of(new JavaReturn(new JavaNullLiteral()))) )); - // TODO: handle this more elegantly - decodeStatements.add(new JavaReturn(new JavaNullLiteral())); + decodeStatements.add(new JavaSwitchStatement( + new JavaRef(variantTag), + cases + )); yield Stream.of( generateEncodeMethod( |
