/** * Appends instructions for loading all the parameters onto the * operand stack. * * @param offset the index of the first parameter. It is 0 * if the method is static. Otherwise, it is 1. */ public int addLoadParameters(CtClass[] params, int offset) { int stacksize = 0; if (params != null) { int n = params.length; for (int i = 0; i < n; ++i) stacksize += addLoad(stacksize + offset, params[i]); } return stacksize; }
code.addLoad(0, deleClass); s = code.addLoadParameters(params, 1); code.addInvokespecial(deleClass, methodName, desc);
/** * Appends instructions for loading all the parameters onto the * operand stack. * * @param offset the index of the first parameter. It is 0 * if the method is static. Otherwise, it is 1. */ public int addLoadParameters(CtClass[] params, int offset) { int stacksize = 0; if (params != null) { int n = params.length; for (int i = 0; i < n; ++i) stacksize += addLoad(stacksize + offset, params[i]); } return stacksize; }
private void makeCode2(Bytecode save, Bytecode load, int i, int n, CtClass[] paramTypes, int var) { if (i < n) { int size = load.addLoad(var, paramTypes[i]); makeCode2(save, load, i + 1, n, paramTypes, var + size); save.addStore(var, paramTypes[i]); } else locals = var - maxLocals; } }
private void makeCode2(Bytecode save, Bytecode load, int i, int n, CtClass[] paramTypes, int var) { if (i < n) { int size = load.addLoad(var, paramTypes[i]); makeCode2(save, load, i + 1, n, paramTypes, var + size); save.addStore(var, paramTypes[i]); } else locals = var - maxLocals; } }
int compile(CtClass type, String name, Bytecode code, CtClass[] parameters, Javac drv) throws CannotCompileException { if (parameters != null && nthParam < parameters.length) { code.addAload(0); int nth = nthParamToLocal(nthParam, parameters, false); int s = code.addLoad(nth, type) + 1; code.addPutfield(Bytecode.THIS, name, Descriptor.of(type)); return s; // stack size } else return 0; // do not initialize }
@Override int compile(CtClass type, String name, Bytecode code, CtClass[] parameters, Javac drv) throws CannotCompileException { if (parameters != null && nthParam < parameters.length) { code.addAload(0); int nth = nthParamToLocal(nthParam, parameters, false); int s = code.addLoad(nth, type) + 1; code.addPutfield(Bytecode.THIS, name, Descriptor.of(type)); return s; // stack size } return 0; // do not initialize }
for (int k = 0; k < n; ++k) { CtClass p = params[k]; regno += bytecode.addLoad(regno, p); setType(p); types[i] = exprType;
for (int k = 0; k < n; ++k) { CtClass p = params[k]; regno += bytecode.addLoad(regno, p); setType(p); types[i] = exprType;
int regno = 1; for (int i = 0; i < params.length; ++i) regno += code.addLoad(regno, params[i]); code.setMaxLocals(regno + 1); // the last parameter is added. code.addInvokespecial(clazz, MethodInfo.nameInit, desc);
private int insertAfterAdvice(Bytecode code, Javac jv, String src, ConstPool cp, CtClass rtype, int varNo) throws CompileError { int pc = code.currentPc(); if (rtype == CtClass.voidType) { code.addOpcode(Opcode.ACONST_NULL); code.addAstore(varNo); jv.compileStmnt(src); code.addOpcode(Opcode.RETURN); if (code.getMaxLocals() < 1) code.setMaxLocals(1); } else { code.addStore(varNo, rtype); jv.compileStmnt(src); code.addLoad(varNo, rtype); if (rtype.isPrimitive()) code.addOpcode(((CtPrimitiveType)rtype).getReturnOp()); else code.addOpcode(Opcode.ARETURN); } return code.currentPc() - pc; }
Bytecode code = new Bytecode(cp); for (int i = 0; i < params.length; ++i) regno += code.addLoad(regno, params[i]);
int s = code.addLoad(regno, pt); // ?load <regno> regno += s; args[0] = pt;
private int insertAfterAdvice(Bytecode code, Javac jv, String src, ConstPool cp, CtClass rtype, int varNo) throws CompileError { int pc = code.currentPc(); if (rtype == CtClass.voidType) { code.addOpcode(Opcode.ACONST_NULL); code.addAstore(varNo); jv.compileStmnt(src); code.addOpcode(Opcode.RETURN); if (code.getMaxLocals() < 1) code.setMaxLocals(1); } else { code.addStore(varNo, rtype); jv.compileStmnt(src); code.addLoad(varNo, rtype); if (rtype.isPrimitive()) code.addOpcode(((CtPrimitiveType)rtype).getReturnOp()); else code.addOpcode(Opcode.ARETURN); } return code.currentPc() - pc; }
bytecode.addLoad(retVar, retType);
bytecode.addLoad(retVar, retType);
bytecode.addLoad(retVar, retType);
bytecode.addLoad(retVar, retType);