Author: Amaury Forgeot d'Arc <[email protected]>
Branch:
Changeset: r44674:fd88e402f863
Date: 2011-05-27 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/fd88e402f863/
Log: Add PyClassMethod_New()
diff --git a/pypy/module/cpyext/funcobject.py b/pypy/module/cpyext/funcobject.py
--- a/pypy/module/cpyext/funcobject.py
+++ b/pypy/module/cpyext/funcobject.py
@@ -69,6 +69,10 @@
assert isinstance(w_method, Method)
return borrow_from(w_method, w_method.w_class)
+@cpython_api([PyObject], PyObject)
+def PyClassMethod_New(space, w_function):
+ return space.call_method(space.builtin, "classmethod", w_function)
+
def unwrap_list_of_strings(space, w_list):
return [space.str_w(w_item) for w_item in space.fixedview(w_list)]
diff --git a/pypy/module/cpyext/test/test_funcobject.py
b/pypy/module/cpyext/test/test_funcobject.py
--- a/pypy/module/cpyext/test/test_funcobject.py
+++ b/pypy/module/cpyext/test/test_funcobject.py
@@ -44,3 +44,19 @@
assert w_code.co_firstlineno == 3
rffi.free_charp(filename)
rffi.free_charp(funcname)
+
+ def test_classmethod(self, space, api):
+ w_function = space.appexec([], """():
+ def method(x): return x
+ return method
+ """)
+ w_class = space.call_function(space.w_type, space.wrap("C"),
+ space.newtuple([]), space.newdict())
+ w_instance = space.call_function(w_class)
+ # regular instance method
+ space.setattr(w_class, space.wrap("method"), w_function)
+ assert space.is_w(space.call_method(w_instance, "method"), w_instance)
+ # now a classmethod
+ w_classmethod = api.PyClassMethod_New(w_function)
+ space.setattr(w_class, space.wrap("classmethod"), w_classmethod)
+ assert space.is_w(space.call_method(w_instance, "classmethod"),
w_class)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit