Example #1
0
        public ListInitNode(ListInitExpression listInitExpression, ConstantExpression[] constExpressions, ParameterExpression[] parameterExpressions)
        {
            if (listInitExpression == null)
            {
                throw new ArgumentNullException("listInitExpression");
            }
            if (constExpressions == null)
            {
                throw new ArgumentNullException("constExpressions");
            }
            if (parameterExpressions == null)
            {
                throw new ArgumentNullException("parameterExpressions");
            }

            this.listInitExpression = listInitExpression;

            this.newNode             = new NewNode(listInitExpression.NewExpression, constExpressions, parameterExpressions);
            this.initializationNodes = new KeyValuePair <MethodInfo, ExecutionNode[]> [listInitExpression.Initializers.Count];
            for (var i = 0; i < this.initializationNodes.Length; i++)
            {
                var initialization = listInitExpression.Initializers[i];
                var argumentNodes  = new ExecutionNode[initialization.Arguments.Count];
                for (var a = 0; a < initialization.Arguments.Count; a++)
                {
                    argumentNodes[a] = AotCompiler.Compile(initialization.Arguments[a], constExpressions, parameterExpressions);
                }
                this.initializationNodes[i] = new KeyValuePair <MethodInfo, ExecutionNode[]>(initialization.AddMethod, argumentNodes);
            }
        }
        public MemberInitNode(MemberInitExpression memberInitExpression, ConstantExpression[] constExpressions, ParameterExpression[] parameterExpressions)
        {
            if (memberInitExpression == null)
            {
                throw new ArgumentNullException("memberInitExpression");
            }
            if (constExpressions == null)
            {
                throw new ArgumentNullException("constExpressions");
            }
            if (parameterExpressions == null)
            {
                throw new ArgumentNullException("parameterExpressions");
            }

            this.memberInitExpression = memberInitExpression;

            this.newNode = new NewNode(memberInitExpression.NewExpression, constExpressions, parameterExpressions);
            this.memberAssignmentNode = memberInitExpression.Bindings.Any(b => b is MemberAssignment) ?
                                        new MemberAssignmentsNode(memberInitExpression.Bindings, constExpressions, parameterExpressions) :
                                        MemberAssignmentsNode.Empty;

            this.listBindingNode = memberInitExpression.Bindings.Any(b => b is MemberListBinding) ?
                                   new MemberListBindingsNode(memberInitExpression.Bindings, constExpressions, parameterExpressions) :
                                   MemberListBindingsNode.Empty;

            this.memberMemberBindingNode = memberInitExpression.Bindings.Any(b => b is MemberMemberBinding) ?
                                           new MemberMemberBindingsNode(memberInitExpression.Bindings, constExpressions, parameterExpressions) :
                                           MemberMemberBindingsNode.Empty;
        }