diff options
author | Zsolt Dollenstein <zsol.zsol@gmail.com> | 2019-10-23 23:19:07 -0700 |
---|---|---|
committer | Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-10-23 23:19:07 -0700 |
commit | 96b06aefe23521b61e4e9cdd44f5d30b00c7eb95 (patch) | |
tree | cb3193c53116b83c483afae524b4c1015bf4e2af /Lib/lib2to3 | |
parent | Add missing asyncio changes from 3.8 whatsnew (GH-16911) (diff) | |
download | cpython-96b06aefe23521b61e4e9cdd44f5d30b00c7eb95.tar.gz cpython-96b06aefe23521b61e4e9cdd44f5d30b00c7eb95.tar.bz2 cpython-96b06aefe23521b61e4e9cdd44f5d30b00c7eb95.zip |
bpo-33348: parse expressions after * and ** in lib2to3 (GH-6586)
These are valid even in python 2.7
https://bugs.python.org/issue33348
Automerge-Triggered-By: @gpshead
Diffstat (limited to 'Lib/lib2to3')
-rw-r--r-- | Lib/lib2to3/Grammar.txt | 4 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_apply.py | 4 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_intern.py | 4 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_reload.py | 4 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_parser.py | 7 |
5 files changed, 12 insertions, 11 deletions
diff --git a/Lib/lib2to3/Grammar.txt b/Lib/lib2to3/Grammar.txt index a7ddad3cf32..68b73868b58 100644 --- a/Lib/lib2to3/Grammar.txt +++ b/Lib/lib2to3/Grammar.txt @@ -138,8 +138,8 @@ arglist: argument (',' argument)* [','] # that precede iterable unpackings are blocked; etc. argument: ( test [comp_for] | test '=' test | - '**' expr | - star_expr ) + '**' test | + '*' test ) comp_iter: comp_for | comp_if comp_for: [ASYNC] 'for' exprlist 'in' testlist_safe [comp_iter] diff --git a/Lib/lib2to3/fixes/fix_apply.py b/Lib/lib2to3/fixes/fix_apply.py index 826ec8c9b62..6408582c426 100644 --- a/Lib/lib2to3/fixes/fix_apply.py +++ b/Lib/lib2to3/fixes/fix_apply.py @@ -37,10 +37,8 @@ class FixApply(fixer_base.BaseFix): # I feel like we should be able to express this logic in the # PATTERN above but I don't know how to do it so... if args: - if args.type == self.syms.star_expr: - return # Make no change. if (args.type == self.syms.argument and - args.children[0].value == '**'): + args.children[0].value in {'**', '*'}): return # Make no change. if kwds and (kwds.type == self.syms.argument and kwds.children[0].value == '**'): diff --git a/Lib/lib2to3/fixes/fix_intern.py b/Lib/lib2to3/fixes/fix_intern.py index a852330908b..d752843092a 100644 --- a/Lib/lib2to3/fixes/fix_intern.py +++ b/Lib/lib2to3/fixes/fix_intern.py @@ -30,10 +30,8 @@ class FixIntern(fixer_base.BaseFix): # PATTERN above but I don't know how to do it so... obj = results['obj'] if obj: - if obj.type == self.syms.star_expr: - return # Make no change. if (obj.type == self.syms.argument and - obj.children[0].value == '**'): + obj.children[0].value in {'**', '*'}): return # Make no change. names = ('sys', 'intern') new = ImportAndCall(node, results, names) diff --git a/Lib/lib2to3/fixes/fix_reload.py b/Lib/lib2to3/fixes/fix_reload.py index 6c7fbbd3be3..b30841131c5 100644 --- a/Lib/lib2to3/fixes/fix_reload.py +++ b/Lib/lib2to3/fixes/fix_reload.py @@ -27,10 +27,8 @@ class FixReload(fixer_base.BaseFix): # PATTERN above but I don't know how to do it so... obj = results['obj'] if obj: - if obj.type == self.syms.star_expr: - return # Make no change. if (obj.type == self.syms.argument and - obj.children[0].value == '**'): + obj.children[0].value in {'**', '*'}): return # Make no change. names = ('importlib', 'reload') new = ImportAndCall(node, results, names) diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py index f22d399b340..a0c31e8f530 100644 --- a/Lib/lib2to3/tests/test_parser.py +++ b/Lib/lib2to3/tests/test_parser.py @@ -253,6 +253,13 @@ class TestUnpackingGeneralizations(GrammarTest): def test_double_star_dict_literal_after_keywords(self): self.validate("""func(spam='fried', **{'eggs':'scrambled'})""") + def test_double_star_expression(self): + self.validate("""func(**{'a':2} or {})""") + self.validate("""func(**() or {})""") + + def test_star_expression(self): + self.validate("""func(*[] or [2])""") + def test_list_display(self): self.validate("""[*{2}, 3, *[4]]""") |