diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-13 19:57:26 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-13 19:57:26 +0100 |
| commit | 999be6c9af9a6ebce18fa2e5700e7491f5a5070e (patch) | |
| tree | 7c9d7fdd696fb390a0c4b2e4db2738bc1a967aa8 /src/main/java | |
| parent | 48ddc308c2ad9cbd85c234e86ad665d378810d3f (diff) | |
Throw exception when variant tag is unrecognised
Diffstat (limited to 'src/main/java')
2 files changed, 14 insertions, 2 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 ac38727..b1533d2 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 @@ -462,8 +462,18 @@ public class JavaTransient0Generator implements Generator { cases.add(new JavaSwitchRule( new JavaCaseDefault(), - // TODO: throw an exception - new JavaBlock(List.of(new JavaReturn(new JavaNullLiteral()))) + new JavaBlock(List.of( + new JavaThrowStatement(new JavaNewExpression( + JavaTypeRef.RUNTIME_EXCEPTION, + List.of( + new JavaBinaryOperation( + JavaBinaryOperator.ADD, + new JavaStringLiteral("unexpected " + sumDefinition.type().describe() + " variant tag: "), + new JavaRef(variantTag) + ) + ) + )) + )) )); decodeStatements.add(new JavaSwitchStatement( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java index 8dbca61..81e0acc 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java @@ -85,6 +85,8 @@ public record JavaTypeRef(JavaPackageName packageName, List<JavaIdentifier> type public static final JavaTypeRef OUTPUT_STREAM = topLevel(JavaPackages.JAVA_IO, JavaIdentifier.of("OutputStream")); + public static final JavaTypeRef RUNTIME_EXCEPTION = topLevel(JavaPackages.JAVA_LANG, JavaIdentifier.of("RuntimeException")); + public static final JavaTypeRef STANDARD_CHARSETS = topLevel(JavaPackages.JAVA_NIO_CHARSET, JavaIdentifier.of("StandardCharsets")); public static final JavaTypeRef STREAM = topLevel(JavaPackages.JAVA_UTIL_STREAM, JavaIdentifier.of("Stream")); |
