@@ -19,22 +19,6 @@ static PyMemberDef tb_memberlist[] = {
1919 {NULL } /* Sentinel */
2020};
2121
22- /* XXX(nnorwitz): can we get rid of tb_getattr and use tp_members? */
23- static PyObject *
24- tb_getattr (PyTracebackObject * tb , char * name )
25- {
26- int i ;
27- for (i = 0 ; tb_memberlist [i ].name != NULL ; i ++ ) {
28- if (strcmp (name , tb_memberlist [i ].name ) == 0 )
29- return PyMember_GetOne ((const char * )tb ,
30- tb_memberlist + i );
31- }
32- PyErr_Format (PyExc_AttributeError ,
33- "'%.50s' object has no attribute '%.400s'" ,
34- Py_Type (tb )-> tp_name , name );
35- return NULL ;
36- }
37-
3822static void
3923tb_dealloc (PyTracebackObject * tb )
4024{
@@ -68,7 +52,7 @@ PyTypeObject PyTraceBack_Type = {
6852 0 ,
6953 (destructor )tb_dealloc , /*tp_dealloc*/
7054 0 , /*tp_print*/
71- ( getattrfunc ) tb_getattr , /*tp_getattr*/
55+ 0 , /*tp_getattr*/
7256 0 , /*tp_setattr*/
7357 0 , /*tp_compare*/
7458 0 , /*tp_repr*/
@@ -78,7 +62,7 @@ PyTypeObject PyTraceBack_Type = {
7862 0 , /* tp_hash */
7963 0 , /* tp_call */
8064 0 , /* tp_str */
81- 0 , /* tp_getattro */
65+ PyObject_GenericGetAttr , /* tp_getattro */
8266 0 , /* tp_setattro */
8367 0 , /* tp_as_buffer */
8468 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,/* tp_flags */
@@ -90,7 +74,7 @@ PyTypeObject PyTraceBack_Type = {
9074 0 , /* tp_iter */
9175 0 , /* tp_iternext */
9276 0 , /* tp_methods */
93- 0 , /* tp_members */
77+ tb_memberlist , /* tp_members */
9478 0 , /* tp_getset */
9579 0 , /* tp_base */
9680 0 , /* tp_dict */
0 commit comments