void IBlockCallBack.call(object args) { #if DEBUG clear_para_slot(invokerFrame,onstackparametercount); #else { int count = onstackparametercount; while (count > 0) { --count; StackSlot slot = invokerFrame.stack[invokerFrame.baseBottomSlotIndex + (--invokerFrame.call_parameter_slotCount)]; if (slot.refPropChanged) { slot.refPropChanged = false; slot.stackObjects = StackSlot.StackObjects.EMPTY; if (slot.needclear) { slot.linktarget = null; slot._cache_arraySlot.clear(); slot._cache_vectorSlot.clear(); slot._cache_prototypeSlot.clear(); slot._cache_setthisslot.clear(); slot._linkObjCache.clearRefObj(); slot._functionValue.Clear(); slot._functon_result.Clear(); slot.needclear = false; } slot.store[StackSlot.COMMREFTYPEOBJ] = ASBinCode.rtData.rtNull.nullptr; } slot.index = (int)RunTimeDataType.unknown; } } #endif onstackparametercount = 0; invokerFrame.endStepNoError(); //release(); //人肉内联release if (!hasReleased) { hasReleased = true; callbacker = null; CallFuncHeap = null; toCallFunc = null; returnSlot = null; _tempSlot = null; invokerFrame = null; token = null; tag = null; function.Clear(); player.funcCallerPool.ret(this); } }
// try to scan decimal real (float or double) literal (fractional part of it) // real fractional: .(decimal)[(eE)(+-)(decimal)] private bool ScanReal(out SourceToken token) { var result = FromTokenWhile(".", numeric, false, null, true, out token); if (Match(result)) { // optional E/e part if (CheckAny("eE") != NO_MATCH) { ++token.Length; // optional +/- after exponent sign if (CheckAny("+-") != NO_MATCH) { ++token.Length; } // exponent digits SourceToken exp; if (ScanDecimal(out exp)) { token.Length += exp.Length; } } // optional postfix if (ScanRealPostfix()) { ++token.Length; } } return(Match(result)); }
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); } }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; returnSlot.directSet(thisObj); }
public sealed override void executeAsync(RunTimeValueBase thisObj, SLOT[] argements,SLOT resultSlot,object callbacker, object stackframe,SourceToken token,RunTimeScope scope) { ASBinCode.rtti.YieldObject yieldObj = (ASBinCode.rtti.YieldObject) ((ASBinCode.rtData.rtObjectBase)thisObj).value; yieldObj.returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined); yieldObj._moveNextResultSlot = resultSlot; yieldObj._callbacker = callbacker; StackFrame frame = (StackFrame)stackframe; var toCallFunc = yieldObj.yield_function; var CallFuncHeap = yieldObj.argements; CallFuncHeap[CallFuncHeap.Length - 1].directSet(ASBinCode.rtData.rtBoolean.False); BlockCallBackBase cb = frame.player.blockCallBackPool.create(); cb.args = yieldObj; cb.setCallBacker(_movenext_callbacker); frame.player.callBlock( frame.player.swc.blocks[toCallFunc.blockid], CallFuncHeap, yieldObj.returnSlot, yieldObj.function_bindscope, token,cb,yieldObj.thispointer,RunTimeScopeType.function); }
// try to scan comment token (both // and /* */ types) // single line: // <any> <line end> // multiline: /* <any> */ private bool ScanComment(out SourceToken token) { return(Match(AnyMatch( out token, (out SourceToken t) => FromTokenWhile("//", all, false, null, false, out t), (out SourceToken t) => FromTo("/*", "*/", true, null, false, out t) ))); }
// try to scan identifier token (does not account for @) // alpha(alphanum) // alpha is [A - Z, a - z, _, <unicode ranges>] // alphanum is [alpha, 0 - 9] private bool ScanIdent(out SourceToken token) { var result = FromSetWhile( alpha, alphanum, false, () => IsEscape(EscapeCheckContext.Identifier), out token ); return(Match(result)); }
// try to scan character literal // character literal: '<characters or escapes>' // count of included characters is not checked here private bool ScanCharacter(out SourceToken token) { var result = FromTo( "'", "'", false, () => IsEscape(EscapeCheckContext.Character), false, out token ); return(Match(result)); }
private FunctionCaller(Player player,StackFrame invokerFrame,SourceToken token) { this.player = player; this.invokerFrame = invokerFrame; this.token = token; check_para_id = 0; pushedArgs = 0; hasReleased = false; function = new ASBinCode.rtData.rtFunction(-1,false); }
public static bool init_static_class(Class cls,Player player,SourceToken token) { if (!player.static_instance.ContainsKey(cls.staticClass.classid)) { int f = player.getRuntimeStackFlag(); ASBinCode.RunTimeScope objScope; ASBinCode.rtti.Object obj = makeObj( player,token, cls.staticClass, null,null,out objScope).value; player.static_instance.Add(cls.staticClass.classid, new ASBinCode.rtData.rtObject(obj,objScope)); if (cls.super != null) { bool s = init_static_class(cls.super,player,token); if (s) { ((DynamicObject)obj)._prototype_ = (DynamicObject)(player.static_instance[cls.super.staticClass.classid]).value; bool result = player.step_toStackflag(f); if (cls.classid != 2) { ((DynamicObject)((ASBinCode.rtData.rtObjectBase)obj.memberData[0].getValue()).value)["constructor"].directSet(player.static_instance[cls.staticClass.classid]); } return(result); } else { return(false); } } else { bool result = player.step_toStackflag(f); return(result); } } else { return(true); } }
// try to scan hexadecimal literal // hexadecimal literal: 0x(hexadecimal) // hexadecimal is [0 - 9, A - F, a - f] private bool ScanHexadecimal(out SourceToken token) { var result = Match(FromTokenWhile( hexprefixes, hexadecimal, false, null, false, out token )); if (result && ScanIntegerPostfix()) { ++token.Length; } return(result); }
public override void executeAsync(RunTimeValueBase thisObj,SLOT[] argements,SLOT resultSlot,object callbacker,object stackframe,SourceToken token,RunTimeScope scope) { IBlockCallBack cb = (IBlockCallBack)callbacker; StackFrame frame = (StackFrame)stackframe; if (argements[0].getValue().rtType == RunTimeDataType.rt_null) { if (frame.player.infoOutput != null) { frame.player.infoOutput.Info(string.Empty); } cb.call(cb.args); return; } rtArray array = (rtArray)(argements[0].getValue()); if (array.innerArray.Count == 0) { if (frame.player.infoOutput != null) { frame.player.infoOutput.Info(string.Empty); } cb.call(cb.args); return; } BlockCallBackBase sepcb = frame.player.blockCallBackPool.create(); sepcb.scope = scope; sepcb._intArg = 0; sepcb.setCallBacker(null); sepcb._intArg2 = 0; object[] sendargs = sepcb.cacheObjects; sendargs[0] = cb; sendargs[1] = array; sendargs[2] = frame; sendargs[3] = token; sendargs[4] = scope; sendargs[5] = " "; sendargs[6] = new StringBuilder(); sendargs[7] = resultSlot; //sendargs[8] = new rtInt(0); sepcb.args = sendargs; _SeptoString_CB(sepcb,sendargs); }
public FunctionCaller create(StackFrame invokerFrame, SourceToken token) { FunctionCaller fc = base.create(); fc.invokerFrame = invokerFrame; fc.token = token; fc.player = player; fc.check_para_id = 0; fc.pushedArgs = 0; fc.hasReleased = false; fc.onstackparametercount = 0; fc.tag = null; //fc.function.Clear(); return(fc); }
// try to scan verbatim string literal // verbatim string: @"<chars, no escapes, line breaks allowed>"("<chars>") private ScanResult ScanVerbatimString(InnerScan inner, out SourceToken token) { var result = FromTo("@\"", "\"", true, inner, false, out token); // continue with contigous double quoted strings only if there was full match if (result == ScanResult.Match) { SourceToken tok; ScanResult next; while (Match(next = FromTo("\"", "\"", true, inner, false, out tok))) { result = next; token.Length += tok.Length; } } return(result); }
public void clear() { token = null; _class = null; step = null; callbacker = null; constructorCaller = null; objectResult = null; constructor = null; _function_constructor = null; objectStoreToSlot = null; toNoticeFailed1 = null; toNoticeFailed2 = null; tempSlot.directSet(ASBinCode.rtData.rtUndefined.undefined); }
public override int GetHashCode() { int hash = 1; if (Target.Length != 0) { hash ^= Target.GetHashCode(); } if (Type != global::Google.Cloud.Functions.V1.OperationType.OperationUnspecified) { hash ^= Type.GetHashCode(); } if (request_ != null) { hash ^= Request.GetHashCode(); } if (VersionId != 0L) { hash ^= VersionId.GetHashCode(); } if (updateTime_ != null) { hash ^= UpdateTime.GetHashCode(); } if (BuildId.Length != 0) { hash ^= BuildId.GetHashCode(); } if (SourceToken.Length != 0) { hash ^= SourceToken.GetHashCode(); } if (BuildName.Length != 0) { hash ^= BuildName.GetHashCode(); } if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } return(hash); }
public override void executeAsync(RunTimeValueBase thisObj,SLOT[] argements, SLOT resultSlot,object callbacker,object stackframe,SourceToken token,RunTimeScope scope) { IBlockCallBack cb = (IBlockCallBack)callbacker; StackFrame frame = (StackFrame)stackframe; rtArray array = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue(); if (array.innerArray.Count == 0) { cb.call(cb.args); resultSlot.directSet(new rtString(string.Empty)); return; } BlockCallBackBase sepcb = frame.player.blockCallBackPool.create(); sepcb.scope = scope; sepcb._intArg = 0; object[] sendargs = sepcb.cacheObjects; sendargs[0] = cb; sendargs[1] = array; sendargs[2] = frame; sendargs[3] = token; sendargs[4] = scope; sendargs[5] = argements[0].getValue(); sendargs[6] = new StringBuilder(); sendargs[7] = resultSlot; sendargs[8] = new rtInt(0); sepcb.args = sendargs; sepcb.setCallBacker(D_SeptoString_CB); operators.OpCast.CastValue(argements[0].getValue(),RunTimeDataType.rt_string, frame,token,scope,frame._tempSlot1,sepcb,false); }
public static void pushAllElementToVector(ASBinCode.rtti.Vector_Data vd, List <RunTimeValueBase> datalist, StackFrame frame, SourceToken token, RunTimeScope scope, IBlockCallBack callbacker ) { BlockCallBackBase convertCb = frame.player.blockCallBackPool.create(); convertCb._intArg = 0; convertCb.setCallBacker(_convertCB); object[] args = convertCb.cacheObjects; //new object[6]; args[0] = vd; args[1] = datalist; args[2] = token; args[3] = scope; args[4] = callbacker; args[5] = frame; convertCb.args = args; OpCast.CastValue(datalist[convertCb._intArg], vd.vector_type, frame, token, scope, frame._tempSlot1, convertCb, false); }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { //var v = (stackframe.player.alloc_pureHostedOrLinkedObject(((ASBinCode.rtData.rtObjectBase)thisObj).value._class.instanceClass)); var cls = stackframe.player.swc.getClassByRunTimeDataType(functionDefine.signature.returnType); object lo; if (stackframe.player.linktypemapper.rtValueToLinkObject( argements[0], stackframe.player.linktypemapper.getLinkType(cls.getRtType()), bin,true,out lo )) { ((StackSlot)returnSlot).setLinkObjectValue(cls,stackframe.player,lo); success = true; } else { stackframe.throwCastException(token,argements[0].rtType, cls.getRtType() ); success = false; } }
public override void execute2(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT[] argements,SLOT returnSlot,SourceToken token,object stackframe,out bool success) { //base.execute2(thisObj, functionDefine, argements, returnSlot, stackframe, out success); success = true; var a1 = argements[0].getValue(); var a2 = argements[1].getValue(); if (a1.rtType == a2.rtType && a1.rtType == RunTimeDataType.rt_null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.True); return; } ASBinCode.rtData.rtObjectBase obj = a1 as ASBinCode.rtData.rtObjectBase; if (obj == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } LinkSystemObject o1 = obj.value as LinkSystemObject; if (o1 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } ASBinCode.rtData.rtObjectBase obj2 = a2 as ASBinCode.rtData.rtObjectBase; if (obj2 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } LinkSystemObject o2 = obj2.value as LinkSystemObject; if (o2 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } if (object.ReferenceEquals(o1.GetLinkData(),o2.GetLinkData())) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.True); return; } else { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } }
public override void execute2(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT[] argements,SLOT returnSlot,SourceToken token,object stackframe,out bool success) { //base.execute2(thisObj, functionDefine, argements, returnSlot, stackframe, out success); success = true; ASBinCode.rtData.rtObjectBase obj = argements[0].getValue() as ASBinCode.rtData.rtObjectBase; if (obj == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } LinkSystemObject o1 = obj.value as LinkSystemObject; if (o1 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } ASBinCode.rtData.rtObjectBase obj2 = argements[1].getValue() as ASBinCode.rtData.rtObjectBase; if (obj2 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } LinkSystemObject o2 = obj2.value as LinkSystemObject; if (o2 == null) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } if (System.Object.Equals(o1,o2)) { returnSlot.setValue(ASBinCode.rtData.rtBoolean.True); return; } else { returnSlot.setValue(ASBinCode.rtData.rtBoolean.False); return; } }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { string classname = TypeConverter.ConvertToString(argements[0],stackframe,token); if (classname == null) { success = false; stackframe.throwArgementException(token,"Argument name cannot be null"); } else { var c = bin.getClassDefinitionByName(classname); if (c != null) { if (!operators.InstanceCreator.init_static_class(c,stackframe.player,token)) { success = false; return; } else { success = true; returnSlot.directSet(stackframe.player.static_instance[c.staticClass.classid]); } //returnSlot.directSet(new ASBinCode.rtData.rtObject(c,null)); } else { success = false; stackframe.throwError(token,1065,"Variable " + classname + " is not defined"); } } }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // string str = TypeConverter.ConvertToString(argements[0].getValue(), null, null); // if (String.IsNullOrEmpty(str)) // { // return new rtNumber(double.NaN); // } // str=str.Trim(); // bool hasreaddot=false; // string newstr = string.Empty; // for (int i = 0; i < str.Length; i++) // { // char c = str[i]; // if (c == '.') // { // if (hasreaddot) // { // break; // } // hasreaddot = true; // } // else if (c == '-' || c == '+') // { // if (!string.IsNullOrEmpty(newstr)) // { // break; // } // if (i + 1 >= str.Length) // { // return new rtNumber(double.NaN); // } // char n = str[i + 1]; // if (n == '.') // { // if (i + 2 >= str.Length) // { // return new rtNumber(double.NaN); // } // n = str[i + 2]; // if (n < 48 || n > 57) // { // return new rtNumber(double.NaN); // } // } // else if (n < 48 || n > 57) // { // return new rtNumber(double.NaN); // } // } // else if (c == 'e' || c == 'E') // { // if (string.IsNullOrEmpty(newstr)) // { // return new rtNumber(double.NaN); // } // else // { // if (i + 1 >= str.Length) // { // break; // } // string epart = "e"; // int st = i + 1; // char ep = str[st]; // if (ep == '+' || ep == '-') // { // epart += ep; // st++; // if (!(st < str.Length)) // { // break; // } // ep = str[st]; // if (ep < 48 || ep > 57) // { // break; // } // epart += ep; // st++; // } // for (int j = st; j < str.Length; j++) // { // char n = str[j]; // if (n < 48 || n > 57) // { // break; // } // epart += n; // } // newstr += epart; // break; // } // } // else if (c < 48 || c > 57) // { // if (string.IsNullOrEmpty(newstr)) // { // return new rtNumber(double.NaN); // } // else // { // break; // } // } // newstr = newstr + c; // } // return new rtNumber(double.Parse(newstr)); //} public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; string str = TypeConverter.ConvertToString(argements[0],null,null); if (String.IsNullOrEmpty(str)) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } str = str.Trim(); bool hasreaddot = false; string newstr = string.Empty; for (int i = 0; i < str.Length; i++) { char c = str[i]; if (c == '.') { if (hasreaddot) { break; } hasreaddot = true; } else if (c == '-' || c == '+') { if (!string.IsNullOrEmpty(newstr)) { break; } if (i + 1 >= str.Length) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } char n = str[i + 1]; if (n == '.') { if (i + 2 >= str.Length) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } n = str[i + 2]; if (n < 48 || n > 57) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } } else if (n < 48 || n > 57) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } } else if (c == 'e' || c == 'E') { if (string.IsNullOrEmpty(newstr)) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } else { if (i + 1 >= str.Length) { break; } string epart = "e"; int st = i + 1; char ep = str[st]; if (ep == '+' || ep == '-') { epart += ep; st++; if (!(st < str.Length)) { break; } ep = str[st]; if (ep < 48 || ep > 57) { break; } epart += ep; st++; } for (int j = st; j < str.Length; j++) { char n = str[j]; if (n < 48 || n > 57) { break; } epart += n; } newstr += epart; break; } } else if (c < 48 || c > 57) { if (string.IsNullOrEmpty(newstr)) { //return new rtNumber(double.NaN); returnSlot.setValue(double.NaN); } else { break; } } newstr = newstr + c; } //return new rtNumber(double.Parse(newstr)); returnSlot.setValue(double.Parse(newstr)); }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // if (argements[0].getValue().rtType == RunTimeDataType.rt_null) // { // return ASBinCode.rtData.rtBoolean.False; // } // else // { // ASBinCode.rtData.rtFunction f = (ASBinCode.rtData.rtFunction)argements[0].getValue(); // if (f.ismethod) // { // return ASBinCode.rtData.rtBoolean.True; // } // else // { // return ASBinCode.rtData.rtBoolean.False; // } // } //} public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { //errormessage = null; //errorno = 0; success = true; if (argements[0].rtType == RunTimeDataType.rt_null) { //return ASBinCode.rtData.rtBoolean.False; returnSlot.directSet(rtBoolean.False); } else { ASBinCode.rtData.rtFunction f = (ASBinCode.rtData.rtFunction)argements[0]; if (f.ismethod) { //return ASBinCode.rtData.rtBoolean.True; returnSlot.directSet(rtBoolean.True); } else { //return ASBinCode.rtData.rtBoolean.False; returnSlot.directSet(rtBoolean.False); } } //throw new NotImplementedException(); }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // string str= TypeConverter.ConvertToString(argements[0].getValue(),null,null); // uint radix = TypeConverter.ConvertToUInt(argements[1].getValue(), null, null); // if (String.IsNullOrEmpty(str)) // { // return new rtNumber(double.NaN); // } // //ASCII 48-57 : 0-9 ,65-90 : A-Z; // str = str.ToUpper(); // str=str.TrimStart(); // str=str.TrimStart('0'); // if (radix == 0) { radix = 10; } // if (radix < 2 || radix > 36) { return new rtNumber(double.NaN); } // uint allowidx = 48 + radix; // if (radix > 10) // { // allowidx = 65 + radix - 10; // } // double output = double.NaN; // for (int i = 0; i < str.Length; i++) // { // char c = str[i]; // if (c < allowidx && ((c < 58 && c >= 48) || c>= 65)) // { // if (double.IsNaN(output)) // { // output = c < 58 ? (c - 48) : (c - 65 + 10); // } // else // { // output = output * radix + (c < 58 ? (c - 48) : (c - 65 + 10)); // } // } // else // { // break; // } // } // return new rtNumber(output); //} public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; string str = TypeConverter.ConvertToString(argements[0],null,null); uint radix = TypeConverter.ConvertToUInt(argements[1],null,null); if (String.IsNullOrEmpty(str)) { returnSlot.setValue(double.NaN); //new rtNumber(double.NaN); } //ASCII 48-57 : 0-9 ,65-90 : A-Z; str = str.ToUpper(); str = str.TrimStart(); str = str.TrimStart('0'); if (radix == 0) { radix = 10; } if (radix < 2 || radix > 36) { returnSlot.setValue(double.NaN); } //return new rtNumber(double.NaN); } uint allowidx = 48 + radix; if (radix > 10) { allowidx = 65 + radix - 10; } double output = double.NaN; for (int i = 0; i < str.Length; i++) { char c = str[i]; if (c < allowidx && ((c < 58 && c >= 48) || c >= 65)) { if (double.IsNaN(output)) { output = c < 58 ? (c - 48) : (c - 65 + 10); } else { output = output * radix + (c < 58 ? (c - 48) : (c - 65 + 10)); } } else { break; } } returnSlot.setValue(output); //return new rtNumber(output); }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // double num = TypeConverter.ConvertToNumber(argements[0].getValue()); // if (double.IsInfinity(num)) // { // return rtBoolean.True; // } // else // { // return rtBoolean.False; // } //} public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; double num = TypeConverter.ConvertToNumber(argements[0]); if (!double.IsInfinity(num)) { //return rtBoolean.True; returnSlot.directSet(rtBoolean.True); } else { //return rtBoolean.False; returnSlot.directSet(rtBoolean.False); } }
private void _ValueToString_CB(BlockCallBackBase sender,object args) { object[] receiveArgs = (object[])sender.args; StackFrame frame = (StackFrame)receiveArgs[2]; rtArray array = (rtArray)receiveArgs[1]; //((rtInt)receiveArgs[8]).value++; sender._intArg2++; if (sender._intArg2 == 10) //((rtInt)receiveArgs[8]).value == 10) //堆栈清理,防止溢出... { sender._intArg2 = 0; //((rtInt)receiveArgs[8]).value = 0; BlockCallBackBase valueCB = frame.player.blockCallBackPool.create(); valueCB._intArg = sender._intArg; valueCB._intArg2 = 0; valueCB.args = valueCB.copyFromReceiveArgs(receiveArgs); valueCB.setCallBacker(_ValueToString_CB); frame.player.CallBlankBlock(valueCB); return; } StringBuilder sb = (StringBuilder)receiveArgs[6]; SourceToken token = (SourceToken)receiveArgs[3]; string aSep = (string)receiveArgs[5]; sb.Append( TypeConverter.ConvertToString(frame._tempSlot1.getValue(),frame,token) == null?"null": TypeConverter.ConvertToString(frame._tempSlot1.getValue(),frame,token) ); if (sender._intArg < array.innerArray.Count) { sb.Append(aSep); BlockCallBackBase valueCB = frame.player.blockCallBackPool.create(); valueCB._intArg = sender._intArg + 1; valueCB._intArg2 = sender._intArg2; valueCB.args = valueCB.copyFromReceiveArgs(receiveArgs); valueCB.setCallBacker(_ValueToString_CB); var v = array.innerArray[sender._intArg]; if (v.rtType == RunTimeDataType.rt_void) { v = UNDEFINED; } operators.OpCast.CastValue(v,RunTimeDataType.rt_string, frame, (SourceToken)receiveArgs[3], (RunTimeScope)receiveArgs[4], frame._tempSlot1, valueCB,false ); } else { //ISLOT result = (ISLOT)receiveArgs[7]; //result.directSet(new rtString(sb.ToString())); if (frame.player.infoOutput != null) { frame.player.infoOutput.Info(sb.ToString()); } IBlockCallBack cb = (IBlockCallBack)receiveArgs[0]; cb.call(cb.args); } }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { var type = argements[0].rtType; switch (type) { case RunTimeDataType.fun_void: returnSlot.setValue("void"); break; case RunTimeDataType.rt_array: returnSlot.setValue("Array"); break; case RunTimeDataType.rt_boolean: returnSlot.setValue("Boolean"); break; case RunTimeDataType.rt_function: returnSlot.setValue("Function"); break; case RunTimeDataType.rt_int: returnSlot.setValue("int"); break; case RunTimeDataType.rt_null: returnSlot.setValue("null"); break; case RunTimeDataType.rt_number: returnSlot.setValue("Number"); break; case RunTimeDataType.rt_string: returnSlot.setValue("String"); break; case RunTimeDataType.rt_uint: returnSlot.setValue("uint"); break; case RunTimeDataType.rt_void: returnSlot.setValue("void"); break; case RunTimeDataType.unknown: returnSlot.setValue("void"); break; case RunTimeDataType._OBJECT: returnSlot.setValue("Object"); break; default: var c = stackframe.player.swc.getClassByRunTimeDataType(type); if (c.instanceClass != null) { c = c.instanceClass; } returnSlot.setValue(c.package + "::" + c.name); break; } success = true; }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { try { ((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value = new RefOutStore(); returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined); success = true; } catch (InvalidCastException ic) { success = false; stackframe.throwAneException(token,ic.Message); } catch (ArgumentException a) { success = false; stackframe.throwAneException(token,a.Message); } catch (IndexOutOfRangeException i) { success = false; stackframe.throwAneException(token,i.Message); } catch (NotSupportedException n) { success = false; stackframe.throwAneException(token,n.Message); } }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { RefOutStore _this = (RefOutStore)((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value).GetLinkData(); try { string arg0 = TypeConverter.ConvertToString(argements[0],stackframe,token); object _result_ = _this.GetValue((System.String)arg0) ; stackframe.player.linktypemapper.storeLinkObject_ToSlot(_result_,functionDefine.signature.returnType,returnSlot,bin,stackframe.player); success = true; } catch (ASRunTimeException tlc) { success = false; stackframe.throwAneException(token,tlc.Message); } catch (InvalidCastException ic) { success = false; stackframe.throwAneException(token,ic.Message); } catch (ArgumentException a) { success = false; stackframe.throwAneException(token,a.Message); } catch (IndexOutOfRangeException i) { success = false; stackframe.throwAneException(token,i.Message); } catch (NotSupportedException n) { success = false; stackframe.throwAneException(token,n.Message); } }