From db26a28bf91885bb9eff63cc307a494100e4767b Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Sat, 18 Dec 2021 02:06:31 +0000 Subject: [PATCH] move domSource to Eval, as it's an Eval source --- src/Eval.cpp | 24 +++++++++++++++++++----- src/Eval.h | 2 ++ src/Filter.cpp | 12 ------------ src/Filter.h | 2 -- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Eval.cpp b/src/Eval.cpp index 2dbf2d14d..40045bafb 100644 --- a/src/Eval.cpp +++ b/src/Eval.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -34,7 +35,7 @@ #include #include -extern Task& contextTask; +extern Task* contextTask; //////////////////////////////////////////////////////////////////////////////// // Supported operators, borrowed from C++, particularly the precedence. @@ -101,6 +102,19 @@ static bool namedConstants (const std::string& name, Variant& value) return true; } +//////////////////////////////////////////////////////////////////////////////// +// Support for evaluating DOM references (add with `e.AddSource(domSource)`) +bool domSource (const std::string& identifier, Variant& value) +{ + if (getDOM (identifier, contextTask, value)) + { + value.source (identifier); + return true; + } + + return false; +} + //////////////////////////////////////////////////////////////////////////////// Eval::Eval () { @@ -299,10 +313,10 @@ void Eval::evaluatePostfixStack ( else if (token.first == "^") result = left ^ right; else if (token.first == "%") result = left % right; else if (token.first == "xor") result = left.operator_xor (right); - else if (token.first == "~") result = left.operator_match (right, contextTask); - else if (token.first == "!~") result = left.operator_nomatch (right, contextTask); - else if (token.first == "_hastag_") result = left.operator_hastag (right, contextTask); - else if (token.first == "_notag_") result = left.operator_notag (right, contextTask); + else if (token.first == "~") result = left.operator_match (right, *contextTask); + else if (token.first == "!~") result = left.operator_nomatch (right, *contextTask); + else if (token.first == "_hastag_") result = left.operator_hastag (right, *contextTask); + else if (token.first == "_notag_") result = left.operator_notag (right, *contextTask); else throw format ("Unsupported operator '{1}'.", token.first); diff --git a/src/Eval.h b/src/Eval.h index 138919859..190d357b1 100644 --- a/src/Eval.h +++ b/src/Eval.h @@ -32,6 +32,8 @@ #include #include +bool domSource (const std::string&, Variant&); + class Eval { public: diff --git a/src/Filter.cpp b/src/Filter.cpp index 0f9fcd2e1..7fb1f963e 100644 --- a/src/Filter.cpp +++ b/src/Filter.cpp @@ -39,18 +39,6 @@ // Context for DOM evaluations const Task* contextTask = NULL; -//////////////////////////////////////////////////////////////////////////////// -bool domSource (const std::string& identifier, Variant& value) -{ - if (getDOM (identifier, contextTask, value)) - { - value.source (identifier); - return true; - } - - return false; -} - //////////////////////////////////////////////////////////////////////////////// // Take an input set of tasks and filter into a subset. void Filter::subset (const std::vector & input, std::vector & output) diff --git a/src/Filter.h b/src/Filter.h index 8ff10cc9e..da15c68b3 100644 --- a/src/Filter.h +++ b/src/Filter.h @@ -32,8 +32,6 @@ #include #include -bool domSource (const std::string&, Variant&); - class Filter { public: