Author: Benjamin Peterson <[email protected]>
Branch: 
Changeset: r44390:c51441e3cfea
Date: 2011-05-23 17:58 -0500
http://bitbucket.org/pypy/pypy/changeset/c51441e3cfea/

Log:    fix __dir__ on old-style classes

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
@@ -64,7 +64,14 @@
 
     obj = args[0]
 
-    dir_meth = lookup_special(obj, "__dir__")
+    dir_meth = None
+    if isinstance(obj, types.InstanceType):
+        try:
+            dir_meth = getattr(obj, "__dir__")
+        except AttributeError:
+            pass
+    else:
+        dir_meth = lookup_special(obj, "__dir__")
     if dir_meth is not None:
         result = dir_meth()
         if not isinstance(result, list):
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
@@ -123,7 +123,10 @@
                 return [1, 3, 2]
         f = Foo()
         assert dir(f) == [1, 2, 3]
-        #
+        class Foo:
+            def __dir__(self):
+                return ["apple"]
+        assert dir(Foo()) == ["apple"]
         class Foo(object):
             def __dir__(self):
                 return 42
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to