[pypy-commit] pypy py3.5: Improve testing of validate.py. Fix it.

arigo pypy.commits at gmail.com
Mon Aug 29 06:42:32 EDT 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r86683:8e7d1dc6fc7e
Date: 2016-08-29 12:41 +0200
http://bitbucket.org/pypy/pypy/changeset/8e7d1dc6fc7e/

Log:	Improve testing of validate.py. Fix it.

diff --git a/pypy/interpreter/astcompiler/astbuilder.py b/pypy/interpreter/astcompiler/astbuilder.py
--- a/pypy/interpreter/astcompiler/astbuilder.py
+++ b/pypy/interpreter/astcompiler/astbuilder.py
@@ -4,12 +4,20 @@
 from pypy.interpreter.pyparser.pygram import syms, tokens
 from pypy.interpreter.pyparser.error import SyntaxError
 from pypy.interpreter.pyparser import parsestring
-from rpython.rlib.objectmodel import always_inline
+from rpython.rlib.objectmodel import always_inline, we_are_translated
 
 
 def ast_from_node(space, node, compile_info):
     """Turn a parse tree, node, to AST."""
-    return ASTBuilder(space, node, compile_info).build_ast()
+    ast = ASTBuilder(space, node, compile_info).build_ast()
+    #
+    # When we are not translated, we send this ast to validate_ast.
+    # The goal is to check that validate_ast doesn't crash on valid
+    # asts, at least.
+    if not we_are_translated():
+        from pypy.interpreter.astcompiler import validate
+        validate.validate_ast(space, ast)
+    return ast
 
 
 augassign_operator_map = {
diff --git a/pypy/interpreter/astcompiler/validate.py b/pypy/interpreter/astcompiler/validate.py
--- a/pypy/interpreter/astcompiler/validate.py
+++ b/pypy/interpreter/astcompiler/validate.py
@@ -176,6 +176,13 @@
         if node.returns:
             self._validate_expr(node.returns)
 
+    def visit_AsyncFunctionDef(self, node):
+        self._validate_body(node.body, "AsyncFunctionDef")
+        node.args.walkabout(self)
+        self._validate_exprs(node.decorator_list)
+        if node.returns:
+            self._validate_expr(node.returns)
+
     def visit_keyword(self, node):
         self._validate_expr(node.value)
 
@@ -193,6 +200,9 @@
         if node.value:
             self._validate_expr(node.value)
 
+    def visit_Await(self, node):
+        self._validate_expr(node.value)
+
     def visit_Delete(self, node):
         self._validate_nonempty_seq(node.targets, "targets", "Delete")
         self._validate_exprs(node.targets, ast.Del)
@@ -212,6 +222,12 @@
         self._validate_body(node.body, "For")
         self._validate_stmts(node.orelse)
 
+    def visit_AsyncFor(self, node):
+        self._validate_expr(node.target, ast.Store)
+        self._validate_expr(node.iter)
+        self._validate_body(node.body, "AsyncFor")
+        self._validate_stmts(node.orelse)
+
     def visit_While(self, node):
         self._validate_expr(node.test)
         self._validate_body(node.body, "While")
@@ -232,6 +248,11 @@
         self.visit_sequence(node.items)
         self._validate_body(node.body, "With")
 
+    def visit_AsyncWith(self, node):
+        self._validate_nonempty_seq(node.items, "items", "AsyncWith")
+        self.visit_sequence(node.items)
+        self._validate_body(node.body, "AsyncWith")
+
     def visit_Raise(self, node):
         if node.exc:
             self._validate_expr(node.exc)


More information about the pypy-commit mailing list