diff --git a/src/Eval.cpp b/src/Eval.cpp index 8c9fe55f4..113f4da22 100644 --- a/src/Eval.cpp +++ b/src/Eval.cpp @@ -196,6 +196,25 @@ void Eval::compileExpression (const std::string& e) context.debug ("FILTER Postfix " + dump (_compiled)); } +//////////////////////////////////////////////////////////////////////////////// +void Eval::compileExpression ( + const std::vector >& precompiled) +{ + _compiled = precompiled; + + // Parse for syntax checking and operator replacement. + if (_debug) + context.debug ("FILTER Infix " + dump (_compiled)); + infixParse (_compiled); + if (_debug) + context.debug ("FILTER Infix parsed " + dump (_compiled)); + + // Convert infix --> postfix. + infixToPostfix (_compiled); + if (_debug) + context.debug ("FILTER Postfix " + dump (_compiled)); +} + //////////////////////////////////////////////////////////////////////////////// void Eval::evaluateCompiledExpression (Variant& v) { diff --git a/src/Eval.h b/src/Eval.h index fd44184d1..cb45fab2f 100644 --- a/src/Eval.h +++ b/src/Eval.h @@ -45,6 +45,7 @@ public: void evaluateInfixExpression (const std::string&, Variant&) const; void evaluatePostfixExpression (const std::string&, Variant&) const; void compileExpression (const std::string&); + void compileExpression (const std::vector >&); void evaluateCompiledExpression (Variant&); void ambiguity (bool); void debug (bool);