[pypy-svn] r73427 - pypy/branch/cpython-extension/pypy/module/cpyext

xoraxax at codespeak.net xoraxax at codespeak.net
Tue Apr 6 01:33:15 CEST 2010


Author: xoraxax
Date: Tue Apr  6 01:33:14 2010
New Revision: 73427

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
Log:
Implement PyType_IsSubtype.

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/typeobject.py	Tue Apr  6 01:33:14 2010
@@ -16,7 +16,7 @@
     PyVarObjectFields, Py_ssize_t, Py_TPFLAGS_READYING, generic_cpy_call, \
     Py_TPFLAGS_READY, Py_TPFLAGS_HEAPTYPE, PyStringObject, ADDR, \
     Py_TPFLAGS_HAVE_CLASS, METH_VARARGS, METH_KEYWORDS, \
-    PyUnicodeObject
+    PyUnicodeObject, CANNOT_FAIL
 from pypy.module.cpyext.pyobject import PyObject, make_ref, from_ref
 from pypy.interpreter.module import Module
 from pypy.interpreter.function import FunctionWithFixedCode, StaticMethod
@@ -33,6 +33,7 @@
 from pypy.interpreter.error import OperationError, operationerrfmt
 from pypy.rlib.rstring import rsplit
 from pypy.rlib.objectmodel import we_are_translated, specialize
+from pypy.module.__builtin__.abstractinst import abstract_issubclass_w
 
 
 WARN_ABOUT_MISSING_SLOT_FUNCTIONS = False
@@ -492,3 +493,12 @@
     __call__ = interp2app(c_type_descr__call__, unwrap_spec=[ObjSpace, W_Root, Arguments]),
     __new__ = interp2app(c_type_descr__new__),
     )
+
+ at cpython_api([PyTypeObjectPtr, PyTypeObjectPtr], rffi.INT_real, error=CANNOT_FAIL)
+def PyType_IsSubtype(space, a, b):
+    """Return true if a is a subtype of b.
+    """
+    w_type1 = from_ref(space, rffi.cast(PyObject, a))
+    w_type2 = from_ref(space, rffi.cast(PyObject, b))
+    return int(abstract_issubclass_w(space, w_type1, w_type2)) #XXX correct?
+



More information about the Pypy-commit mailing list