Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r47304:27862000e92d Date: 2011-09-16 18:21 +0200 http://bitbucket.org/pypy/pypy/changeset/27862000e92d/
Log: merge default diff --git a/pypy/objspace/std/stringobject.py b/pypy/objspace/std/stringobject.py --- a/pypy/objspace/std/stringobject.py +++ b/pypy/objspace/std/stringobject.py @@ -359,26 +359,43 @@ return _str_join_many_items(space, w_self, list_w, size) -def _str_join_many_items(space, w_self, list_w, size): - self = w_self._value +from pypy.rlib.jit import JitDriver + +one = JitDriver(greens = [], reds = ['size', 'reslen', 'self', 'list_w']) +two = JitDriver(greens = [], reds = ['i', 'size', 'list_w', 'sb', 'self', + 'w_self']) + +def _str_join_compute_reslen(space, self, list_w, size): reslen = len(self) * (size - 1) for i in range(size): + one.jit_merge_point(size = size, reslen = reslen, + self = self, list_w = list_w) w_s = list_w[i] if not space.isinstance_w(w_s, space.w_str): if space.isinstance_w(w_s, space.w_unicode): - # we need to rebuild w_list here, because the original - # w_list might be an iterable which we already consumed - w_list = space.newlist(list_w) - w_u = space.call_function(space.w_unicode, w_self) - return space.call_method(w_u, "join", w_list) + return -1 raise operationerrfmt( space.w_TypeError, "sequence item %d: expected string, %s " "found", i, space.type(w_s).getname(space)) reslen += len(space.str_w(w_s)) + return reslen + +def _str_join_many_items(space, w_self, list_w, size): + self = w_self._value + + reslen = _str_join_compute_reslen(space, self, list_w, size) + if reslen == -1: + # we need to rebuild w_list here, because the original + # w_list might be an iterable which we already consumed + w_list = space.newlist(list_w) + w_u = space.call_function(space.w_unicode, w_self) + return space.call_method(w_u, "join", w_list) sb = StringBuilder(reslen) for i in range(size): + two.jit_merge_point(size=size, i=i, sb=sb, list_w=list_w, self=self, + w_self=w_self) if self and i != 0: sb.append(self) sb.append(space.str_w(list_w[i])) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit