Author: Raffael Tfirst <raffael.tfi...@gmail.com>
Branch: py3.5-async
Changeset: r85658:e779f313fab5
Date: 2016-07-11 18:17 +0200
http://bitbucket.org/pypy/pypy/changeset/e779f313fab5/

Log:    Throw SyntaxError if 'yield from' inside async function (fixes
        test_invalid_7 in test_syntax)

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
@@ -88,6 +88,11 @@
         """Called when a yield is found."""
         raise SyntaxError("'yield' outside function", yield_node.lineno,
                           yield_node.col_offset)
+    
+    def note_yieldFrom(self, yield_node):
+        """Called when a yield from is found."""
+        raise SyntaxError("'yield' outside function", yield_node.lineno,
+                          yield_node.col_offset)
 
     def note_return(self, ret):
         """Called when a return statement is found."""
@@ -249,6 +254,11 @@
         self.is_generator = True
         if self._in_try_body_depth > 0:
             self.has_yield_inside_try = True
+    
+    def note_yieldFrom(self, yield_node):
+        self.is_generator = True
+        if self._in_try_body_depth > 0:
+            self.has_yield_inside_try = True
 
     def note_return(self, ret):
         if ret.value:
@@ -288,10 +298,13 @@
         FunctionScope.__init__(self, name, lineno, col_offset)
 
     def note_yield(self, yield_node):
-        """Called when a yield is found."""
         raise SyntaxError("'yield' inside async function", yield_node.lineno,
                           yield_node.col_offset)
 
+    def note_yieldFrom(self, yield_node):
+        raise SyntaxError("'yield from' inside async function", 
yield_node.lineno,
+                          yield_node.col_offset)
+
 class ClassScope(Scope):
 
     _hide_bound_from_nested_scopes = True
@@ -448,7 +461,7 @@
         ast.GenericASTVisitor.visit_Yield(self, yie)
 
     def visit_YieldFrom(self, yfr):
-        self.scope.note_yield(yfr)
+        self.scope.note_yieldFrom(yfr)
         ast.GenericASTVisitor.visit_YieldFrom(self, yfr)
 
     def visit_Global(self, glob):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to