Author: Maciej Fijalkowski <fij...@gmail.com> Branch: speedup-list-comprehension Changeset: r53306:d11c5cf98a00 Date: 2012-03-11 16:09 -0700 http://bitbucket.org/pypy/pypy/changeset/d11c5cf98a00/
Log: clean up changes diff --git a/pypy/rpython/lltypesystem/rlist.py b/pypy/rpython/lltypesystem/rlist.py --- a/pypy/rpython/lltypesystem/rlist.py +++ b/pypy/rpython/lltypesystem/rlist.py @@ -319,18 +319,15 @@ ll_assert(length >= 0, "negative fixed list length") l = malloc(LIST, length) return l -ll_fixed_newlist = typeMethod(ll_fixed_newlist) ll_fixed_newlist.oopspec = 'newlist(length)' @typeMethod def ll_fixed_newemptylist(LIST): return ll_fixed_newlist(LIST, 0) -ll_fixed_newemptylist = typeMethod(ll_fixed_newemptylist) def ll_fixed_length(l): return len(l) ll_fixed_length.oopspec = 'list.len(l)' -ll_fixed_length._always_inline_ = True def ll_fixed_items(l): return l @@ -394,7 +391,11 @@ ('list', r_list.lowleveltype), ('index', Signed))) self.ll_listiter = ll_listiter - self.ll_listnext = ll_listnext + if (isinstance(r_list, FixedSizeListRepr) + and not r_list.listitem.mutated): + self.ll_listnext = ll_listnext_foldable + else: + self.ll_listnext = ll_listnext self.ll_getnextindex = ll_getnextindex def ll_listiter(ITERPTR, lst): @@ -411,5 +412,14 @@ iter.index = index + 1 # cannot overflow because index < l.length return l.ll_getitem_fast(index) +def ll_listnext_foldable(iter): + from pypy.rpython.rlist import ll_getitem_foldable_nonneg + l = iter.list + index = iter.index + if index >= l.ll_length(): + raise StopIteration + iter.index = index + 1 # cannot overflow because index < l.length + return ll_getitem_foldable_nonneg(l, index) + def ll_getnextindex(iter): return iter.index diff --git a/pypy/rpython/rlist.py b/pypy/rpython/rlist.py --- a/pypy/rpython/rlist.py +++ b/pypy/rpython/rlist.py @@ -559,7 +559,7 @@ def ll_len_foldable(l): return l.ll_length() -ll_len_foldable._always_inline_ = True +ll_len_foldable.oopspec = 'list.len_foldable(l)' def ll_list_is_true_foldable(l): return bool(l) and ll_len_foldable(l) != 0 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit