mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +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