[pypy-svn] r71039 - pypy/trunk/pypy/module/__builtin__

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Feb 1 18:13:16 CET 2010


Author: cfbolz
Date: Mon Feb  1 18:13:14 2010
New Revision: 71039

Modified:
   pypy/trunk/pypy/module/__builtin__/abstractinst.py
Log:
Make the JIT see isinstance(X, (a, b, c)) (it already does for issubclass).


Modified: pypy/trunk/pypy/module/__builtin__/abstractinst.py
==============================================================================
--- pypy/trunk/pypy/module/__builtin__/abstractinst.py	(original)
+++ pypy/trunk/pypy/module/__builtin__/abstractinst.py	Mon Feb  1 18:13:14 2010
@@ -44,7 +44,7 @@
             raise       # propagate other errors
         return space.type(w_obj)
 
-
+ at jit.unroll_safe
 def abstract_isinstance_w(space, w_obj, w_klass_or_tuple):
     """Implementation for the full 'isinstance(obj, klass_or_tuple)'."""
 
@@ -78,16 +78,17 @@
         oldstyleinst = space.interpclass_w(w_obj)
         if isinstance(oldstyleinst, W_InstanceObject):
             return oldstyleinst.w_class.is_subclass_of(oldstyleclass)
-    return _abstract_isinstance_w_helper(space, w_obj, w_klass_or_tuple)
-
- at jit.dont_look_inside
-def _abstract_isinstance_w_helper(space, w_obj, w_klass_or_tuple):
     # -- case (anything, tuple)
+    # XXX it might be risky that the JIT sees this
     if space.is_true(space.isinstance(w_klass_or_tuple, space.w_tuple)):
         for w_klass in space.fixedview(w_klass_or_tuple):
             if abstract_isinstance_w(space, w_obj, w_klass):
                 return True
         return False
+    return _abstract_isinstance_w_helper(space, w_obj, w_klass_or_tuple)
+
+ at jit.dont_look_inside
+def _abstract_isinstance_w_helper(space, w_obj, w_klass_or_tuple):
 
     # -- case (anything, abstract-class)
     check_class(space, w_klass_or_tuple,



More information about the Pypy-commit mailing list