[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