summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2002-04-19 22:56:37 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2002-04-19 22:56:37 (GMT)
commit8d22b0409b3d68edee104bc472334145337bebc7 (patch)
treee801e41211a16f51d0fc21f7c75048ca60cac1b7
parent2ea2c9d1c3e74012f61e22246acdce3bfddef9d8 (diff)
downloadcpython-8d22b0409b3d68edee104bc472334145337bebc7.zip
cpython-8d22b0409b3d68edee104bc472334145337bebc7.tar.gz
cpython-8d22b0409b3d68edee104bc472334145337bebc7.tar.bz2
Fix com_arglist() and update grammar fragment.
SF bug #522264 reported by Evelyn Mitchell. The code included a comment about "STAR STAR" which was translated into the code as the bogus attribute token.STARSTAR. This name never caused an attribute error because it was never retrieved. The code was based on an old version of the grammar that specified kwargs as two tokens ('*' '*'). I checked as far back as 2.1 and didn't find this production. The fix is simple, because token.DOUBLESTAR is the only token allowed. Also update the grammar fragment in com_arglist(). XXX I'll bet lots of other grammar fragments in comments are out of date, probably in this module and in compile.c.
-rw-r--r--Lib/compiler/transformer.py9
1 files changed, 3 insertions, 6 deletions
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index b05d3a8..32a4160 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -746,9 +746,8 @@ class Transformer:
def com_arglist(self, nodelist):
# varargslist:
- # (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME]
- # | fpdef ['=' test] (',' fpdef ['=' test])* [',']
- # | ('**'|'*' '*') NAME)
+ # (fpdef ['=' test] ',')* ('*' NAME [',' '**' NAME] | '**' NAME)
+ # | fpdef ['=' test] (',' fpdef ['=' test])* [',']
# fpdef: NAME | '(' fplist ')'
# fplist: fpdef (',' fpdef)* [',']
names = []
@@ -767,12 +766,10 @@ class Transformer:
i = i + 3
if i < len(nodelist):
- # should be DOUBLESTAR or STAR STAR
+ # should be DOUBLESTAR
t = nodelist[i][0]
if t == token.DOUBLESTAR:
node = nodelist[i+1]
- elif t == token.STARSTAR:
- node = nodelist[i+2]
else:
raise ValueError, "unexpected token: %s" % t
names.append(node[1])