Author: collin.winter
Date: Tue Aug 14 19:53:54 2007
New Revision: 57028

Modified:
   python/branches/py3k/Lib/test/test_builtin.py
   python/branches/py3k/Python/traceback.c
Log:
Bug #1772489: make dir() work on traceback objects again.

Modified: python/branches/py3k/Lib/test/test_builtin.py
==============================================================================
--- python/branches/py3k/Lib/test/test_builtin.py       (original)
+++ python/branches/py3k/Lib/test/test_builtin.py       Tue Aug 14 19:53:54 2007
@@ -283,6 +283,13 @@
         f = Foo()
         self.assertRaises(TypeError, dir, f)
 
+        # dir(traceback)
+        try:
+            raise IndexError
+        except:
+            self.assertEqual(len(dir(sys.exc_info()[2])), 4)
+
+
     def test_divmod(self):
         self.assertEqual(divmod(12, 7), (1, 5))
         self.assertEqual(divmod(-12, 7), (-2, 2))

Modified: python/branches/py3k/Python/traceback.c
==============================================================================
--- python/branches/py3k/Python/traceback.c     (original)
+++ python/branches/py3k/Python/traceback.c     Tue Aug 14 19:53:54 2007
@@ -11,6 +11,18 @@
 
 #define OFF(x) offsetof(PyTracebackObject, x)
 
+static PyObject *
+tb_dir(PyTracebackObject *self)
+{
+    return Py_BuildValue("[ssss]", "tb_frame", "tb_next",
+                                   "tb_lasti", "tb_lineno");
+}
+
+static PyMethodDef tb_methods[] = {
+   {"__dir__", (PyCFunction)tb_dir, METH_NOARGS},
+   {NULL, NULL, 0, NULL},
+};
+
 static PyMemberDef tb_memberlist[] = {
        {"tb_next",     T_OBJECT,       OFF(tb_next),   READONLY},
        {"tb_frame",    T_OBJECT,       OFF(tb_frame),  READONLY},
@@ -73,7 +85,7 @@
        0,                                      /* tp_weaklistoffset */
        0,                                      /* tp_iter */
        0,                                      /* tp_iternext */
-       0,                                      /* tp_methods */
+       tb_methods,     /* tp_methods */
        tb_memberlist,  /* tp_members */
        0,                                      /* tp_getset */
        0,                                      /* tp_base */
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to