[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