diff --git a/include/minja/minja.hpp b/include/minja/minja.hpp index 5ed0556..b8fb644 100644 --- a/include/minja/minja.hpp +++ b/include/minja/minja.hpp @@ -1356,8 +1356,8 @@ class BinaryOpExpr : public Expression { } if (op == Op::And) { - if (!l.to_bool()) return Value(false); - return right->evaluate(context).to_bool(); + if (!l.to_bool()) return l; + return right->evaluate(context); } else if (op == Op::Or) { if (l.to_bool()) return l; return right->evaluate(context); diff --git a/tests/test-syntax.cpp b/tests/test-syntax.cpp index 36bdaa3..376c755 100644 --- a/tests/test-syntax.cpp +++ b/tests/test-syntax.cpp @@ -494,6 +494,9 @@ TEST(SyntaxTest, SimpleCases) { EXPECT_EQ( "2; ; 10", render(R"({{ {1: 2}.get(1) }}; {{ {}.get(1) or '' }}; {{ {}.get(1, 10) }})", {}, {})); + EXPECT_EQ( + "def; ; A; B", + render(R"({{ 'abc' and 'def' }}; {{ '' and 'x' }}; {{ (true and 'A') or 'B' }}; {{ (false and 'A') or 'B' }})", {}, {})); EXPECT_EQ( R"(1,1.2,"a",true,true,false,false,null,[],[1],[1, 2],{},{"a": 1},{"1": "b"},)", render(R"(