From f33e578f6376e0d90ab3ae052a860d3a037f6cfe Mon Sep 17 00:00:00 2001 From: jgreene Date: Tue, 6 Jan 2009 04:35:28 +0000 Subject: [PATCH] Fix JASSIST-71 - Array access replacement generates invalid bytecode when padding is required Add checkcast support to framedump git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@464 30ef5769-5b8d-40dd-aea6-55b5d6557bb3 --- src/main/javassist/bytecode/InstructionPrinter.java | 1 + src/main/javassist/convert/TransformAccessArrayField.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/javassist/bytecode/InstructionPrinter.java b/src/main/javassist/bytecode/InstructionPrinter.java index 03d03908..f0a20e18 100644 --- a/src/main/javassist/bytecode/InstructionPrinter.java +++ b/src/main/javassist/bytecode/InstructionPrinter.java @@ -130,6 +130,7 @@ public class InstructionPrinter implements Opcode { case NEWARRAY: return opstring + " " + arrayInfo(iter.byteAt(pos + 1)); case ANEWARRAY: + case CHECKCAST: return opstring + " " + classInfo(pool, iter.u16bitAt(pos + 1)); case WIDE: return wide(iter, pos); diff --git a/src/main/javassist/convert/TransformAccessArrayField.java b/src/main/javassist/convert/TransformAccessArrayField.java index 7ea4ffe4..959f8184 100644 --- a/src/main/javassist/convert/TransformAccessArrayField.java +++ b/src/main/javassist/convert/TransformAccessArrayField.java @@ -32,7 +32,7 @@ import javassist.bytecode.analysis.Frame; * * @author Kabir Khan * @author Jason T. Greene - * @version $Revision: 1.6 $ + * @version $Revision: 1.7 $ */ public final class TransformAccessArrayField extends Transformer { private final String methodClassname; @@ -140,6 +140,8 @@ public final class TransformAccessArrayField extends Transformer { } // The gap may include extra padding + // Write a nop in case the padding pushes the instruction forward + iterator.writeByte(NOP, pos); int gapLength = iterator.insertGap(pos, castType != null ? 5 : 2); int mi = cp.addClassInfo(methodClassname); -- 2.39.5