]> source.dussan.org Git - javassist.git/commitdiff
fixed JASSIST-132
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 9 Sep 2010 17:27:32 +0000 (17:27 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 9 Sep 2010 17:27:32 +0000 (17:27 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@572 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/bytecode/stackmap/Tracer.java
src/main/javassist/expr/Cast.java
src/main/javassist/expr/Expr.java
src/main/javassist/expr/FieldAccess.java
src/main/javassist/expr/Handler.java
src/main/javassist/expr/Instanceof.java
src/main/javassist/expr/MethodCall.java
src/main/javassist/expr/NewArray.java
src/main/javassist/expr/NewExpr.java
tutorial/tutorial2.html

index 837257bc5667950db8be1e78dcf2b586a300c680..89e788d71086335e589c264b4682dc3a965a0505 100644 (file)
@@ -88,17 +88,22 @@ public abstract class Tracer implements TypeTag {
      * @return      the size of the instruction at POS.
      */
     protected int doOpcode(int pos, byte[] code) throws BadBytecode {
-        int op = code[pos] & 0xff;
-        if (op < 96)
-            if (op < 54)
-                return doOpcode0_53(pos, code, op);
-            else
-                return doOpcode54_95(pos, code, op);
-        else
-            if (op < 148)
-                return doOpcode96_147(pos, code, op);
+        try {
+            int op = code[pos] & 0xff;
+            if (op < 96)
+                if (op < 54)
+                    return doOpcode0_53(pos, code, op);
+                else
+                    return doOpcode54_95(pos, code, op);
             else
-                return doOpcode148_201(pos, code, op);
+                if (op < 148)
+                    return doOpcode96_147(pos, code, op);
+                else
+                    return doOpcode148_201(pos, code, op);
+        }
+        catch (ArrayIndexOutOfBoundsException e) {
+            throw new BadBytecode("inconsistent stack height " + e.getMessage());
+        }
     }
 
     protected void visitBranch(int pos, byte[] code, int offset) throws BadBytecode {}
index c70df21d54d7ab0c93ed850744cf77211e1fca6f..1ef87be2d464787774b7a2b57ab31adba5dc2af7 100644 (file)
@@ -84,7 +84,7 @@ public class Cast extends Expr {
      *
      * <p>$0 is available but the value is <code>null</code>.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         thisClass.getClassFile();   // to call checkModify().
index 56d9edd3d2ec0f6b3448a0038e3402aa39b96faf..75de54a8a2c3591a85cf6aed0a0612c763df79af 100644 (file)
@@ -264,7 +264,7 @@ public abstract class Expr implements Opcode {
      * Replaces this expression with the bytecode derived from
      * the given source text.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public abstract void replace(String statement) throws CannotCompileException;
 
@@ -272,7 +272,7 @@ public abstract class Expr implements Opcode {
      * Replaces this expression with the bytecode derived from
      * the given source text and <code>ExprEditor</code>.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      * @param recursive         if not null, the substituted bytecode
      *                          is recursively processed by the given
      *                          <code>ExprEditor</code>.
index 97f3ce14ac36d1262c46a28857db0e31798bf435..56ead16056f2ee23094b2def01b545cc9327354c 100644 (file)
@@ -144,7 +144,7 @@ public class FieldAccess extends Expr {
      * If the field access is writing, $_ is available but the value
      * of $_ is ignored.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         thisClass.getClassFile();   // to call checkModify().
index 5bed092458a4c93942df4e0d5e171e60179d019c..dd7e53f28a2a3c267fed35aecc949dd7ae7d3d3b 100644 (file)
@@ -92,7 +92,7 @@ public class Handler extends Expr {
     /**
      * This method has not been implemented yet.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         throw new RuntimeException("not implemented yet");
index f85357cf3f8c71b9c9e32d6e9faea7c4401c9a88..1ceed13425ff0a3d9519f723e36b5dae0f390485 100644 (file)
@@ -87,7 +87,7 @@ public class Instanceof extends Expr {
      *
      * <p>$0 is available but the value is <code>null</code>.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         thisClass.getClassFile();   // to call checkModify().
index 63a5bf9ae93e1a8dec5e7f5dca617306dd58f127..9e9d1db558627d8daa06591f9cb493c093de7060 100644 (file)
@@ -173,7 +173,7 @@ public class MethodCall extends Expr {
      *
      * <p>$0 is available even if the called method is static.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         thisClass.getClassFile();   // to call checkModify().
index 48ebc9f622fa0ad31b3c569406d5431ba3a721f1..c5ac41e67d1d82cfa86f28e12cd922d9350f9a9f 100644 (file)
@@ -153,7 +153,7 @@ public class NewArray extends Expr {
      * If the field access is writing, $_ is available but the value
      * of $_ is ignored.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         try {
index 353e32cd6aa24e60fdbd3a3fdc312b6a57a70dee..c2ab04432bb56e75206e0dae5efc3d8e7e46cb9d 100644 (file)
@@ -156,7 +156,7 @@ public class NewExpr extends Expr {
      *
      * <p>$0 is available but the value is null.
      *
-     * @param statement         a Java statement.
+     * @param statement         a Java statement except try-catch.
      */
     public void replace(String statement) throws CannotCompileException {
         thisClass.getClassFile();   // to call checkModify().
index 65be0311324537a679409de26c9776343558dafb..445fc90b0fe389c21ed757f90621215691dae1a8 100644 (file)
@@ -664,7 +664,7 @@ with a block:
 
 <p>so that the first parameter to <code>move()</code> is always 0.
 Note that the substituted code is not an expression but
-a statement or a block.
+a statement or a block.  It cannot be or contain a try-catch statement.
 
 <p>The method <code>instrument()</code> searches a method body.
 If it finds an expression such as a method call, field access, and object