public Expression Transform(Expression expression)
        {
            var evaluator = new SubtreeEvaluator(
                new Nominator(CanBeEvaluatedLocally).Nominate(expression));

            return evaluator.Eval(expression);
        }
        public Expression Transform(Expression expression)
        {
            var evaluator = new SubtreeEvaluator(
                new Nominator(CanBeEvaluatedLocally).Nominate(expression));

            return(evaluator.Eval(expression));
        }
        public void TestComplexReplace()
        {
            var exp = CreateExpression(p => (p.ID == 42 || p.ID == p.ID + 12 / 3) && p.ID.ToString() == 42.ToString());

            AssertExpression("(((p.ID = 42) || (p.ID = (p.ID + 4))) && (p.ID.ToString() = \"42\"))",
                             SubtreeEvaluator.Evaluate(exp));
        }
Exemple #4
0
        public static Expression PartialEval(Expression expression)
        {
            Nominator        nominator = new Nominator();
            SubtreeEvaluator evaluator = new SubtreeEvaluator(nominator.Nominate(expression));

            return(evaluator.Eval(expression));
        }
Exemple #5
0
        public void TestReplaceLocalVariable()
        {
            var id  = 42;
            var exp = CreateExpression(p => p.ID == id);

            AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp));
        }
Exemple #6
0
        /// <summary>
        ///     Performs evaluation & replacement of independent sub-trees
        /// </summary>
        /// <param name="expression"> The root of the expression tree. </param>
        /// <param name="fnCanBeEvaluated"> A function that decides whether a given expression node can be part of the local function. </param>
        /// <returns> A new tree with sub-trees evaluated and replaced. </returns>
        public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated)
        {
            var nominator        = new Nominator(fnCanBeEvaluated);
            var subtreeEvaluator = new SubtreeEvaluator(nominator.Nominate(expression));

            return(subtreeEvaluator.Eval(expression));
        }
 /// <summary>
 /// Performs evaluation & replacement of independent sub-trees
 /// </summary>
 /// <param name="expression">The root of the expression tree.</param>
 /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param>
 /// <returns>A new tree with sub-trees evaluated and replaced.</returns>
 private static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated)
 {
     if (fnCanBeEvaluated == null)
     {
         fnCanBeEvaluated = PartialEvaluator.CanBeEvaluatedLocally;
     }
     return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression));
 }
 /// <summary>
 /// Performs evaluation replacement of independent sub-trees
 /// </summary>
 /// <param name="expression">The root of the expression tree.</param>
 /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param>
 /// <returns>A new tree with sub-trees evaluated and replaced.</returns>
 public static Expression Eval(System.Linq.Expressions.Expression expression, Func <System.Linq.Expressions.Expression, bool> fnCanBeEvaluated)
 {
     if (fnCanBeEvaluated == null)
     {
         fnCanBeEvaluated = AtkPartialEvaluator.CanBeEvaluatedLocally;
     }
     return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression));
 }
 public static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, Func <ConstantExpression, Expression> fnPostEval)
 {
     if (fnCanBeEvaluated == null)
     {
         fnCanBeEvaluated = PartialEvaluator.CanBeEvaluatedLocally;
     }
     return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), fnPostEval, expression));
 }
        public static Expression EvaluatePartially(Expression expression)
        {
            var nominator = new Nominator();

            nominator.Visit(expression);
            var candidates = nominator.Candidates;
            var evaluator  = new SubtreeEvaluator(candidates);

            return(evaluator.Visit(expression));
        }
Exemple #11
0
            /// <summary>

            /// Performs evaluation & replacement of independent sub-trees

            /// </summary>

            /// <param name="expression">The root of the expression tree.</param>

            /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param>

            /// <returns>A new tree with sub-trees evaluated and replaced.</returns>

            public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated)
            {
                var nominator = new Nominator(fnCanBeEvaluated);

                var candidates = nominator.Nominate(expression);

                var subtreeEvaluator = new SubtreeEvaluator(candidates);

                var newExpression = subtreeEvaluator.Eval(expression);

                return(newExpression);
            }
Exemple #12
0
            internal static Expression Eval(HashSet <Expression> candidates, Expression expression, ref int placeholderCount)
            {
                if (candidates.Count == 0)
                {
                    return(expression);
                }

                var evaluator = new SubtreeEvaluator(candidates, placeholderCount);

                var retval = evaluator.Visit(expression);

                placeholderCount = evaluator.index;

                return(retval);
            }
Exemple #13
0
            internal static Expression Eval(HashSet <Expression> candidates, Expression expression, ref int placeholderCount)
            {
                if (candidates.Count == 0)
                {
                    return(expression);
                }

                var i = placeholderCount >= 0 ? placeholderCount : SqlConstantPlaceholderMaxIndexFinder.Find(expression) + 1;

                var evaluator = new SubtreeEvaluator(candidates)
                {
                    index = i
                };

                return(evaluator.Visit(expression));
            }
Exemple #14
0
            static internal Expression Eval(HashSet <Expression> candidates, Expression expression)
            {
                var evalutator = new SubtreeEvaluator(candidates);

                return(evalutator.Visit(expression));
            }
Exemple #15
0
 public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, ref int placeholderCount)
 {
     return(SubtreeEvaluator.Eval(new EvaluatorNominator(fnCanBeEvaluated).Nominate(expression), expression, ref placeholderCount));
 }
Exemple #16
0
        /// <summary>
        /// <![CDATA[
        /// Performs evaluation & replacement of independent sub-trees >
        /// ]]>
        /// </summary>
        /// <param name="expression">The root of the expression tree.</param>
        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>
        public static Expression PartialEval(Expression expression)
        {
            var treeEvaluator = new SubtreeEvaluator();

            return(treeEvaluator.Eval(expression));
        }
 /// <summary>
 /// Performs evaluation and replacement of independent sub-trees
 /// </summary>
 /// <param name="expression">The root of the expression tree.</param>
 /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param>
 /// <returns>A new tree with sub-trees evaluated and replaced.</returns>
 public static Expression Eval(Expression expression, Func <Expression, bool> fnCanBeEvaluated)
 {
     return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression), expression));
 }
Exemple #18
0
            internal static Expression Eval(HashSet<Expression> candidates, Expression expression)
            {
                var evalutator = new SubtreeEvaluator(candidates);

                return evalutator.Visit(expression);
            }
Exemple #19
0
        /// <summary>
        /// Performs evaluation & replacement of independent sub-trees
        /// </summary>
        /// <param name="expression">The root of the expression tree.</param>
        /// <param name="fnCanBeEvaluated">A function that decides whether a given expression node can be part of the local function.</param>
        /// <returns>A new tree with sub-trees evaluated and replaced.</returns>

        public static Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated, TextWriter logger)
        {
            return(SubtreeEvaluator.Eval(Nominator.Nominate(fnCanBeEvaluated, expression, logger), expression, logger));
        }
 /// <summary>
 ///     Performs evaluation & replacement of independent sub-trees
 /// </summary>
 /// <param name="expression"> The root of the expression tree. </param>
 /// <param name="fnCanBeEvaluated"> A function that decides whether a given expression node can be part of the local function. </param>
 /// <returns> A new tree with sub-trees evaluated and replaced. </returns>
 public static Expression PartialEval(Expression expression, Func<Expression, bool> fnCanBeEvaluated) {
     var nominator = new Nominator(fnCanBeEvaluated);
     var subtreeEvaluator = new SubtreeEvaluator(nominator.Nominate(expression));
     return subtreeEvaluator.Eval(expression);
 }
Exemple #21
0
 public static Expression PartialEval(Expression expression)
 {
     Nominator nominator = new Nominator();
     SubtreeEvaluator evaluator = new SubtreeEvaluator(nominator.Nominate(expression));
     return evaluator.Eval(expression);
 }
Exemple #22
0
        public void TestReplaceClassField()
        {
            var exp = CreateExpression(p => p.ID == _sid);

            AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp));
        }
Exemple #23
0
 /// <summary>
 /// Performs evaluation & replacement of independent sub-trees
 /// </summary>
 /// <param name="expression">The root of the expression tree.</param>
 /// <param name="fnCanBeEvaluated">
 /// A function that decides whether a given expression node can be part of the local
 /// function.
 /// </param>
 /// <returns>A new tree with sub-trees evaluated and replaced.</returns>
 static public Expression PartialEval(Expression expression, Func <Expression, bool> fnCanBeEvaluated)
 {
     return(SubtreeEvaluator.Eval(expression, Nominator.Nominate(fnCanBeEvaluated, expression)));
 }
Exemple #24
0
        public void TestReplaceInlineCode()
        {
            var exp = CreateExpression(p => p.ID == (12 + 30));

            AssertExpression("(p.ID = 42)", SubtreeEvaluator.Evaluate(exp));
        }
Exemple #25
0
 /// <summary> 
 /// <![CDATA[ 
 /// Performs evaluation & replacement of independent sub-trees > 
 /// ]]>
 /// </summary>
 /// <param name="expression">The root of the expression tree.</param>
 /// <returns>A new tree with sub-trees evaluated and replaced.</returns> 
 public static Expression PartialEval(Expression expression)
 {
     var treeEvaluator = new SubtreeEvaluator();
     return treeEvaluator.Eval(expression);
 }
Exemple #26
0
			internal static Expression Eval(HashSet<Expression> candidates, Expression expression, ref int placeholderCount)
			{
				if (candidates.Count == 0)
				{
					return expression;
				}

				var i = placeholderCount >= 0 ? placeholderCount : SqlConstantPlaceholderMaxIndexFinder.Find(expression) + 1;

				var evaluator = new SubtreeEvaluator(candidates) { index = i };

				return evaluator.Visit(expression);
			}