New submission from Alexandre Vassalotti:
This patch removes the buffer API from PyUnicode, as specified by PEP
3137. All the unit tests passes. However, I believe there is a few
function calls to PyArg API that could become problematic if they are
given a PyUnicode object:
% egrep -R --include='*.c' 'PyArg.*Parse.*"[^;:]*[cwt].*"' py3k/
I haven't checked these function calls yet. So, it would probably be a
good idea to wait I do so before committing this patch.
----------
files: unicode_rm_buf_api.patch
messages: 56336
nosy: alexandre.vassalotti
severity: normal
status: open
title: PEP 3137: Remove the buffer API from PyUnicode
versions: Python 3.0
__________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue1260>
__________________________________
Index: Modules/_sre.c
===================================================================
--- Modules/_sre.c (revision 58376)
+++ Modules/_sre.c (working copy)
@@ -1674,6 +1674,15 @@
void* ptr;
Py_buffer view;
+ /* Unicode objects do not support the buffer API. So, get the data
+ directly instead. */
+ if (PyUnicode_Check(string)) {
+ ptr = (void *)PyUnicode_AS_DATA(string);
+ *p_length = PyUnicode_GET_SIZE(string);
+ *p_charsize = sizeof(Py_UNICODE);
+ return ptr;
+ }
+
/* get pointer to string buffer */
view.len = -1;
buffer = Py_Type(string)->tp_as_buffer;
Index: Objects/unicodeobject.c
===================================================================
--- Objects/unicodeobject.c (revision 58376)
+++ Objects/unicodeobject.c (working copy)
@@ -8113,19 +8113,6 @@
};
-static int
-unicode_buffer_getbuffer(PyUnicodeObject *self, Py_buffer *view, int flags)
-{
-
- if (flags & PyBUF_CHARACTER) {
- PyErr_SetString(PyExc_SystemError, "can't use str as char buffer");
- return -1;
- }
- return PyBuffer_FillInfo(view, (void *)self->str,
- PyUnicode_GET_DATA_SIZE(self), 1, flags);
-}
-
-
/* Helpers for PyUnicode_Format() */
static PyObject *
@@ -8819,11 +8806,6 @@
return NULL;
}
-static PyBufferProcs unicode_as_buffer = {
- (getbufferproc) unicode_buffer_getbuffer,
- NULL,
-};
-
static PyObject *
unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -8907,7 +8889,7 @@
(reprfunc) unicode_str, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
0, /* tp_setattro */
- &unicode_as_buffer, /* tp_as_buffer */
+ 0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_UNICODE_SUBCLASS, /* tp_flags */
unicode_doc, /* tp_doc */
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com