public ProcessingResult ProcessExpression(Expression expression, List <NodeReference> references, DataContext context)
        {
            var memberInitExpression = expression as MemberInitExpression;

            if (memberInitExpression == null)
            {
                return(ProcessingResult.Unsuccessful);
            }

            var instanceResult = ExpressionProcessingHelper.ProcessExpression(memberInitExpression.NewExpression, references, context);

            if (!instanceResult.IsSuccess)
            {
                return(ProcessingResult.Unsuccessful);
            }

            var evaluatedBindings = MemberBindingEvaluator.EvaluateBindings(memberInitExpression.Bindings.ToList(), references, context);

            if (evaluatedBindings.Any(b => !b.IsSuccess))
            {
                return(ProcessingResult.Unsuccessful);
            }

            if (instanceResult.IsSingleItem && evaluatedBindings.Any(b => !b.IsSingle))
            {
                instanceResult = ExpressionProcessingHelper.CopyInstances(instanceResult, references.Count,
                                                                          () => ExpressionProcessingHelper.ProcessExpression(memberInitExpression.NewExpression, references, context).Result);
            }

            return(MemberBindingProcessingHelper.ProcessBindings(evaluatedBindings, instanceResult));
        }
            public Impl(PartialExpressionEvaluatorBase parent)
            {
                _parent       = parent;
                _evalBindings = new MemberBindingEvaluator(this);
                _environment  = new Stack <IList <ParameterExpression> >();

                _tilingState = new Stack <bool>();
            }