示例#1
0
        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 (; ; ) ;
        }
示例#2
0
        //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);
                }
            }
示例#6
0
        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);
                }
            }
示例#11
0
 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);
                }
            }
示例#13
0
        //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);
            }
        }
示例#15
0
        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();
 }
示例#17
0
        //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);
            }
        }