[pypy-commit] pypy default: Implement PyClass_New()
amauryfa
noreply at buildbot.pypy.org
Sat Jun 4 01:11:11 CEST 2011
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch:
Changeset: r44673:f624fed38cd4
Date: 2011-05-27 19:04 +0200
http://bitbucket.org/pypy/pypy/changeset/f624fed38cd4/
Log: Implement PyClass_New()
diff --git a/pypy/module/cpyext/classobject.py b/pypy/module/cpyext/classobject.py
--- a/pypy/module/cpyext/classobject.py
+++ b/pypy/module/cpyext/classobject.py
@@ -31,4 +31,9 @@
return w_result
return w_instance.w_class.lookup(space, name)
+ at cpython_api([PyObject, PyObject, PyObject], PyObject)
+def PyClass_New(space, w_bases, w_dict, w_name):
+ w_classobj = space.gettypefor(W_ClassObject)
+ return space.call_function(w_classobj,
+ w_name, w_bases, w_dict)
diff --git a/pypy/module/cpyext/test/test_classobject.py b/pypy/module/cpyext/test/test_classobject.py
--- a/pypy/module/cpyext/test/test_classobject.py
+++ b/pypy/module/cpyext/test/test_classobject.py
@@ -40,3 +40,14 @@
assert not isinstance(api.PyObject_GetAttr(w_instance, space.wrap('f')), Function)
# _PyInstance_Lookup returns the raw descriptor
assert isinstance(api._PyInstance_Lookup(w_instance, space.wrap('f')), Function)
+
+ def test_pyclass_new(self, space, api):
+ w_bases = space.newtuple([])
+ w_dict = space.newdict()
+ w_name = space.wrap("C")
+ w_class = api.PyClass_New(w_bases, w_dict, w_name)
+ assert not space.isinstance_w(w_class, space.w_type)
+ w_instance = space.call_function(w_class)
+ assert api.PyInstance_Check(w_instance)
+ assert space.is_true(space.call_method(space.builtin, "isinstance",
+ w_instance, w_class))
More information about the pypy-commit
mailing list