summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2022-04-07 12:01:16 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2022-04-07 16:47:24 +0200
commit48bb318eca1e23f655238515f141e83577dda4e9 (patch)
tree7c8e21733815d5e352117d64b9908f9ca2e92e6c
parent0dd35a95f0d92cc2135f1bb3aea668d957823627 (diff)
downloadjustbuild-48bb318eca1e23f655238515f141e83577dda4e9.tar.gz
expression evaluation: clean up truth values
For historic reasons, we considerd special strings as false values. Drop that behavior in favor of a clean LISP-like semantics: everything is true that is not empty.
-rw-r--r--src/buildtool/build_engine/expression/evaluator.cpp2
-rw-r--r--test/buildtool/build_engine/expression/expression.test.cpp14
2 files changed, 1 insertions, 15 deletions
diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp
index e573bf36..a768f43c 100644
--- a/src/buildtool/build_engine/expression/evaluator.cpp
+++ b/src/buildtool/build_engine/expression/evaluator.cpp
@@ -29,7 +29,7 @@ auto ValueIsTrue(ExpressionPtr const& val) -> bool {
return *val != number_t{0};
}
if (val->IsString()) {
- return *val != ""s and *val != "0"s and *val != "NO"s;
+ return *val != ""s;
}
if (val->IsList()) {
return not val->List().empty();
diff --git a/test/buildtool/build_engine/expression/expression.test.cpp b/test/buildtool/build_engine/expression/expression.test.cpp
index 89ab6e5e..8db88412 100644
--- a/test/buildtool/build_engine/expression/expression.test.cpp
+++ b/test/buildtool/build_engine/expression/expression.test.cpp
@@ -418,20 +418,6 @@ TEST_CASE("Expression Evaluation", "[expression]") { // NOLINT
REQUIRE(fail1);
REQUIRE(fail1->IsString());
CHECK(fail1 == Expression::FromJson(R"("failure")"_json));
-
- expr = Replace(expr, "cond", "0"s);
- REQUIRE(expr);
- auto fail2 = expr.Evaluate(env, fcts);
- REQUIRE(fail2);
- REQUIRE(fail2->IsString());
- CHECK(fail2 == Expression::FromJson(R"("failure")"_json));
-
- expr = Replace(expr, "cond", "NO"s);
- REQUIRE(expr);
- auto fail3 = expr.Evaluate(env, fcts);
- REQUIRE(fail3);
- REQUIRE(fail3->IsString());
- CHECK(fail3 == Expression::FromJson(R"("failure")"_json));
}
SECTION("List condition") {