Update to pitree.git commit e4f3cdd
authorNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 05:19:11 +0000 (16:19 +1100)
committerNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 05:19:11 +0000 (16:19 +1100)
parse-gram.y
piyacc.t
tests_ast/cal_py.t

index a32e4b4..27e9e4a 100644 (file)
@@ -278,9 +278,9 @@ prologue_declaration
       lex_yy_code.yylex(t_def.AST.Text)
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Section1.InitialAction)
       assert isinstance(yy_element_stack[-1].children[0].children[0], t_def.AST.Text)
-      tail = element.get_text(yy_element_stack[-1].children[0], 1)
+      tail = yy_element_stack[-1].children[0].text[1]
       yy_element_stack[-1].children[0].children[0] = lex_yy_code.yy_element_space
-      element.set_text(yy_element_stack[-1].children[0], 1, tail)
+      yy_element_stack[-1].children[0].text[1] = tail
     }
   | %space (?E{t_def.AST.Section1.Language}"%language" STRING)
   | %space (?E{t_def.AST.Section1.NamePrefix}"%name-prefix" STRING)
@@ -320,9 +320,9 @@ grammar_declaration
       lex_yy_code.yylex(t_def.AST.Text)
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Section1Or2.CodeProps)
       assert isinstance(yy_element_stack[-1].children[0].children[0], t_def.AST.Text)
-      tail = element.get_text(yy_element_stack[-1].children[0], 1)
+      tail = yy_element_stack[-1].children[0].text[1]
       yy_element_stack[-1].children[0].children[0] = lex_yy_code.yy_element_space
-      element.set_text(yy_element_stack[-1].children[0], 1, tail)
+      yy_element_stack[-1].children[0].text[1] = tail
     }
   | %space (?E{t_def.AST.Section1Or2.DefaultPrec, value = True}"%default-prec")
   | %space (?E{t_def.AST.Section1Or2.DefaultPrec}"%no-default-prec")
@@ -333,21 +333,13 @@ grammar_declaration
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Section1Or2.Code)
       assert isinstance(yy_element_stack[-1].children[0].children[1], t_def.AST.BracedCode)
       assert isinstance(yy_element_stack[-1].children[0].children[1].children[0], t_def.AST.Text)
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1].children[0],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1].children[0], 0)[1:-1] # remove { }
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1], 0) + '{'
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        1,
-        '}' + element.get_text(yy_element_stack[-1].children[0].children[1], 1)
-      )
+      # remove { }
+      yy_element_stack[-1].children[0].children[1].children[0].text[0] = \
+        yy_element_stack[-1].children[0].children[1].children[0].text[0][1:-1]
+      yy_element_stack[-1].children[0].children[1].text[0] = \
+        yy_element_stack[-1].children[0].children[1].text[0] + '{'
+      yy_element_stack[-1].children[0].children[1].text[1] = \
+        '}' + yy_element_stack[-1].children[0].children[1].text[1]
     }
   /* the BracedCode should be removed altogether, put here for compatibility */
   | %space (?E{t_def.AST.Section1Or2.Code}"%code" ID %space (?E{t_def.AST.BracedCode}"{...}") )
@@ -356,21 +348,13 @@ grammar_declaration
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Section1Or2.Code)
       assert isinstance(yy_element_stack[-1].children[0].children[1], t_def.AST.BracedCode)
       assert isinstance(yy_element_stack[-1].children[0].children[1].children[0], t_def.AST.Text)
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1].children[0],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1].children[0], 0)[1:-1] # remove { }
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1], 0) + '{'
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        1,
-        '}' + element.get_text(yy_element_stack[-1].children[0].children[1], 1)
-      )
+      # remove { }
+      yy_element_stack[-1].children[0].children[1].children[0].text[0] = \
+        yy_element_stack[-1].children[0].children[1].children[0].text[0][1:-1]
+      yy_element_stack[-1].children[0].children[1].text[0] = \
+        yy_element_stack[-1].children[0].children[1].text[0] + '{'
+      yy_element_stack[-1].children[0].children[1].text[1] = \
+        '}' + yy_element_stack[-1].children[0].children[1].text[1]
     }
   ;
 
@@ -412,21 +396,13 @@ grammar_declaration
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Section1Or2.Union)
       assert isinstance(yy_element_stack[-1].children[0].children[1], t_def.AST.BracedCode)
       assert isinstance(yy_element_stack[-1].children[0].children[1].children[0], t_def.AST.Text)
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1].children[0],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1].children[0], 0)[1:-1] # remove { }
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        0,
-        element.get_text(yy_element_stack[-1].children[0].children[1], 0) + '{'
-      )
-      element.set_text(
-        yy_element_stack[-1].children[0].children[1],
-        1,
-        '}' + element.get_text(yy_element_stack[-1].children[0].children[1], 1)
-      )
+      # remove { }
+      yy_element_stack[-1].children[0].children[1].children[0].text[0] = \
+        yy_element_stack[-1].children[0].children[1].children[0].text[0][1:-1]
+      yy_element_stack[-1].children[0].children[1].text[0] = \
+        yy_element_stack[-1].children[0].children[1].text[0] + '{'
+      yy_element_stack[-1].children[0].children[1].text[1] = \
+        '}' + yy_element_stack[-1].children[0].children[1].text[1]
     }
   ;
 
@@ -568,9 +544,9 @@ rhs
       lex_yy_code.yylex(t_def.AST.Text)
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Production.Action)
       assert isinstance(yy_element_stack[-1].children[0].children[0], t_def.AST.Text)
-      tail = element.get_text(yy_element_stack[-1].children[0], 1)
+      tail = yy_element_stack[-1].children[0].text[1]
       yy_element_stack[-1].children[0].children[0] = lex_yy_code.yy_element_space
-      element.set_text(yy_element_stack[-1].children[0], 1, tail)
+      yy_element_stack[-1].children[0].text[1] = tail
     }
   | rhs "%?{...}"
     {
@@ -592,9 +568,9 @@ rhs
       lex_yy_code.yylex(t_def.AST.Text)
       assert isinstance(yy_element_stack[-1].children[0], t_def.AST.Production.GroupElement)
       assert isinstance(yy_element_stack[-1].children[0].children[0], t_def.AST.Text)
-      tail = element.get_text(yy_element_stack[-1].children[0], 1)
+      tail = yy_element_stack[-1].children[0].text[1]
       yy_element_stack[-1].children[0].children[0] = lex_yy_code.yy_element_space
-      element.set_text(yy_element_stack[-1].children[0], 1, tail)
+      yy_element_stack[-1].children[0].text[1] = tail
     }
   /* Nick added %space */
   | rhs %space (?E{t_def.AST.Production.Space}"%space")
index 98608bc..4cc8775 100644 (file)
--- a/piyacc.t
+++ b/piyacc.t
@@ -1342,13 +1342,14 @@ def get_text(self, python = False):
   )
 @method(AST.Text)
 def get_text(self, python = False):
+  assert len(self.text) == len(self.children) + 1
   return ''.join(
     [
       j
       for i in range(len(self.children))
-      for j in [element.get_text(self, i), self.children[i].get_text(python)]
+      for j in [self.text[i], self.children[i].get_text(python)]
     ] +
-    [element.get_text(self, len(self.children))]
+    [self.text[-1]]
   )
 del get_text
 
index 8c6110d..e1255c9 100644 (file)
@@ -59,7 +59,7 @@ def factory(tag, attrib = {}, *args, **kwargs):
 
 @method(Text)
 def get_text(self):
-  return element.get_text(self, 0)
+  return self.text[0]
 del get_text
 
 @method(AST.Expr)