Commit e39e41d9 authored by Guido van Rossum's avatar Guido van Rossum

When creating a class, set its __module__ attribute to the module

whose name is in the current globals' __name__ variable.  If __name__
is not set, ignore this.
parent c8e40dc9
...@@ -47,16 +47,36 @@ PyClass_New(bases, dict, name) ...@@ -47,16 +47,36 @@ PyClass_New(bases, dict, name)
{ {
PyClassObject *op, *dummy; PyClassObject *op, *dummy;
static PyObject *getattrstr, *setattrstr, *delattrstr; static PyObject *getattrstr, *setattrstr, *delattrstr;
static PyObject *docstr; static PyObject *docstr, *modstr, *namestr;
if (docstr == NULL) { if (docstr == NULL) {
docstr= PyString_InternFromString("__doc__"); docstr= PyString_InternFromString("__doc__");
if (docstr == NULL) if (docstr == NULL)
return NULL; return NULL;
} }
if (modstr == NULL) {
modstr= PyString_InternFromString("__module__");
if (modstr == NULL)
return NULL;
}
if (namestr == NULL) {
namestr= PyString_InternFromString("__name__");
if (namestr == NULL)
return NULL;
}
if (PyDict_GetItem(dict, docstr) == NULL) { if (PyDict_GetItem(dict, docstr) == NULL) {
if (PyDict_SetItem(dict, docstr, Py_None) < 0) if (PyDict_SetItem(dict, docstr, Py_None) < 0)
return NULL; return NULL;
} }
if (PyDict_GetItem(dict, modstr) == NULL) {
PyObject *globals = PyEval_GetGlobals();
if (globals != NULL) {
PyObject *name = PyDict_GetItem(globals, namestr);
if (name != NULL) {
if (PyDict_SetItem(dict, modstr, name) < 0)
return NULL;
}
}
}
if (bases == NULL) { if (bases == NULL) {
bases = PyTuple_New(0); bases = PyTuple_New(0);
if (bases == NULL) if (bases == NULL)
...@@ -114,6 +134,7 @@ class_lookup(cp, name, pclass) ...@@ -114,6 +134,7 @@ class_lookup(cp, name, pclass)
} }
n = PyTuple_Size(cp->cl_bases); n = PyTuple_Size(cp->cl_bases);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
/* XXX What if one of the bases is not a class? */
PyObject *v = class_lookup( PyObject *v = class_lookup(
(PyClassObject *) (PyClassObject *)
PyTuple_GetItem(cp->cl_bases, i), name, pclass); PyTuple_GetItem(cp->cl_bases, i), name, pclass);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment