ToString() public method

public ToString ( ) : string
return string
示例#1
0
 /// <summary>
 /// Overriden indexer to optimize cases when we already have a number
 /// </summary>
 /// <param name="key">index</param>
 /// <returns>value</returns>
 public override JsInstance this[JsInstance key] {
     get {
         double keyNumber = key.ToNumber();
         int    i         = (int)keyNumber;
         if (i == keyNumber && i >= 0)
         {
             // we have got an index
             return(this.get(i));
         }
         else
         {
             return(base[key.ToString()]);
         }
     }
     set {
         double keyNumber = key.ToNumber();
         int    i         = (int)keyNumber;
         if (i == keyNumber && i >= 0)
         {
             // we have got an index
             this.put(i, value);
         }
         else
         {
             base[key.ToString()] = value;
         }
     }
 }
示例#2
0
 public override JsInstance this[JsInstance key]
 {
     get
     {
         double number = key.ToNumber();
         int    i      = (int)number;
         if ((double)i == number && i >= 0)
         {
             return(this.get(i));
         }
         return(base[key.ToString()]);
     }
     set
     {
         double number = key.ToNumber();
         int    i      = (int)number;
         if ((double)i == number && i >= 0)
         {
             this.put(i, value);
         }
         else
         {
             base[key.ToString()] = value;
         }
     }
 }
示例#3
0
 public JsException(JsInstance value)
     : base(value.ToString())
 {
     Value = value;
     //if (value is JsDictionaryObject)
     //    ((JsDictionaryObject)value)["jintException"] = new JsClr(this);
 }
示例#4
0
        /// <summary>
        /// 15.5.4.14
        /// </summary>
        /// <param name="target"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public JsInstance SplitImpl(JsDictionaryObject target, JsInstance[] parameters)
        {
            JsObject A = Global.ArrayClass.New();
            string   S = target.ToString();

            if (parameters.Length == 0 || parameters[0] == JsUndefined.Instance)
            {
                A["0"] = Global.StringClass.New(S);
            }

            JsInstance separator = parameters[0];
            int        limit     = parameters.Length > 1 ? Convert.ToInt32(parameters[1].ToNumber()) : Int32.MaxValue;
            int        s         = S.Length;

            string[] result;

            if (separator.Class == JsInstance.CLASS_REGEXP)
            {
                result = ((JsRegExp)parameters[0]).Regex.Split(S, limit);
            }
            else
            {
                result = S.Split(new string[] { separator.ToString() }, limit, StringSplitOptions.None);
            }

            for (int i = 0; i < result.Length; i++)
            {
                A[i.ToString()] = Global.StringClass.New(result[i]);
            }

            return(A);
        }
示例#5
0
        public JsInstance SplitImpl(JsDictionaryObject target, JsInstance[] parameters)
        {
            JsObject jsObject = (JsObject)this.Global.ArrayClass.New();
            string   input    = target.ToString();

            if (parameters.Length == 0 || parameters[0] == JsUndefined.Instance)
            {
                jsObject["0"] = (JsInstance)this.Global.StringClass.New(input);
            }
            JsInstance parameter = parameters[0];
            int        count     = parameters.Length > 1 ? Convert.ToInt32(parameters[1].ToNumber()) : int.MaxValue;
            int        length    = input.Length;

            string[] strArray;
            if (parameter.Class == "RegExp")
            {
                strArray = ((JsRegExp)parameters[0]).Regex.Split(input, count);
            }
            else
            {
                strArray = input.Split(new string[1]
                {
                    parameter.ToString()
                }, count, StringSplitOptions.None);
            }
            for (int index = 0; index < strArray.Length; ++index)
            {
                jsObject[index.ToString()] = (JsInstance)this.Global.StringClass.New(strArray[index]);
            }
            return((JsInstance)jsObject);
        }
示例#6
0
        public JsInstance Join(JsObject target, JsInstance[] parameters)
        {
            if (target is JsArray)
            {
                return((JsInstance)((JsArray)target).join(this.Global, parameters.Length != 0 ? parameters[0] : (JsInstance)JsUndefined.Instance));
            }
            string str = parameters.Length == 0 || parameters[0] == JsUndefined.Instance ? "," : parameters[0].ToString();

            if (target.Length == 0)
            {
                return((JsInstance)this.Global.StringClass.New());
            }
            JsInstance    jsInstance1   = target[0.ToString()];
            StringBuilder stringBuilder = jsInstance1 != JsUndefined.Instance && jsInstance1 != JsNull.Instance ? new StringBuilder(jsInstance1.ToString()) : new StringBuilder(string.Empty);
            double        number        = target["length"].ToNumber();

            for (int index = 1; (double)index < number; ++index)
            {
                stringBuilder.Append(str);
                JsInstance jsInstance2 = target[index.ToString()];
                if (jsInstance2 != JsUndefined.Instance && jsInstance2 != JsNull.Instance)
                {
                    stringBuilder.Append(jsInstance2.ToString());
                }
            }
            return((JsInstance)this.Global.StringClass.New(stringBuilder.ToString()));
        }
示例#7
0
 public JsException(JsInstance value)
     : base(value.ToString())
 {
     Value = value;
     //if (value is JsDictionaryObject)
     //    ((JsDictionaryObject)value)["jintException"] = new JsClr(this);
 }
示例#8
0
        public override void Delete(JsInstance key)
        {
            double number = key.ToNumber();
            int    key1   = (int)number;

            if ((double)key1 == number)
            {
                this.m_data.Remove(key1);
            }
            else
            {
                base.Delete(key.ToString());
            }
        }
示例#9
0
        public override void Delete(JsInstance key)
        {
            double keyNumber = key.ToNumber();
            int    index     = (int)keyNumber;

            if (index == keyNumber)
            {
                m_data.Remove(index);
            }
            else
            {
                base.Delete(key.ToString());
            }
        }
示例#10
0
        public JsString join(IGlobal global, JsInstance separator)
        {
            if (this.length == 0)
            {
                return(global.StringClass.New());
            }
            string separator1 = separator == JsUndefined.Instance ? "," : separator.ToString();

            string[] strArray = new string[this.length];
            for (int key = 0; key < this.length; ++key)
            {
                JsInstance jsInstance;
                strArray[key] = !this.m_data.TryGetValue(key, out jsInstance) || jsInstance == JsNull.Instance || jsInstance == JsUndefined.Instance ? "" : jsInstance.ToString();
            }
            return(global.StringClass.New(string.Join(separator1, strArray)));
        }
示例#11
0
        public JsInstance ToFixedImpl(JsInstance target, JsInstance[] parameters)
        {
            int num = 0;

            if ((uint)parameters.Length > 0U)
            {
                num = Convert.ToInt32(parameters[0].ToNumber());
            }
            if (num > 20 || num < 0)
            {
                throw new JsException((JsInstance)this.Global.SyntaxErrorClass.New("Fraction Digits must be greater than 0 and lesser than 20"));
            }
            if (target == this.Global.NaN)
            {
                return((JsInstance)this.Global.StringClass.New(target.ToString()));
            }
            return((JsInstance)this.Global.StringClass.New(target.ToNumber().ToString("f" + (object)num, (IFormatProvider)CultureInfo.InvariantCulture)));
        }
示例#12
0
        public JsString join(IGlobal global, JsInstance separator)
        {
            if (length == 0)
            {
                return(global.StringClass.New());
            }

            string sep = separator == JsUndefined.Instance ? "," : separator.ToString();

            string[] map = new string[length];

            JsInstance item;

            for (int i = 0; i < length; i++)
            {
                map[i] = m_data.TryGetValue(i, out item) && item != JsNull.Instance && item != JsUndefined.Instance ? item.ToString() : "";
            }

            return(global.StringClass.New(String.Join(sep, map)));
        }
示例#13
0
        /// <summary>
        /// 15.4.4.5
        /// </summary>
        /// <param name="target"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public JsInstance Join(JsObject target, JsInstance[] parameters)
        {
            if (target is JsArray)
            {
                return(((JsArray)target).join(Global, parameters.Length > 0 ? parameters[0] : JsUndefined.Instance));
            }
            string separator = (parameters.Length == 0 || parameters[0] == JsUndefined.Instance)
                ? ","
                : parameters[0].ToString();

            if (target.Length == 0)
            {
                return(Global.StringClass.New());
            }

            JsInstance element0 = target[0.ToString()];

            StringBuilder r;

            if (element0 == JsUndefined.Instance || element0 == JsNull.Instance)
            {
                r = new StringBuilder(string.Empty);
            }
            else
            {
                r = new StringBuilder(element0.ToString());
            }

            var length = target["length"].ToNumber();

            for (int k = 1; k < length; k++)
            {
                r.Append(separator);
                JsInstance element = target[k.ToString()];
                if (element != JsUndefined.Instance && element != JsNull.Instance)
                {
                    r.Append(element.ToString());
                }
            }
            return(Global.StringClass.New(r.ToString()));
        }
示例#14
0
        /// <summary>
        /// 15.7.4.5
        /// </summary>
        /// <param name="target"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public JsInstance ToFixedImpl(JsInstance target, JsInstance[] parameters)
        {
            int fractions = 0;

            if (parameters.Length > 0)
            {
                fractions = Convert.ToInt32(parameters[0].ToNumber());
            }

            if (fractions > 20 || fractions < 0)
            {
                throw new JsException(Global.SyntaxErrorClass.New("Fraction Digits must be greater than 0 and lesser than 20"));
            }

            if (target == Global.NaN)
            {
                return(Global.StringClass.New(target.ToString()));
            }

            return(Global.StringClass.New(target.ToNumber().ToString("f" + fractions, CultureInfo.InvariantCulture)));
        }
示例#15
0
 /// <summary>
 /// Overriden indexer to optimize cases when we already have a number
 /// </summary>
 /// <param name="key">index</param>
 /// <returns>value</returns>
 public override JsInstance this[JsInstance key] {
     get {
         double keyNumber = key.ToNumber();
         int i = (int)keyNumber;
         if (i == keyNumber && i >= 0) {
             // we have got an index
             return this.get(i);
         }
         else {
             return base[key.ToString()];
         }
     }
     set {
         double keyNumber = key.ToNumber();
         int i = (int)keyNumber;
         if (i == keyNumber && i >= 0) {
             // we have got an index
             this.put(i, value);
         }
         else {
             base[key.ToString()] = value;
         }
     }
 }
示例#16
0
文件: JsArray.cs 项目: cosh/Jint
        public JsString join(IGlobal global, JsInstance separator)
        {
            if (length == 0)
                return global.StringClass.New();

            string sep = separator == JsUndefined.Instance ? "," : separator.ToString();
            string[] map = new string[length];

            JsInstance item;
            for (int i = 0; i < length; i++)
                map[i] = m_data.TryGetValue(i, out item) && item != JsNull.Instance && item != JsUndefined.Instance ? item.ToString() : "";

            return global.StringClass.New(String.Join(sep, map));
        }
示例#17
0
 private static JsString GiveMeJavascript(JsNumber number, JsInstance instance) {
     return new JsString(number + instance.ToString(), JsNull.Instance);
 }
示例#18
0
文件: JsArray.cs 项目: cosh/Jint
 public override void Delete(JsInstance key)
 {
     double keyNumber = key.ToNumber();
     int index = (int)keyNumber;
     if (index == keyNumber)
         m_data.Remove(index);
     else
         base.Delete(key.ToString());
 }
示例#19
0
        /// <summary>
        /// 15.7.4.5
        /// </summary>
        /// <param name="target"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public JsInstance ToFixedImpl(JsInstance target, JsInstance[] parameters)
        {
            int fractions = 0;
            if (parameters.Length > 0) {
                fractions = Convert.ToInt32(parameters[0].ToNumber());
            }

            if (fractions > 20 || fractions < 0) {
                throw new JsException(Global.SyntaxErrorClass.New("Fraction Digits must be greater than 0 and lesser than 20"));
            }

            if (target == Global.NaN) {
                return Global.StringClass.New(target.ToString());
            }

            return Global.StringClass.New(target.ToNumber().ToString("f" + fractions, CultureInfo.InvariantCulture));
        }
示例#20
0
        public JsInstance ReplaceImpl(JsDictionaryObject target, JsInstance[] parameters)
        {
            if (parameters.Length == 0)
            {
                return((JsInstance)this.Global.StringClass.New(target.ToString()));
            }
            JsInstance parameter  = parameters[0];
            JsInstance jsInstance = (JsInstance)JsUndefined.Instance;

            if (parameters.Length > 1)
            {
                jsInstance = parameters[1];
            }
            string     source   = target.ToString();
            JsFunction function = jsInstance as JsFunction;

            if (parameter.Class == "RegExp")
            {
                int      count   = ((JsRegExp)parameters[0]).IsGlobal ? int.MaxValue : 1;
                JsRegExp regexp  = (JsRegExp)parameters[0];
                int      startat = regexp.IsGlobal ? 0 : Math.Max(0, (int)regexp["lastIndex"].ToNumber() - 1);
                if (regexp.IsGlobal)
                {
                    regexp["lastIndex"] = (JsInstance)this.Global.NumberClass.New(0.0);
                }
                if (jsInstance is JsFunction)
                {
                    return((JsInstance)this.Global.StringClass.New(((JsRegExp)parameters[0]).Regex.Replace(source, (MatchEvaluator)(m =>
                    {
                        List <JsInstance> jsInstanceList = new List <JsInstance>();
                        if (!regexp.IsGlobal)
                        {
                            regexp["lastIndex"] = (JsInstance)this.Global.NumberClass.New((double)(m.Index + 1));
                        }
                        jsInstanceList.Add((JsInstance)this.Global.StringClass.New(m.Value));
                        for (int index = 1; index < m.Groups.Count; ++index)
                        {
                            if (m.Groups[index].Success)
                            {
                                jsInstanceList.Add((JsInstance)this.Global.StringClass.New(m.Groups[index].Value));
                            }
                            else
                            {
                                jsInstanceList.Add((JsInstance)JsUndefined.Instance);
                            }
                        }
                        jsInstanceList.Add((JsInstance)this.Global.NumberClass.New((double)m.Index));
                        jsInstanceList.Add((JsInstance)this.Global.StringClass.New(source));
                        this.Global.Visitor.ExecuteFunction(function, (JsDictionaryObject)null, jsInstanceList.ToArray());
                        return this.Global.Visitor.Returned.ToString();
                    }), count, startat)));
                }
                string str = parameters[1].ToString();
                return((JsInstance)this.Global.StringClass.New(((JsRegExp)parameters[0]).Regex.Replace(target.ToString(), (MatchEvaluator)(m =>
                {
                    if (!regexp.IsGlobal)
                    {
                        regexp["lastIndex"] = (JsInstance)this.Global.NumberClass.New((double)(m.Index + 1));
                    }
                    string after = source.Substring(Math.Min(source.Length - 1, m.Index + m.Length));
                    return JsStringConstructor.EvaluateReplacePattern(m.Value, source.Substring(0, m.Index), after, str, m.Groups);
                }), count, startat)));
            }
            string matched = parameter.ToString();
            int    length  = source.IndexOf(matched);

            if (length == -1)
            {
                return((JsInstance)this.Global.StringClass.New(source));
            }
            if (jsInstance is JsFunction)
            {
                this.Global.Visitor.ExecuteFunction(function, (JsDictionaryObject)null, new List <JsInstance>()
                {
                    (JsInstance)this.Global.StringClass.New(matched),
                    (JsInstance)this.Global.NumberClass.New((double)length),
                    (JsInstance)this.Global.StringClass.New(source)
                }.ToArray());
                JsInstance result = this.Global.Visitor.Result;
                return((JsInstance)this.Global.StringClass.New(source.Substring(0, length) + result.ToString() + source.Substring(length + matched.Length)));
            }
            string before         = source.Substring(0, length);
            string after1         = source.Substring(length + matched.Length);
            string replacePattern = JsStringConstructor.EvaluateReplacePattern(matched, before, after1, jsInstance.ToString(), (GroupCollection)null);

            return((JsInstance)this.Global.StringClass.New(before + replacePattern + after1));
        }
示例#21
0
        /// <summary>
        /// 15.5.4.11
        /// </summary>
        /// <param name="target"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public JsInstance ReplaceImpl(JsDictionaryObject target, JsInstance[] parameters)
        {
            if (parameters.Length == 0)
            {
                return(Global.StringClass.New(target.ToString()));
            }

            JsInstance searchValue  = parameters[0];
            JsInstance replaceValue = JsUndefined.Instance;

            if (parameters.Length > 1)
            {
                replaceValue = parameters[1];
            }

            string source = target.ToString();

            JsFunction function = replaceValue as JsFunction;

            if (searchValue.Class == JsInstance.CLASS_REGEXP)
            {
                int count     = ((JsRegExp)parameters[0]).IsGlobal ? int.MaxValue : 1;
                var regexp    = ((JsRegExp)parameters[0]);
                int lastIndex = regexp.IsGlobal ? 0 : Math.Max(0, (int)regexp["lastIndex"].ToNumber() - 1);

                if (regexp.IsGlobal)
                {
                    regexp["lastIndex"] = Global.NumberClass.New(0);
                }

                if (replaceValue is JsFunction)
                {
                    string ret = ((JsRegExp)parameters[0]).Regex.Replace(source, delegate(Match m) {
                        List <JsInstance> replaceParameters = new List <JsInstance>();
                        if (!regexp.IsGlobal)
                        {
                            regexp["lastIndex"] = Global.NumberClass.New(m.Index + 1);
                        }

                        replaceParameters.Add(Global.StringClass.New(m.Value));
                        for (int i = 1; i < m.Groups.Count; i++)
                        {
                            if (m.Groups[i].Success)
                            {
                                replaceParameters.Add(Global.StringClass.New(m.Groups[i].Value));
                            }
                            else
                            {
                                replaceParameters.Add(JsUndefined.Instance);
                            }
                        }
                        replaceParameters.Add(Global.NumberClass.New(m.Index));
                        replaceParameters.Add(Global.StringClass.New(source));

                        Global.Visitor.ExecuteFunction(function, null, replaceParameters.ToArray());

                        return(Global.Visitor.Returned.ToString());
                    }, count, lastIndex);


                    return(Global.StringClass.New(ret));
                }
                else
                {
                    string str = parameters[1].ToString();
                    string ret = ((JsRegExp)parameters[0]).Regex.Replace(target.ToString(), delegate(Match m) {
                        if (!regexp.IsGlobal)
                        {
                            regexp["lastIndex"] = Global.NumberClass.New(m.Index + 1);
                        }

                        string after = source.Substring(Math.Min(source.Length - 1, m.Index + m.Length));
                        return(EvaluateReplacePattern(m.Value, source.Substring(0, m.Index), after, str, m.Groups));
                    }, count, lastIndex);

                    return(Global.StringClass.New(ret));
                }
            }
            else
            {
                string search = searchValue.ToString();
                int    index  = source.IndexOf(search);
                if (index != -1)
                {
                    if (replaceValue is JsFunction)
                    {
                        List <JsInstance> replaceParameters = new List <JsInstance>();
                        replaceParameters.Add(Global.StringClass.New(search));
                        replaceParameters.Add(Global.NumberClass.New(index));
                        replaceParameters.Add(Global.StringClass.New(source));

                        Global.Visitor.ExecuteFunction(function, null, replaceParameters.ToArray());
                        replaceValue = Global.Visitor.Result;

                        return(Global.StringClass.New(source.Substring(0, index) + replaceValue.ToString() + source.Substring(index + search.Length)));
                    }
                    else
                    {
                        string before    = source.Substring(0, index);
                        string after     = source.Substring(index + search.Length);
                        string newString = EvaluateReplacePattern(search, before, after, replaceValue.ToString(), null);
                        return(Global.StringClass.New(before + newString + after));
                    }
                }
                else
                {
                    return(Global.StringClass.New(source));
                }
            }
        }
示例#22
0
        public JsBoolean Compare(JsInstance x, JsInstance y)
        {
            if (x.IsClr && y.IsClr)
            {
                return Global.BooleanClass.New(x.Value.Equals(y.Value));
            }

            if (x.IsClr)
            {
                return Compare(x.ToPrimitive(Global), y);
            }

            if (y.IsClr)
            {
                return Compare(x, y.ToPrimitive(Global));
            }

            if (x.Type == y.Type)
            { // if both are Objects but then only one is Clrs
                if (x == JsUndefined.Instance)
                {
                    return Global.BooleanClass.True;
                }
                else if (x == JsNull.Instance)
                {
                    return Global.BooleanClass.True;
                }
                else if (x.Type == JsInstance.TYPE_NUMBER)
                {
                    if (x.ToNumber() == double.NaN)
                    {
                        return Global.BooleanClass.False;
                    }
                    else if (y.ToNumber() == double.NaN)
                    {
                        return Global.BooleanClass.False;
                    }
                    else if (x.ToNumber() == y.ToNumber())
                    {
                        return Global.BooleanClass.True;
                    }
                    else
                    {
                        return Global.BooleanClass.False;
                    }
                }
                else if (x.Type == JsInstance.TYPE_STRING)
                {
                    return Global.BooleanClass.New(x.ToString() == y.ToString());
                }
                else if (x.Type == JsInstance.TYPE_BOOLEAN)
                {
                    return Global.BooleanClass.New(x.ToBoolean() == y.ToBoolean());
                }
                else if (x.Type == JsInstance.TYPE_OBJECT )
                {
                    return Global.BooleanClass.New(x == y);
                }
                else
                {
                    return Global.BooleanClass.New(x.Value.Equals(y.Value));
                }
            }
            else if (x == JsNull.Instance && y == JsUndefined.Instance)
            {
                return Global.BooleanClass.True;
            }
            else if (x == JsUndefined.Instance && y == JsNull.Instance)
            {
                return Global.BooleanClass.True;
            }
            else if (x.Type == JsInstance.TYPE_NUMBER && y.Type == JsInstance.TYPE_STRING)
            {
                return Global.BooleanClass.New(x.ToNumber() == y.ToNumber());
            }
            else if (x.Type == JsInstance.TYPE_STRING && y.Type == JsInstance.TYPE_NUMBER)
            {
                return Global.BooleanClass.New(x.ToNumber() == y.ToNumber());
            }
            else if (x.Type == JsInstance.TYPE_BOOLEAN || y.Type == JsInstance.TYPE_BOOLEAN)
            {
                return Global.BooleanClass.New(x.ToNumber() == y.ToNumber());
            }
            else if (y.Type == JsInstance.TYPE_OBJECT && (x.Type == JsInstance.TYPE_STRING || x.Type == JsInstance.TYPE_NUMBER))
            {
                return Compare(x, y.ToPrimitive(Global));
            }
            else if (x.Type == JsInstance.TYPE_OBJECT && (y.Type == JsInstance.TYPE_STRING || y.Type == JsInstance.TYPE_NUMBER))
            {
                return Compare(x.ToPrimitive(Global), y);
            }
            else
            {
                return Global.BooleanClass.False;
            }
        }