diff Objects/funcobject.c @ 2082:4afa7eb4734b legacy-trunk

Added __doc__ attribute (alias func_doc), initialized from first constant in code object if it is a string, else None
author Guido van Rossum <guido@python.org>
date Sat, 07 Jan 1995 12:01:30 +0000
parents 866c81068dbd
children ea7b2bf0b521
line wrap: on
line diff
--- a/Objects/funcobject.c	Sat Jan 07 11:59:29 1995 +0000
+++ b/Objects/funcobject.c	Sat Jan 07 12:01:30 1995 +0000
@@ -35,14 +35,26 @@
 {
 	funcobject *op = NEWOBJ(funcobject, &Functype);
 	if (op != NULL) {
+		object *doc;
+		object *consts;
 		INCREF(code);
 		op->func_code = code;
 		INCREF(globals);
 		op->func_globals = globals;
-		op->func_name = ((codeobject*)(op->func_code))->co_name;
+		op->func_name = ((codeobject *)code)->co_name;
 		INCREF(op->func_name);
 		op->func_argcount = -1; /* Unknown */
 		op->func_argdefs = NULL; /* No default arguments */
+		consts = ((codeobject *)code)->co_consts;
+		if (gettuplesize(consts) >= 1) {
+			doc = gettupleitem(consts, 0);
+			if (!is_stringobject(doc))
+				doc = None;
+		}
+		else
+			doc = None;
+		INCREF(doc);
+		op->func_doc = doc;
 	}
 	return (object *)op;
 }
@@ -117,6 +129,8 @@
 	{"func_name",	T_OBJECT,	OFF(func_name),		READONLY},
 	{"func_argcount",T_INT,		OFF(func_argcount),	READONLY},
 	{"func_argdefs",T_OBJECT,	OFF(func_argdefs),	READONLY},
+	{"func_doc",	T_OBJECT,	OFF(func_doc)},
+	{"__doc__",	T_OBJECT,	OFF(func_doc)},
 	{NULL}	/* Sentinel */
 };
 
@@ -135,6 +149,7 @@
 	DECREF(op->func_code);
 	DECREF(op->func_globals);
 	XDECREF(op->func_argdefs);
+	XDECREF(op->func_doc);
 	DEL(op);
 }