[Python-checkins] r75081 - in sandbox/trunk/2to3/lib2to3: Grammar.txt tests/test_parser.py
benjamin.peterson
python-checkins at python.org
Sun Sep 27 05:02:57 CEST 2009
Author: benjamin.peterson
Date: Sun Sep 27 05:02:57 2009
New Revision: 75081
Log:
let 2to3 work with extended iterable unpacking
Modified:
sandbox/trunk/2to3/lib2to3/Grammar.txt
sandbox/trunk/2to3/lib2to3/tests/test_parser.py
Modified: sandbox/trunk/2to3/lib2to3/Grammar.txt
==============================================================================
--- sandbox/trunk/2to3/lib2to3/Grammar.txt (original)
+++ sandbox/trunk/2to3/lib2to3/Grammar.txt Sun Sep 27 05:02:57 2009
@@ -53,8 +53,9 @@
simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt |
import_stmt | global_stmt | exec_stmt | assert_stmt)
-expr_stmt: testlist (augassign (yield_expr|testlist) |
- ('=' (yield_expr|testlist))*)
+expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) |
+ ('=' (yield_expr|testlist_star_expr))*)
+testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [',']
augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |
'<<=' | '>>=' | '**=' | '//=')
# For normal assignments, additional restrictions enforced by the interpreter
@@ -112,6 +113,7 @@
not_test: 'not' not_test | comparison
comparison: expr (comp_op expr)*
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
+star_expr: '*' expr
expr: xor_expr ('|' xor_expr)*
xor_expr: and_expr ('^' and_expr)*
and_expr: shift_expr ('&' shift_expr)*
@@ -125,14 +127,14 @@
'{' [dictsetmaker] '}' |
'`' testlist1 '`' |
NAME | NUMBER | STRING+ | '.' '.' '.')
-listmaker: test ( comp_for | (',' test)* [','] )
-testlist_gexp: test ( comp_for | (',' test)* [','] )
+listmaker: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] )
+testlist_gexp: test ( comp_for | (',' (test|star_expr))* [','] )
lambdef: 'lambda' [varargslist] ':' test
trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
subscriptlist: subscript (',' subscript)* [',']
subscript: test | [test] ':' [test] [sliceop]
sliceop: ':' [test]
-exprlist: expr (',' expr)* [',']
+exprlist: (expr|star_expr) (',' (expr|star_expr))* [',']
testlist: test (',' test)* [',']
dictsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) |
(test (comp_for | (',' test)* [','])) )
Modified: sandbox/trunk/2to3/lib2to3/tests/test_parser.py
==============================================================================
--- sandbox/trunk/2to3/lib2to3/tests/test_parser.py (original)
+++ sandbox/trunk/2to3/lib2to3/tests/test_parser.py Sun Sep 27 05:02:57 2009
@@ -161,6 +161,11 @@
if diff(filepath, new):
self.fail("Idempotency failed: %s" % filepath)
+ def test_extended_unpacking(self):
+ driver.parse_string("a, *b, c = x\n")
+ driver.parse_string("[*a, b] = x\n")
+ driver.parse_string("(z, *y, w) = m\n")
+ driver.parse_string("for *z, m in d: pass\n")
class TestLiterals(GrammarTest):
More information about the Python-checkins
mailing list