cbody.append(fact.createLoad(Type.OBJECT, 0)); cbody.append(fact.createLoad(objectArrayType, 1));
cbody.append(InstructionFactory.createLoad(Type.OBJECT, 0)); cbody.append(InstructionFactory.createLoad(objectArrayType, 1));
	private LazyMethodGen makeClosureClassAndReturnConstructor(		String closureClassName,        LazyMethodGen callbackMethod,         IntMap proceedMap)     {		String superClassName = "org.aspectj.runtime.internal.AroundClosure";        Type objectArrayType = new ArrayType(Type.OBJECT, 1);        		LazyClassGen closureClass = new LazyClassGen(closureClassName,			                                     superClassName,                                                  getEnclosingClass().getFileName(),			                                     Modifier.PUBLIC,			                                     new String[] {});        InstructionFactory fact = new InstructionFactory(closureClass.getConstantPoolGen());        				        // constructor        LazyMethodGen constructor = new LazyMethodGen(Modifier.PUBLIC,                                                       Type.VOID,                                                       "<init>",                                                       new Type[] {objectArrayType},                                                      new String[] {},                                                       closureClass);                InstructionList cbody = constructor.getBody();        		cbody.append(fact.createLoad(Type.OBJECT, 0));		cbody.append(fact.createLoad(objectArrayType, 1));		cbody.append(fact.createInvoke(superClassName, "<init>", Type.VOID, 			new Type[] {objectArrayType}, Constants.INVOKESPECIAL));		cbody.append(fact.createReturn(Type.VOID));        closureClass.addMethodGen(constructor);                // method		        LazyMethodGen runMethod = new LazyMethodGen(Modifier.PUBLIC,                                         Type.OBJECT,                                         "run",                                         new Type[] {objectArrayType},                                         new String[] {},                                        closureClass);         InstructionList mbody = runMethod.getBody();        BcelVar proceedVar = new BcelVar(TypeX.OBJECTARRAY.resolve(world), 1);    //        int proceedVarIndex = 1;        BcelVar stateVar = new BcelVar(TypeX.OBJECTARRAY.resolve(world), runMethod.allocateLocal(1));    //        int stateVarIndex = runMethod.allocateLocal(1);		mbody.append(fact.createThis());		mbody.append(fact.createGetField(superClassName, "state", objectArrayType));        mbody.append(stateVar.createStore(fact));    //		mbody.append(fact.createStore(objectArrayType, stateVarIndex));		        Type[] stateTypes = callbackMethod.getArgumentTypes();        				for (int i=0, len=stateTypes.length; i < len; i++) {            Type stateType = stateTypes[i];            ResolvedTypeX stateTypeX = BcelWorld.fromBcel(stateType).resolve(world);            if (proceedMap.hasKey(i)) {                mbody.append(                    proceedVar.createConvertableArrayLoad(fact, proceedMap.get(i),                        stateTypeX));            } else {                mbody.append(                    stateVar.createConvertableArrayLoad(fact, i,                         stateTypeX));            }		}						mbody.append(Utility.createInvoke(fact, callbackMethod));				if (getKind() == PreInitialization) {			mbody.append(Utility.createSet(				fact, 				AjcMemberMaker.aroundClosurePreInitializationField()));			mbody.append(fact.ACONST_NULL);		} else {			mbody.append(	            Utility.createConversion(	                fact, 	                callbackMethod.getReturnType(), 	                Type.OBJECT));		}		mbody.append(fact.createReturn(Type.OBJECT));		closureClass.addMethodGen(runMethod);						// class		getEnclosingClass().addGeneratedInner(closureClass);				return constructor;	}