diff options
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 19 |
1 files changed, 19 insertions, 0 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 1999cc8..6bbd93b 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 @@ -916,11 +916,30 @@ public class JavaTransient0Generator implements Generator { statements.addAll(generateDecode(size, NativeTypes.INT_64)); + statements.add(new JavaIfStatement( + new JavaBinaryOperation( + JavaBinaryOperator.GREATER_THAN, + new JavaRef(size), + new JavaStaticFieldAccess(JavaTypeRef.INT_BOXED, JavaIdentifier.of("MAX_VALUE")) + ), + new JavaBlock(List.of( + new JavaThrowStatement(new JavaNewExpression( + JavaTypeRef.IO_EXCEPTION, + List.of(new JavaStringLiteral("Lists longer than Integer.MAX_VALUE are not supported")) + )) + )), + new JavaBlock(List.of()) + )); + statements.add(new JavaLocalVariableDeclaration( Optional.empty(), target, Optional.of(new JavaNewExpression( JavaTypeRef.arrayList(this.javaGenerator.generateReferenceTypeRef(elementType)), + // We've checked above that the size is less than + // Integer.MAX_VALUE, so casting to an int is safe. + // (This doesn't check for negatives, but ArrayList::new() fails + // for negative values anyway.) List.of(new JavaCast(JavaTypeRef.INT, new JavaRef(size))) )) )); |
