Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r57595:71163f735ff9 Date: 2012-09-26 10:14 +0200 http://bitbucket.org/pypy/pypy/changeset/71163f735ff9/
Log: merge heads diff --git a/pypy/objspace/std/ropeunicodeobject.py b/pypy/objspace/std/ropeunicodeobject.py --- a/pypy/objspace/std/ropeunicodeobject.py +++ b/pypy/objspace/std/ropeunicodeobject.py @@ -71,7 +71,7 @@ if result is not None: return W_RopeObject(result) elif encoding == "utf-8": - result = rope.unicode_encode_utf8(node) + result = rope.unicode_encode_utf8(node, allow_surrogates=True) if result is not None: return W_RopeObject(result) return encode_object(space, w_unistr, encoding, errors) diff --git a/pypy/rlib/rope.py b/pypy/rlib/rope.py --- a/pypy/rlib/rope.py +++ b/pypy/rlib/rope.py @@ -1485,7 +1485,7 @@ if rope.is_bytestring(): return rope -def unicode_encode_utf8(rope): +def unicode_encode_utf8(rope, allow_surrogates=False): from pypy.rlib.runicode import unicode_encode_utf_8 if rope.is_ascii(): return rope @@ -1494,7 +1494,8 @@ unicode_encode_utf8(rope.right)) elif isinstance(rope, LiteralUnicodeNode): return LiteralStringNode( - unicode_encode_utf_8(rope.u, len(rope.u), "strict")) + unicode_encode_utf_8(rope.u, len(rope.u), "strict", + allow_surrogates=allow_surrogates)) elif isinstance(rope, LiteralStringNode): return LiteralStringNode(_str_encode_utf_8(rope.s)) diff --git a/pypy/rlib/test/test_rpoll.py b/pypy/rlib/test/test_rpoll.py --- a/pypy/rlib/test/test_rpoll.py +++ b/pypy/rlib/test/test_rpoll.py @@ -25,7 +25,8 @@ assert events[0][0] == serv.fd assert events[0][1] & POLLIN - servconn, cliaddr = serv.accept() + servconn_fd, cliaddr = serv.accept() + servconn = RSocket(AF_INET, fd=servconn_fd) events = poll({serv.fd: POLLIN, cli.fd: POLLOUT}, timeout=500) diff --git a/pypy/rpython/rstr.py b/pypy/rpython/rstr.py --- a/pypy/rpython/rstr.py +++ b/pypy/rpython/rstr.py @@ -28,8 +28,10 @@ from pypy.rpython.annlowlevel import hlstr value = hlstr(llvalue) assert value is not None - univalue, _ = self.rstr_decode_utf_8(value, len(value), 'strict', - False, self.ll_raise_unicode_exception_decode) + univalue, _ = self.rstr_decode_utf_8( + value, len(value), 'strict', final=False, + errorhandler=self.ll_raise_unicode_exception_decode, + allow_surrogates=False) return self.ll.llunicode(univalue) def ll_raise_unicode_exception_decode(self, errors, encoding, msg, s, @@ -50,9 +52,9 @@ self.runicode_encode_utf_8 = None def ensure_ll_encode_utf8(self): - from pypy.rlib.runicode import unicode_encode_utf_8 - self.runicode_encode_utf_8 = func_with_new_name(unicode_encode_utf_8, - 'runicode_encode_utf_8') + from pypy.rlib.runicode import unicode_encode_utf_8_impl + self.runicode_encode_utf_8 = func_with_new_name( + unicode_encode_utf_8_impl, 'runicode_encode_utf_8') def rtype_method_upper(self, hop): raise TypeError("Cannot do toupper on unicode string") @@ -65,9 +67,16 @@ from pypy.rpython.annlowlevel import hlunicode s = hlunicode(ll_s) assert s is not None - bytes = self.runicode_encode_utf_8(s, len(s), 'strict') + bytes = self.runicode_encode_utf_8( + s, len(s), 'strict', + errorhandler=self.ll_raise_unicode_exception_decode, + allow_surrogates=False) return self.ll.llstr(bytes) + def ll_raise_unicode_exception_encode(self, errors, encoding, msg, u, + startingpos, endingpos): + raise UnicodeEncodeError(encoding, u, startingpos, endingpos, msg) + class __extend__(annmodel.SomeString): def rtyper_makerepr(self, rtyper): return rtyper.type_system.rstr.string_repr _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit