[pypy-commit] pypy py3.5: Add PyUnicode_AsUnicodeAndSize()

rlamy pypy.commits at gmail.com
Sat Mar 4 12:17:56 EST 2017


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.5
Changeset: r90538:44c53c062fbe
Date: 2017-03-04 17:07 +0100
http://bitbucket.org/pypy/pypy/changeset/44c53c062fbe/

Log:	Add PyUnicode_AsUnicodeAndSize()

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
@@ -306,8 +306,8 @@
     set_ready(py_obj, 1)
     return 0
 
- at cpython_api([PyObject], rffi.CWCHARP)
-def PyUnicode_AsUnicode(space, ref):
+ at cts.decl("Py_UNICODE * PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)")
+def PyUnicode_AsUnicodeAndSize(space, ref, psize):
     """Return a read-only pointer to the Unicode object's internal Py_UNICODE
     buffer, NULL if unicode is not a Unicode object."""
     # Don't use PyUnicode_Check, it will realize the object :-(
@@ -319,8 +319,15 @@
         w_unicode = from_ref(space, rffi.cast(PyObject, ref))
         u = space.unicode_w(w_unicode)
         set_wbuffer(ref, rffi.unicode2wcharp(u))
+        set_wsize(ref, len(u))
+    if psize:
+        psize[0] = get_wsize(ref)
     return get_wbuffer(ref)
 
+ at cts.decl("Py_UNICODE * PyUnicode_AsUnicode(PyObject *unicode)")
+def PyUnicode_AsUnicode(space, ref):
+    return PyUnicode_AsUnicodeAndSize(space, ref, cts.cast('Py_ssize_t *', 0))
+
 @cts.decl("char * PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *psize)")
 def PyUnicode_AsUTF8AndSize(space, ref, psize):
     if not PyUnicode_Check(space, ref):


More information about the pypy-commit mailing list