コード例 #1
0
        //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
        //    {
        //        string delimiter = TypeConverter.ConvertToString(argements[0].getValue(), null, null);
        //        int maxcount = TypeConverter.ConvertToInt(argements[1].getValue(), null, null);

        //        if (maxcount < 0) { return new rtArray(); }


        //        var split = b.Split(new string[] { delimiter }, StringSplitOptions.None );
        //        rtArray result = new rtArray();
        //        for (int i = 0; i < split.Length && i<maxcount; i++)
        //        {
        //            result.innerArray.Add(new rtString(split[i]));
        //        }

        //        return result;
        //    }

        //}

        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;

                stackframe.throwError(token,1009,"Cannot access a property or method of a null object reference.");
                returnSlot.directSet(rtUndefined.undefined);
            }
            else
            {
                success = true;
                string delimiter = TypeConverter.ConvertToString(argements[0],stackframe,token);
                int    maxcount  = TypeConverter.ConvertToInt(argements[1]);

                if (maxcount < 0)                 //{ return new rtArray(); }
                {
                    returnSlot.directSet(new rtArray());
                    return;
                }

                var     split  = b.Split(new string[] { delimiter },StringSplitOptions.None);
                rtArray result = new rtArray();
                for (int i = 0; i < split.Length && i < maxcount; i++)
                {
                    result.innerArray.Add(new rtString(split[i]));
                }

                //return result;
                returnSlot.directSet(result);
            }
        }
コード例 #2
0
        public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            string str = TypeConverter.ConvertToString(argements[0],stackframe,token);

            DynamicObject result = (DynamicObject)((rtObjectBase)argements[1]).value;

            bool noglobal = TypeConverter.ConvertToBoolean(argements[2],stackframe,token).value;

            bool   global    = TypeConverter.ConvertToBoolean(((rtObjectBase)thisObj).value.memberData[3].getValue(), stackframe, token).value;
            string source    = TypeConverter.ConvertToString(((rtObjectBase)thisObj).value.memberData[6].getValue(), stackframe, token);
            double lastIndex = TypeConverter.ConvertToNumber(((rtObjectBase)thisObj).value.memberData[7].getValue());

            if (noglobal)
            {
                global = false;
            }


            if (source != null)
            {
                System.Text.RegularExpressions.Regex regex = (System.Text.RegularExpressions.Regex)((HostedObject)((rtObjectBase)((rtObjectBase)thisObj).value.memberData[8].getValue()).value).hosted_object;


                var match = regex.Match(str, global ? (int)lastIndex : 0);

                if (match.Success)
                {
                    var index = new DynamicPropertySlot((rtObjectBase)argements[1], true, stackframe.player.swc.FunctionClass.getRtType());
                    index.directSet(new rtInt(match.Index));
                    result.createproperty("index", index);


                    rtArray array = (rtArray)result.memberData[0].getValue();

                    for (int i = 0; i < match.Groups.Count; i++)
                    {
                        array.innerArray.Add(new rtString(match.Groups[i].Value));
                    }

                    if (global)
                    {
                        ((rtNumber)((rtObjectBase)thisObj).value.memberData[7].getValue()).value = match.Index + match.Length;
                    }

                    returnSlot.directSet(argements[1]);
                }
                else
                {
                    returnSlot.directSet(rtNull.nullptr);
                }

                success = true;
                //returnSlot.directSet(issuccess ? rtBoolean.True : rtBoolean.False);
            }
            else
            {
                success = true;
                returnSlot.directSet(rtNull.nullptr);
            }
        }
コード例 #3
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    rtArray arr = (rtArray)((rtObject)thisObj).value.memberData[0].getValue();

        //    int idx = ((rtInt)argements[0].getValue()).value;
        //    if (idx < 0)
        //    {
        //        idx = arr.innerArray.Count + idx;
        //        if (idx < 0) { idx = 0; }
        //    }
        //    else if (idx > arr.innerArray.Count-1)
        //    {
        //        return rtUndefined.undefined;
        //    }

        //    var r = arr.innerArray[idx];
        //    arr.innerArray.RemoveAt(idx);
        //    return r;

        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;
            rtArray arr = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue();

            int idx = ((rtInt)argements[0]).value;

            if (idx < 0)
            {
                idx = arr.innerArray.Count + idx;
                if (idx < 0)
                {
                    idx = 0;
                }
            }
            else if (idx > arr.innerArray.Count - 1)
            {
                returnSlot.directSet(rtUndefined.undefined);
            }

            var r = arr.innerArray[idx];

            arr.innerArray.RemoveAt(idx);
            //return r;
            returnSlot.directSet(r);
        }
コード例 #4
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        //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();
        }
コード例 #5
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    if (((rtArray)argements[0].getValue()).objHandle.bindArrayObject == null)
        //    {
        //        return rtNull.nullptr;
        //    }
        //    else
        //    {
        //        return ((rtArray)argements[0].getValue()).objHandle.bindArrayObject;
        //    }
        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;

            if (((rtArray)argements[0]).objHandle.bindArrayObject == null)
            {
                //return rtNull.nullptr;
                returnSlot.directSet(rtNull.nullptr);
            }
            else
            {
                //return ((rtArray)argements[0].getValue()).objHandle.bindArrayObject;
                returnSlot.directSet(((rtArray)argements[0]).objHandle.bindArrayObject);
            }
        }
コード例 #6
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        //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);
            }
        }
コード例 #7
0
        //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
        //    {
        //        string search = TypeConverter.ConvertToString(argements[0].getValue(), null, null);
        //        int st = TypeConverter.ConvertToInt(argements[1].getValue(), null, null);

        //        return new rtInt(  b.IndexOf(search,st));

        //    }

        //}
        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)
            {
                //errormessage = "Cannot access a property or method of a null object reference.";
                //errorno = 1009;

                //return ASBinCode.rtData.rtUndefined.undefined;

                success = false;

                stackframe.throwError(token,1009,"Cannot access a property or method of a null object reference.");

                returnSlot.directSet(rtUndefined.undefined);
            }
            else
            {
                string search = TypeConverter.ConvertToString(argements[0],null,null);
                int    st     = TypeConverter.ConvertToInt(argements[1]);

                //return new rtInt(b.IndexOf(search, st));
                success = true;

                returnSlot.setValue(b.IndexOf(search,st));
            }
        }
            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);
                }
            }
コード例 #9
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    if (argements.Length < 1)
        //    {
        //        errormessage = "参数不足";
        //        errorno = 0;
        //        return ASBinCode.rtData.rtUndefined.undefined;
        //    }
        //    else
        //    {
        //        var v = argements[0].getValue();
        //        int r = TypeConverter.ConvertToInt(v, null, null);

        //        if (r < 0 || r > 20)
        //        {
        //            errormessage = "Number.toPrecision has a range of 1 to 21. Number.toFixed and Number.toExponential have a range of 0 to 20. Specified value is not within expected range.";
        //            errorno = 1002;

        //            return ASBinCode.rtData.rtUndefined.undefined;
        //        }
        //        else
        //        {
        //            errormessage = null;
        //            errorno = 0;

        //            return
        //                new rtString(

        //                ((rtNumber)((rtObject)thisObj).value.memberData[0].getValue()).value.ToString("f" + (r))

        //                );
        //        }



        //    }


        //}


        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            {
                var v = argements[0];
                int r = TypeConverter.ConvertToInt(v);

                if (r < 0 || r > 20)
                {
                    success = false;
                    stackframe.throwError(token,1002,"Number.toPrecision has a range of 1 to 21. Number.toFixed and Number.toExponential have a range of 0 to 20. Specified value is not within expected range.");

                    returnSlot.directSet(rtUndefined.undefined);
                }
                else
                {
                    //errormessage = null;
                    //errorno = 0;

                    //return
                    //	new rtString(

                    //	((rtInt)((rtObject)thisObj).value.memberData[0].getValue()).value.ToString("f" + (r))

                    //	);

                    success = true;

                    returnSlot.setValue(((rtNumber)((rtObjectBase)thisObj).value.memberData[0].getValue()).value.ToString("f" + (r)));
                }
            }
        }
コード例 #10
0
        //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
        //    {

        //        string pattern = TypeConverter.ConvertToString(argements[0].getValue(), null, null);
        //        string repl = TypeConverter.ConvertToString(argements[1].getValue(), null, null);

        //        if (pattern == null) pattern = string.Empty;
        //        if (repl == null) repl = string.Empty;


        //        return new rtString(b.Replace(pattern, repl));


        //    }

        //}

        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;

                stackframe.throwError(token,1009,"Cannot access a property or method of a null object reference.");
                returnSlot.directSet(rtUndefined.undefined);
            }
            else
            {
                success = true;
                string pattern = TypeConverter.ConvertToString(argements[0],null,null);
                string repl    = TypeConverter.ConvertToString(argements[1],null,null);

                if (pattern == null)
                {
                    pattern = string.Empty;
                }
                if (repl == null)
                {
                    repl = string.Empty;
                }


                //return new rtString(b.Replace(pattern, repl));
                returnSlot.setValue(b.Replace(pattern,repl));
            }
        }
コード例 #11
0
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                Class _arraylist_ = ((ASBinCode.rtData.rtObjectBase)thisObj).value._class;

                var arr = stackframe.player.alloc_pureHostedOrLinkedObject(_arraylist_.instanceClass);

                LinkSystemObject linkobj = (LinkSystemObject)arr.value;


                try
                {
                    int capacity = TypeConverter.ConvertToInt(argements[0]);

                    linkobj.SetLinkData(new ArrayList(capacity));

                    returnSlot.directSet(arr);

                    success = true;
                }
                //catch (KeyNotFoundException)
                //{
                //    success = false;
                //    stackframe.throwArgementException(token, "类型" + argements[0].rtType + "不是一个链接到系统类库的对象,不能创建托管数组");
                //}
                catch (ArgumentOutOfRangeException a)
                {
                    success = false;
                    stackframe.throwAneException(token,a.Message);
                }
                catch
                {
                    throw new EngineException();
                }
            }
コード例 #12
0
 public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
 {
     ((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value
         = new ArrayList();
     returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
     success = true;
 }
コード例 #13
0
 public override void execute3(RunTimeValueBase thisObj,
                               FunctionDefine functionDefine,
                               SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
 {
     success = true;
     returnSlot.directSet(thisObj);
 }
コード例 #14
0
            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,"参数elementType不能为null");

                    return;
                }


                Class _arraylist_ = ((ASBinCode.rtData.rtObjectBase)thisObj).value._class;

                var arr = stackframe.player.alloc_pureHostedOrLinkedObject(_arraylist_.instanceClass);

                LinkSystemObject linkobj = (LinkSystemObject)arr.value;


                try
                {
                    object lo;
                    if (stackframe.player.linktypemapper.rtValueToLinkObject(
                            argements[0],

                            stackframe.player.linktypemapper.getLinkType(
                                functionDefine.signature.parameters[0].type
                                ),

                            bin,true,out lo
                            ))
                    {
                        linkobj.SetLinkData(new ArrayList((ICollection)lo));

                        returnSlot.directSet(arr);

                        success = true;
                    }
                    else
                    {
                        stackframe.throwCastException(token,argements[0].rtType,
                                                      functionDefine.signature.parameters[0].type
                                                      );
                        success = false;
                    }
                }
                catch (KeyNotFoundException)
                {
                    success = false;
                    stackframe.throwArgementException(token,"类型" + argements[0].rtType + "不是一个链接到系统类库的对象,不能创建托管数组");
                }
                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)
            {
                RefOutStore _this =
                    (RefOutStore)((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value).GetLinkData();

                try
                {
                    string        arg0 = TypeConverter.ConvertToString(argements[0],stackframe,token);
                    System.Object arg1;
                    {
                        object _temp;
                        if (!stackframe.player.linktypemapper.rtValueToLinkObject(
                                argements[1],

                                stackframe.player.linktypemapper.getLinkType(argements[1].rtType)
                                ,
                                bin,true,out _temp
                                ))
                        {
                            stackframe.throwCastException(token,argements[1].rtType,

                                                          functionDefine.signature.parameters[1].type
                                                          );
                            success = false;
                            return;
                        }
                        arg1 = (System.Object)_temp;
                    }

                    _this.SetValue((System.String)arg0,(System.Object)arg1)
                    ;
                    returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
                    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);
                }
            }
コード例 #16
0
        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 autogencodelib_TestobjAdapter();
                returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);


                ((ICrossExtendAdapter)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value)
                .SetAS3RuntimeEnvironment(stackframe.player,((ASBinCode.rtData.rtObjectBase)thisObj).value._class,(ASBinCode.rtData.rtObjectBase)thisObj);


                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);
            }
        }
コード例 #17
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    rtArray arr = (rtArray)((rtObject)thisObj).value.memberData[0].getValue();

        //    int idx = ((rtInt)argements[0].getValue()).value;
        //    var toinsert = argements[1].getValue();
        //    if (idx < 0)
        //    {
        //        idx = arr.innerArray.Count + idx;
        //        if (idx < 0) { idx = 0; }
        //    }
        //    else if (idx > arr.innerArray.Count)
        //    {
        //        idx = arr.innerArray.Count;
        //    }

        //    arr.innerArray.Insert(idx, toinsert);


        //    return rtUndefined.undefined;

        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;

            rtArray arr = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue();

            int idx      = ((rtInt)argements[0]).value;
            var toinsert = argements[1];

            if (idx < 0)
            {
                idx = arr.innerArray.Count + idx;
                if (idx < 0)
                {
                    idx = 0;
                }
            }
            else if (idx > arr.innerArray.Count)
            {
                idx = arr.innerArray.Count;
            }

            arr.innerArray.Insert(idx,(RunTimeValueBase)toinsert.Clone());

            returnSlot.directSet(rtUndefined.undefined);
            //return rtUndefined.undefined;
        }
コード例 #18
0
        public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot, SourceToken token, StackFrame stackframe, out bool success)
        {
            double value = TypeConverter.ConvertToNumber(argements[0]);

            ((LinkObj<UInt64>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value = (UInt64)value;
            returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
            success = true;
        }
コード例 #19
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    rtArray arr = (rtArray)((rtObject)thisObj).value.memberData[0].getValue();

        //    int startindex =  ((rtInt)argements[0].getValue()).value;
        //    int endindex = ((rtInt)argements[1].getValue()).value;

        //    if (startindex >= arr.innerArray.Count)
        //    {
        //        return new rtArray();
        //    }
        //    else if (startindex < 0)
        //    {
        //        startindex = arr.innerArray.Count + startindex;
        //        if (startindex < 0)
        //        {
        //            startindex = 0;
        //        }
        //    }

        //    if (endindex > arr.innerArray.Count)
        //    {
        //        endindex = arr.innerArray.Count ;
        //    }
        //    else if (endindex < 0)
        //    {
        //        endindex = arr.innerArray.Count + endindex;
        //        if (endindex < 0)
        //        {
        //            endindex = 0;
        //        }
        //    }

        //    rtArray newArray = new rtArray();
        //    for (int i = startindex; i < endindex; i++)
        //    {
        //        newArray.innerArray.Add(arr.innerArray[i]);
        //    }

        //    return newArray;

        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;

            rtArray arr = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue();

            int startindex = ((rtInt)argements[0]).value;
            int endindex   = ((rtInt)argements[1]).value;

            if (startindex >= arr.innerArray.Count)
            {
                //return new rtArray();
                returnSlot.directSet(new rtArray());
            }
            else if (startindex < 0)
            {
                startindex = arr.innerArray.Count + startindex;
                if (startindex < 0)
                {
                    startindex = 0;
                }
            }

            if (endindex > arr.innerArray.Count)
            {
                endindex = arr.innerArray.Count;
            }
            else if (endindex < 0)
            {
                endindex = arr.innerArray.Count + endindex;
                if (endindex < 0)
                {
                    endindex = 0;
                }
            }

            rtArray newArray = new rtArray();

            for (int i = startindex; i < endindex; i++)
            {
                newArray.innerArray.Add((RunTimeValueBase)arr.innerArray[i].Clone());
            }

            returnSlot.directSet(newArray);
            //return newArray;
        }
コード例 #20
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    rtArray arr = (rtArray)((rtObject)thisObj).value.memberData[0].getValue();
        //    arr.innerArray.Reverse();
        //    return arr;


        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;
            rtArray arr = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue();

            arr.innerArray.Reverse();
            //return arr;
            returnSlot.directSet(arr);
        }
コード例 #21
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    ((rtObject)argements[0].getValue()).value.memberData[0].directSet(argements[1].getValue());
        //    ((rtArray)argements[1].getValue()).objHandle.bindArrayObject = ((rtObject)argements[0].getValue());

        //    errormessage = null;
        //    errorno = 0;
        //    return rtUndefined.undefined;

        //    //throw new NotImplementedException();
        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            ((rtObjectBase)argements[0]).value.memberData[0].directSet(argements[1]);
            ((rtArray)argements[1]).objHandle.bindArrayObject = ((rtObjectBase)argements[0]);

            success = true;
            returnSlot.directSet(rtUndefined.undefined);
            //return rtUndefined.undefined;
        }
コード例 #22
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 str = TypeConverter.ConvertToString(argements[0],stackframe,token);


            bool   global    = TypeConverter.ConvertToBoolean(((rtObjectBase)thisObj).value.memberData[3].getValue(), stackframe, token).value;
            string source    = TypeConverter.ConvertToString(((rtObjectBase)thisObj).value.memberData[6].getValue(), stackframe, token);
            double lastIndex = TypeConverter.ConvertToNumber(((rtObjectBase)thisObj).value.memberData[7].getValue());


            if (source != null)
            {
                System.Text.RegularExpressions.Regex regex = (System.Text.RegularExpressions.Regex)((HostedObject)((rtObjectBase)((rtObjectBase)thisObj).value.memberData[8].getValue()).value).hosted_object;

                bool issuccess;
                var  match = regex.Match(str, global ? (int)lastIndex : 0);
                if (match.Success)
                {
                    issuccess = true;

                    if (global)
                    {
                        ((rtNumber)((rtObjectBase)thisObj).value.memberData[7].getValue()).value = match.Index + match.Length;
                    }
                }
                else
                {
                    issuccess = false;
                }



                success = true;
                returnSlot.directSet(issuccess ? rtBoolean.True : rtBoolean.False);
            }
            else
            {
                success = true;
                returnSlot.directSet(rtBoolean.False);
            }
        }
コード例 #23
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,  out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;

        //    rtArray arr = (rtArray)((rtObject)thisObj).value.memberData[0].getValue();

        //    if (arr.innerArray.Count > 0)
        //    {
        //        var result = arr.innerArray[arr.innerArray.Count - 1];
        //        arr.innerArray.RemoveAt(arr.innerArray.Count-1);
        //        return result;
        //    }
        //    else
        //    {
        //        return rtUndefined.undefined;
        //    }


        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;

            rtArray arr = (rtArray)((rtObjectBase)thisObj).value.memberData[0].getValue();

            if (arr.innerArray.Count > 0)
            {
                var result = arr.innerArray[arr.innerArray.Count - 1];
                arr.innerArray.RemoveAt(arr.innerArray.Count - 1);
                //return result;
                returnSlot.directSet(result);
            }
            else
            {
                //return rtUndefined.undefined;
                returnSlot.directSet(rtUndefined.undefined);
            }
        }
コード例 #24
0
        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;

            int length = TypeConverter.ConvertToInt(argements[0]);

            ((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value =
                new T[length];

            returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
        }
コード例 #25
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno)
        //{
        //    errormessage = null;
        //    errorno = 0;
        //    ASBinCode.rtti.YieldObject yieldObj = (ASBinCode.rtti.YieldObject)
        //        ((ASBinCode.rtData.rtObject)thisObj).value;


        //    var result= yieldObj.returnSlot.getValue();
        //    //yieldObj.returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
        //    return result;
        //}

        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            success = true;
            ASBinCode.rtti.YieldObject yieldObj = (ASBinCode.rtti.YieldObject)
                                                      ((ASBinCode.rtData.rtObjectBase)thisObj).value;


            var result = yieldObj.returnSlot.getValue();

            //yieldObj.returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
            returnSlot.directSet(result);
        }
            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(argements[0].rtType)
                            ,
                            bin, true, out _temp
                            ))
                        {
                            stackframe.throwCastException(token, argements[0].rtType,

                                functionDefine.signature.parameters[0].type
                                );
                            success = false;
                            return;
                        }
                        arg0 = (ASBinCode.RunTimeValueBase)_temp;
                    }

                    ((LinkObj<object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value =
                        new ASRuntime.nativefuncs.linksystem.Iterator((ASBinCode.RunTimeValueBase)arg0, stackframe.player);
                    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);
                }
            }
コード例 #27
0
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                Queue queue =
                    (System.Collections.Queue)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value;

                try
                {
                    object lo;
                    if (stackframe.player.linktypemapper.rtValueToLinkObject(
                            argements[0],

                            stackframe.player.linktypemapper.getLinkType(argements[0].rtType)
                            ,
                            bin,true,out lo
                            ))
                    {
                        queue.Enqueue(lo);

                        returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);

                        success = true;
                    }
                    else
                    {
                        stackframe.throwCastException(token,argements[0].rtType,

                                                      functionDefine.signature.parameters[0].type
                                                      );
                        success = false;
                    }
                }
                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);
                }
            }
コード例 #28
0
        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,"参数elementType不能为null");

                return;
            }

            Class cls     = bin.getClassByRunTimeDataType(argements[0].rtType).instanceClass;
            int   length1 = TypeConverter.ConvertToInt(argements[1]);
            int   length2 = TypeConverter.ConvertToInt(argements[2]);

            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,length1,length2));

                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();
            }
        }
コード例 #29
0
        //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 len = 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 (len < 0)
        //        {
        //            len = 0;
        //        }


        //        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;

                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 len = 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 (len < 0)
                {
                    len = 0;
                }


                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));
                }
            }
        }
コード例 #30
0
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                RunTimeValueBase kv = argements[0];

                if (kv.rtType > RunTimeDataType.unknown)
                {
                    RunTimeDataType ot;
                    if (TypeConverter.Object_CanImplicit_ToPrimitive(
                            bin.getClassByRunTimeDataType(kv.rtType),out ot
                            ))
                    {
                        kv = TypeConverter.ObjectImplicit_ToPrimitive((ASBinCode.rtData.rtObjectBase)kv);
                    }
                }
                DictionaryKey key = new DictionaryKey(kv,true);

                try
                {
                    //链接结构体,不能缓存到变量,必须直接对其赋值....
                    (((LinkObj <DictionaryEntry>)
                          ((ASBinCode.rtData.rtObjectBase)thisObj).value).value).Key = key;


                    returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
                    //returnSlot.setValue((int)array.GetValue(index));
                    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);
                }
            }