summaryrefslogtreecommitdiffstats
path: root/Python/traceback.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2007-08-11 06:39:53 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2007-08-11 06:39:53 (GMT)
commit8dfc4a9baca7b039048b6e1dab3e4eb09f7af463 (patch)
treec755a631b7c3736811c173469a63d570124fe0d4 /Python/traceback.c
parent32ca442b13ecbd50e9b4a55b97ca12061ef13b5f (diff)
downloadcpython-8dfc4a9baca7b039048b6e1dab3e4eb09f7af463.zip
cpython-8dfc4a9baca7b039048b6e1dab3e4eb09f7af463.tar.gz
cpython-8dfc4a9baca7b039048b6e1dab3e4eb09f7af463.tar.bz2
Remove support for __members__ and __methods__. There still might be
some cleanup to do on this. Particularly in Python/traceback.c with getting rid of the getattr if possible and Demo/*metaclasses/Enum.py.
Diffstat (limited to 'Python/traceback.c')
-rw-r--r--Python/traceback.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/Python/traceback.c b/Python/traceback.c
index 370f3fd..0e24196 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -11,18 +11,28 @@
#define OFF(x) offsetof(PyTracebackObject, x)
-static struct memberlist tb_memberlist[] = {
- {"tb_next", T_OBJECT, OFF(tb_next)},
- {"tb_frame", T_OBJECT, OFF(tb_frame)},
- {"tb_lasti", T_INT, OFF(tb_lasti)},
- {"tb_lineno", T_INT, OFF(tb_lineno)},
+static PyMemberDef tb_memberlist[] = {
+ {"tb_next", T_OBJECT, OFF(tb_next), READONLY},
+ {"tb_frame", T_OBJECT, OFF(tb_frame), READONLY},
+ {"tb_lasti", T_INT, OFF(tb_lasti), READONLY},
+ {"tb_lineno", T_INT, OFF(tb_lineno), READONLY},
{NULL} /* Sentinel */
};
+/* XXX(nnorwitz): can we get rid of tb_getattr and use tp_members? */
static PyObject *
tb_getattr(PyTracebackObject *tb, char *name)
{
- return PyMember_Get((char *)tb, tb_memberlist, name);
+ int i;
+ for (i = 0; tb_memberlist[i].name != NULL; i++) {
+ if (strcmp(name, tb_memberlist[i].name) == 0)
+ return PyMember_GetOne((const char *)tb,
+ tb_memberlist + i);
+ }
+ PyErr_Format(PyExc_AttributeError,
+ "'%.50s' object has no attribute '%.400s'",
+ Py_Type(tb)->tp_name, name);
+ return NULL;
}
static void
@@ -80,8 +90,8 @@ PyTypeObject PyTraceBack_Type = {
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
+ 0, /* tp_members */
+ 0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
};