Exemplo n.º 1
0
        public override string ToString()
        {
            string sP = Deferred != null?String.Format("({2} - {0}), Expr: {1}", Deferred.GetType().Name, Deferred.Expr, DeferredStatus) : null;

            string sR = Result != null?String.Format("({0}), Value = {1}", Result.GetType().Name, Result) : null;

            return(sP ?? sR ?? "(Unknown)");
        }
Exemplo n.º 2
0
 public bool AreEqual(GlobalContext c)
 {
     if (ReferenceEquals(X, Y))
     {
         return(X != JSEvalNumber.NaN);
     }
     if (ReferenceEquals(X.Type, Y.Type))
     {
         Debug.Assert(X != RuntimeObj.Undefined && X != RuntimeObj.Null, "This has been handled by the normalization and the above reference test.");
         if (ReferenceEquals(X.Type, RuntimeObj.TypeNumber))
         {
             Debug.Assert(!(((JSEvalNumber)X).IsNaN && ((JSEvalNumber)Y).IsNaN));
             return(X.ToDouble() == Y.ToDouble());
         }
         else if (ReferenceEquals(X.Type, RuntimeObj.TypeString))
         {
             return(X.ToString() == Y.ToString());
         }
         else if (ReferenceEquals(X.Type, RuntimeObj.TypeBoolean))
         {
             return(X.ToBoolean() == Y.ToBoolean());
         }
         else
         {
             IComparable cmp;
             if (X.GetType() == Y.GetType() && (cmp = X as IComparable) != null)
             {
                 Debug.Assert((cmp.CompareTo(Y) == 0) == X.Equals(Y), "When IComparable is implemented, it must match Equals behavior.");
                 return(cmp.Equals(Y));
             }
         }
         return(false);
     }
     if (ReferenceEquals(X.Type, RuntimeObj.TypeNumber) && ReferenceEquals(Y.Type, RuntimeObj.TypeString))
     {
         return(X.ToDouble() == Y.ToDouble());
     }
     if (ReferenceEquals(X.Type, RuntimeObj.TypeBoolean) || ReferenceEquals(Y.Type, RuntimeObj.TypeBoolean))
     {
         return(X.ToBoolean() == Y.ToBoolean());
     }
     return(false);
 }
        public bool Compare(GlobalContext c, out int result)
        {
            result = 0;
            if (Y == RuntimeObj.Undefined)
            {
                return(X == RuntimeObj.Undefined);
            }

            Debug.Assert(typeof(IComparable).IsAssignableFrom(typeof(StringObj)), "StringObj is Comparable.");

            IComparable cmp;

            if (X.GetType() == Y.GetType() && (cmp = X as IComparable) != null)
            {
                result = cmp.CompareTo(Y);
            }
            else if (X.Type == RuntimeObj.TypeNumber || Y.Type == RuntimeObj.TypeNumber)
            {
                Double xD = X.ToDouble();
                Double yD = Y.ToDouble();
                if (Double.IsNaN(xD) || Double.IsNaN(yD))
                {
                    return(false);
                }
                if (xD < yD)
                {
                    result = -1;
                }
                else if (xD > yD)
                {
                    result = 1;
                }
            }
            else
            {
                return(false);
            }
            if (Swapped)
            {
                result = -result;
            }
            return(true);
        }