[pypy-commit] pypy py3.5-async: Throw SyntaxError if 'await' outside [async] function (fixes test_invalid_2, 4, 5, 8 in test_syntax)

raffael_t pypy.commits at gmail.com
Mon Jul 11 13:33:51 EDT 2016


Author: Raffael Tfirst <raffael.tfirst at gmail.com>
Branch: py3.5-async
Changeset: r85659:3700b8062272
Date: 2016-07-11 19:33 +0200
http://bitbucket.org/pypy/pypy/changeset/3700b8062272/

Log:	Throw SyntaxError if 'await' outside [async] function (fixes
	test_invalid_2,4,5,8 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
@@ -89,10 +89,15 @@
         raise SyntaxError("'yield' outside function", yield_node.lineno,
                           yield_node.col_offset)
     
-    def note_yieldFrom(self, yield_node):
+    def note_yieldFrom(self, yieldFrom_node):
         """Called when a yield from is found."""
-        raise SyntaxError("'yield' outside function", yield_node.lineno,
-                          yield_node.col_offset)
+        raise SyntaxError("'yield' outside function", yieldFrom_node.lineno,
+                          yieldFrom_node.col_offset)
+    
+    def note_await(self, await_node):
+        """Called when await is found."""
+        raise SyntaxError("'await' outside function", await_node.lineno,
+                          await_node.col_offset)
 
     def note_return(self, ret):
         """Called when a return statement is found."""
@@ -229,6 +234,10 @@
     def __init__(self):
         Scope.__init__(self, "top")
 
+    def note_await(self, await_node):
+        raise SyntaxError("'await' outside async function", await_node.lineno,
+                          await_node.col_offset)
+
 
 class FunctionScope(Scope):
 
@@ -259,6 +268,10 @@
         self.is_generator = True
         if self._in_try_body_depth > 0:
             self.has_yield_inside_try = True
+            
+    def note_await(self, await_node):
+        raise SyntaxError("'await' outside async function", await_node.lineno,
+                          await_node.col_offset)
 
     def note_return(self, ret):
         if ret.value:
@@ -304,6 +317,10 @@
     def note_yieldFrom(self, yield_node):
         raise SyntaxError("'yield from' inside async function", yield_node.lineno,
                           yield_node.col_offset)
+        
+    def note_await(self, await_node):
+        pass
+
 
 class ClassScope(Scope):
 
@@ -410,6 +427,10 @@
         func.args.walkabout(self)
         self.visit_sequence(func.body)
         self.pop_scope()
+    
+    def visit_Await(self, aw):
+        self.scope.note_await(aw)
+        ast.GenericASTVisitor.visit_Await(self, aw)
 
     def visit_Return(self, ret):
         self.scope.note_return(ret)


More information about the pypy-commit mailing list