CodeIterator iterator = ca.iterator();
int retAddr = ca.getMaxLocals();
Bytecode b = new Bytecode(pool, 0, retAddr + 1);
b.setStackDepth(ca.getMaxStack() + 1);
Javac jv = new Javac(b, declaringClass);
try {
int nvars = jv.recordParams(getParameterTypes(),
Modifier.isStatic(getModifiers()));
jv.recordParamNames(ca, nvars);
CtClass rtype = getReturnType0();
int varNo = jv.recordReturnType(rtype, true);
jv.recordLocalVariables(ca, 0);
int handlerLen = insertAfterHandler(asFinally, b, rtype, varNo);
byte[] save = makeSaveCode(pool, rtype, varNo);
byte[] restore = makeRestoreCode(b, pool, rtype, varNo);
b.addAstore(retAddr);
jv.compileStmnt(src);
b.addRet(retAddr);
ca.setMaxStack(b.getMaxStack());
ca.setMaxLocals(b.getMaxLocals());
int gapPos = iterator.append(b.get());