diff options
author | Collin Winter <collinw@gmail.com> | 2007-08-14 17:53:54 (GMT) |
---|---|---|
committer | Collin Winter <collinw@gmail.com> | 2007-08-14 17:53:54 (GMT) |
commit | 3eed76522389d55248a71aa8c83203aa3ae0873b (patch) | |
tree | 9a52b1a1b21046fafcc54736ef173e1cfc8fe8d1 | |
parent | ee634a4013ff6321aecd132498721ebfb734a4cc (diff) | |
download | cpython-3eed76522389d55248a71aa8c83203aa3ae0873b.zip cpython-3eed76522389d55248a71aa8c83203aa3ae0873b.tar.gz cpython-3eed76522389d55248a71aa8c83203aa3ae0873b.tar.bz2 |
Bug #1772489: make dir() work on traceback objects again.
-rw-r--r-- | Lib/test/test_builtin.py | 7 | ||||
-rw-r--r-- | Python/traceback.c | 14 |
2 files changed, 20 insertions, 1 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index b430822..b3e4733 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -283,6 +283,13 @@ class BuiltinTest(unittest.TestCase): 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)) diff --git a/Python/traceback.c b/Python/traceback.c index aa99ab4..5bb8841 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -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 @@ PyTypeObject PyTraceBack_Type = { 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 */ |