mirror of
https://github.com/python/cpython.git
synced 2025-11-02 11:08:57 +00:00
Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.
This commit is contained in:
parent
23d9d45482
commit
1bb6230930
3 changed files with 11 additions and 7 deletions
|
|
@ -841,17 +841,15 @@ class Transformer:
|
||||||
names.append(self.com_fpdef(node))
|
names.append(self.com_fpdef(node))
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
if i >= len(nodelist):
|
if i < len(nodelist) and nodelist[i][0] == token.EQUAL:
|
||||||
break
|
|
||||||
|
|
||||||
if nodelist[i][0] == token.EQUAL:
|
|
||||||
defaults.append(self.com_node(nodelist[i + 1]))
|
defaults.append(self.com_node(nodelist[i + 1]))
|
||||||
i = i + 2
|
i = i + 2
|
||||||
elif len(defaults):
|
elif len(defaults):
|
||||||
# XXX This should be a syntax error.
|
# we have already seen an argument with default, but here
|
||||||
# Treat "(a=1, b)" as "(a=1, b=None)"
|
# came one without
|
||||||
defaults.append(Const(None))
|
raise SyntaxError, "non-default argument follows default argument"
|
||||||
|
|
||||||
|
# skip the comma
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
return names, defaults, flags
|
return names, defaults, flags
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@ class CompilerTest(unittest.TestCase):
|
||||||
def testYieldExpr(self):
|
def testYieldExpr(self):
|
||||||
compiler.compile("def g(): yield\n\n", "<string>", "exec")
|
compiler.compile("def g(): yield\n\n", "<string>", "exec")
|
||||||
|
|
||||||
|
def testDefaultArgs(self):
|
||||||
|
self.assertRaises(SyntaxError, compiler.parse, "def foo(a=1, b): pass")
|
||||||
|
|
||||||
def testLineNo(self):
|
def testLineNo(self):
|
||||||
# Test that all nodes except Module have a correct lineno attribute.
|
# Test that all nodes except Module have a correct lineno attribute.
|
||||||
filename = __file__
|
filename = __file__
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,9 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler
|
||||||
|
package.
|
||||||
|
|
||||||
- Patch #1472854: make the rlcompleter.Completer class usable on non-
|
- Patch #1472854: make the rlcompleter.Completer class usable on non-
|
||||||
UNIX platforms.
|
UNIX platforms.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue