コード例 #1
0
        void IBlockCallBack.call(object args)
        {
#if DEBUG
            clear_para_slot(invokerFrame,onstackparametercount);
#else
            {
                int count = onstackparametercount;
                while (count > 0)
                {
                    --count;
                    StackSlot slot = invokerFrame.stack[invokerFrame.baseBottomSlotIndex + (--invokerFrame.call_parameter_slotCount)];
                    if (slot.refPropChanged)
                    {
                        slot.refPropChanged = false;
                        slot.stackObjects   = StackSlot.StackObjects.EMPTY;

                        if (slot.needclear)
                        {
                            slot.linktarget = null;
                            slot._cache_arraySlot.clear();
                            slot._cache_vectorSlot.clear();
                            slot._cache_prototypeSlot.clear();
                            slot._cache_setthisslot.clear();
                            slot._linkObjCache.clearRefObj();
                            slot._functionValue.Clear();
                            slot._functon_result.Clear();
                            slot.needclear = false;
                        }


                        slot.store[StackSlot.COMMREFTYPEOBJ] = ASBinCode.rtData.rtNull.nullptr;
                    }
                    slot.index = (int)RunTimeDataType.unknown;
                }
            }
#endif


            onstackparametercount = 0;
            invokerFrame.endStepNoError();
            //release();
            //人肉内联release

            if (!hasReleased)
            {
                hasReleased = true;
                callbacker  = null;

                CallFuncHeap = null;
                toCallFunc   = null;
                returnSlot   = null;
                _tempSlot    = null;
                invokerFrame = null;
                token        = null;
                tag          = null;
                function.Clear();

                player.funcCallerPool.ret(this);
            }
        }
コード例 #2
0
        // try to scan decimal real (float or double) literal (fractional part of it)
        //      real fractional: .(decimal)[(eE)(+-)(decimal)]
        private bool ScanReal(out SourceToken token)
        {
            var result = FromTokenWhile(".", numeric, false, null, true, out token);

            if (Match(result))
            {
                // optional E/e part
                if (CheckAny("eE") != NO_MATCH)
                {
                    ++token.Length;

                    // optional +/- after exponent sign
                    if (CheckAny("+-") != NO_MATCH)
                    {
                        ++token.Length;
                    }

                    // exponent digits
                    SourceToken exp;
                    if (ScanDecimal(out exp))
                    {
                        token.Length += exp.Length;
                    }
                }

                // optional postfix
                if (ScanRealPostfix())
                {
                    ++token.Length;
                }
            }

            return(Match(result));
        }
コード例 #3
0
        public void release()
        {
            if (!hasReleased)
            {
                //check_para_id = 0;
                //pushedArgs = 0;
                //onstackparametercount = 0;

                hasReleased = true;
                callbacker  = null;


                CallFuncHeap = null;
                toCallFunc   = null;
                returnSlot   = null;
                _tempSlot    = null;
                invokerFrame = null;
                token        = null;
                tag          = null;
                function.Clear();



                player.funcCallerPool.ret(this);
            }
        }
コード例 #4
0
 public override void execute3(RunTimeValueBase thisObj,
                               FunctionDefine functionDefine,
                               SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
 {
     success = true;
     returnSlot.directSet(thisObj);
 }
コード例 #5
0
        public sealed override void executeAsync(RunTimeValueBase thisObj,
                                                 SLOT[] argements,SLOT resultSlot,object callbacker,
                                                 object stackframe,SourceToken token,RunTimeScope scope)
        {
            ASBinCode.rtti.YieldObject yieldObj = (ASBinCode.rtti.YieldObject)
                                                      ((ASBinCode.rtData.rtObjectBase)thisObj).value;

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

            yieldObj._moveNextResultSlot = resultSlot;
            yieldObj._callbacker         = callbacker;


            StackFrame frame        = (StackFrame)stackframe;
            var        toCallFunc   = yieldObj.yield_function;
            var        CallFuncHeap = yieldObj.argements;

            CallFuncHeap[CallFuncHeap.Length - 1].directSet(ASBinCode.rtData.rtBoolean.False);


            BlockCallBackBase cb = frame.player.blockCallBackPool.create();

            cb.args = yieldObj;
            cb.setCallBacker(_movenext_callbacker);


            frame.player.callBlock(
                frame.player.swc.blocks[toCallFunc.blockid],
                CallFuncHeap,
                yieldObj.returnSlot,
                yieldObj.function_bindscope,
                token,cb,yieldObj.thispointer,RunTimeScopeType.function);
        }
コード例 #6
0
 // try to scan comment token (both // and /* */ types)
 //      single line: // <any> <line end>
 //      multiline:   /* <any> */
 private bool ScanComment(out SourceToken token)
 {
     return(Match(AnyMatch(
                      out token,
                      (out SourceToken t) => FromTokenWhile("//", all, false, null, false, out t),
                      (out SourceToken t) => FromTo("/*", "*/", true, null, false, out t)
                      )));
 }
コード例 #7
0
        // try to scan identifier token (does not account for @)
        //      alpha(alphanum)
        //      alpha is [A - Z, a - z, _, <unicode ranges>]
        //      alphanum is [alpha, 0 - 9]
        private bool ScanIdent(out SourceToken token)
        {
            var result = FromSetWhile(
                alpha, alphanum, false, () => IsEscape(EscapeCheckContext.Identifier),
                out token
                );

            return(Match(result));
        }
コード例 #8
0
        // try to scan character literal
        //      character literal: '<characters or escapes>'
        //      count of included characters is not checked here
        private bool ScanCharacter(out SourceToken token)
        {
            var result = FromTo(
                "'", "'", false,
                () => IsEscape(EscapeCheckContext.Character),
                false, out token
                );

            return(Match(result));
        }
コード例 #9
0
        private FunctionCaller(Player player,StackFrame invokerFrame,SourceToken token)
        {
            this.player       = player;
            this.invokerFrame = invokerFrame;
            this.token        = token;

            check_para_id = 0;
            pushedArgs    = 0;
            hasReleased   = false;

            function = new ASBinCode.rtData.rtFunction(-1,false);
        }
コード例 #10
0
        public static bool init_static_class(Class cls,Player player,SourceToken token)
        {
            if (!player.static_instance.ContainsKey(cls.staticClass.classid))
            {
                int f = player.getRuntimeStackFlag();


                ASBinCode.RunTimeScope objScope;
                ASBinCode.rtti.Object  obj = makeObj(
                    player,token,
                    cls.staticClass,
                    null,null,out objScope).value;

                player.static_instance.Add(cls.staticClass.classid,
                                           new ASBinCode.rtData.rtObject(obj,objScope));

                if (cls.super != null)
                {
                    bool s = init_static_class(cls.super,player,token);

                    if (s)
                    {
                        ((DynamicObject)obj)._prototype_ = (DynamicObject)(player.static_instance[cls.super.staticClass.classid]).value;

                        bool result = player.step_toStackflag(f);

                        if (cls.classid != 2)
                        {
                            ((DynamicObject)((ASBinCode.rtData.rtObjectBase)obj.memberData[0].getValue()).value)["constructor"].directSet(player.static_instance[cls.staticClass.classid]);
                        }

                        return(result);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    bool result = player.step_toStackflag(f);

                    return(result);
                }
            }
            else
            {
                return(true);
            }
        }
コード例 #11
0
        // try to scan hexadecimal literal
        //      hexadecimal literal: 0x(hexadecimal)
        //      hexadecimal is [0 - 9, A - F, a - f]
        private bool ScanHexadecimal(out SourceToken token)
        {
            var result = Match(FromTokenWhile(
                                   hexprefixes, hexadecimal, false, null,
                                   false, out token
                                   ));

            if (result && ScanIntegerPostfix())
            {
                ++token.Length;
            }

            return(result);
        }
コード例 #12
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        public override void executeAsync(RunTimeValueBase thisObj,SLOT[] argements,SLOT resultSlot,object callbacker,object stackframe,SourceToken token,RunTimeScope scope)
        {
            IBlockCallBack cb    = (IBlockCallBack)callbacker;
            StackFrame     frame = (StackFrame)stackframe;

            if (argements[0].getValue().rtType == RunTimeDataType.rt_null)
            {
                if (frame.player.infoOutput != null)
                {
                    frame.player.infoOutput.Info(string.Empty);
                }
                cb.call(cb.args);
                return;
            }

            rtArray array = (rtArray)(argements[0].getValue());

            if (array.innerArray.Count == 0)
            {
                if (frame.player.infoOutput != null)
                {
                    frame.player.infoOutput.Info(string.Empty);
                }
                cb.call(cb.args);
                return;
            }


            BlockCallBackBase sepcb = frame.player.blockCallBackPool.create();

            sepcb.scope   = scope;
            sepcb._intArg = 0;
            sepcb.setCallBacker(null);
            sepcb._intArg2 = 0;

            object[] sendargs = sepcb.cacheObjects;
            sendargs[0] = cb;
            sendargs[1] = array;
            sendargs[2] = frame;
            sendargs[3] = token;
            sendargs[4] = scope;
            sendargs[5] = " ";
            sendargs[6] = new StringBuilder();
            sendargs[7] = resultSlot;
            //sendargs[8] = new rtInt(0);
            sepcb.args = sendargs;

            _SeptoString_CB(sepcb,sendargs);
        }
コード例 #13
0
            public FunctionCaller create(StackFrame invokerFrame, SourceToken token)
            {
                FunctionCaller fc = base.create();

                fc.invokerFrame          = invokerFrame;
                fc.token                 = token;
                fc.player                = player;
                fc.check_para_id         = 0;
                fc.pushedArgs            = 0;
                fc.hasReleased           = false;
                fc.onstackparametercount = 0;
                fc.tag = null;

                //fc.function.Clear();

                return(fc);
            }
コード例 #14
0
        // try to scan verbatim string literal
        //      verbatim string: @"<chars, no escapes, line breaks allowed>"("<chars>")
        private ScanResult ScanVerbatimString(InnerScan inner, out SourceToken token)
        {
            var result = FromTo("@\"", "\"", true, inner, false, out token);

            // continue with contigous double quoted strings only if there was full match
            if (result == ScanResult.Match)
            {
                SourceToken tok;
                ScanResult  next;
                while (Match(next = FromTo("\"", "\"", true, inner, false, out tok)))
                {
                    result        = next;
                    token.Length += tok.Length;
                }
            }

            return(result);
        }
コード例 #15
0
        public void clear()
        {
            token             = null;
            _class            = null;
            step              = null;
            callbacker        = null;
            constructorCaller = null;
            objectResult      = null;

            constructor           = null;
            _function_constructor = null;
            objectStoreToSlot     = null;

            toNoticeFailed1 = null;
            toNoticeFailed2 = null;


            tempSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);
        }
コード例 #16
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Target.Length != 0)
            {
                hash ^= Target.GetHashCode();
            }
            if (Type != global::Google.Cloud.Functions.V1.OperationType.OperationUnspecified)
            {
                hash ^= Type.GetHashCode();
            }
            if (request_ != null)
            {
                hash ^= Request.GetHashCode();
            }
            if (VersionId != 0L)
            {
                hash ^= VersionId.GetHashCode();
            }
            if (updateTime_ != null)
            {
                hash ^= UpdateTime.GetHashCode();
            }
            if (BuildId.Length != 0)
            {
                hash ^= BuildId.GetHashCode();
            }
            if (SourceToken.Length != 0)
            {
                hash ^= SourceToken.GetHashCode();
            }
            if (BuildName.Length != 0)
            {
                hash ^= BuildName.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
コード例 #17
0
        public override void executeAsync(RunTimeValueBase thisObj,SLOT[] argements,
                                          SLOT resultSlot,object callbacker,object stackframe,SourceToken token,RunTimeScope scope)
        {
            IBlockCallBack cb    = (IBlockCallBack)callbacker;
            StackFrame     frame = (StackFrame)stackframe;

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

            if (array.innerArray.Count == 0)
            {
                cb.call(cb.args);
                resultSlot.directSet(new rtString(string.Empty));
                return;
            }


            BlockCallBackBase sepcb = frame.player.blockCallBackPool.create();

            sepcb.scope   = scope;
            sepcb._intArg = 0;

            object[] sendargs = sepcb.cacheObjects;
            sendargs[0] = cb;
            sendargs[1] = array;
            sendargs[2] = frame;
            sendargs[3] = token;
            sendargs[4] = scope;
            sendargs[5] = argements[0].getValue();
            sendargs[6] = new StringBuilder();
            sendargs[7] = resultSlot;
            sendargs[8] = new rtInt(0);

            sepcb.args = sendargs;
            sepcb.setCallBacker(D_SeptoString_CB);

            operators.OpCast.CastValue(argements[0].getValue(),RunTimeDataType.rt_string,
                                       frame,token,scope,frame._tempSlot1,sepcb,false);
        }
コード例 #18
0
        public static void pushAllElementToVector(ASBinCode.rtti.Vector_Data vd,
                                                  List <RunTimeValueBase> datalist, StackFrame frame, SourceToken token,
                                                  RunTimeScope scope,
                                                  IBlockCallBack callbacker
                                                  )
        {
            BlockCallBackBase convertCb = frame.player.blockCallBackPool.create();

            convertCb._intArg = 0;
            convertCb.setCallBacker(_convertCB);

            object[] args = convertCb.cacheObjects;             //new object[6];
            args[0]        = vd;
            args[1]        = datalist;
            args[2]        = token;
            args[3]        = scope;
            args[4]        = callbacker;
            args[5]        = frame;
            convertCb.args = args;

            OpCast.CastValue(datalist[convertCb._intArg],
                             vd.vector_type, frame, token, scope, frame._tempSlot1,
                             convertCb, false);
        }
コード例 #19
0
        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            //var v = (stackframe.player.alloc_pureHostedOrLinkedObject(((ASBinCode.rtData.rtObjectBase)thisObj).value._class.instanceClass));
            var cls = stackframe.player.swc.getClassByRunTimeDataType(functionDefine.signature.returnType);

            object lo;

            if (stackframe.player.linktypemapper.rtValueToLinkObject(
                    argements[0],

                    stackframe.player.linktypemapper.getLinkType(cls.getRtType()),

                    bin,true,out lo
                    ))
            {
                ((StackSlot)returnSlot).setLinkObjectValue(cls,stackframe.player,lo);

                success = true;
            }
            else
            {
                stackframe.throwCastException(token,argements[0].rtType,
                                              cls.getRtType()
                                              );
                success = false;
            }
        }
コード例 #20
0
        public override void execute2(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT[] argements,SLOT returnSlot,SourceToken token,object stackframe,out bool success)
        {
            //base.execute2(thisObj, functionDefine, argements, returnSlot, stackframe, out success);
            success = true;

            var a1 = argements[0].getValue();
            var a2 = argements[1].getValue();

            if (a1.rtType == a2.rtType && a1.rtType == RunTimeDataType.rt_null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.True);
                return;
            }


            ASBinCode.rtData.rtObjectBase obj = a1 as ASBinCode.rtData.rtObjectBase;
            if (obj == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            LinkSystemObject o1 = obj.value as LinkSystemObject;

            if (o1 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }


            ASBinCode.rtData.rtObjectBase obj2 = a2 as ASBinCode.rtData.rtObjectBase;
            if (obj2 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            LinkSystemObject o2 = obj2.value as LinkSystemObject;

            if (o2 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            if (object.ReferenceEquals(o1.GetLinkData(),o2.GetLinkData()))
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.True);
                return;
            }
            else
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }
        }
コード例 #21
0
        public override void execute2(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT[] argements,SLOT returnSlot,SourceToken token,object stackframe,out bool success)
        {
            //base.execute2(thisObj, functionDefine, argements, returnSlot, stackframe, out success);
            success = true;

            ASBinCode.rtData.rtObjectBase obj = argements[0].getValue() as ASBinCode.rtData.rtObjectBase;
            if (obj == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            LinkSystemObject o1 = obj.value as LinkSystemObject;

            if (o1 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }


            ASBinCode.rtData.rtObjectBase obj2 = argements[1].getValue() as ASBinCode.rtData.rtObjectBase;
            if (obj2 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            LinkSystemObject o2 = obj2.value as LinkSystemObject;

            if (o2 == null)
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }

            if (System.Object.Equals(o1,o2))
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.True);
                return;
            }
            else
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }
        }
コード例 #22
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            string classname = TypeConverter.ConvertToString(argements[0],stackframe,token);

            if (classname == null)
            {
                success = false;
                stackframe.throwArgementException(token,"Argument name cannot be null");
            }
            else
            {
                var c = bin.getClassDefinitionByName(classname);

                if (c != null)
                {
                    if (!operators.InstanceCreator.init_static_class(c,stackframe.player,token))
                    {
                        success = false;
                        return;
                    }
                    else
                    {
                        success = true;

                        returnSlot.directSet(stackframe.player.static_instance[c.staticClass.classid]);
                    }



                    //returnSlot.directSet(new ASBinCode.rtData.rtObject(c,null));
                }
                else
                {
                    success = false;
                    stackframe.throwError(token,1065,"Variable " + classname + " is not defined");
                }
            }
        }
コード例 #23
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;

        //    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));
        }
コード例 #24
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();
        }
コード例 #25
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;

        //    string str= TypeConverter.ConvertToString(argements[0].getValue(),null,null);
        //    uint radix = TypeConverter.ConvertToUInt(argements[1].getValue(), null, null);

        //    if (String.IsNullOrEmpty(str))
        //    {
        //        return new rtNumber(double.NaN);
        //    }
        //    //ASCII 48-57 : 0-9 ,65-90 : A-Z;

        //    str = str.ToUpper();
        //    str=str.TrimStart();
        //    str=str.TrimStart('0');

        //    if (radix == 0) { radix = 10; }
        //    if (radix < 2 || radix > 36) { return new rtNumber(double.NaN); }

        //    uint allowidx = 48 + radix;

        //    if (radix > 10)
        //    {
        //        allowidx = 65 + radix - 10;
        //    }

        //    double output = double.NaN;

        //    for (int i = 0; i < str.Length; i++)
        //    {
        //        char c = str[i];
        //        if (c < allowidx && ((c < 58 && c >= 48) || c>= 65))
        //        {
        //            if (double.IsNaN(output))
        //            {
        //                output = c < 58 ? (c - 48) : (c - 65 + 10);
        //            }
        //            else
        //            {
        //                output = output * radix + (c < 58 ? (c - 48) : (c - 65 + 10));
        //            }
        //        }
        //        else
        //        {
        //            break;
        //        }
        //    }


        //    return new rtNumber(output);

        //}

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

            string str   = TypeConverter.ConvertToString(argements[0],null,null);
            uint   radix = TypeConverter.ConvertToUInt(argements[1],null,null);

            if (String.IsNullOrEmpty(str))
            {
                returnSlot.setValue(double.NaN);
                //new rtNumber(double.NaN);
            }
            //ASCII 48-57 : 0-9 ,65-90 : A-Z;

            str = str.ToUpper();
            str = str.TrimStart();
            str = str.TrimStart('0');

            if (radix == 0)
            {
                radix = 10;
            }
            if (radix < 2 || radix > 36)
            {
                returnSlot.setValue(double.NaN);
            }                                                                            //return new rtNumber(double.NaN); }

            uint allowidx = 48 + radix;

            if (radix > 10)
            {
                allowidx = 65 + radix - 10;
            }

            double output = double.NaN;

            for (int i = 0; i < str.Length; i++)
            {
                char c = str[i];
                if (c < allowidx && ((c < 58 && c >= 48) || c >= 65))
                {
                    if (double.IsNaN(output))
                    {
                        output = c < 58 ? (c - 48) : (c - 65 + 10);
                    }
                    else
                    {
                        output = output * radix + (c < 58 ? (c - 48) : (c - 65 + 10));
                    }
                }
                else
                {
                    break;
                }
            }

            returnSlot.setValue(output);
            //return new rtNumber(output);
        }
コード例 #26
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);
            }
        }
コード例 #27
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        private void _ValueToString_CB(BlockCallBackBase sender,object args)
        {
            object[]   receiveArgs = (object[])sender.args;
            StackFrame frame       = (StackFrame)receiveArgs[2];
            rtArray    array       = (rtArray)receiveArgs[1];

            //((rtInt)receiveArgs[8]).value++;
            sender._intArg2++;

            if (sender._intArg2 == 10) //((rtInt)receiveArgs[8]).value == 10)    //堆栈清理,防止溢出...
            {
                sender._intArg2 = 0;   //((rtInt)receiveArgs[8]).value = 0;
                BlockCallBackBase valueCB = frame.player.blockCallBackPool.create();
                valueCB._intArg = sender._intArg; valueCB._intArg2 = 0;
                valueCB.args    = valueCB.copyFromReceiveArgs(receiveArgs);
                valueCB.setCallBacker(_ValueToString_CB);

                frame.player.CallBlankBlock(valueCB);
                return;
            }


            StringBuilder sb    = (StringBuilder)receiveArgs[6];
            SourceToken   token = (SourceToken)receiveArgs[3];

            string aSep = (string)receiveArgs[5];

            sb.Append(

                TypeConverter.ConvertToString(frame._tempSlot1.getValue(),frame,token) == null?"null":
                TypeConverter.ConvertToString(frame._tempSlot1.getValue(),frame,token)

                );
            if (sender._intArg < array.innerArray.Count)
            {
                sb.Append(aSep);


                BlockCallBackBase valueCB = frame.player.blockCallBackPool.create();
                valueCB._intArg = sender._intArg + 1; valueCB._intArg2 = sender._intArg2;
                valueCB.args    = valueCB.copyFromReceiveArgs(receiveArgs);
                valueCB.setCallBacker(_ValueToString_CB);

                var v = array.innerArray[sender._intArg];
                if (v.rtType == RunTimeDataType.rt_void)
                {
                    v = UNDEFINED;
                }

                operators.OpCast.CastValue(v,RunTimeDataType.rt_string,
                                           frame,
                                           (SourceToken)receiveArgs[3],
                                           (RunTimeScope)receiveArgs[4],
                                           frame._tempSlot1,
                                           valueCB,false
                                           );
            }
            else
            {
                //ISLOT result = (ISLOT)receiveArgs[7];

                //result.directSet(new rtString(sb.ToString()));
                if (frame.player.infoOutput != null)
                {
                    frame.player.infoOutput.Info(sb.ToString());
                }
                IBlockCallBack cb = (IBlockCallBack)receiveArgs[0];
                cb.call(cb.args);
            }
        }
コード例 #28
0
ファイル: __buildin__.cs プロジェクト: liuhong520/myHotUpdate
        public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
            var type = argements[0].rtType;

            switch (type)
            {
            case RunTimeDataType.fun_void:
                returnSlot.setValue("void");
                break;

            case RunTimeDataType.rt_array:
                returnSlot.setValue("Array");
                break;

            case RunTimeDataType.rt_boolean:
                returnSlot.setValue("Boolean");
                break;

            case RunTimeDataType.rt_function:
                returnSlot.setValue("Function");
                break;

            case RunTimeDataType.rt_int:
                returnSlot.setValue("int");
                break;

            case RunTimeDataType.rt_null:
                returnSlot.setValue("null");
                break;

            case RunTimeDataType.rt_number:
                returnSlot.setValue("Number");
                break;

            case RunTimeDataType.rt_string:
                returnSlot.setValue("String");
                break;

            case RunTimeDataType.rt_uint:
                returnSlot.setValue("uint");
                break;

            case RunTimeDataType.rt_void:
                returnSlot.setValue("void");
                break;

            case RunTimeDataType.unknown:
                returnSlot.setValue("void");
                break;

            case RunTimeDataType._OBJECT:
                returnSlot.setValue("Object");
                break;

            default:

                var c = stackframe.player.swc.getClassByRunTimeDataType(type);
                if (c.instanceClass != null)
                {
                    c = c.instanceClass;
                }

                returnSlot.setValue(c.package + "::" + c.name);
                break;
            }



            success = true;
        }
            public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                try
                {
                    ((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value = new RefOutStore();
                    returnSlot.directSet(ASBinCode.rtData.rtUndefined.undefined);

                    success = true;
                }
                catch (InvalidCastException ic)
                {
                    success = false;
                    stackframe.throwAneException(token,ic.Message);
                }
                catch (ArgumentException a)
                {
                    success = false;
                    stackframe.throwAneException(token,a.Message);
                }
                catch (IndexOutOfRangeException i)
                {
                    success = false;
                    stackframe.throwAneException(token,i.Message);
                }
                catch (NotSupportedException n)
                {
                    success = false;
                    stackframe.throwAneException(token,n.Message);
                }
            }
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                RefOutStore _this =
                    (RefOutStore)((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value).GetLinkData();

                try
                {
                    string arg0 = TypeConverter.ConvertToString(argements[0],stackframe,token);

                    object _result_ = _this.GetValue((System.String)arg0)
                    ;
                    stackframe.player.linktypemapper.storeLinkObject_ToSlot(_result_,functionDefine.signature.returnType,returnSlot,bin,stackframe.player);
                    success = true;
                }
                catch (ASRunTimeException tlc)
                {
                    success = false;
                    stackframe.throwAneException(token,tlc.Message);
                }
                catch (InvalidCastException ic)
                {
                    success = false;
                    stackframe.throwAneException(token,ic.Message);
                }
                catch (ArgumentException a)
                {
                    success = false;
                    stackframe.throwAneException(token,a.Message);
                }
                catch (IndexOutOfRangeException i)
                {
                    success = false;
                    stackframe.throwAneException(token,i.Message);
                }
                catch (NotSupportedException n)
                {
                    success = false;
                    stackframe.throwAneException(token,n.Message);
                }
            }