示例#1
0
        public char ToChar()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined: return(Runtime.Instance.DefaultDUndefined.ToChar());

            case ValueTypes.String: return(DObjectValue.ToChar());

            case ValueTypes.Char: return(CharValue);

            //case ValueTypes.Boolean: return (BoolValue? '1':'\0');
            //case ValueTypes.Float: return FloatValue != 0.0;
            //case ValueTypes.Double: return DoubleValue != 0.0;
            //case ValueTypes.Int8: return Int8Value != 0;
            //case ValueTypes.Int16: return Int16Value != 0;
            //case ValueTypes.Int32: return Int32Value != 0;
            //case ValueTypes.Int64: return Int64Value != 0;
            //case ValueTypes.UInt8: return UInt8Value != 0;
            //case ValueTypes.UInt16: return UInt16Value != 0;
            //case ValueTypes.UInt32: return UInt32Value != 0;
            //case ValueTypes.UInt64: return UInt64Value != 0;
            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
                return(DObjectValue.ToChar());

            case ValueTypes.Null: return(Runtime.Instance.DefaultDNull.ToChar());
                //case ValueTypes.Property: return DObjectValue.ToBoolean();
            }
            Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to Char (UInt16)", ValueType)));
            return(Runtime.Instance.DefaultDUndefined.ToChar());
        }
示例#2
0
 public DArray ToDArray()
 {
     switch (ValueType)
     {
     case ValueTypes.Array:
     case ValueTypes.Object:
     case ValueTypes.Property:
         return(DObjectValue.ToDArray());
     }
     Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to array", ValueType)));
     return(Runtime.Instance.DefaultDUndefined.ToDArray());
 }
示例#3
0
 public DFunction ToDFunction()
 {
     if (DObjectValue != null)
     {
         return(DObjectValue.ToDFunction());
     }
     else
     {
         Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to function", ValueType)));
         return(Runtime.Instance.DefaultDUndefined.ToDFunction());
     }
 }
示例#4
0
        public ulong ToUInt64()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined: return(Runtime.Instance.DefaultDUndefined.ToUInt64());

            case ValueTypes.String: return(DObjectValue.ToUInt64());

            case ValueTypes.Char: return(CharValue);

            case ValueTypes.Boolean: return(BooleanValue ? 1UL : 0UL);

            case ValueTypes.Float: return((ulong)FloatValue);

            case ValueTypes.Double: return((ulong)DoubleValue);

            case ValueTypes.Int8: return((ulong)Int8Value);

            case ValueTypes.Int16: return((ulong)Int16Value);

            case ValueTypes.Int32: return((ulong)Int32Value);

            case ValueTypes.Int64: return((ulong)Int64Value);

            case ValueTypes.UInt8: return(UInt8Value);

            case ValueTypes.UInt16: return(UInt16Value);

            case ValueTypes.UInt32: return(UInt32Value);

            case ValueTypes.UInt64: return(UInt64Value);

            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
                return(DObjectValue.ToUInt64());

            case ValueTypes.Null: return(Runtime.Instance.DefaultDNull.ToUInt64());
                //case ValueTypes.Property:
                //default:
            }
            Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to UInt64", ValueType)));
            return(Runtime.Instance.DefaultDUndefined.ToUInt64());
        }
示例#5
0
        public int ToInt32()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined: return(Runtime.Instance.DefaultDUndefined.ToInt32());

            case ValueTypes.String: return(DObjectValue.ToInt32());

            case ValueTypes.Char: return(CharValue);

            case ValueTypes.Boolean: return(BooleanValue ? 1 : 0);

            case ValueTypes.Float: return((int)(uint)FloatValue);

            case ValueTypes.Double: return((int)(uint)DoubleValue);   //if we don't convert to uint first, we might get the boundary numbers (e.g. 0xffffffff) wrong!

            case ValueTypes.Int8: return(Int8Value);

            case ValueTypes.Int16: return(Int16Value);

            case ValueTypes.Int32: return(Int32Value);

            case ValueTypes.Int64: return((int)Int64Value);

            case ValueTypes.UInt8: return(UInt8Value);

            case ValueTypes.UInt16: return(UInt16Value);

            case ValueTypes.UInt32: return((int)UInt32Value);

            case ValueTypes.UInt64: return((int)UInt64Value);

            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
                return(DObjectValue.ToInt32());

            case ValueTypes.Null: return(Runtime.Instance.DefaultDNull.ToInt32());
                //case ValueTypes.Property:
                //default:
            }
            Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to Int32", ValueType)));
            return(Runtime.Instance.DefaultDUndefined.ToInt32());
        }
示例#6
0
        public bool ToBoolean()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined: return(Runtime.Instance.DefaultDUndefined.ToBoolean());

            case ValueTypes.String: return(DObjectValue.ToBoolean());

            case ValueTypes.Char: return(CharValue != '\0');

            case ValueTypes.Boolean: return(BooleanValue);

            case ValueTypes.Float: return(FloatValue != 0.0 && !float.IsNaN(FloatValue));

            case ValueTypes.Double: return(DoubleValue != 0.0 && !double.IsNaN(DoubleValue));

            case ValueTypes.Int8: return(Int8Value != 0);

            case ValueTypes.Int16: return(Int16Value != 0);

            case ValueTypes.Int32: return(Int32Value != 0);

            case ValueTypes.Int64: return(Int64Value != 0);

            case ValueTypes.UInt8: return(UInt8Value != 0);

            case ValueTypes.UInt16: return(UInt16Value != 0);

            case ValueTypes.UInt32: return(UInt32Value != 0);

            case ValueTypes.UInt64: return(UInt64Value != 0);

            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
                Debug.Assert(DObjectValue != null, "Invalid situation! DObject cannot be null here!");
                return(true);

            case ValueTypes.Null: return(Runtime.Instance.DefaultDNull.ToBoolean());
                //case ValueTypes.Property: return DObjectValue.ToBoolean();
            }
            Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to Boolean", ValueType)));
            return(Runtime.Instance.DefaultDUndefined.ToBoolean());
        }
示例#7
0
        public double ToDouble()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined: return(Runtime.Instance.DefaultDUndefined.ToDouble());

            case ValueTypes.String: return(DObjectValue.ToDouble());

            case ValueTypes.Char: return(CharValue);

            case ValueTypes.Boolean: return(BooleanValue ? 1 : 0);

            case ValueTypes.Float: return(FloatValue);

            case ValueTypes.Double: return(DoubleValue);

            case ValueTypes.Int8: return(Int8Value);

            case ValueTypes.Int16: return(Int16Value);

            case ValueTypes.Int32: return(Int32Value);

            case ValueTypes.Int64: return(Int64Value);

            case ValueTypes.UInt8: return(UInt8Value);

            case ValueTypes.UInt16: return(UInt16Value);

            case ValueTypes.UInt32: return(UInt32Value);

            case ValueTypes.UInt64: return(UInt64Value);

            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
                return(DObjectValue.ToDouble());

            case ValueTypes.Null: return(Runtime.Instance.DefaultDNull.ToDouble());
            }
            Trace.Fail(new InvalidOperationException(string.Format("Cannot convert {0} to Double", ValueType)));
            return(Runtime.Instance.DefaultDUndefined.ToDouble());
        }
示例#8
0
        public string GetTypeOf()
        {
            switch (ValueType)
            {
            case ValueTypes.Undefined:
                return("undefined");

            case ValueTypes.String:
                return("string");

            case ValueTypes.Boolean:
                return("boolean");

            case ValueTypes.Char:     //=UInt16
            case ValueTypes.Float:
            case ValueTypes.Double:
            case ValueTypes.Int8:
            case ValueTypes.Int16:
            case ValueTypes.Int32:
            case ValueTypes.Int64:
            case ValueTypes.UInt8:
            case ValueTypes.UInt16:
            case ValueTypes.UInt32:
            case ValueTypes.UInt64:
                return("number");

            case ValueTypes.Object:
            case ValueTypes.Function:
            case ValueTypes.Array:
            case ValueTypes.Null:
            case ValueTypes.Property:
                return(DObjectValue.GetTypeOf());   // "object";

            default:
                Trace.Fail(new InvalidOperationException(string.Format("Cannot get typeof {0}", ValueType)));
                break;
            }
            return(Runtime.Instance.DefaultDUndefined.GetTypeOf());
        }