Open
Description
Looks like jinja2cpp just doesn't match the spec here on parsing dict/map literals.
https://jinja.palletsprojects.com/en/2.10.x/templates/#literals
Here's what works in Python (but doesn't work with jinja2cpp).
{% set foo = {"bar":"baz"} %}
Here's what currently works in jinja2cpp (but doesn't work with Python).
{% set foo = {"bar"="baz"} %}
Here's the local code changes I made to make jinja2cpp behave the same as Python and match the docs/spec.
diff --git a/jinja2cpp/src/expression_parser.cpp b/jinja2cpp/src/expression_parser.cpp
--- a/jinja2cpp/src/expression_parser.cpp
+++ b/jinja2cpp/src/expression_parser.cpp
@@ -395,11 +395,11 @@
if (key != Token::String)
return MakeParseError(ErrorCode::ExpectedStringLiteral, key);
- if (!lexer.EatIfEqual('='))
+ if (!lexer.EatIfEqual(':'))
{
auto tok = lexer.PeekNextToken();
auto tok1 = tok;
- tok1.type = Token::Assign;
+ tok1.type = Token::Colon;
return MakeParseError(ErrorCode::ExpectedToken, tok, {tok1});
}
diff --git a/jinja2cpp/src/lexer.h b/jinja2cpp/src/lexer.h
--- a/jinja2cpp/src/lexer.h
+++ b/jinja2cpp/src/lexer.h
@@ -37,6 +37,7 @@
RCrlBracket = '}',
Assign = '=',
Comma = ',',
+ Colon = ':',
Eof = 256,
// General
diff --git a/jinja2cpp/src/template_parser.h b/jinja2cpp/src/template_parser.h
--- a/jinja2cpp/src/template_parser.h
+++ b/jinja2cpp/src/template_parser.h
@@ -1017,6 +1017,7 @@
{ Token::RCrlBracket, UNIVERSAL_STR("}") },
{ Token::Assign, UNIVERSAL_STR("=") },
{ Token::Comma, UNIVERSAL_STR(",") },
+ { Token::Colon, UNIVERSAL_STR(":") },
{ Token::Eof, UNIVERSAL_STR("<<End of block>>") },
{ Token::Equal, UNIVERSAL_STR("==") },
{ Token::NotEqual, UNIVERSAL_STR("!=") },
Metadata
Metadata
Assignees
Labels
No labels