[Python-3000-checkins] r57028 - in python/branches/py3k: Lib/test/test_builtin.py Python/traceback.c

collin.winter python-3000-checkins at python.org
Tue Aug 14 19:53:56 CEST 2007


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 */


More information about the Python-3000-checkins mailing list