Author: Raffael Tfirst <raffael.tfi...@gmail.com>
Branch: py3.5-async
Changeset: r85593:90196ea803fd
Date: 2016-07-06 22:22 +0200
http://bitbucket.org/pypy/pypy/changeset/90196ea803fd/

Log:    Undo visit_annotations parameter change, add asyncfunctiondef and
        asyncwith

diff --git a/pypy/interpreter/astcompiler/symtable.py 
b/pypy/interpreter/astcompiler/symtable.py
--- a/pypy/interpreter/astcompiler/symtable.py
+++ b/pypy/interpreter/astcompiler/symtable.py
@@ -366,13 +366,29 @@
         assert isinstance(args, ast.arguments)
         self.visit_sequence(args.defaults)
         self.visit_kwonlydefaults(args.kw_defaults)
-        self._visit_annotations(func, func.args, func.returns)
+        self._visit_annotations(func)
         self.visit_sequence(func.decorator_list)
         new_scope = FunctionScope(func.name, func.lineno, func.col_offset)
         self.push_scope(new_scope, func)
         func.args.walkabout(self)
         self.visit_sequence(func.body)
         self.pop_scope()
+    
+    def visit_AsyncFunctionDef(self, func):
+        self.note_symbol(func.name, SYM_ASSIGNED)
+        # Function defaults and decorators happen in the outer scope.
+        args = func.args
+        assert isinstance(args, ast.arguments)
+        self.visit_sequence(args.defaults)
+        self.visit_kwonlydefaults(args.kw_defaults)
+        self._visit_annotations(func)
+        self.visit_sequence(func.decorator_list)
+        new_scope = FunctionScope(func.name, func.lineno, func.col_offset)
+        self.push_scope(new_scope, func)
+        func.args.walkabout(self)
+        self.visit_sequence(func.body)
+        self.pop_scope()
+    
 
     def visit_Return(self, ret):
         self.scope.note_return(ret)
@@ -507,6 +523,13 @@
         witem.context_expr.walkabout(self)
         if witem.optional_vars:
             witem.optional_vars.walkabout(self)
+    
+    def visit_AsyncWith(self, aw):
+        self.scope.new_temporary_name()
+        self.visit_sequence(aw.items)
+        self.scope.note_try_start(aw)
+        self.visit_sequence(aw.body)
+        self.scope.note_try_end(aw)
 
     def visit_arguments(self, arguments):
         scope = self.scope
@@ -527,13 +550,14 @@
             arg = params[i].arg
             self.note_symbol(arg, SYM_PARAM)
 
-    def _visit_annotations(self, func, args, returns):
+    def _visit_annotations(self, func):
+        args = func.args
         assert isinstance(args, ast.arguments)
         if args.args:
             self._visit_arg_annotations(args.args)
         if args.kwonlyargs:
             self._visit_arg_annotations(args.kwonlyargs)
-        if returns:
+        if func.returns:
             func.returns.walkabout(self)
 
     def _visit_arg_annotations(self, args):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to