[pypy-commit] pypy unicode-utf8-py3: return bo (byteorder) from helpers

mattip pypy.commits at gmail.com
Thu Aug 30 10:52:36 EDT 2018


Author: Matti Picus <matti.picus at gmail.com>
Branch: unicode-utf8-py3
Changeset: r95046:509a8b3b1a70
Date: 2018-08-29 14:56 +0200
http://bitbucket.org/pypy/pypy/changeset/509a8b3b1a70/

Log:	return bo (byteorder) from helpers

diff --git a/pypy/interpreter/unicodehelper.py b/pypy/interpreter/unicodehelper.py
--- a/pypy/interpreter/unicodehelper.py
+++ b/pypy/interpreter/unicodehelper.py
@@ -1023,15 +1023,15 @@
 
 def str_decode_utf_16(s, errors, final=True,
                       errorhandler=None):
-    return str_decode_utf_16_helper(s, errors, final, errorhandler, "native")
+    return str_decode_utf_16_helper(s, errors, final, errorhandler, "native")[:3]
 
 def str_decode_utf_16_be(s, errors, final=True,
                         errorhandler=None):
-    return str_decode_utf_16_helper(s, errors, final, errorhandler, "big")
+    return str_decode_utf_16_helper(s, errors, final, errorhandler, "big")[:3]
 
 def str_decode_utf_16_le(s, errors, final=True,
                          errorhandler=None):
-    return str_decode_utf_16_helper(s, errors, final, errorhandler, "little")
+    return str_decode_utf_16_helper(s, errors, final, errorhandler, "little")[:3]
 
 def str_decode_utf_16_helper(s, errors, final=True,
                              errorhandler=None,
@@ -1074,7 +1074,7 @@
     else:
         bo = 1
     if size == 0:
-        return '', 0, 0
+        return '', 0, 0, bo
     if bo == -1:
         # force little endian
         ihi = 1
@@ -1134,7 +1134,7 @@
             result.append(r)
     r = result.build()
     lgt = rutf8.check_utf8(r, True)
-    return result.build(), lgt, pos
+    return result.build(), lgt, pos, bo
 
 def _STORECHAR(result, CH, byteorder):
     hi = chr(((CH) >> 8) & 0xff)
@@ -1244,19 +1244,19 @@
                       errorhandler=None):
     return str_decode_utf_32_helper(
         s, errors, final, errorhandler, "native", 'utf-32-' + BYTEORDER2,
-        allow_surrogates=False)
+        allow_surrogates=False)[:3]
 
 def str_decode_utf_32_be(s, errors, final=True,
                          errorhandler=None):
     return str_decode_utf_32_helper(
         s, errors, final, errorhandler, "big", 'utf-32-be',
-        allow_surrogates=False)
+        allow_surrogates=False)[:3]
 
 def str_decode_utf_32_le(s, errors, final=True,
                          errorhandler=None):
     return str_decode_utf_32_helper(
         s, errors, final, errorhandler, "little", 'utf-32-le',
-        allow_surrogates=False)
+        allow_surrogates=False)[:3]
 
 BOM32_DIRECT  = intmask(0x0000FEFF)
 BOM32_REVERSE = intmask(0xFFFE0000)
@@ -1304,7 +1304,7 @@
     else:
         bo = 1
     if size == 0:
-        return '', 0, 0
+        return '', 0, 0, bo
     if bo == -1:
         # force little endian
         iorder = [0, 1, 2, 3]
@@ -1346,7 +1346,7 @@
         pos += 4
     r = result.build()
     lgt = rutf8.check_utf8(r, True)
-    return r, lgt, pos
+    return r, lgt, pos, bo
 
 def _STORECHAR32(result, CH, byteorder):
     c0 = chr(((CH) >> 24) & 0xff)
diff --git a/pypy/module/_codecs/test/test_codecs.py b/pypy/module/_codecs/test/test_codecs.py
--- a/pypy/module/_codecs/test/test_codecs.py
+++ b/pypy/module/_codecs/test/test_codecs.py
@@ -929,11 +929,11 @@
         assert _codecs.utf_16_be_decode(b) == (u'', 0)
         assert _codecs.utf_16_decode(b) == (u'', 0)
         assert _codecs.utf_16_le_decode(b) == (u'', 0)
-        assert _codecs.utf_16_ex_decode(b) == (u'', 0)
+        assert _codecs.utf_16_ex_decode(b) == (u'', 0, 0)
         assert _codecs.utf_32_decode(b) == (u'', 0)
         assert _codecs.utf_32_be_decode(b) == (u'', 0)
         assert _codecs.utf_32_le_decode(b) == (u'', 0)
-        assert _codecs.utf_32_ex_decode(b) == (u'', 0)
+        assert _codecs.utf_32_ex_decode(b) == (u'', 0, 0)
         assert _codecs.charmap_decode(b) == (u'', 0)
         assert _codecs.unicode_escape_decode(b) == (u'', 0)
         assert _codecs.raw_unicode_escape_decode(b) == (u'', 0)
diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -20,7 +20,6 @@
 from pypy.module.cpyext.bytesobject import PyBytes_Check, PyBytes_FromObject
 from pypy.module._codecs.interp_codecs import (
     CodecState, latin_1_decode, utf_16_decode, utf_32_decode)
-from pypy.interpreter import unicodehelper
 from pypy.objspace.std import unicodeobject
 import sys
 
@@ -820,10 +819,12 @@
     else:
         errors = 'strict'
 
-    result, length, pos = str_decode_utf_16_helper(
-        string, errors, True, None, byteorder=byteorder)
+    state = space.fromcache(CodecState)
+    result, length, pos, bo = str_decode_utf_16_helper(
+        string, errors, True, state.decode_error_handler,
+        byteorder=byteorder)
     if pbyteorder is not None:
-        pbyteorder[0] = rffi.cast(rffi.INT_real, pos > 0)
+        pbyteorder[0] = rffi.cast(rffi.INT_real, bo)
     return space.newutf8(result, length)
 
 @cpython_api([CONST_STRING, Py_ssize_t, CONST_STRING, INTP_real], PyObject)
@@ -872,10 +873,12 @@
     else:
         errors = 'strict'
 
-    result, length, pos = unicodehelper.str_decode_utf_32_helper(
-        string, errors, True, None, byteorder=byteorder)
+    state = space.fromcache(CodecState)
+    result, length, pos, bo = str_decode_utf_32_helper(
+        string, errors, True, state.decode_error_handler,
+        byteorder=byteorder)
     if pbyteorder is not None:
-        pbyteorder[0] = rffi.cast(rffi.INT_real, pos>0)
+        pbyteorder[0] = rffi.cast(rffi.INT_real, bo)
     return space.newutf8(result, length)
 
 @cpython_api([rffi.CWCHARP, Py_ssize_t, rffi.CCHARP, CONST_STRING],


More information about the pypy-commit mailing list