summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorjgreene <jgreene@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2009-01-06 04:35:28 +0000
committerjgreene <jgreene@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2009-01-06 04:35:28 +0000
commitf33e578f6376e0d90ab3ae052a860d3a037f6cfe (patch)
tree046d682f87f07f2e3ab8119b5d1bfaa26ed6aa1c /src
parentdf66d916e0adcfb7245be6fc032ad4ae2969468d (diff)
downloadjavassist-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.java1
-rw-r--r--src/main/javassist/convert/TransformAccessArrayField.java4
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);