[pypy-svn] r53911 - pypy/dist/pypy/objspace

fijal at codespeak.net fijal at codespeak.net
Sun Apr 20 17:27:35 CEST 2008


Author: fijal
Date: Sun Apr 20 17:27:35 2008
New Revision: 53911

Modified:
   pypy/dist/pypy/objspace/descroperation.py
Log:
hotpath for comparisons


Modified: pypy/dist/pypy/objspace/descroperation.py
==============================================================================
--- pypy/dist/pypy/objspace/descroperation.py	(original)
+++ pypy/dist/pypy/objspace/descroperation.py	Sun Apr 20 17:27:35 2008
@@ -441,6 +441,7 @@
 
 def _make_binop_impl(symbol, specialnames):
     left, right = specialnames
+
     def binop_impl(space, w_obj1, w_obj2):
         w_typ1 = space.type(w_obj1)
         w_typ2 = space.type(w_obj2)
@@ -468,12 +469,20 @@
             return w_res
         raise OperationError(space.w_TypeError,
                 space.wrap("unsupported operand type(s) for %s" % symbol))
+    
     return func_with_new_name(binop_impl, "binop_%s_impl"%left.strip('_'))
 
 def _make_comparison_impl(symbol, specialnames):
     left, right = specialnames
     op = getattr(operator, left)
     def comparison_impl(space, w_obj1, w_obj2):
+        from pypy.objspace.std.intobject import W_IntObject
+        if type(w_obj1) is W_IntObject and type(w_obj2) is W_IntObject:
+            return space.newbool(op(w_obj1.intval, w_obj2.intval))
+        return _comparison_impl(space, w_obj1, w_obj2)
+    comparison_impl._always_inline_ = True
+
+    def _comparison_impl(space, w_obj1, w_obj2):
         w_typ1 = space.type(w_obj1)
         w_typ2 = space.type(w_obj2)
         w_left_src, w_left_impl = space.lookup_in_type_where(w_typ1, left)
@@ -499,6 +508,7 @@
         w_res = _cmp(space, w_first, w_second)
         res = space.int_w(w_res)
         return space.wrap(op(res, 0))
+    _comparison_impl._dont_inline_ = True
 
     return func_with_new_name(comparison_impl, 'comparison_%s_impl'%left.strip('_'))
 



More information about the Pypy-commit mailing list