[pypy-commit] pypy py3.3: Implement custom __dir__ for tracebacks following cpython example.
kvas
noreply at buildbot.pypy.org
Sun Aug 3 21:58:17 CEST 2014
Author: Vasily Kuznetsov <kvas.it at gmail.com>
Branch: py3.3
Changeset: r72679:2a7237fb5557
Date: 2014-08-02 09:31 +0200
http://bitbucket.org/pypy/pypy/changeset/2a7237fb5557/
Log: Implement custom __dir__ for tracebacks following cpython example.
diff --git a/pypy/interpreter/pytraceback.py b/pypy/interpreter/pytraceback.py
--- a/pypy/interpreter/pytraceback.py
+++ b/pypy/interpreter/pytraceback.py
@@ -50,6 +50,10 @@
self.lasti = space.int_w(w_lasti)
self.next = space.interp_w(PyTraceback, w_next, can_be_None=True)
+ def descr__dir__(self, space):
+ return space.newtuple([space.wrap(n) for n in
+ ['tb_frame', 'tb_next', 'tb_lasti', 'tb_lineno']])
+
def record_application_traceback(space, operror, frame, last_instruction):
if frame.pycode.hidden_applevel:
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -910,6 +910,7 @@
PyTraceback.typedef = TypeDef("traceback",
__reduce__ = interp2app(PyTraceback.descr__reduce__),
__setstate__ = interp2app(PyTraceback.descr__setstate__),
+ __dir__ = interp2app(PyTraceback.descr__dir__),
tb_frame = interp_attrproperty('frame', cls=PyTraceback),
tb_lasti = interp_attrproperty('lasti', cls=PyTraceback),
tb_lineno = GetSetProperty(PyTraceback.descr_tb_lineno),
diff --git a/pypy/module/__builtin__/test/test_dir.py b/pypy/module/__builtin__/test/test_dir.py
--- a/pypy/module/__builtin__/test/test_dir.py
+++ b/pypy/module/__builtin__/test/test_dir.py
@@ -32,7 +32,9 @@
try:
raise IndexError
except:
- assert len(dir(sys.exc_info()[2])) == 4
+ tb_dir = dir(sys.exc_info()[2])
+ assert tb_dir == ['tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next']
+
def test_dir_object_inheritance(self):
"""Dir should behave the same regardless of inheriting from object."""
More information about the pypy-commit
mailing list