< prev index next >
src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
Print this page
rev 14964 : 8160717: MethodHandles.loop() does not check for excessive signature
*** 749,763 ****
emitReturn(onStack);
classFileEpilogue();
bogusMethod(lambdaForm);
! final byte[] classFile = cw.toByteArray();
maybeDump(className, classFile);
return classFile;
}
void emitArrayLoad(Name name) { emitArrayOp(name, Opcodes.AALOAD); }
void emitArrayStore(Name name) { emitArrayOp(name, Opcodes.AASTORE); }
void emitArrayLength(Name name) { emitArrayOp(name, Opcodes.ARRAYLENGTH); }
void emitArrayOp(Name name, int arrayOpcode) {
--- 749,777 ----
emitReturn(onStack);
classFileEpilogue();
bogusMethod(lambdaForm);
! final byte[] classFile;
! try {
! classFile = cw.toByteArray();
! } catch (RuntimeException e) {
! // ASM throws RuntimeException if something goes wrong - capture these and wrap them in a meaningful
! // exception to support falling back to LambdaForm interpretation
! throw new BytecodeGenerationException(e);
! }
maybeDump(className, classFile);
return classFile;
}
+ @SuppressWarnings("serial")
+ static final class BytecodeGenerationException extends RuntimeException {
+ BytecodeGenerationException(Exception cause) {
+ super(cause);
+ }
+ }
+
void emitArrayLoad(Name name) { emitArrayOp(name, Opcodes.AALOAD); }
void emitArrayStore(Name name) { emitArrayOp(name, Opcodes.AASTORE); }
void emitArrayLength(Name name) { emitArrayOp(name, Opcodes.ARRAYLENGTH); }
void emitArrayOp(Name name, int arrayOpcode) {
< prev index next >