[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