From 48bb318eca1e23f655238515f141e83577dda4e9 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Thu, 7 Apr 2022 12:01:16 +0200 Subject: 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. --- src/buildtool/build_engine/expression/evaluator.cpp | 2 +- test/buildtool/build_engine/expression/expression.test.cpp | 14 -------------- 2 files changed, 1 insertion(+), 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") { -- cgit v1.2.3