Пример #1
0
        public ArgumentsInfo(IEmitter emitter, InvocationExpression invocationExpression, IMethod method = null)
        {
            Emitter    = emitter;
            Expression = invocationExpression;

            var arguments = invocationExpression.Arguments.ToList();
            var rr        = emitter.Resolver.ResolveNode(invocationExpression);

            ResolveResult = rr as InvocationResolveResult;

            if (ResolveResult == null && rr is DynamicInvocationResolveResult drr)
            {
                BuildDynamicArgumentsList(drr, arguments);
            }
            else
            {
                BuildArgumentsList(arguments);
            }

            if (ResolveResult != null)
            {
                HasTypeArguments = ((IMethod)ResolveResult.Member).TypeArguments.Count > 0;
                BuildTypedArguments(invocationExpression.Target);
            }

            if (method != null && method.Parameters.Count > 0)
            {
                ThisArgument = invocationExpression;
                var name = method.Parameters[0].Name;

                if (!ArgumentsNames.Contains(name))
                {
                    var list = ArgumentsNames.ToList();
                    list.Add(name);
                    ArgumentsNames = list.ToArray();

                    var expr = ArgumentsExpressions.ToList();
                    expr.Insert(0, invocationExpression);
                    ArgumentsExpressions = expr.ToArray();

                    var namedExpr = NamedExpressions.ToList();
                    namedExpr.Insert(0, new NamedParamExpression(name, invocationExpression));
                    NamedExpressions = namedExpr.ToArray();
                }
            }
        }
Пример #2
0
        public ArgumentsInfo(IEmitter emitter, ObjectCreateExpression objectCreateExpression, IMethod method = null)
        {
            Emitter    = emitter;
            Expression = objectCreateExpression;

            var arguments = objectCreateExpression.Arguments.ToList();
            var rr        = emitter.Resolver.ResolveNode(objectCreateExpression);

            if (rr is DynamicInvocationResolveResult drr)
            {
                if (drr.Target is MethodGroupResolveResult group && group.Methods.Count() > 1)
                {
                    throw new EmitterException(objectCreateExpression, Constants.Messages.Exceptions.DYNAMIC_INVOCATION_TOO_MANY_OVERLOADS);
                }
            }

            ResolveResult = rr as InvocationResolveResult;
            BuildArgumentsList(arguments);
            BuildTypedArguments(objectCreateExpression.Type);

            if (method != null && method.Parameters.Count > 0)
            {
                ThisArgument = objectCreateExpression;
                var name = method.Parameters[0].Name;

                if (!ArgumentsNames.Contains(name))
                {
                    var list = ArgumentsNames.ToList();
                    list.Add(name);
                    ArgumentsNames = list.ToArray();

                    var expr = ArgumentsExpressions.ToList();
                    expr.Add(objectCreateExpression);
                    ArgumentsExpressions = expr.ToArray();

                    var namedExpr = NamedExpressions.ToList();
                    namedExpr.Add(new NamedParamExpression(name, objectCreateExpression));
                    NamedExpressions = namedExpr.ToArray();
                }
            }
        }