[pypy-svn] r58915 - in pypy/branch/2.5-merge/pypy/interpreter: pyparser test

iko at codespeak.net iko at codespeak.net
Fri Oct 10 17:09:49 CEST 2008


Author: iko
Date: Fri Oct 10 17:09:48 2008
New Revision: 58915

Modified:
   pypy/branch/2.5-merge/pypy/interpreter/pyparser/astbuilder.py
   pypy/branch/2.5-merge/pypy/interpreter/test/test_syntax.py
Log:
(iko, cfbolz)
Make parser not blow up on bare yield statement



Modified: pypy/branch/2.5-merge/pypy/interpreter/pyparser/astbuilder.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/interpreter/pyparser/astbuilder.py	(original)
+++ pypy/branch/2.5-merge/pypy/interpreter/pyparser/astbuilder.py	Fri Oct 10 17:09:48 2008
@@ -877,18 +877,18 @@
                 index += 1
     builder.push(ast.From(from_name, names, level, atoms[0].lineno))
 
+def _make_yield_tree(builder, nb):
+    atoms = get_atoms(builder, nb)
+    if len(atoms) == 1:
+        return ast.Yield(ast.Const(builder.wrap_none()), atoms[0].lineno)
+    else:
+        return ast.Yield(atoms[1], atoms[0].lineno)
 
 def build_yield_stmt(builder, nb):
-    atoms = get_atoms(builder, nb)
-    lineno = atoms[0].lineno
-    builder.push(ast.Discard(ast.Yield(atoms[1], lineno), lineno))
+    builder.push(ast.Discard(_make_yield_tree(builder, nb)))
 
 def build_yield_expr(builder, nb):
-    atoms = get_atoms(builder, nb)
-    if len(atoms) == 1:
-        builder.push(ast.Yield(ast.Const(builder.wrap_none()), atoms[0].lineno))
-    else:
-        builder.push(ast.Yield(atoms[1], atoms[0].lineno))
+    builder.push(_make_yield_tree(builder, nb))
 
 def build_continue_stmt(builder, nb):
     atoms = get_atoms(builder, nb)

Modified: pypy/branch/2.5-merge/pypy/interpreter/test/test_syntax.py
==============================================================================
--- pypy/branch/2.5-merge/pypy/interpreter/test/test_syntax.py	(original)
+++ pypy/branch/2.5-merge/pypy/interpreter/test/test_syntax.py	Fri Oct 10 17:09:48 2008
@@ -276,6 +276,11 @@
         exec "1 if True else 2"
         warnings.simplefilter('default', SyntaxWarning)
 
+class AppTestYield(Py25AppTest):
+    def test_bare_yield(self):
+        s = "def f():\n    yield"
+
+        exec s
 
 class AppTestWith(Py25AppTest):
     def test_with_simple(self):



More information about the Pypy-commit mailing list