Kaydet (Commit) 1bb62309 authored tarafından Georg Brandl's avatar Georg Brandl

Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package.

üst 23d9d454
...@@ -841,17 +841,15 @@ class Transformer: ...@@ -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): ...@@ -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 ...@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment