]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Swap out the old parser with the new one
authorKevin <kevin@kevin-brown.com>
Thu, 14 May 2020 01:50:10 +0000 (21:50 -0400)
committerKevin <kevin@kevin-brown.com>
Thu, 14 May 2020 02:01:54 +0000 (22:01 -0400)
This will allow us to figure out where the gaps are within the test
suite and also start running a comparison on the timing changes.

src/jinja2/new_parser.py
src/jinja2/parser.py

index 5345cb6f6c05c0c56fb97fda4e30d8fa40bd0212..95ae73ec3de268a5fb9665777c3526a9f3b9be8f 100644 (file)
@@ -1,3 +1,4 @@
+from tatsu.exceptions import FailedSemantics\r
 from . import nodes\r
 \r
 \r
index eedea7a03a9c5ef2c22df6f227fe00c665ac18d5..7cb55fdda1446b2656f7caccf4790e4d494b4613 100644 (file)
@@ -5,6 +5,12 @@ from .exceptions import TemplateSyntaxError
 from .lexer import describe_token
 from .lexer import describe_token_expr
 
+import tatsu
+
+with open('grammar.ebnf', 'r') as grammar_file:
+    grammar = tatsu.compile(grammar_file.read())
+
+
 _statement_keywords = frozenset(
     [
         "for",
@@ -40,6 +46,7 @@ class Parser:
 
     def __init__(self, environment, source, name=None, filename=None, state=None):
         self.environment = environment
+        self.source = source
         self.stream = environment._tokenize(source, name, filename, state)
         self.name = name
         self.filename = filename
@@ -927,8 +934,20 @@ class Parser:
 
         return body
 
-    def parse(self):
-        """Parse the whole template into a `Template` node."""
+    def parse_old(self):
         result = nodes.Template(self.subparse(), lineno=1)
         result.set_environment(self.environment)
         return result
+
+    def parse(self):
+        """Parse the whole template into a `Template` node."""
+        from .new_parser import JinjaSemantics, parse_template
+
+        return parse_template(
+            grammar.parse(
+                self.source,
+                whitespace='',
+                parseinfo=True,
+                semantics=JinjaSemantics(),
+            )
+        )