[jboss-user] [Javassist user questions] - NewExpr with no dup

flonou do-not-reply at jboss.com
Tue Jul 17 10:53:44 EDT 2007


Hello,

I had a problem with a new statement without DUP in the bytecode
(code like this : 
void method {
      new Object();
}
has no dup statement because the result isn't stored )

So I had the following error :

javassist.CannotCompileException: sorry, cannot edit NEW followed by no DUP

and I corrected it by changing the folowwing lines in NewExpr.java:

    private int canReplace() throws CannotCompileException {
        int op = iterator.byteAt(newPos + 3);
        if (op == Opcode.DUP)
            return 4;
        else if (op == Opcode.DUP_X1
                 && iterator.byteAt(newPos + 4) == Opcode.SWAP)
            return 5;
        else if (op == Opcode.INVOKESPECIAL)
            return 3;   // for Eclipse's compiler
        else
             throw new CannotCompileException(
                        "sorry, cannot edit NEW followed by no DUP");
    }

by     
private int canReplace() throws CannotCompileException {
        int op = iterator.byteAt(newPos + 3);
        if (op == Opcode.DUP)
            return 4;
        else if (op == Opcode.DUP_X1
                 && iterator.byteAt(newPos + 4) == Opcode.SWAP)
            return 5;
        else if (op == Opcode.INVOKESPECIAL)
            return 3;   // for Eclipse's compiler
        else
        	return 3;
    }

(just the last else changed)

I don't know if this will always work correctly but in my case, it does (I'm instrumenting jetty, a java server with javassist).

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4065036#4065036

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4065036



More information about the jboss-user mailing list