prevent lambda functions from having docstrings #8164

This commit is contained in:
Benjamin Peterson 2010-03-17 20:41:42 +00:00
parent 78c1871d21
commit 0dee9c1b5c
3 changed files with 11 additions and 0 deletions

View file

@ -353,6 +353,10 @@ if 1:
f1, f2 = f() f1, f2 = f()
self.assertNotEqual(id(f1.func_code), id(f2.func_code)) self.assertNotEqual(id(f1.func_code), id(f2.func_code))
def test_lambda_doc(self):
l = lambda: "foo"
self.assertIsNone(l.__doc__)
def test_unicode_encoding(self): def test_unicode_encoding(self):
code = u"# -*- coding: utf-8 -*-\npass\n" code = u"# -*- coding: utf-8 -*-\npass\n"
self.assertRaises(SyntaxError, compile, code, "tmp", "exec") self.assertRaises(SyntaxError, compile, code, "tmp", "exec")

View file

@ -12,6 +12,8 @@ What's New in Python 2.7 beta 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #8164: Don't allow lambda functions to have a docstring.
- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
(SIGINT). If an error occurs while importing the site module, the error is (SIGINT). If an error occurs while importing the site module, the error is
printed and Python exits. Initialize the GIL before importing the site printed and Python exits. Initialize the GIL before importing the site

View file

@ -1519,6 +1519,11 @@ compiler_lambda(struct compiler *c, expr_ty e)
/* unpack nested arguments */ /* unpack nested arguments */
compiler_arguments(c, args); compiler_arguments(c, args);
/* Make None the first constant, so the lambda can't have a
docstring. */
if (compiler_add_o(c, c->u->u_consts, Py_None) < 0)
return 0;
c->u->u_argcount = asdl_seq_LEN(args->args); c->u->u_argcount = asdl_seq_LEN(args->args);
VISIT_IN_SCOPE(c, expr, e->v.Lambda.body); VISIT_IN_SCOPE(c, expr, e->v.Lambda.body);
if (c->u->u_ste->ste_generator) { if (c->u->u_ste->ste_generator) {