public CallableSignature(IMethodBase method) { if (null == method) { throw new ArgumentNullException("method"); } Initialize(method.GetParameters(), method.ReturnType, method.AcceptVarArgs); }
public override void LeaveMethodInvocationExpression(MethodInvocationExpression node) { IMethodBase methodBase = node.Target.Entity as IMethodBase; if (methodBase != null && methodBase.AcceptVarArgs) { IParameter[] parameters = methodBase.GetParameters(); if (parameters.Length == ((ICollection)node.Arguments).Count) { IType expressionType = node.Arguments[-1].ExpressionType; if (expressionType == parameters[parameters.Length + -1].Type) { node.Arguments[-1] = new UnaryExpression(UnaryOperatorType.Explode, node.Arguments[-1]); } } } }
private static string GetMethod(IMethodBase method) { var methodName = string.IsNullOrEmpty(method.Name) ? "unknown" : method.Name; if (method.ReflectedType != null) { methodName = string.Format("{0}.{1}", method.ReflectedType.FullName, methodName); } var parameters = method.GetParameters(); if (parameters.Length > 0) { return(string.Format("{0}({1})", methodName, string.Join(", ", parameters.Select(p => string.Format("{0} {1}", p.ParameterType, p.Name))))); } return(string.Format("{0}()", methodName)); }
void PushArguments(IMethodBase entity, ExpressionCollection args) { IParameter[] parameters = entity.GetParameters(); for (int i=0; i<args.Count; ++i) { IType parameterType = parameters[i].Type; Expression arg = args[i]; /* InternalParameter internalparam = parameters[i] as InternalParameter; if ((parameterType.IsByRef) || (internalparam != null && internalparam.Parameter.IsByRef) ) */ if (parameters[i].IsByRef) { LoadAddress(arg); } else { arg.Accept(this); EmitCastIfNeeded(parameterType, PopType()); } } }
void PushArguments(IMethodBase entity, ExpressionCollection args) { var parameters = entity.GetParameters(); for (var i=0; i<args.Count; ++i) { var parameterType = parameters[i].Type; var arg = args[i]; if (parameters[i].IsByRef) LoadAddress(arg); else LoadExpressionWithType(parameterType, arg); } }