diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-11 16:43:48 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-11 16:43:48 +0100 |
| commit | 10317b0c2841591a85530a5c4c38cac0c4bf5fe8 (patch) | |
| tree | c39a575e1189a86aab52f0bdfc206a097752e46d /src/main | |
| parent | bab3189ae3e5050afd8bcbc81e936a6ee56f0377 (diff) | |
Support enums in Java transient-0
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 42 |
1 files changed, 39 insertions, 3 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 59dcefe..be04982 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 @@ -330,7 +330,35 @@ public class JavaTransient0Generator implements Generator { ) { return switch (statement) { case TypedEnumDefinitionNode enumDefinition -> { - yield Stream.of(); + var ordinal = JavaIdentifier.of("ordinal"); + yield Stream.of( + generateEncodeMethod( + enumDefinition.type(), + new JavaBlock(generateEncode( + new JavaMethodCall( + new JavaRef(VALUE_NAME), + ordinal, + List.of() + ), + NativeTypes.INT_32 + )) + ), + generateDecodeMethod( + enumDefinition.type(), + new JavaBlock(Stream.concat( + generateDecode(ordinal, NativeTypes.INT_32).stream(), + Stream.of(new JavaReturn(new JavaArrayAccess( + // TODO: avoid duplicating array each time + new JavaStaticMethodCall( + this.javaGenerator.generateTypeRef(enumDefinition.type()), + JavaIdentifier.of("values"), + List.of() + ), + new JavaRef(ordinal) + ))) + ).toList()) + ) + ); } case TypedNativeTypeDefinitionNode nativeTypeDefinition -> { @@ -441,7 +469,11 @@ public class JavaTransient0Generator implements Generator { } case EnumType enumType -> { - throw new UnsupportedOperationException("TODO"); + yield List.of(generateEncode( + value, + enumType.namespaceName(), + enumType + )); } case SimpleNativeType simpleNativeType -> { @@ -501,7 +533,11 @@ public class JavaTransient0Generator implements Generator { } case EnumType enumType -> { - throw new UnsupportedOperationException("TODO"); + yield List.of(generateDecode( + target, + enumType.namespaceName(), + enumType + )); } case SimpleNativeType simpleNativeType -> { |
