Exemple #1
0
        public static Double TryObjectToDouble(object obj, out ConversionStrictness strictness)
        {
            string s;

            if (obj is double)
            {
                strictness = ConversionStrictness.ImplExactMatch; return((double)obj);
            }
            if (obj is int)
            {
                strictness = ConversionStrictness.ImplExactMatch; return((double)(int)obj);
            }
            if ((s = PhpVariable.AsString(obj)) != null)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(Convert.StringToDouble(s));
            }
            if (obj is bool)
            {
                strictness = ConversionStrictness.ImplDomainChange; return((bool)obj ? 1.0 : 0.0);
            }
            if (obj is long)
            {
                strictness = ConversionStrictness.ImplExactMatch; return((double)(long)obj);
            }

            strictness = ConversionStrictness.Failed;
            return(0.0);
        }
        new public static void GetObjectData(DObject /*!*/ instance, SerializationInfo /*!*/ info, StreamingContext strctx)
        {
            info.SetType(typeof(SPLDeserializer));

            SerializationContext context = SerializationContext.CreateFromStreamingContext(strctx);

            object res = PhpVariable.Dereference(instance.InvokeMethod("serialize", null, context.ScriptContext));

            if (res == null)
            {
                // serialize returned NULL -> this instance will deserialize as NULL
                info.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, String.Empty);
            }
            else
            {
                string res_str = PhpVariable.AsString(res);
                if (res_str == null)
                {
                    // serialize did not return NULL nor a string -> throw an exception
                    Library.SPL.Exception.ThrowSplException(
                        _ctx => new Library.SPL.Exception(_ctx, true),
                        context.ScriptContext,
                        string.Format(CoreResources.serialize_must_return_null_or_string, instance.TypeName), 0, null);
                }

                info.AddValue(SerializedDataFieldName, res_str);
                info.AddValue(__PHP_Incomplete_Class.ClassNameFieldName, instance.TypeName);
            }
        }
Exemple #3
0
        public static bool Assert(
            object assertion,
            ScriptContext context,
            Dictionary <string, object> definedVariables,
            DObject self,
            DTypeDesc includer,
            string containingSourcePath,
            int line,
            int column,
            int containerId,
            NamingContext namingContext)
        {
            object result;
            string code;

            // skips asserts if not active:
            if (!context.Config.Assertion.Active)
            {
                return(true);
            }

            if ((code = PhpVariable.AsString(assertion)) != null)
            {
                // disables error reporting if eval should be quite:
                if (context.Config.Assertion.Quiet)
                {
                    context.DisableErrorReporting();
                }

                SourceCodeDescriptor descriptor = new SourceCodeDescriptor(containingSourcePath, containerId, line, column);

                // evaluates the expression:
                result = EvalInternal("return ", code, ";", EvalKinds.Assert, context, definedVariables, self, includer, descriptor, false, namingContext);

                // restores error reporting if eval have been quite:
                if (context.Config.Assertion.Quiet)
                {
                    context.EnableErrorReporting();
                }
            }
            else
            {
                result = assertion;
            }

            // checks the result of assertion:
            return(CheckAssertion(result, code, context, containingSourcePath, line, column, namingContext));
        }
Exemple #4
0
        public static String TryObjectToString(object obj, out ConversionStrictness strictness)
        {
            string          s;
            PhpReference    pr;
            IPhpConvertible conv;

            if ((s = PhpVariable.AsString(obj)) != null)
            {
                strictness = ConversionStrictness.ImplExactMatch; return(s);
            }
            if ((pr = obj as PhpReference) != null)
            {
                return(TryObjectToString(pr.Value, out strictness));
            }
            if (obj == null)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(null);
            }
            if (obj is int)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(obj.ToString());
            }
            if (obj is bool)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(((bool)obj) ? "1" : String.Empty);
            }
            if (obj is double)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(Convert.DoubleToString((double)obj));
            }
            if (obj is long)
            {
                strictness = ConversionStrictness.ImplDomainChange; return(obj.ToString());
            }

            // explicit conversion
            if ((conv = obj as IPhpConvertible) != null)
            {
                bool   success;
                string ret = conv.ToString(false, out success);
                strictness = success?ConversionStrictness.Failed:ConversionStrictness.Explicit;
                return(ret);
            }

            strictness = ConversionStrictness.Failed;
            return(String.Empty);
        }
Exemple #5
0
        public static UInt64 TryObjectToUInt64(object obj, out ConversionStrictness strictness)
        {
            string s;

            if (obj is int)
            {
                int ival = (int)obj;
                strictness = ival >= 0 ?
                             ConversionStrictness.ImplExactMatch : ConversionStrictness.Failed;
                return(unchecked ((UInt64)ival));
            }

            if (obj is long)
            {
                long lval = (long)obj;
                strictness = lval >= 0 ?
                             ConversionStrictness.ImplExactMatch : ConversionStrictness.Failed;
                return(unchecked ((UInt64)lval));
            }

            if (obj is bool)
            {
                strictness = ConversionStrictness.ImplDomainChange;
                return((ulong)((bool)obj ? 1 : 0));
            }

            if (obj is double)
            {
                double dval = (double)obj;
                strictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?
                             ConversionStrictness.ImplPercisionLost : ConversionStrictness.Failed;
                return(unchecked ((UInt64)dval));
            }

            if ((s = PhpVariable.AsString(obj)) != null)
            {
                int    ival;
                double dval;
                long   lval;

                // successfull iff the number encoded in the string fits Int32 or Int64:
                Convert.NumberInfo info = Convert.StringToNumber(s, out ival, out lval, out dval);
                if ((info & Convert.NumberInfo.Integer) != 0)
                {
                    strictness = ConversionStrictness.ImplDomainChange; return(unchecked ((UInt64)ival));
                }
                if ((info & Convert.NumberInfo.LongInteger) != 0)
                {
                    strictness = ConversionStrictness.ImplDomainChange; return(unchecked ((UInt64)lval));
                }

                strictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?
                             ConversionStrictness.ImplPercisionLost : ConversionStrictness.Failed;
                return(unchecked ((UInt64)dval));
            }

            // explicit conversion

            /*IPhpConvertible conv;
             * if ((conv = obj as IPhpConvertible) != null)
             * {
             *      int ival;
             *      double dval;
             *      long lval;
             *
             *      Convert.NumberInfo info = conv.ToNumber(out ival, out lval, out dval);
             *      if ((info & Convert.NumberInfo.Integer) != 0)
             *      { strictness = ConversionStrictness.Explicit; return unchecked((UInt64)ival); }
             *      if ((info & Convert.NumberInfo.LongInteger) != 0)
             *      { strictness = ConversionStrictness.Explicit; return unchecked((UInt64)lval); }
             *
             *      strictness = (dval >= UInt64.MinValue && dval <= UInt64.MaxValue) ?
             *              ConversionStrictness.Explicit : ConversionStrictness.Failed;
             *      return unchecked((UInt64)dval);
             * }*/

            strictness = ConversionStrictness.Failed;
            return(0);
        }
Exemple #6
0
        public static Int32 TryObjectToInt32(object obj, out ConversionStrictness strictness)
        {
            string s;

            if (obj is int)
            {
                strictness = ConversionStrictness.ImplExactMatch; return((int)obj);
            }
            if (obj is bool)
            {
                strictness = ConversionStrictness.ImplDomainChange; return((bool)obj ? 1 : 0);
            }

            if (obj is long)
            {
                long lval = (long)obj;
                if (lval < Int32.MinValue || lval > Int32.MaxValue)
                {
                    strictness = ConversionStrictness.Failed;
                }
                else
                {
                    strictness = ConversionStrictness.ImplExactMatch;
                }
                return(unchecked ((Int32)lval));
            }

            if (obj is double)
            {
                double dval = (double)obj;
                if (dval < Int32.MinValue || dval > Int32.MaxValue)
                {
                    strictness = ConversionStrictness.Failed;
                }
                else
                {
                    strictness = ConversionStrictness.ImplPercisionLost;
                }
                return(unchecked ((Int32)dval));
            }

            if ((s = PhpVariable.AsString(obj)) != null)
            {
                int    ival;
                double dval;
                long   lval;

                // successfull iff the number encoded in the string fits the Int32:
                Convert.NumberInfo info = Convert.StringToNumber(s, out ival, out lval, out dval);
                if ((info & Convert.NumberInfo.Integer) != 0)
                {
                    strictness = ConversionStrictness.ImplDomainChange; return(ival);
                }                                                                                    // "123 hello world" -> 123 (for example)

                strictness = ConversionStrictness.Failed;
                return(unchecked ((Int32)lval));
            }

            // explicit conversion

            /*IPhpConvertible conv;
             * if ((conv = obj as IPhpConvertible) != null)
             * {
             *      int ival;
             *      double dval;
             *      long lval;
             *
             *      Convert.NumberInfo info = conv.ToNumber(out ival, out lval, out dval);
             *      if ((info & (Convert.NumberInfo.Integer | Convert.NumberInfo.IsNumber)) ==
             *              (Convert.NumberInfo.Integer | Convert.NumberInfo.IsNumber))
             *      {
             *              strictness = ConversionStrictness.Explicit;
             *              return ival;
             *      }
             *
             *      strictness = ConversionStrictness.Failed;
             *      return unchecked((Int32)lval);
             * }*/

            strictness = ConversionStrictness.Failed;
            return(0);
        }