示例#1
0
        public static string ConvertToString(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token)
        {
            switch (src.rtType)
            {
            case rt.rt_boolean:
                return(((ASBinCode.rtData.rtBoolean)src).ToString());   // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtBoolean)src).ToString());

            case rt.rt_int:
                return(((ASBinCode.rtData.rtInt)src).ToString());   // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtInt)src).value.ToString());

            case rt.rt_uint:
                return(((ASBinCode.rtData.rtUInt)src).value.ToString());   // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtUInt)src).value.ToString());

            case rt.rt_number:
                return(((ASBinCode.rtData.rtNumber)src).ToString());   // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtNumber)src).value.ToString());

            case rt.rt_string:
                return(((ASBinCode.rtData.rtString)src).value);   //(ASBinCode.rtData.rtString)src;

            case rt.rt_void:
                return(null);

            case rt.fun_void:
                return(ASBinCode.rtData.rtUndefined.undefined.ToString());

            case rt.rt_null:
                return(null);   //new ASBinCode.rtData.rtString(null);

            case rt.rt_function:
                return("function Function() {}");

            case rt.rt_array:
                return(((ASBinCode.rtData.rtArray)src).ToString());

            case rt.unknown:
                return(null);

            default:
            {
                //ASBinCode.rtData.rtObject obj = (ASBinCode.rtData.rtObject)src;
                //var toStr = (ASBinCode.ClassMemberFinder.find(obj.value._class, "toString", obj.value._class));
                //if (toStr.type == rt.rt_function && !toStr.isStatic && toStr.isPublic
                //    && !toStr.isConstructor
                //    )
                //{
                //    operators.FunctionCaller fc = new operators.FunctionCaller(frame.player, frame, token);
                //    fc.function = (ASBinCode.rtData.rtFunction)obj.value.memberData[toStr.index].getValue();
                //    fc.loadDefineFromFunction();
                //    fc.createParaScope();
                //    fc.returnSlot = frame._tempSlot;
                //    fc.call();

                //    if (frame.player.step_toblockend())
                //    {
                //        return ConvertToString(fc.returnSlot.getValue(), frame, token, isthrow);
                //    }
                //    else
                //    {
                //        return null;
                //    }
                //}
                //else
                {
                    return(((ASBinCode.rtData.rtObjectBase)src).value.ToString());
                }
            }


                //return "object " + ((ASBinCode.rtData.rtObject)src).value._class.name;
            }
        }
示例#2
0
        public static ASBinCode.rtData.rtBoolean ConvertToBoolean(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token)
        {
            switch (src.rtType)
            {
            case rt.rt_boolean:
                return((ASBinCode.rtData.rtBoolean)src);

            case rt.rt_int:
                if (((ASBinCode.rtData.rtInt)src).value == 0)
                {
                    return(ASBinCode.rtData.rtBoolean.False);
                }
                else
                {
                    return(ASBinCode.rtData.rtBoolean.True);
                }

            case rt.rt_uint:
                if (((ASBinCode.rtData.rtUInt)src).value == 0)
                {
                    return(ASBinCode.rtData.rtBoolean.False);
                }
                else
                {
                    return(ASBinCode.rtData.rtBoolean.True);
                }

            case rt.rt_number:
            {
                double r = ((ASBinCode.rtData.rtNumber)src).value;
                if (double.IsNaN(r) || r == 0)
                {
                    return(ASBinCode.rtData.rtBoolean.False);
                }
                else
                {
                    return(ASBinCode.rtData.rtBoolean.True);
                }
            }

            case rt.rt_string:
            {
                if (string.IsNullOrEmpty(((ASBinCode.rtData.rtString)src).value))
                {
                    return(ASBinCode.rtData.rtBoolean.False);
                }
                else
                {
                    return(ASBinCode.rtData.rtBoolean.True);
                }
            }

            case rt.rt_void:
            case rt.fun_void:
                return(ASBinCode.rtData.rtBoolean.False);

            case rt.rt_null:
                return(ASBinCode.rtData.rtBoolean.False);

            case rt.rt_function:
            case rt.rt_array:
                return(ASBinCode.rtData.rtBoolean.True);

            case rt.unknown:

                return(ASBinCode.rtData.rtBoolean.False);

            default:
                //凡是大于unknown的都是对象
                return(ASBinCode.rtData.rtBoolean.True);
            }
        }
示例#3
0
        public static uint ConvertToUInt(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token)
        {
            switch (src.rtType)
            {
            case rt.rt_boolean:
                if (((ASBinCode.rtData.rtBoolean)src).value == true)
                {
                    return(1);   // new ASBinCode.rtData.rtUInt(1);
                }
                else
                {
                    return(0);   // ASBinCode.rtData.rtUInt.zero;
                }

            case rt.rt_int:
                return((uint)((ASBinCode.rtData.rtInt)src).value);   // new ASBinCode.rtData.rtUInt((uint)((ASBinCode.rtData.rtInt)src).value);

            case rt.rt_uint:
                return(((ASBinCode.rtData.rtUInt)src).value);    //(ASBinCode.rtData.rtUInt)src;

            case rt.rt_number:
            {
                double r = ((ASBinCode.rtData.rtNumber)src).value;
                if (double.IsNaN(r) || double.IsInfinity(r))
                {
                    return(0);       // new ASBinCode.rtData.rtUInt(0);
                }
                else
                {
                    return((uint)((long)r));       // new ASBinCode.rtData.rtUInt((uint)r);
                }
            }

            case rt.rt_string:
            {
                double r = 0;
                if (((ASBinCode.rtData.rtString)src).value == null)
                {
                    return(0);       // new ASBinCode.rtData.rtUInt(0);
                }
                else if (double.TryParse(((ASBinCode.rtData.rtString)src).value, out r))
                {
                    if (double.IsNaN(r) || double.IsInfinity(r))
                    {
                        return(0);       // new ASBinCode.rtData.rtUInt(0);
                    }
                    else
                    {
                        return((uint)((long)r));       // new ASBinCode.rtData.rtUInt((uint)r);
                    }
                }
                else
                {
                    return(0);       // new ASBinCode.rtData.rtUInt(0);
                }
            }

            case rt.rt_void:
            case rt.fun_void:
                return(0);   // new ASBinCode.rtData.rtUInt(0);

            case rt.rt_null:
                return(0);   // new ASBinCode.rtData.rtUInt(0);

            case rt.unknown:
            case rt.rt_function:
            case rt.rt_array:
            default:
                return(0);
            }
        }