[pypy-svn] r17568 - in pypy/dist/pypy/interpreter/pyparser: . test

ac at codespeak.net ac at codespeak.net
Wed Sep 14 17:16:44 CEST 2005


Author: ac
Date: Wed Sep 14 17:16:40 2005
New Revision: 17568

Modified:
   pypy/dist/pypy/interpreter/pyparser/astbuilder.py
   pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py
Log:
Fix parsing of generator expression as single argument to a function.



Modified: pypy/dist/pypy/interpreter/pyparser/astbuilder.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/astbuilder.py	(original)
+++ pypy/dist/pypy/interpreter/pyparser/astbuilder.py	Wed Sep 14 17:16:40 2005
@@ -96,6 +96,15 @@
                 index += 2 # Skip COMMA and DOUBLESTAR
             dstararg_token = tokens[index]
             break
+        elif cur_token.get_value() == 'for':
+            if len(arguments) != 1:
+                raise ValueError('SyntaxError("invalid syntax")') # xxx lineno...
+            expr = arguments[0]
+            genexpr_for = parse_genexpr_for(tokens[index-1:])
+            genexpr_for[0].is_outmost = True
+            gexp = ast.GenExpr(ast.GenExprInner(expr, genexpr_for))
+            arguments[0] = gexp
+            break
     return arguments, stararg_token, dstararg_token
 
 

Modified: pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py	(original)
+++ pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py	Wed Sep 14 17:16:40 2005
@@ -170,6 +170,7 @@
     "l = [i for i in ( j*2 for j in range(10) ) ]",
     "l = (i for i in [ j*2 for j in ( k*3 for k in range(10) ) ] )",
     "l = [i for j in ( j*2 for j in [ k*3 for k in range(10) ] ) ]",
+    "l = f(i for i in j)",
     ]
 
 



More information about the Pypy-commit mailing list