Exemplo n.º 1
0
        private static ParameterExpression[] CreateParametersForMethod(MethodNode parseTree)
        {
            ParameterExpression[] args = new ParameterExpression[parseTree.Arguments.Count + 2];
            Dictionary <string, ParameterExpression> argsMap = new Dictionary <string, ParameterExpression>();

            string name = MethodCompiler.GetUniqueName(argsMap, "self");
            ParameterExpression param = Expression.Parameter(typeof(object), name); // All our args are Object

            argsMap.Add(name, param);
            args[0] = param;

            for (int i = 0; i < parseTree.Arguments.Count; i++)
            {
                MethodArgumentNode arg = parseTree.Arguments[i];
                name  = MethodCompiler.GetUniqueName(argsMap, arg.Token.Value);
                param = Expression.Parameter(typeof(object), name); // All our args are Object
                argsMap.Add(name, param);
                args[i + 2] = param;
            }

            // Those are not used by code, and we define them last, just in case there are naming conflicts - the name of those is unimportant.
            name  = MethodCompiler.GetUniqueName(argsMap, "$executionContext");
            param = Expression.Parameter(typeof(ExecutionContext), name);
            argsMap.Add(name, param);
            args[1] = param;

            return(args);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Visits the Method Argument node.
        /// </summary>
        /// <param name="node">The node to visit.</param>
        public override bool VisitMethodArgument(MethodArgumentNode node)
        {
            if (node.Parent == null)
            {
                return(false);
            }

            if (node.Token == null)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Visits the Method Argument node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public virtual TResult VisitMethodArgument(MethodArgumentNode node)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 4
0
 /// <summary>
 /// Visits the Method Argument node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public virtual TResult VisitMethodArgument(MethodArgumentNode node)
 {
     return(default(TResult));            // The default naive implementation
 }