[pypy-commit] pypy missing-tp_new: remove the slots for the methods not explicitly overriden in the app-level class

arigo pypy.commits at gmail.com
Sun Oct 30 13:16:26 EDT 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: missing-tp_new
Changeset: r87997:0d51cac70bb9
Date: 2016-10-30 18:15 +0100
http://bitbucket.org/pypy/pypy/changeset/0d51cac70bb9/

Log:	remove the slots for the methods not explicitly overriden in the
	app-level class

diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -246,11 +246,22 @@
 
     if w_type.is_heaptype():
         typedef = None
+        search_dict_w = w_type.dict_w
     else:
         typedef = w_type.layout.typedef
+        search_dict_w = None
 
     for method_name, slot_name, slot_names, slot_func in slotdefs_for_tp_slots:
-        w_descr = w_type.lookup(method_name)
+        if search_dict_w is not None:
+            # heap type: only look in this exact class
+            #if method_name in search_dict_w and method_name == '__new__':
+            #    import pdb;pdb.set_trace()
+            w_descr = search_dict_w.get(method_name, None)
+        else:
+            # built-in types: expose as many slots as possible, even
+            # if it happens to come from some parent class
+            w_descr = w_type.lookup(method_name)
+
         if w_descr is None:
             # XXX special case iternext
             continue


More information about the pypy-commit mailing list