public override Expression Visit(Expression expression) { if (expression != null) { bool flag = this.cannotBeEvaluated; this.cannotBeEvaluated = false; base.Visit(expression); if (!this.cannotBeEvaluated) { if (!this.funcCanBeEvaluated(expression)) { this.cannotBeEvaluated = true; } else { this.candidates.Add(expression); } } PartialEvaluator.Nominator nominator = this; nominator.cannotBeEvaluated = nominator.cannotBeEvaluated | flag; } return(expression); }
internal static HashSet<Expression> Nominate(Func<Expression, bool> funcCanBeEvaluated, Expression expression) { PartialEvaluator.Nominator nominator = new PartialEvaluator.Nominator(funcCanBeEvaluated); nominator.Visit(expression); return nominator.candidates; }
internal static HashSet <Expression> Nominate(Func <Expression, bool> funcCanBeEvaluated, Expression expression) { PartialEvaluator.Nominator nominator = new PartialEvaluator.Nominator(funcCanBeEvaluated); nominator.Visit(expression); return(nominator.candidates); }