< 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 >