[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