Author: Lukas Diekmann <lukas.diekm...@uni-duesseldorf.de> Branch: set-strategies Changeset: r51220:95d8ecd1711f Date: 2012-01-10 18:15 +0100 http://bitbucket.org/pypy/pypy/changeset/95d8ecd1711f/
Log: (cfbolz, l.diekmann): restructure some code: the speed hack in FastListIterator is no longer there, so we don't need to use extend here. Also, why was the generator path hidden in _init_from_iterable? diff --git a/pypy/objspace/std/iterobject.py b/pypy/objspace/std/iterobject.py --- a/pypy/objspace/std/iterobject.py +++ b/pypy/objspace/std/iterobject.py @@ -29,9 +29,8 @@ class W_SeqIterObject(W_AbstractSeqIterObject): """Sequence iterator implementation for general sequences.""" -class W_FastListIterObject(W_AbstractSeqIterObject): - """Sequence iterator specialized for lists, accessing - directly their RPython-level list of wrapped objects. +class W_FastListIterObject(W_AbstractSeqIterObject): # XXX still needed + """Sequence iterator specialized for lists. """ class W_FastTupleIterObject(W_AbstractSeqIterObject): diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py --- a/pypy/objspace/std/listobject.py +++ b/pypy/objspace/std/listobject.py @@ -1035,26 +1035,26 @@ # this is on the silly side w_iterable, = __args__.parse_obj( None, 'list', init_signature, init_defaults) - w_list.__init__(space, []) if w_iterable is not None: - # unfortunately this is duplicating space.unpackiterable to avoid - # assigning a new RPython list to 'wrappeditems', which defeats the - # W_FastListIterObject optimization. if isinstance(w_iterable, W_ListObject): - w_list.extend(w_iterable) + w_iterable.copy_into(w_list) + return elif isinstance(w_iterable, W_TupleObject): - w_list.extend(W_ListObject(space, w_iterable.wrappeditems[:])) - else: - _init_from_iterable(space, w_list, w_iterable) + W_ListObject(space, w_iterable.wrappeditems[:]).copy_into(w_list) + return + w_list.__init__(space, []) + # xxx special hack for speed + from pypy.interpreter.generator import GeneratorIterator + if isinstance(w_iterable, GeneratorIterator): + w_iterable.unpack_into_w(w_list) + return + # /xxx + _init_from_iterable(space, w_list, w_iterable) + else: + w_list.__init__(space, []) def _init_from_iterable(space, w_list, w_iterable): # in its own function to make the JIT look into init__List - # xxx special hack for speed - from pypy.interpreter.generator import GeneratorIterator - if isinstance(w_iterable, GeneratorIterator): - w_iterable.unpack_into_w(w_list) - return - # /xxx w_iterator = space.iter(w_iterable) while True: try: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit