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>(); }