diff options
author | jgreene <jgreene@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2009-01-06 04:35:28 +0000 |
---|---|---|
committer | jgreene <jgreene@30ef5769-5b8d-40dd-aea6-55b5d6557bb3> | 2009-01-06 04:35:28 +0000 |
commit | f33e578f6376e0d90ab3ae052a860d3a037f6cfe (patch) | |
tree | 046d682f87f07f2e3ab8119b5d1bfaa26ed6aa1c /src | |
parent | df66d916e0adcfb7245be6fc032ad4ae2969468d (diff) | |
download | javassist-f33e578f6376e0d90ab3ae052a860d3a037f6cfe.tar.gz javassist-f33e578f6376e0d90ab3ae052a860d3a037f6cfe.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/main/javassist/bytecode/InstructionPrinter.java | 1 | ||||
-rw-r--r-- | src/main/javassist/convert/TransformAccessArrayField.java | 4 |
2 files changed, 4 insertions, 1 deletions
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 <a href="kabir.khan@jboss.com">Kabir Khan</a> * @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); |