Mailing List Archive

CVS: python/dist/src/Objects moduleobject.c,2.31,2.31.6.1
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv30890

Modified Files:
Tag: descr-branch
moduleobject.c
Log Message:
Now that we have tp_dictoffset, we don't need module_getattr and
module_setattr any more. Yay!


Index: moduleobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/moduleobject.c,v
retrieving revision 2.31
retrieving revision 2.31.6.1
diff -C2 -r2.31 -r2.31.6.1
*** moduleobject.c 2001/01/02 15:58:27 2.31
--- moduleobject.c 2001/05/11 20:14:07 2.31.6.1
***************
*** 3,6 ****
--- 3,7 ----

#include "Python.h"
+ #include "structmember.h"

typedef struct {
***************
*** 9,12 ****
--- 10,18 ----
} PyModuleObject;

+ struct memberlist module_members[] = {
+ {"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
+ {0}
+ };
+
PyObject *
PyModule_New(char *name)
***************
*** 162,217 ****
}

- static PyObject *
- module_getattr(PyModuleObject *m, char *name)
- {
- PyObject *res;
- char* modname;
- if (strcmp(name, "__dict__") == 0) {
- Py_INCREF(m->md_dict);
- return m->md_dict;
- }
- res = PyDict_GetItemString(m->md_dict, name);
- if (res == NULL) {
- modname = PyModule_GetName((PyObject *)m);
- if (modname == NULL) {
- PyErr_Clear();
- modname = "?";
- }
- PyErr_Format(PyExc_AttributeError,
- "'%.50s' module has no attribute '%.400s'",
- modname, name);
- }
- else
- Py_INCREF(res);
- return res;
- }
-
- static int
- module_setattr(PyModuleObject *m, char *name, PyObject *v)
- {
- char* modname;
- if (name[0] == '_' && strcmp(name, "__dict__") == 0) {
- PyErr_SetString(PyExc_TypeError,
- "read-only special attribute");
- return -1;
- }
- if (v == NULL) {
- int rv = PyDict_DelItemString(m->md_dict, name);
- if (rv < 0) {
- modname = PyModule_GetName((PyObject *)m);
- if (modname == NULL) {
- PyErr_Clear();
- modname = "?";
- }
- PyErr_Format(PyExc_AttributeError,
- "'%.50s' module has no attribute '%.400s'",
- modname, name);
- }
- return rv;
- }
- else
- return PyDict_SetItemString(m->md_dict, name, v);
- }
-
/* We only need a traverse function, no clear function: If the module
is in a cycle, md_dict will be cleared as well, which will break
--- 168,171 ----
***************
*** 227,251 ****
PyTypeObject PyModule_Type = {
PyObject_HEAD_INIT(&PyType_Type)
! 0, /*ob_size*/
! "module", /*tp_name*/
! sizeof(PyModuleObject) + PyGC_HEAD_SIZE, /*tp_size*/
! 0, /*tp_itemsize*/
! (destructor)module_dealloc, /*tp_dealloc*/
! 0, /*tp_print*/
! (getattrfunc)module_getattr, /*tp_getattr*/
! (setattrfunc)module_setattr, /*tp_setattr*/
! 0, /*tp_compare*/
! (reprfunc)module_repr, /*tp_repr*/
! 0, /*tp_as_number*/
! 0, /*tp_as_sequence*/
! 0, /*tp_as_mapping*/
! 0, /* tp_hash */
! 0, /* tp_call */
! 0, /* tp_str */
! 0, /* tp_getattro */
! 0, /* tp_setattro */
! 0, /* tp_as_buffer */
! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /*tp_flags*/
! 0, /* tp_doc */
! (traverseproc)module_traverse, /* tp_traverse */
};
--- 181,219 ----
PyTypeObject PyModule_Type = {
PyObject_HEAD_INIT(&PyType_Type)
! 0, /* ob_size */
! "module", /* tp_name */
! sizeof(PyModuleObject) + PyGC_HEAD_SIZE, /* tp_size */
! 0, /* tp_itemsize */
! (destructor)module_dealloc, /* tp_dealloc */
! 0, /* tp_print */
! 0, /* tp_getattr */
! 0, /* tp_setattr */
! 0, /* tp_compare */
! (reprfunc)module_repr, /* tp_repr */
! 0, /* tp_as_number */
! 0, /* tp_as_sequence */
! 0, /* tp_as_mapping */
! 0, /* tp_hash */
! 0, /* tp_call */
! 0, /* tp_str */
! PyGeneric_GetAttr, /* tp_getattro */
! PyGeneric_SetAttr, /* tp_setattro */
! 0, /* tp_as_buffer */
! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */
! 0, /* tp_doc */
! (traverseproc)module_traverse, /* tp_traverse */
! 0, /* tp_clear */
! 0, /* tp_richcompare */
! 0, /* tp_weaklistoffset */
! 0, /* tp_iter */
! 0, /* tp_iternext */
! 0, /* tp_methods */
! module_members, /* tp_members */
! 0, /* tp_getset */
! 0, /* tp_base */
! 0, /* tp_dict */
! 0, /* tp_descr_get */
! 0, /* tp_descr_set */
! 0, /* tp_construct */
! offsetof(PyModuleObject, md_dict), /* tp_dictoffset */
};