static void Main(string[] args) { FunctionDefine func1 = new FunctionDefine(Task); FunctionDefine func2 = new FunctionDefine(Task); IAsyncResult iar1 = func1.BeginInvoke(1, null, null); IAsyncResult iar2 = func2.BeginInvoke(2, null, null); Console.WriteLine("Thread ID = " + Thread.CurrentThread.ManagedThreadId + " Start..."); func1.EndInvoke(iar1); func2.EndInvoke(iar2); Console.WriteLine("Finish!"); for (; ; ) ; }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // var list = ((rtArray)(((rtObject)thisObj).value.memberData[0].getValue())).innerArray; // uint newlen = ((rtUInt)argements[0].getValue()).value; // if (newlen > list.Count) // { // while (list.Count < newlen) // { // list.Add(rtUndefined.undefined); // } // } // else if (newlen < list.Count) // { // list.RemoveRange((int)newlen, list.Count - (int)newlen); // } // return rtUndefined.undefined; //} public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; var list = ((rtArray)(((rtObjectBase)thisObj).value.memberData[0].getValue())).innerArray; uint newlen = ((rtUInt)argements[0]).value; if (newlen > list.Count) { while (list.Count < newlen) { list.Add(rtUndefined.undefined); } } else if (newlen < list.Count) { list.RemoveRange((int)newlen,list.Count - (int)newlen); } returnSlot.directSet(rtUndefined.undefined); }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { int index1 = TypeConverter.ConvertToInt(argements[0]); int index2 = TypeConverter.ConvertToInt(argements[1]); Array array = (Array)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value; try { object obj = array.GetValue(index1,index2); stackframe.player.linktypemapper.storeLinkObject_ToSlot(obj,functionDefine.signature.returnType,returnSlot,bin,stackframe.player); //returnSlot.setValue((int)array.GetValue(index)); success = true; } catch (RuntimeLinkTypeMapper.TypeLinkClassException tlc) { success = false; stackframe.throwAneException(token,tlc.Message); } catch (KeyNotFoundException) { success = false; stackframe.throwAneException(token,array.ToString() + "没有链接到脚本"); } catch (ArgumentException a) { success = false; stackframe.throwAneException(token,a.Message); } catch (IndexOutOfRangeException i) { success = false; stackframe.throwAneException(token,i.Message); } }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null; // errorno = 0; // string b = TypeConverter.ConvertToString( // ((ASBinCode.rtData.rtObject)thisObj).value.memberData[0].getValue(), null, null); // if (b == null) // { // errormessage = "Cannot access a property or method of a null object reference."; // errorno = 1009; // return ASBinCode.rtData.rtUndefined.undefined; // } // else // { // int st = TypeConverter.ConvertToInt(argements[0].getValue(), null, null); // int ed = TypeConverter.ConvertToInt(argements[1].getValue(), null, null); // if (st > b.Length) // { // return new rtString(string.Empty); // } // else if (st < 0) // { // st = b.Length + st; // if (st < 0) // { // st = 0; // } // } // if (ed < 0) // { // ed =b.Length + ed; // if (ed < 0) // { // ed = 0; // } // } // int len = ed - st; // if (len == 0) // { // return new rtString(string.Empty); // } // if (len > b.Length - st) // { // return new rtString(b.Substring(st)); // } // else // { // return new rtString(b.Substring(st,len)); // } // } //} public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { string b = TypeConverter.ConvertToString( ((ASBinCode.rtData.rtObjectBase)thisObj).value.memberData[0].getValue(),null,null); if (b == null) { success = false; //errormessage = "Cannot access a property or method of a null object reference."; //errorno = 1009; //return ASBinCode.rtData.rtUndefined.undefined; stackframe.throwError(token,1009,"Cannot access a property or method of a null object reference."); returnSlot.directSet(rtUndefined.undefined); } else { success = true; int st = TypeConverter.ConvertToInt(argements[0]); int ed = TypeConverter.ConvertToInt(argements[1]); if (st > b.Length) { //return new rtString(string.Empty); returnSlot.setValue(string.Empty); } else if (st < 0) { st = b.Length + st; if (st < 0) { st = 0; } } if (ed < 0) { ed = b.Length + ed; if (ed < 0) { ed = 0; } } int len = ed - st; if (len == 0) { //return new rtString(string.Empty); returnSlot.setValue(string.Empty); } else { if (len > b.Length - st) { //return new rtString(b.Substring(st)); returnSlot.setValue(b.Substring(st)); } else { //return new rtString(b.Substring(st, len)); returnSlot.setValue(b.Substring(st,len)); } } } }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot, SourceToken token, StackFrame stackframe, out bool success) { try { ASBinCode.RunTimeValueBase arg0; { object _temp; if (!stackframe.player.linktypemapper.rtValueToLinkObject( argements[0], stackframe.player.linktypemapper.getLinkType(functionDefine.signature.parameters[0].type) , bin, true, out _temp )) { stackframe.throwCastException(token, argements[0].rtType, functionDefine.signature.parameters[0].type ); success = false; return; } arg0 = (ASBinCode.RunTimeValueBase)_temp; } //object _result_ = (ASRuntime.nativefuncs.linksystem.Iterator)arg0; if (arg0 == null) { stackframe.player.linktypemapper.storeLinkObject_ToSlot(null, functionDefine.signature.returnType, returnSlot, bin, stackframe.player); } else { stackframe.player.linktypemapper.storeLinkObject_ToSlot( new ASRuntime.nativefuncs.linksystem.Iterator(arg0, stackframe.player) , 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); } }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { // //((rtObject)thisObj).value.memberData[0].directSet(newvalue); string pattern = TypeConverter.ConvertToString(argements[0],stackframe,token); string options = TypeConverter.ConvertToString(argements[1],stackframe,token); string pv = "/"; if (pattern != null) { pv = pv + pattern; } pv = pv + "/"; var Options = System.Text.RegularExpressions.RegexOptions.None; if (options != null) { pv = pv + options; if (options.IndexOf('s') >= 0) { ((rtObjectBase)thisObj).value.memberData[1].directSet(rtBoolean.True); Options |= System.Text.RegularExpressions.RegexOptions.Singleline; } if (options.IndexOf('x') >= 0) { ((rtObjectBase)thisObj).value.memberData[2].directSet(rtBoolean.True); Options |= System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace; } if (options.IndexOf('g') >= 0) { ((rtObjectBase)thisObj).value.memberData[3].directSet(rtBoolean.True); } if (options.IndexOf('i') >= 0) { ((rtObjectBase)thisObj).value.memberData[4].directSet(rtBoolean.True); Options |= System.Text.RegularExpressions.RegexOptions.IgnoreCase; } if (options.IndexOf('m') >= 0) { ((rtObjectBase)thisObj).value.memberData[5].directSet(rtBoolean.True); Options |= System.Text.RegularExpressions.RegexOptions.Multiline; } } ((rtObjectBase)thisObj).value.memberData[0].directSet(new rtString(pv)); if (pattern != null) { ((rtObjectBase)thisObj).value.memberData[6].directSet(new rtString(pattern)); } else { ((rtObjectBase)thisObj).value.memberData[6].directSet(rtNull.nullptr); } ((rtObjectBase)thisObj).value.memberData[7].directSet(new rtNumber(0)); try { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern, Options); HostedObject hobj = new HostedObject(stackframe.player.swc.ObjectClass); hobj.hosted_object = regex; rtObject rtobj = new rtObject(hobj, null); ((rtObjectBase)thisObj).value.memberData[8].directSet(rtobj); success = true; returnSlot.directSet(rtUndefined.undefined); } catch (ArgumentException ex) { success = false; stackframe.throwArgementException(token, ex.Message); } //((HostedObject)((rtObject)thisObj).value).hosted_object = regex; }
//public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // throw new NotImplementedException(); //} public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { throw new NotImplementedException(); }
public abstract void execute3( RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success );
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; if (argements[0].rtType == RunTimeDataType.rt_null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[0].name + "不能为null"); return; } Class cls = bin.getClassByRunTimeDataType(argements[0].rtType).instanceClass; if (argements[1].rtType == RunTimeDataType.rt_null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "不能为null"); return; } else if (argements[1].rtType < RunTimeDataType.unknown) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组"); return; } LinkSystemObject lengthsObj = ((ASBinCode.rtData.rtObjectBase)argements[1]).value as LinkSystemObject; if (lengthsObj == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组"); return; } int[] lengths = lengthsObj.GetLinkData() as int[]; if (lengths == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组int[]"); return; } //int length = TypeConverter.ConvertToInt(argements[1], stackframe, token); Class _array_ = ((ASBinCode.rtData.rtObjectBase)thisObj).value._class; var arr = stackframe.player.alloc_pureHostedOrLinkedObject(_array_.instanceClass); LinkSystemObject lo = (LinkSystemObject)arr.value; try { RunTimeDataType et = cls.getRtType(); RunTimeDataType ot; if (TypeConverter.Object_CanImplicit_ToPrimitive(cls,out ot)) { et = ot; } Type elementType = stackframe.player.linktypemapper.getLinkType(et); lo.SetLinkData(Array.CreateInstance(elementType,lengths)); returnSlot.directSet(arr); } catch (KeyNotFoundException) { success = false; stackframe.throwArgementException(token,"类型" + cls + "不是一个链接到系统类库的对象,不能创建托管数组"); } catch (ArgumentOutOfRangeException a) { success = false; stackframe.throwAneException(token,a.Message); } catch { throw new EngineException(); } }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { try { System.Type arg0; { object _temp; if (!stackframe.player.linktypemapper.rtValueToLinkObject( argements[0], stackframe.player.linktypemapper.getLinkType(argements[0].rtType) , bin,true,out _temp )) { stackframe.throwCastException(token,argements[0].rtType, functionDefine.signature.parameters[0].type ); success = false; return; } arg0 = (System.Type)_temp; } object _result_ = AutoGenCodeLib.Testobj.CreateTestObj((System.Type)arg0) ; ASBinCode.rtti.Class as3class = ((ASBinCode.rtData.rtObjectBase)argements[0]).value._class; stackframe.player.MakeICrossExtendAdapterEnvironment((ICrossExtendAdapter)_result_,as3class); 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); } }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; }
public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { try { var cls = stackframe.player.swc.getClassByRunTimeDataType(functionDefine.signature.returnType).staticClass; Delegate arg0; { object _temp; if (!stackframe.player.linktypemapper.rtValueToLinkObject( argements[0], stackframe.player.linktypemapper.getLinkType(argements[0].rtType) , bin,true,out _temp )) { stackframe.throwCastException(token,argements[0].rtType, functionDefine.signature.parameters[0].type ); success = false; return; } arg0 = (Delegate)_temp; } Delegate arg1; { if (argements[1].rtType == RunTimeDataType.rt_null) { stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "不能为null"); success = false; return; } //***执行隐式转换**** var implfromfunction = stackframe.player.swc.functions[cls.implicit_from_functionid]; //if (implfromfunction.native_index < 0) //{ // implfromfunction.native_index = stackframe.player.swc.nativefunctionNameIndex[implfromfunction.native_name]; //} //IWapperDelegateMaker nativefunc = (IWapperDelegateMaker)stackframe.player.swc.nativefunctions[implfromfunction.native_index]; IWapperDelegateMaker nativefunc = (IWapperDelegateMaker)stackframe.player.swc.getNativeFunction(implfromfunction); var wapper = nativefunc.MakeWapper(argements[1],stackframe.player,cls.instanceClass); arg1 = wapper; } object _result_ = MulticastDelegate.Combine(arg0,arg1); ; stackframe.player.linktypemapper.storeLinkObject_ToSlot(_result_,functionDefine.signature.returnType,returnSlot,bin,stackframe.player); success = true; //var cls = ((ASBinCode.rtData.rtObjectBase)thisObj).value._class.staticClass; ////***执行隐式转换**** //var implfromfunction = stackframe.player.swc.functions[cls.implicit_from_functionid]; //if (implfromfunction.native_index < 0) //{ // implfromfunction.native_index = stackframe.player.swc.nativefunctionNameIndex[implfromfunction.native_name]; //} //IWapperDelegateMaker nativefunc = (IWapperDelegateMaker)stackframe.player.swc.nativefunctions[implfromfunction.native_index]; //var wapper = nativefunc.MakeWapper(argements[0], stackframe.player, cls); //Delegate _this = // (MulticastDelegate)((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value).GetLinkData(); //_this= MulticastDelegate.Combine(_this, wapper.action); //((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value).SetLinkData(_this); //returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined); //success = true; } catch (ASRunTimeException ex) { success = false; stackframe.throwError(token,9998,ex.ToString()); } 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 RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno) //{ // errormessage = null;errorno = 0; // ((LinkObj<long>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value = (long)ASRuntime.TypeConverter.ConvertToNumber(argements[0].getValue()); // return ASBinCode.rtData.rtUndefined.undefined; //} public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { success = true; ((LinkObj <long>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value = (long)ASRuntime.TypeConverter.ConvertToNumber(argements[0]); returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined); }
public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { if (argements[0].rtType == RunTimeDataType.rt_null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[0].name + "不能为null"); return; } else if (argements[0].rtType < RunTimeDataType.unknown) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[0].name + "应该是托管数组"); return; } LinkSystemObject indicesObj = ((ASBinCode.rtData.rtObjectBase)argements[0]).value as LinkSystemObject; if (indicesObj == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[0].name + "应该是托管数组"); return; } int[] indices = indicesObj.GetLinkData() as int[]; if (indices == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[0].name + "应该是托管数组int[]"); return; } Array array = (Array)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value; try { object obj = array.GetValue(indices); stackframe.player.linktypemapper.storeLinkObject_ToSlot(obj,functionDefine.signature.returnType,returnSlot,bin,stackframe.player); //returnSlot.setValue((int)array.GetValue(index)); success = true; } catch (RuntimeLinkTypeMapper.TypeLinkClassException tlc) { success = false; stackframe.throwAneException(token,tlc.Message); } catch (KeyNotFoundException) { success = false; stackframe.throwAneException(token,array.ToString() + "没有链接到脚本"); } catch (ArgumentException a) { success = false; stackframe.throwAneException(token,a.Message); } catch (IndexOutOfRangeException i) { success = false; stackframe.throwAneException(token,i.Message); } }
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 sealed override void execute2(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT[] argements,SLOT returnSlot,SourceToken token,object stackframe,out bool success) { throw new EngineException(); }
//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 void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success) { if (argements[1].rtType == RunTimeDataType.rt_null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "不能为null"); return; } else if (argements[1].rtType < RunTimeDataType.unknown) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组"); return; } LinkSystemObject indicesObj = ((ASBinCode.rtData.rtObjectBase)argements[1]).value as LinkSystemObject; if (indicesObj == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组"); return; } int[] indices = indicesObj.GetLinkData() as int[]; if (indices == null) { success = false; stackframe.throwArgementException(token,"参数" + functionDefine.signature.parameters[1].name + "应该是托管数组int[]"); return; } Array array = (Array)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value; try { object lo; if (stackframe.player.linktypemapper.rtValueToLinkObject( argements[0],array.GetType().GetElementType(),bin,true,out lo )) { array.SetValue(lo,indices); returnSlot.setValue(ASBinCode.rtData.rtUndefined.undefined); success = true; } else { stackframe.throwCastException(token,argements[0].rtType, stackframe.player.linktypemapper.getRuntimeDataType(array.GetType().GetElementType()) ); success = false; } } catch (RuntimeLinkTypeMapper.TypeLinkClassException 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); } }