[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