From 3199963368d9a4fc49d77570a7a21263f55e12fa Mon Sep 17 00:00:00 2001 From: Vesselin Atanasov Date: Sun, 20 Oct 2024 12:24:57 +0300 Subject: [PATCH 1/3] Fix compatibility with Jinja for the % operator. --- src/value_visitors.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/value_visitors.h b/src/value_visitors.h index 4ac874f5..6a667b3c 100644 --- a/src/value_visitors.h +++ b/src/value_visitors.h @@ -553,7 +553,7 @@ struct BinaryMathOperation : BaseVisitor<> result = left / right; break; case jinja2::BinaryExpression::DivReminder: - result = std::remainder(left, right); + result = std::fmod(left, right); break; case jinja2::BinaryExpression::DivInteger: { From d3dbcba8e74b48ba8f790c68e86f109affd6ada8 Mon Sep 17 00:00:00 2001 From: Vesselin Atanasov Date: Sun, 20 Oct 2024 12:31:30 +0300 Subject: [PATCH 2/3] Rename enum value DivReminder -> DivRemainder --- src/expression_evaluator.cpp | 2 +- src/expression_evaluator.h | 2 +- src/expression_parser.cpp | 2 +- src/value_visitors.h | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/expression_evaluator.cpp b/src/expression_evaluator.cpp index 136e33d8..019f1493 100644 --- a/src/expression_evaluator.cpp +++ b/src/expression_evaluator.cpp @@ -127,7 +127,7 @@ InternalValue BinaryExpression::Evaluate(RenderContext& context) case jinja2::BinaryExpression::Minus: case jinja2::BinaryExpression::Mul: case jinja2::BinaryExpression::Div: - case jinja2::BinaryExpression::DivReminder: + case jinja2::BinaryExpression::DivRemainder: case jinja2::BinaryExpression::DivInteger: case jinja2::BinaryExpression::Pow: result = Apply2(leftVal, rightVal, m_oper); diff --git a/src/expression_evaluator.h b/src/expression_evaluator.h index 06b1c40f..5bd7031d 100644 --- a/src/expression_evaluator.h +++ b/src/expression_evaluator.h @@ -452,7 +452,7 @@ class BinaryExpression : public Expression Minus, Mul, Div, - DivReminder, + DivRemainder, DivInteger, Pow, StringConcat diff --git a/src/expression_parser.cpp b/src/expression_parser.cpp index c8929367..3567d966 100644 --- a/src/expression_parser.cpp +++ b/src/expression_parser.cpp @@ -242,7 +242,7 @@ ExpressionParser::ParseResult> ExpressionPars operation = BinaryExpression::DivInteger; break; case '%': - operation = BinaryExpression::DivReminder; + operation = BinaryExpression::DivRemainder; break; default: lexer.ReturnToken(); diff --git a/src/value_visitors.h b/src/value_visitors.h index 6a667b3c..193680c5 100644 --- a/src/value_visitors.h +++ b/src/value_visitors.h @@ -552,7 +552,7 @@ struct BinaryMathOperation : BaseVisitor<> case jinja2::BinaryExpression::Div: result = left / right; break; - case jinja2::BinaryExpression::DivReminder: + case jinja2::BinaryExpression::DivRemainder: result = std::fmod(left, right); break; case jinja2::BinaryExpression::DivInteger: @@ -607,7 +607,7 @@ struct BinaryMathOperation : BaseVisitor<> result = left / right; break; case jinja2::BinaryExpression::Div: - case jinja2::BinaryExpression::DivReminder: + case jinja2::BinaryExpression::DivRemainder: case jinja2::BinaryExpression::Pow: result = this->operator ()(static_cast(left), static_cast(right)); break; From 36c4daf45d724d5dc2470a856abfc99a4a401090 Mon Sep 17 00:00:00 2001 From: Vesselin Atanasov Date: Sun, 20 Oct 2024 12:40:04 +0300 Subject: [PATCH 3/3] Add test for the remainder operator % --- test/expressions_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/expressions_test.cpp b/test/expressions_test.cpp index 33f044ae..462f50bd 100644 --- a/test/expressions_test.cpp +++ b/test/expressions_test.cpp @@ -20,6 +20,7 @@ R"( {{ 7 / 3}} {{ 7 // 3 }} {{ 7 % intValue }} +{{ 11 % 7 }} {{ 3 ** 4 }} {{ 10 ** -2 }} {{ 10/10 + 2*5 }} @@ -48,6 +49,7 @@ R"( 2.3333333 2 1 +4 81 0.01 11