diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-01 11:31:40 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-01 11:32:45 +0100 |
| commit | 7f09029743b7fcba940c4b52f467ae8ca072a727 (patch) | |
| tree | 65f12289cfd07e9b2278540be99541d1876a2ada /src/main/java/org | |
| parent | 755379506a06b34fee36f1227d1367ec3ec0a4da (diff) | |
Check length of list
Diffstat (limited to 'src/main/java/org')
| -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))) )) )); |
