/// <summary> /// Adds named expression to registry. /// </summary> /// <param name="namedExpression">Named expression to add.</param> /// <param name="parameters">Parameters of the expression.</param> public void Add(NamedExpression namedExpression, ICollection <string> parameters) { if (namedExpression == null) { throw new ArgumentNullException(nameof(namedExpression)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } foreach (var parameter in parameters) { if (!ParametersExpressionsDependencies.ContainsKey(parameter)) { ParametersExpressionsDependencies[parameter] = new List <Expression>(); } ParametersExpressionsDependencies[parameter].RemoveAll(r => r is NamedExpression n && n.Name == namedExpression.Name); ParametersExpressionsDependencies[parameter].Add(namedExpression); } if (NamedExpressions.ContainsKey(namedExpression.Name)) { NamedExpressions.Remove(namedExpression.Name); } NamedExpressions.Add(namedExpression.Name, namedExpression); }
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(); } } }
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(); } } }