@@ -19,22 +19,6 @@ static PyMemberDef tb_memberlist[] = {
19
19
{NULL } /* Sentinel */
20
20
};
21
21
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
-
38
22
static void
39
23
tb_dealloc (PyTracebackObject * tb )
40
24
{
@@ -68,7 +52,7 @@ PyTypeObject PyTraceBack_Type = {
68
52
0 ,
69
53
(destructor )tb_dealloc , /*tp_dealloc*/
70
54
0 , /*tp_print*/
71
- ( getattrfunc ) tb_getattr , /*tp_getattr*/
55
+ 0 , /*tp_getattr*/
72
56
0 , /*tp_setattr*/
73
57
0 , /*tp_compare*/
74
58
0 , /*tp_repr*/
@@ -78,7 +62,7 @@ PyTypeObject PyTraceBack_Type = {
78
62
0 , /* tp_hash */
79
63
0 , /* tp_call */
80
64
0 , /* tp_str */
81
- 0 , /* tp_getattro */
65
+ PyObject_GenericGetAttr , /* tp_getattro */
82
66
0 , /* tp_setattro */
83
67
0 , /* tp_as_buffer */
84
68
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,/* tp_flags */
@@ -90,7 +74,7 @@ PyTypeObject PyTraceBack_Type = {
90
74
0 , /* tp_iter */
91
75
0 , /* tp_iternext */
92
76
0 , /* tp_methods */
93
- 0 , /* tp_members */
77
+ tb_memberlist , /* tp_members */
94
78
0 , /* tp_getset */
95
79
0 , /* tp_base */
96
80
0 , /* tp_dict */
0 commit comments