mirror of
https://github.com/python/cpython.git
synced 2025-07-28 21:55:21 +00:00
Patch #1759: Backport of PEP 3129 class decorators
with some help from Georg
This commit is contained in:
parent
b12f0b581a
commit
5224d28d38
15 changed files with 1591 additions and 1465 deletions
|
@ -1362,7 +1362,7 @@ compiler_function(struct compiler *c, stmt_ty s)
|
|||
PyCodeObject *co;
|
||||
PyObject *first_const = Py_None;
|
||||
arguments_ty args = s->v.FunctionDef.args;
|
||||
asdl_seq* decos = s->v.FunctionDef.decorators;
|
||||
asdl_seq* decos = s->v.FunctionDef.decorator_list;
|
||||
stmt_ty st;
|
||||
int i, n, docstring;
|
||||
|
||||
|
@ -1413,9 +1413,14 @@ compiler_function(struct compiler *c, stmt_ty s)
|
|||
static int
|
||||
compiler_class(struct compiler *c, stmt_ty s)
|
||||
{
|
||||
int n;
|
||||
int n, i;
|
||||
PyCodeObject *co;
|
||||
PyObject *str;
|
||||
asdl_seq* decos = s->v.ClassDef.decorator_list;
|
||||
|
||||
if (!compiler_decorators(c, decos))
|
||||
return 0;
|
||||
|
||||
/* push class name on stack, needed by BUILD_CLASS */
|
||||
ADDOP_O(c, LOAD_CONST, s->v.ClassDef.name, consts);
|
||||
/* push the tuple of base classes on the stack */
|
||||
|
@ -1461,6 +1466,10 @@ compiler_class(struct compiler *c, stmt_ty s)
|
|||
|
||||
ADDOP_I(c, CALL_FUNCTION, 0);
|
||||
ADDOP(c, BUILD_CLASS);
|
||||
/* apply decorators */
|
||||
for (i = 0; i < asdl_seq_LEN(decos); i++) {
|
||||
ADDOP_I(c, CALL_FUNCTION, 1);
|
||||
}
|
||||
if (!compiler_nameop(c, s->v.ClassDef.name, Store))
|
||||
return 0;
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue