diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-09-27 02:43:28 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-09-27 02:43:28 (GMT) |
commit | 4905e80c3d2f6abb613d212f0313d1dfe09475dc (patch) | |
tree | df849b7313a57c1d844567bcd45b32f7e89ac0ca /Lib | |
parent | 10430ad7aace46c93939341817b97df48951d5a2 (diff) | |
download | cpython-4905e80c3d2f6abb613d212f0313d1dfe09475dc.zip cpython-4905e80c3d2f6abb613d212f0313d1dfe09475dc.tar.gz cpython-4905e80c3d2f6abb613d212f0313d1dfe09475dc.tar.bz2 |
fix an ambiguity in the grammar from the implementation of extended unpacking
(one which was strangely "resolved" by pgen)
This also kills the unused testlist1 rule and fixes parse tree validation of
extended unpacking.
Diffstat (limited to 'Lib')
-rwxr-xr-x | Lib/symbol.py | 126 | ||||
-rw-r--r-- | Lib/test/test_parser.py | 6 |
2 files changed, 69 insertions, 63 deletions
diff --git a/Lib/symbol.py b/Lib/symbol.py index 4b4c219..ea8f2f5 100755 --- a/Lib/symbol.py +++ b/Lib/symbol.py @@ -26,69 +26,69 @@ stmt = 268 simple_stmt = 269 small_stmt = 270 expr_stmt = 271 -augassign = 272 -del_stmt = 273 -pass_stmt = 274 -flow_stmt = 275 -break_stmt = 276 -continue_stmt = 277 -return_stmt = 278 -yield_stmt = 279 -raise_stmt = 280 -import_stmt = 281 -import_name = 282 -import_from = 283 -import_as_name = 284 -dotted_as_name = 285 -import_as_names = 286 -dotted_as_names = 287 -dotted_name = 288 -global_stmt = 289 -nonlocal_stmt = 290 -assert_stmt = 291 -compound_stmt = 292 -if_stmt = 293 -while_stmt = 294 -for_stmt = 295 -try_stmt = 296 -with_stmt = 297 -with_item = 298 -except_clause = 299 -suite = 300 -test = 301 -test_nocond = 302 -lambdef = 303 -lambdef_nocond = 304 -or_test = 305 -and_test = 306 -not_test = 307 -comparison = 308 -comp_op = 309 -star_expr = 310 -expr = 311 -xor_expr = 312 -and_expr = 313 -shift_expr = 314 -arith_expr = 315 -term = 316 -factor = 317 -power = 318 -atom = 319 -testlist_comp = 320 -trailer = 321 -subscriptlist = 322 -subscript = 323 -sliceop = 324 -exprlist = 325 -testlist = 326 -dictorsetmaker = 327 -classdef = 328 -arglist = 329 -argument = 330 -comp_iter = 331 -comp_for = 332 -comp_if = 333 -testlist1 = 334 +testlist_star_expr = 272 +augassign = 273 +del_stmt = 274 +pass_stmt = 275 +flow_stmt = 276 +break_stmt = 277 +continue_stmt = 278 +return_stmt = 279 +yield_stmt = 280 +raise_stmt = 281 +import_stmt = 282 +import_name = 283 +import_from = 284 +import_as_name = 285 +dotted_as_name = 286 +import_as_names = 287 +dotted_as_names = 288 +dotted_name = 289 +global_stmt = 290 +nonlocal_stmt = 291 +assert_stmt = 292 +compound_stmt = 293 +if_stmt = 294 +while_stmt = 295 +for_stmt = 296 +try_stmt = 297 +with_stmt = 298 +with_item = 299 +except_clause = 300 +suite = 301 +test = 302 +test_nocond = 303 +lambdef = 304 +lambdef_nocond = 305 +or_test = 306 +and_test = 307 +not_test = 308 +comparison = 309 +comp_op = 310 +star_expr = 311 +expr = 312 +xor_expr = 313 +and_expr = 314 +shift_expr = 315 +arith_expr = 316 +term = 317 +factor = 318 +power = 319 +atom = 320 +testlist_comp = 321 +trailer = 322 +subscriptlist = 323 +subscript = 324 +sliceop = 325 +exprlist = 326 +testlist = 327 +dictorsetmaker = 328 +classdef = 329 +arglist = 330 +argument = 331 +comp_iter = 332 +comp_for = 333 +comp_if = 334 encoding_decl = 335 yield_expr = 336 #--end constants-- diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 9e5d5c1..0ac49da 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -242,6 +242,12 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase): (0, '', 2, -1)], terminals) + def test_extended_unpacking(self): + self.check_suite("*a = y") + self.check_suite("x, *b, = m") + self.check_suite("[*a, *b] = y") + self.check_suite("for [*x, b] in x: pass") + # # Second, we take *invalid* trees and make sure we get ParserError |