Browse Source

made the java.util.proxy package support stack map tables.


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@380 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
chiba 17 years ago
parent
commit
2c1e31d12e
1 changed files with 19 additions and 6 deletions
  1. 19
    6
      src/main/javassist/util/proxy/ProxyFactory.java

+ 19
- 6
src/main/javassist/util/proxy/ProxyFactory.java View File

@@ -764,19 +764,26 @@ public class ProxyFactory {

code.addAload(0);
code.addGetstatic(thisClassName, DEFAULT_INTERCEPTOR, HANDLER_TYPE);
code.addOpcode(Opcode.DUP);
code.addPutfield(thisClassName, HANDLER, HANDLER_TYPE);
code.addGetstatic(thisClassName, DEFAULT_INTERCEPTOR, HANDLER_TYPE);
code.addOpcode(Opcode.IFNONNULL);
code.addIndex(7);
code.addOpcode(Opcode.POP);
code.addIndex(10);
code.addAload(0);
code.addGetstatic(NULL_INTERCEPTOR_HOLDER, DEFAULT_INTERCEPTOR, HANDLER_TYPE);
code.addPutfield(thisClassName, HANDLER, HANDLER_TYPE);
int pc = code.currentPc();

code.addAload(0);
int s = addLoadParameters(code, cons.getParameterTypes(), 1);
code.addInvokespecial(superClass.getName(), "<init>", desc);
code.addOpcode(Opcode.RETURN);
code.setMaxLocals(s + 1);
minfo.setCodeAttribute(code.toCodeAttribute());
CodeAttribute ca = code.toCodeAttribute();
minfo.setCodeAttribute(ca);

StackMapTable.Writer writer = new StackMapTable.Writer(32);
writer.sameFrame(pc);
ca.setAttribute(writer.toStackMapTable(cp));
return minfo;
}

@@ -840,7 +847,8 @@ public class ProxyFactory {
callFindMethod(code, "findSuperMethod", arrayVar, origIndex, meth.getName(), desc);
callFindMethod(code, "findMethod", arrayVar, delIndex, delegatorName, desc);

code.write16bit(pc, code.currentPc() - pc + 1);
int pc2 = code.currentPc();
code.write16bit(pc, pc2 - pc + 1);
code.addAload(0);
code.addGetfield(thisClassName, HANDLER, HANDLER_TYPE);
code.addAload(0);
@@ -861,7 +869,12 @@ public class ProxyFactory {
addUnwrapper(code, retType);
addReturn(code, retType);

forwarder.setCodeAttribute(code.toCodeAttribute());
CodeAttribute ca = code.toCodeAttribute();
forwarder.setCodeAttribute(ca);
StackMapTable.Writer writer = new StackMapTable.Writer(32);
writer.appendFrame(pc2, new int[] { StackMapTable.OBJECT },
new int[] { cp.addClassInfo(HOLDER_TYPE) });
ca.setAttribute(writer.toStackMapTable(cp));
return forwarder;
}


Loading…
Cancel
Save