object EvaluateWhereClause(Runtime.PassiveExpression expr, Runtime.Pattern lastPattern, ScriptThread thread) { // instantiate where-clause pattern var patt = Pattern.Instantiate(thread); patt.CopyBoundVariables(lastPattern); // perform matching var result = patt.Match(expr); if (result) { // store last recognized pattern as a local variable thread.SetLastPattern(patt); // match succeeded, return result expression if (ResultExpression != null) { return(ResultExpression.Evaluate(thread)); } // match succeeded, evaluate more conditions if (MoreConditions != null) { return(MoreConditions.Evaluate(thread)); } } // matching failed, return nothing return(null); }
void EvaluateWhereClause(Runtime.Pattern lastPattern, EvaluationContext context, AstMode mode) { // instantiate where-clause pattern var patt = Pattern.Instantiate(context, mode); patt.CopyBoundVariables(lastPattern); // perform matching var expr = context.Data.Pop() as Runtime.PassiveExpression; var result = patt.Match(expr); if (result) { // store last recognized pattern as a local variable context.SetLastPattern(patt); // match succeeded, return true if (ResultExpression != null) { ResultExpression.Evaluate(context, AstMode.Read); context.Data.Push(true); return; } // match succeeded? depends on more conditions if (MoreConditions != null) { // return true or false MoreConditions.Evaluate(context, AstMode.Read); return; } } // match failed, return false context.Data.Push(false); }