Esempio n. 1
0
        public CallableSignature(IMethodBase method)
        {
            if (null == method)
            {
                throw new ArgumentNullException("method");
            }

            Initialize(method.GetParameters(), method.ReturnType, method.AcceptVarArgs);
        }
Esempio n. 2
0
        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]);
                    }
                }
            }
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
 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());
         }
     }
 }
Esempio n. 5
0
		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);
			}
		}