コード例 #1
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);
            }
        }
コード例 #2
0
        public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot, SourceToken token, StackFrame stackframe, out bool success)
        {
            LinkObj<UInt64> obj = ((LinkObj<UInt64>)((ASBinCode.rtData.rtObjectBase)thisObj).value);

            returnSlot.setValue((double)obj.value);
            success = true;
        }
コード例 #3
0
        private void _storeArgementToSlot(int id,RunTimeValueBase v)
        {
            var signature = toCallFunc.signature;

            if (signature.onStackParameters > 0)
            {
                ASBinCode.rtti.FunctionParameter fp = signature.parameters[id];

                if (fp.isOnStack)
                {
                    StackSlotAccessor r = (StackSlotAccessor)fp.varorreg;
                    //int index = invokerFrame.offset + invokerFrame.block.totalRegisters + 1 + 1+ invokerFrame.call_parameter_slotCount + r._index;
                    int index = invokerFrame.baseBottomSlotIndex + invokerFrame.call_parameter_slotCount + r._index;
                    invokerFrame.stack[index].directSet(v);
                }
                else
                {
                    CallFuncHeap[((Variable)fp.varorreg).indexOfMembers].directSet(
                        v

                        );
                }
            }
            else
            {
                CallFuncHeap[id].directSet(v);
            }
        }
コード例 #4
0
        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno)
        //{


        //}

        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;

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

                returnSlot.setValue(ASBinCode.rtData.rtUndefined.undefined);
            }
            else
            {
                success = true;
                int idx = TypeConverter.ConvertToInt(argements[0]);
                if (idx < 0 || idx >= b.Length)
                {
                    returnSlot.setValue(double.NaN);
                    //return new rtNumber(double.NaN);
                }
                else
                {
                    returnSlot.setValue((double)b[idx]);
                    //return new rtNumber(b[idx]);
                }
            }
        }
コード例 #5
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));
            }
        }
コード例 #6
0
        private void _finalStep(BlockCallBackBase sender,object args)
        {
            object[] a = (object[])sender.args;

            objectResult = (ASBinCode.rtData.rtObjectBase)a[0];

            //***如果有返回值****
            var returnvalue = ((SLOT)a[1]).getValue(); ((SLOT)a[1]).directSet(ASBinCode.rtData.rtUndefined.undefined);

            if (returnvalue.rtType != RunTimeDataType.rt_void
                &&
                returnvalue.rtType != RunTimeDataType.rt_string
                &&
                returnvalue.rtType != RunTimeDataType.rt_number
                &&
                returnvalue.rtType != RunTimeDataType.rt_int
                &&
                returnvalue.rtType != RunTimeDataType.rt_boolean
                &&
                returnvalue.rtType != RunTimeDataType.rt_uint
                )
            {
                objectResult = returnvalue;
            }

            //objectResult.directSet((ASBinCode.rtData.rtObject)sender.args);
            if (callbacker != null)
            {
                callbacker.call(this);
                callbacker = null;
            }
        }
コード例 #7
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();
                double r = TypeConverter.ConvertToNumber(v);


                {
                    errormessage = null;
                    errorno      = 0;

                    return
                        (new rtNumber(
                             Math.Abs(r)
                             ));
                }
            }
        }
コード例 #8
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);
            }
        }
コード例 #9
0
        public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements,object stackframe,out string errormessage,out int errorno)
        {
            errormessage = null;
            errorno      = 0;

            return(new ASBinCode.rtData.rtString(TypeConverter.ConvertToString(thisObj,null,null)));
        }
コード例 #10
0
        //public override NativeFunctionMode mode
        //{
        //    get
        //    {
        //        return NativeFunctionMode.normal_1;
        //    }
        //}

        //public override RunTimeValueBase execute(RunTimeValueBase thisObj, SLOT[] argements, object stackframe, out string errormessage, out int errorno)
        //{
        //    throw new ASRunTimeException();
        //}

        //public override void execute2(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT[] argements, SLOT returnSlot, SourceToken token, object stackframe, out bool success)
        //{

        //    success = true;

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

        //    LinkSystemObject other = obj.value as LinkSystemObject;
        //    if (other == null)
        //    {
        //        returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
        //        return;
        //    }


        //    LinkSystemObject iv = ((LinkSystemObject)((ASBinCode.rtData.rtObject)thisObj).value);

        //    if (System.Object.Equals(iv, other))
        //    {
        //        returnSlot.setValue(ASBinCode.rtData.rtBoolean.True);
        //        return;
        //    }
        //    else
        //    {
        //        returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
        //        return;
        //    }

        //}

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

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

            LinkSystemObject other = obj.value as LinkSystemObject;

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


            LinkSystemObject iv = ((LinkSystemObject)((ASBinCode.rtData.rtObjectBase)thisObj).value);

            if (System.Object.Equals(iv,other))
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.True);
                return;
            }
            else
            {
                returnSlot.setValue(ASBinCode.rtData.rtBoolean.False);
                return;
            }
        }
コード例 #11
0
        public StackSlot(CSWC classfinder,Player player)
        {
            this.player = player;
            store       = new RunTimeValueBase[(int)RunTimeDataType._OBJECT + 1];
            index       = (int)RunTimeDataType.unknown;

            _cache_arraySlot     = new operators.OpAccess_Dot.arraySlot(null,0,classfinder);
            _cache_vectorSlot    = new operators.OpVector.vectorSLot(null,0,classfinder);
            _cache_prototypeSlot = new operators.OpAccess_Dot.prototypeSlot(null,null,null);
            _cache_setthisslot   = new SetThisItemSlot();

            //存储器设置初始值
            for (int i = 0; i < RunTimeDataType._OBJECT + 1; i++)
            {
                RunTimeDataType t = (RunTimeDataType)i;
                if (t != RunTimeDataType.unknown)
                {
                    store[i] = TypeConverter.getDefaultValue(t).getValue(null,null);
                }
            }

            store[RunTimeDataType.rt_array]    = null;
            store[RunTimeDataType.rt_string]   = null;
            store[RunTimeDataType.rt_function] = null;


            _numberValue = (rtNumber)store[RunTimeDataType.rt_number];
            _intValue    = (rtInt)store[RunTimeDataType.rt_int];
            _uintValue   = (rtUInt)store[RunTimeDataType.rt_uint];
            _stringValue = new rtString(string.Empty);

            _functionValue  = new rtFunction(-1,false);
            _functon_result = new rtFunction(-1,false);
        }
コード例 #12
0
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                DictionaryEntry dictionaryEntry =
                    ((LinkObj <DictionaryEntry>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value;


                try
                {
                    object obj = dictionaryEntry.Value;

                    stackframe.player.linktypemapper.storeLinkObject_ToSlot(obj,functionDefine.signature.returnType,returnSlot,bin,stackframe.player);
                    //returnSlot.setValue((int)array.GetValue(index));
                    success = true;
                }
                catch (RuntimeLinkTypeMapper.TypeLinkClassException tlc)
                {
                    success = false;
                    stackframe.throwAneException(token,tlc.Message);
                }
                catch (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);
                }
            }
コード例 #13
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);
        }
コード例 #14
0
        public static void push_parameter_nativeconstpara(StackFrame frame, ASBinCode.OpStep step, RunTimeScope scope)
        {
            int id = ((rtInt)step.arg2.getValue(frame.scope, frame)).value;
            RunTimeValueBase arg = step.arg1.getValue(frame.scope, frame);

#if DEBUG
            if (frame.typeconvertoperator != null)
            {
                throw new EngineException();
            }
#endif

            var toCallFunc = frame.funCaller.toCallFunc; var player = frame.player;
            //if (toCallFunc.native_index < 0)
            //{
            //	toCallFunc.native_index = player.swc.nativefunctionNameIndex[toCallFunc.native_name];
            //}
            //var nf = (nativefuncs.NativeConstParameterFunction)player.swc.nativefunctions[toCallFunc.native_index];
            var nf = (nativefuncs.NativeConstParameterFunction)player.swc.getNativeFunction(toCallFunc);

            bool success;
            frame.funCaller.pushParameterNativeModeConstParameter(nf, arg, id, out success);

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

            string name   = TypeConverter.ConvertToString(argements[0].getValue(),null,null);
            bool   isEnum = TypeConverter.ConvertToBoolean(argements[1].getValue(),null,null).value;

            if (string.IsNullOrEmpty(name))
            {
                return(ASBinCode.rtData.rtUndefined.undefined);
            }

            ASBinCode.rtData.rtObjectBase obj = (ASBinCode.rtData.rtObjectBase)thisObj;
            if (!(obj.value is ASBinCode.rtti.DynamicObject))
            {
                return(ASBinCode.rtData.rtUndefined.undefined);
            }

            ASBinCode.rtti.DynamicObject dobj = (ASBinCode.rtti.DynamicObject)obj.value;

            if (dobj is ASBinCode.rtti.DictionaryObject)
            {
                return(ASBinCode.rtData.rtUndefined.undefined);
            }

            if (dobj.hasproperty(name))
            {
                dobj.setPropertyIsEnumerable(name,isEnum);
            }
            return(ASBinCode.rtData.rtUndefined.undefined);
        }
コード例 #17
0
        private void exec_step3(ASBinCode.rtData.rtObjectBase rtobject)
        {
            if (constructor == null)
            {
                objectResult = rtobject;
                //objectResult.directSet(rtobject);
                if (callbacker != null)
                {
                    callbacker.call(this);
                    callbacker = null;
                }
            }
            else
            {
                HeapSlot _temp = tempSlot; _temp.directSet(ASBinCode.rtData.rtUndefined.undefined);
                _function_constructor.returnSlot = _temp;
                //_function_constructor.function = (ASBinCode.rtData.rtFunction)TypeConverter.ObjectImplicit_ToPrimitive(constructor).Clone();
                //_function_constructor.function.setThis(rtobject);
                _function_constructor.SetFunction((ASBinCode.rtData.rtFunction)TypeConverter.ObjectImplicit_ToPrimitive(constructor),rtobject);

                BlockCallBackBase cb = player.blockCallBackPool.create();
                cb.args            = cb.cacheObjects; //new object[] { rtobject , _temp };
                cb.cacheObjects[0] = rtobject;
                cb.cacheObjects[1] = _temp;

                cb.setCallBacker(_finalStep);

                _function_constructor.callbacker = cb;
                _function_constructor.call();
                _function_constructor = null;
            }
        }
コード例 #18
0
 public override void execute3(RunTimeValueBase thisObj,
                               FunctionDefine functionDefine,
                               SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
 {
     success = true;
     returnSlot.directSet(thisObj);
 }
コード例 #19
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 < 1 || r > 21)
        //        {
        //            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("g" + (r))

        //                );
        //        }



        //    }


        //}

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

                if (r < 1 || r > 21)
                {
                    success = false;
                    //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;
                    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.setValue(rtUndefined.undefined);
                }
                else
                {
                    //errormessage = null;
                    //errorno = 0;

                    //return
                    //	new rtString(

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

                    //	);
                    success = true;
                    returnSlot.setValue(((rtNumber)((rtObjectBase)thisObj).value.memberData[0].getValue()).value.ToString("g" + (r)));
                }
            }
        }
コード例 #20
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();
                }
            }
コード例 #21
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));
            }
        }
コード例 #22
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();
                }
            }
コード例 #23
0
        public override RunTimeValueBase execute(RunTimeValueBase thisObj,SLOT[] argements,object stackframe,out string errormessage,out int errorno)
        {
            errormessage = null;
            errorno      = 0;

            StringBuilder sb = new StringBuilder();

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

            for (int i = 0; i < arr.innerArray.Count; i++)
            {
                var v = arr.innerArray[i];
                if (v.rtType > RunTimeDataType.unknown)
                {
                    RunTimeDataType ot;
                    if (TypeConverter.Object_CanImplicit_ToPrimitive(((rtObjectBase)v).value._class,out ot))
                    {
                        v = TypeConverter.ObjectImplicit_ToPrimitive((rtObjectBase)v);
                    }
                }

                int charcode = TypeConverter.ConvertToInt(v);
                sb.Append((char)charcode);
            }


            return(new rtString(sb.ToString()));
        }
コード例 #24
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;
 }
コード例 #25
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);
            }
        }
コード例 #26
0
            public override void execute3(RunTimeValueBase thisObj,FunctionDefine functionDefine,SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
            {
                System.Collections.ArrayList arraylist =
                    (System.Collections.ArrayList)((LinkObj <object>)((ASBinCode.rtData.rtObjectBase)thisObj).value).value;

                try
                {
                    arraylist.Sort();
                    returnSlot.setValue(ASBinCode.rtData.rtUndefined.undefined);
                    success = true;
                }
                //catch (KeyNotFoundException)
                //{
                //    success = false;
                //    stackframe.throwAneException(token, arraylist.ToString() + "没有链接到脚本");
                //}
                catch (ArgumentException a)
                {
                    success = false;
                    stackframe.throwAneException(token,a.Message);
                }
                catch (IndexOutOfRangeException i)
                {
                    success = false;
                    stackframe.throwAneException(token,i.Message);
                }
            }
コード例 #27
0
        public static RunTimeValueBase getDefaultParameterValue(RunTimeDataType dt,RunTimeValueBase dv)
        {
            if (dv.rtType != dt && dt != RunTimeDataType.rt_void)
            {
                if (dt == RunTimeDataType.rt_int)
                {
                    _cachertint.value = TypeConverter.ConvertToInt(dv);
                    dv = _cachertint;
                    //dv = new ASBinCode.rtData.rtInt(TypeConverter.ConvertToInt(dv, null, null));
                }
                else if (dt == RunTimeDataType.rt_uint)
                {
                    _cachertuint.value = TypeConverter.ConvertToUInt(dv,null,null);
                    dv = _cachertuint;
                    //dv = new ASBinCode.rtData.rtUInt(TypeConverter.ConvertToUInt(dv, null, null));
                }
                else if (dt == RunTimeDataType.rt_number)
                {
                    _cachertnumber.value = TypeConverter.ConvertToNumber(dv);
                    dv = _cachertnumber;
                    //dv = new ASBinCode.rtData.rtNumber(TypeConverter.ConvertToNumber(dv));
                }
                else if (dt == RunTimeDataType.rt_string)
                {
                    dv = new ASBinCode.rtData.rtString(TypeConverter.ConvertToString(dv,null,null));
                }
                else if (dt == RunTimeDataType.rt_boolean)
                {
                    dv = TypeConverter.ConvertToBoolean(dv,null,null);
                }
            }

            return(dv);
        }
            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);
                }
            }
コード例 #29
0
        private bool doPushNativeModeConstParameter(RunTimeValueBase argement,int id,out bool success)
        {
            if (toCallFunc.isNative)
            {
                //if (toCallFunc.native_index < 0)
                //{
                //	toCallFunc.native_index = player.swc.nativefunctionNameIndex[toCallFunc.native_name];
                //}
                //var nf = player.swc.nativefunctions[toCallFunc.native_index];
                var nf = player.swc.getNativeFunction(toCallFunc);

                if (nf.mode == NativeFunctionBase.NativeFunctionMode.const_parameter_0)
                {
                    pushParameterNativeModeConstParameter(
                        (nativefuncs.NativeConstParameterFunction)nf,
                        argement,
                        id,
                        out success
                        );
                    return(true);
                }
            }
            success = false;
            return(false);
        }
コード例 #30
0
        private static void objcreated(BlockCallBackBase sender, object args)
        {
            var vector = ((StackFrame)sender.args).instanceCreator.objectResult;

            StackFrame frame = (StackFrame)sender.args;

            sender.step.reg.getSlot(sender.scope, frame).directSet(
                vector);

            var step = sender.step;

            RunTimeScope scope = sender.scope;

            RunTimeValueBase initdata = step.arg2.getValue(scope, frame);

            if (initdata.rtType == RunTimeDataType.rt_array)
            {
                _pusharray(
                    (ASBinCode.rtti.Vector_Data)((ASBinCode.rtti.HostedObject)((rtObjectBase)vector).value).hosted_object,
                    frame, step, scope
                    );
            }
            else
            {
                _pushVector(
                    (ASBinCode.rtti.Vector_Data)((ASBinCode.rtti.HostedObject)((rtObjectBase)vector).value).hosted_object
                    , frame, step, scope);
            }
        }