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;