Mercurial > cpython-lru_cache-weakref
diff Python/compile.c @ 45447:393822f2ef90 legacy-trunk
Patch #1759: Backport of PEP 3129 class decorators
with some help from Georg
| author | Christian Heimes <christian@cheimes.de> |
|---|---|
| date | Sat, 23 Feb 2008 15:01:05 +0000 |
| parents | c73a2802b738 |
| children | dc5b0107294c |
line wrap: on
line diff
--- a/Python/compile.c Sat Feb 23 12:46:10 2008 +0000 +++ b/Python/compile.c Sat Feb 23 15:01:05 2008 +0000 @@ -1362,7 +1362,7 @@ 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 @@ 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 @@ 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;
