Author: Philip Jenvey <[email protected]>
Branch:
Changeset: r72636:8b19970c9881
Date: 2014-08-01 14:54 -0700
http://bitbucket.org/pypy/pypy/changeset/8b19970c9881/
Log: fix bound classmethods lacking an im_class
diff --git a/pypy/interpreter/function.py b/pypy/interpreter/function.py
--- a/pypy/interpreter/function.py
+++ b/pypy/interpreter/function.py
@@ -616,7 +616,8 @@
def descr_classmethod_get(self, space, w_obj, w_klass=None):
if space.is_none(w_klass):
w_klass = space.type(w_obj)
- return space.wrap(Method(space, self.w_function, w_klass,
space.w_None))
+ return space.wrap(Method(space, self.w_function, w_klass,
+ space.type(w_klass)))
def descr_classmethod__new__(space, w_subtype, w_function):
instance = space.allocate_instance(ClassMethod, w_subtype)
diff --git a/pypy/interpreter/test/test_typedef.py
b/pypy/interpreter/test/test_typedef.py
--- a/pypy/interpreter/test/test_typedef.py
+++ b/pypy/interpreter/test/test_typedef.py
@@ -388,6 +388,13 @@
# differs from .im_class in case the method is
# defined in some parent class of l's actual class
+ def test_classmethod_im_class(self):
+ class Foo(object):
+ @classmethod
+ def bar(cls):
+ pass
+ assert Foo.bar.im_class is type
+
def test_func_closure(self):
x = 2
def f():
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit