[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