Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r72922:864226266f8c Date: 2014-08-20 09:46 +0200 http://bitbucket.org/pypy/pypy/changeset/864226266f8c/
Log: str.replace() diff --git a/pypy/objspace/std/bytesobject.py b/pypy/objspace/std/bytesobject.py --- a/pypy/objspace/std/bytesobject.py +++ b/pypy/objspace/std/bytesobject.py @@ -707,19 +707,7 @@ new_is_unicode = space.isinstance_w(w_new, space.w_unicode) if old_is_unicode or new_is_unicode: self_as_uni = unicode_from_encoded_object(space, self, None, None) - if not old_is_unicode: - w_old = unicode_from_encoded_object(space, w_old, None, None) - if not new_is_unicode: - w_new = unicode_from_encoded_object(space, w_new, None, None) - input = self_as_uni._val(space) - sub = self_as_uni._op_val(space, w_old) - by = self_as_uni._op_val(space, w_new) - try: - res = replace(input, sub, by, count) - except OverflowError: - raise oefmt(space.w_OverflowError, - "replace string is too long") - return self_as_uni._new(res) + return self_as_uni.descr_replace(space, w_old, w_new, count) return self._StringMethods_descr_replace(space, w_old, w_new, count) _StringMethods_descr_join = descr_join diff --git a/pypy/objspace/std/test/test_unicodeobject.py b/pypy/objspace/std/test/test_unicodeobject.py --- a/pypy/objspace/std/test/test_unicodeobject.py +++ b/pypy/objspace/std/test/test_unicodeobject.py @@ -956,10 +956,12 @@ assert not u'a'.isnumeric() assert u'\u2460'.isnumeric() # CIRCLED DIGIT ONE - def test_replace_autoconvert(self): + def test_replace_str_unicode(self): res = 'one!two!three!'.replace(u'!', u'@', 1) assert res == u'one@two!three!' assert type(res) == unicode + raises(UnicodeDecodeError, '\x80'.replace, 'a', u'b') + raises(UnicodeDecodeError, '\x80'.replace, u'a', 'b') def test_join_subclass(self): class UnicodeSubclass(unicode): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit