Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> Branch: Changeset: r92329:ffbad4ff0842 Date: 2017-09-05 21:45 +0200 http://bitbucket.org/pypy/pypy/changeset/ffbad4ff0842/
Log: in the fast zip(intlist1, intlist2) implementation, don't wrap and unwrap all the ints diff --git a/pypy/objspace/std/specialisedtupleobject.py b/pypy/objspace/std/specialisedtupleobject.py --- a/pypy/objspace/std/specialisedtupleobject.py +++ b/pypy/objspace/std/specialisedtupleobject.py @@ -31,23 +31,23 @@ class cls(W_AbstractTupleObject): _immutable_fields_ = ['value%s' % i for i in iter_n] - def __init__(self, space, *values_w): + def __init__(self, space, *values): self.space = space - assert len(values_w) == typelen + assert len(values) == typelen for i in iter_n: - w_obj = values_w[i] + obj = values[i] val_type = typetuple[i] if val_type == int: - unwrapped = w_obj.int_w(space) + assert isinstance(obj, int) elif val_type == float: - unwrapped = w_obj.float_w(space) + assert isinstance(obj, float) elif val_type == str: - unwrapped = w_obj.str_w(space) + assert isinstance(obj, str) elif val_type == object: - unwrapped = w_obj + pass else: raise AssertionError - setattr(self, 'value%s' % i, unwrapped) + setattr(self, 'value%s' % i, obj) def length(self): return typelen @@ -150,10 +150,10 @@ w_arg1, w_arg2 = list_w if type(w_arg1) is W_IntObject: if type(w_arg2) is W_IntObject: - return Cls_ii(space, w_arg1, w_arg2) + return Cls_ii(space, space.int_w(w_arg1), space.int_w(w_arg2)) elif type(w_arg1) is W_FloatObject: if type(w_arg2) is W_FloatObject: - return Cls_ff(space, w_arg1, w_arg2) + return Cls_ff(space, space.float_w(w_arg1), space.float_w(w_arg2)) return Cls_oo(space, w_arg1, w_arg2) else: raise NotSpecialised @@ -170,10 +170,9 @@ # faster to move the decision out of the loop. @specialize.arg(1) -def _build_zipped_spec(space, Cls, lst1, lst2, wrap1, wrap2): +def _build_zipped_spec(space, Cls, lst1, lst2): length = min(len(lst1), len(lst2)) - return [Cls(space, wrap1(lst1[i]), - wrap2(lst2[i])) for i in range(length)] + return [Cls(space, lst1[i], lst2[i]) for i in range(length)] def _build_zipped_spec_oo(space, w_list1, w_list2): strat1 = w_list1.strategy @@ -200,8 +199,7 @@ intlist2 = w_list2.getitems_int() if intlist2 is not None: lst_w = _build_zipped_spec( - space, Cls_ii, intlist1, intlist2, - space.newint, space.newint) + space, Cls_ii, intlist1, intlist2) return space.newlist(lst_w) else: floatlist1 = w_list1.getitems_float() @@ -209,8 +207,7 @@ floatlist2 = w_list2.getitems_float() if floatlist2 is not None: lst_w = _build_zipped_spec( - space, Cls_ff, floatlist1, floatlist2, space.newfloat, - space.newfloat) + space, Cls_ff, floatlist1, floatlist2) return space.newlist(lst_w) lst_w = _build_zipped_spec_oo(space, w_list1, w_list2) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit