private void SetErrorTarget(OperatorInfo info)
 {
     _rule.Target =
         _rule.MakeError(
             AstUtils.ComplexCallHelper(
                 typeof(BinderOps).GetMethod("BadArgumentsForOperation"),
                 ArrayUtils.Insert((Expression)Ast.Constant(info.Operator), _rule.Parameters)
                 )
             );
 }
Beispiel #2
0
 private static DynamicMetaObject MakeOperatorError(OperatorInfo info, DynamicMetaObject[] args)
 {
     return(new DynamicMetaObject(
                Expression.Throw(
                    AstUtils.ComplexCallHelper(
                        typeof(BinderOps).GetMethod("BadArgumentsForOperation"),
                        ArrayUtils.Insert((Expression)AstUtils.Constant(info.Operator), DynamicUtils.GetExpressions(args))
                        )
                    ),
                BindingRestrictions.Combine(args)
                ));
 }
Beispiel #3
0
        public override MSAst TransformCore(ScriptGenerator generator)
        {
            var target     = Target;
            var type       = (Type)null;
            var targetType = target as TypeExpression;

            MSAst transformedTarget;

            if (targetType != null)
            {
                type = targetType.Type;
                transformedTarget = MSAst.Constant(type, typeof(Type));
            }
            else
            {
                transformedTarget = target.Transform(generator);
            }

            var method = Method;

            if (method != null)
            {
                return(MSAstUtil.ComplexCallHelper(
                           (type != null) ? null : transformedTarget,
                           method,
                           Arguments.Select(o => o.Value.Transform(generator)).ToArray()));
            }

            if (type != null)
            {
                return(MSAst.Call(
                           type,
                           MethodName,
                           TypeArguments.ResolvedTypes,
                           _arguments.Transform(generator)));
            }

            return(MSAst.Call(
                       transformedTarget,
                       MethodName,
                       TypeArguments.ResolvedTypes,
                       _arguments.Transform(generator)));
        }