[pypy-svn] pypy default: (fijal, arigo)
arigo
commits-noreply at bitbucket.org
Thu Jan 20 12:01:45 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r40973:b30637b60618
Date: 2011-01-20 11:59 +0100
http://bitbucket.org/pypy/pypy/changeset/b30637b60618/
Log: (fijal, arigo)
Support for __dir__().
diff --git a/pypy/module/__builtin__/test/test_builtin.py b/pypy/module/__builtin__/test/test_builtin.py
--- a/pypy/module/__builtin__/test/test_builtin.py
+++ b/pypy/module/__builtin__/test/test_builtin.py
@@ -110,6 +110,19 @@
__dict__ = 8
raises(TypeError, dir, Foo("foo"))
+ def test_dir_custom(self):
+ class Foo(object):
+ def __dir__(self):
+ return [1, 2, 3]
+ f = Foo()
+ assert dir(f) == [1, 2, 3]
+ #
+ class Foo(object):
+ def __dir__(self):
+ return 42
+ f = Foo()
+ raises(TypeError, dir, f)
+
def test_format(self):
assert format(4) == "4"
assert format(10, "o") == "12"
diff --git a/pypy/module/__builtin__/app_inspect.py b/pypy/module/__builtin__/app_inspect.py
--- a/pypy/module/__builtin__/app_inspect.py
+++ b/pypy/module/__builtin__/app_inspect.py
@@ -76,6 +76,13 @@
result.sort()
return result
+ elif hasattr(obj, '__dir__'):
+ result = obj.__dir__()
+ if not isinstance(result, list):
+ raise TypeError("__dir__() must return a list, not %r" % (
+ type(result),))
+ return result
+
else: #(regular item)
Dict = {}
try:
More information about the Pypy-commit
mailing list