summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/expression/evaluator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/build_engine/expression/evaluator.cpp')
-rw-r--r--src/buildtool/build_engine/expression/evaluator.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp
index d53259ba..2256a040 100644
--- a/src/buildtool/build_engine/expression/evaluator.cpp
+++ b/src/buildtool/build_engine/expression/evaluator.cpp
@@ -176,6 +176,14 @@ auto LogicalOr(SubExprEvaluator&& eval,
return ExpressionPtr{false};
}
+// Logical Negation
+auto Not(ExpressionPtr const& expr) -> ExpressionPtr {
+ if (ValueIsTrue(expr)) {
+ return ExpressionPtr{false};
+ }
+ return ExpressionPtr{true};
+}
+
auto Keys(ExpressionPtr const& d) -> ExpressionPtr {
auto const& m = d->Map();
auto result = Expression::list_t{};
@@ -1092,6 +1100,7 @@ auto const kBuiltInFunctions =
{"==", EqualExpr},
{"and", AndExpr},
{"or", OrExpr},
+ {"not", UnaryExpr(Not)},
{"++", UnaryExpr(Flatten)},
{"+", UnaryExpr(Addition)},
{"*", UnaryExpr(Multiplication)},