Author: Alex Gaynor <[email protected]> Branch: Changeset: r47602:2d3268596b64 Date: 2011-09-26 06:07 -0400 http://bitbucket.org/pypy/pypy/changeset/2d3268596b64/
Log: make max/min's special case use jit.look_inside_iff diff --git a/pypy/module/__builtin__/functional.py b/pypy/module/__builtin__/functional.py --- a/pypy/module/__builtin__/functional.py +++ b/pypy/module/__builtin__/functional.py @@ -3,13 +3,13 @@ """ +from pypy.interpreter.baseobjspace import Wrappable from pypy.interpreter.error import OperationError -from pypy.interpreter.gateway import NoneNotWrapped -from pypy.interpreter.gateway import interp2app, unwrap_spec +from pypy.interpreter.gateway import NoneNotWrapped, interp2app, unwrap_spec from pypy.interpreter.typedef import TypeDef -from pypy.interpreter.baseobjspace import Wrappable +from pypy.rlib import jit +from pypy.rlib.objectmodel import specialize from pypy.rlib.rarithmetic import r_uint, intmask -from pypy.rlib.objectmodel import specialize from pypy.rlib.rbigint import rbigint @@ -134,29 +134,15 @@ @specialize.arg(2) [email protected]_inside_iff(lambda space, args, implementation_of: + jit.isconstant(len(args.arguments_w)) and + len(args.arguments_w) == 2 +) def min_max(space, args, implementation_of): if implementation_of == "max": compare = space.gt else: compare = space.lt - - args_w = args.arguments_w - if len(args_w) == 2 and not args.keywords: - # simple case, suitable for the JIT - w_arg0, w_arg1 = args_w - if space.is_true(compare(w_arg0, w_arg1)): - return w_arg0 - else: - return w_arg1 - else: - return min_max_loop(space, args, implementation_of) - [email protected](2) -def min_max_loop(space, args, implementation_of): - if implementation_of == "max": - compare = space.gt - else: - compare = space.lt args_w = args.arguments_w if len(args_w) > 1: w_sequence = space.newtuple(args_w) _______________________________________________ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
