Exemple #1
0
 public MetaObject Defer(params MetaObject[] args)
 {
     return(MakeDeferred(
                Restrictions.Combine(args),
                args
                ));
 }
Exemple #2
0
        public MetaObject Defer(MetaObject target, params MetaObject[] args)
        {
            ContractUtils.RequiresNotNull(target, "target");

            if (args == null)
            {
                return(MakeDeferred(
                           target.Restrictions,
                           target
                           ));
            }
            else
            {
                return(MakeDeferred(
                           target.Restrictions.Merge(Restrictions.Combine(args)),
                           args.AddFirst(target)
                           ));
            }
        }
Exemple #3
0
        public static MetaObject CreateThrow(MetaObject target, MetaObject[] args, Type exception, params Expression[] exceptionArgs)
        {
            ContractUtils.RequiresNotNull(target, "target");
            ContractUtils.RequiresNotNull(exception, "exception");

            Type[] argTypes = exceptionArgs != null?exceptionArgs.Map((arg) => arg.Type) : Type.EmptyTypes;

            ConstructorInfo constructor = exception.GetConstructor(argTypes);

            if (constructor == null)
            {
                throw new ArgumentException(Strings.TypeDoesNotHaveConstructorForTheSignature);
            }

            return(new MetaObject(
                       Expression.Throw(
                           Expression.New(
                               exception.GetConstructor(argTypes),
                               exceptionArgs
                               )
                           ),
                       target.Restrictions.Merge(Restrictions.Combine(args))
                       ));
        }