public void release() { if (!hasReleased) { //check_para_id = 0; //pushedArgs = 0; //onstackparametercount = 0; hasReleased = true; callbacker = null; CallFuncHeap = null; toCallFunc = null; returnSlot = null; _tempSlot = null; invokerFrame = null; token = null; tag = null; function.Clear(); player.funcCallerPool.ret(this); } }
private void exec_step2( ASBinCode.rtti.Object obj, RunTimeScope objScope,ASBinCode.rtData.rtObjectBase _object) { //***添加Object的动态对象**** if ( //(obj._class.classid == 0) obj is DynamicObject && obj._class.staticClass != null) { DynamicObject dobj = (DynamicObject)obj; if (constructor == null) { dobj.createproperty("constructor",new DynamicPropertySlot(_object,false,player.swc.FunctionClass.getRtType())); dobj["constructor"].directSet(player.static_instance[obj._class.staticClass.classid]); dobj._prototype_ = (DynamicObject)player.static_instance[_class.staticClass.classid].value; } else { dobj._prototype_ = (DynamicObject)constructor.value; } } ClassMember ctor = obj._class.constructor; //if (obj._class.isCrossExtend) //{ // //***创建Adapter*** // var scls = obj._class.super; // while (!scls.isLink_System) // { // scls = scls.super; // } // ctor = scls.crossExtendAdapterCreator; // var nf = player.swc.getNativeFunction(((MethodGetterBase)ctor.bindField).functionId); // if (!(nf is ICrossExtendAdapterCreator)) // { // invokerFrame.throwAneException(token, "adapter不是ICrossExtendAdapterCreator"); // callbacker.noticeRunFailed(); // noticeWhenCreateAneFailed(); // invokerFrame.endStep(); // return; // } // constructorCaller.toCallFunc = player.swc.functions[((MethodGetterBase)ctor.bindField).functionId]; //} //调用构造函数 if (ctor != null) { ASBinCode.rtData.rtFunction function = (ASBinCode.rtData.rtFunction)((MethodGetterBase)ctor.bindField).getConstructor(objScope); HeapSlot _temp = tempSlot; constructorCaller.returnSlot = _temp; constructorCaller.SetFunction(function); function.Clear(); //afterCallConstructor callbacker = new afterCallConstructor(); var callbacker = player.blockCallBackPool.create(); callbacker.args = this; //callbacker.obj = obj; //callbacker.objScope = objScope; //callbacker.rtObject = _object; callbacker.cacheObjects[0] = _object; callbacker.setWhenFailed(creatorFailed); callbacker.setCallBacker(afterCallConstructorCallbacker); constructorCaller.callbacker = callbacker; toNoticeFailed2 = callbacker; constructorCaller.call(); toNoticeFailed2 = null; constructorCaller = null; } else { exec_step3(_object); } }