diff -r f4406d746d27 Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c Thu May 05 09:26:07 2016 +0300 +++ b/Objects/bytearrayobject.c Thu May 05 09:49:39 2016 +0300 @@ -1097,18 +1097,6 @@ bytearray_dealloc(PyByteArrayObject *sel #include "stringlib/transmogrify.h" -static PyObject * -bytearray_find(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_find(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_count(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_count(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - /*[clinic input] bytearray.clear @@ -1138,42 +1126,6 @@ bytearray_copy_impl(PyByteArrayObject *s PyByteArray_GET_SIZE(self)); } -static PyObject * -bytearray_index(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_index(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_rfind(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_rfind(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_rindex(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_rindex(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static int -bytearray_contains(PyObject *self, PyObject *arg) -{ - return _Py_bytes_contains(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), arg); -} - -static PyObject * -bytearray_startswith(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_startswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_endswith(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_endswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - /*[clinic input] bytearray.translate @@ -1328,9 +1280,9 @@ bytearray_replace_impl(PyByteArrayObject Py_buffer *new, Py_ssize_t count) /*[clinic end generated code: output=d39884c4dc59412a input=aa379d988637c7fb]*/ { - return stringlib_replace((PyObject *)self, - (const char *)old->buf, old->len, - (const char *)new->buf, new->len, count); + return (PyObject *)stringlib_replace((PyObject *) self, + old->buf, old->len, + new->buf, new->len, count); } /*[clinic input] @@ -1995,14 +1947,6 @@ Create a string of hexadecimal numbers f Example: bytearray([0xb9, 0x01, 0xef]).hex() -> 'b901ef'."); static PyObject * -bytearray_hex(PyBytesObject *self) -{ - char* argbuf = PyByteArray_AS_STRING(self); - Py_ssize_t arglen = PyByteArray_GET_SIZE(self); - return _Py_strhex(argbuf, arglen); -} - -static PyObject * _common_reduce(PyByteArrayObject *self, int proto) { PyObject *dict; @@ -2090,7 +2034,7 @@ static PySequenceMethods bytearray_as_se 0, /* sq_slice */ (ssizeobjargproc)bytearray_setitem, /* sq_ass_item */ 0, /* sq_ass_slice */ - (objobjproc)bytearray_contains, /* sq_contains */ + (objobjproc)stringlib_contains, /* sq_contains */ (binaryfunc)bytearray_iconcat, /* sq_inplace_concat */ (ssizeargfunc)bytearray_irepeat, /* sq_inplace_repeat */ }; @@ -2118,19 +2062,19 @@ bytearray_methods[] = { {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, BYTEARRAY_CLEAR_METHODDEF BYTEARRAY_COPY_METHODDEF - {"count", (PyCFunction)bytearray_count, METH_VARARGS, + {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, _Py_count__doc__}, BYTEARRAY_DECODE_METHODDEF - {"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, + {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, BYTEARRAY_EXTEND_METHODDEF - {"find", (PyCFunction)bytearray_find, METH_VARARGS, + {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, _Py_find__doc__}, BYTEARRAY_FROMHEX_METHODDEF - {"hex", (PyCFunction)bytearray_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)bytearray_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, BYTEARRAY_INSERT_METHODDEF {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, @@ -2156,15 +2100,16 @@ bytearray_methods[] = { BYTEARRAY_REMOVE_METHODDEF BYTEARRAY_REPLACE_METHODDEF BYTEARRAY_REVERSE_METHODDEF - {"rfind", (PyCFunction)bytearray_rfind, METH_VARARGS, _Py_rfind__doc__}, - {"rindex", (PyCFunction)bytearray_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, + _Py_rfind__doc__}, + {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTEARRAY_RPARTITION_METHODDEF BYTEARRAY_RSPLIT_METHODDEF BYTEARRAY_RSTRIP_METHODDEF BYTEARRAY_SPLIT_METHODDEF BYTEARRAY_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)bytearray_startswith, METH_VARARGS , + {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, _Py_startswith__doc__}, BYTEARRAY_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff -r f4406d746d27 Objects/bytesobject.c --- a/Objects/bytesobject.c Thu May 05 09:26:07 2016 +0300 +++ b/Objects/bytesobject.c Thu May 05 09:49:39 2016 +0300 @@ -1485,12 +1485,6 @@ bytes_repeat(PyBytesObject *a, Py_ssize_ return (PyObject *) op; } -static int -bytes_contains(PyObject *self, PyObject *arg) -{ - return _Py_bytes_contains(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), arg); -} - static PyObject * bytes_item(PyBytesObject *a, Py_ssize_t i) { @@ -1701,7 +1695,7 @@ static PySequenceMethods bytes_as_sequen 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ - (objobjproc)bytes_contains /*sq_contains*/ + (objobjproc)stringlib_contains /*sq_contains*/ }; static PyMappingMethods bytes_as_mapping = { @@ -1873,32 +1867,6 @@ PyObject * return bytes_join((PyBytesObject*)sep, x); } -static PyObject * -bytes_find(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_find(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - -static PyObject * -bytes_index(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_index(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - -static PyObject * -bytes_rfind(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_rfind(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - -static PyObject * -bytes_rindex(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_rindex(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - Py_LOCAL_INLINE(PyObject *) do_xstrip(PyBytesObject *self, int striptype, PyObject *sepobj) @@ -2035,13 +2003,6 @@ bytes_rstrip_impl(PyBytesObject *self, P } -static PyObject * -bytes_count(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_count(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - /*[clinic input] bytes.translate @@ -2220,27 +2181,14 @@ bytes_replace_impl(PyBytesObject *self, Py_ssize_t count) /*[clinic end generated code: output=994fa588b6b9c104 input=b2fbbf0bf04de8e5]*/ { - return stringlib_replace((PyObject *)self, - (const char *)old->buf, old->len, - (const char *)new->buf, new->len, count); + return (PyObject *)stringlib_replace((PyObject *) self, + (const char *)old->buf, old->len, + (const char *)new->buf, new->len, count); } /** End DALKE **/ -static PyObject * -bytes_startswith(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_startswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - -static PyObject * -bytes_endswith(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_endswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - /*[clinic input] bytes.decode @@ -2390,14 +2338,6 @@ Create a string of hexadecimal numbers f Example: b'\\xb9\\x01\\xef'.hex() -> 'b901ef'."); static PyObject * -bytes_hex(PyBytesObject *self) -{ - char* argbuf = PyBytes_AS_STRING(self); - Py_ssize_t arglen = PyBytes_GET_SIZE(self); - return _Py_strhex(argbuf, arglen); -} - -static PyObject * bytes_getnewargs(PyBytesObject *v) { return Py_BuildValue("(y#)", v->ob_sval, Py_SIZE(v)); @@ -2409,20 +2349,19 @@ bytes_methods[] = { {"__getnewargs__", (PyCFunction)bytes_getnewargs, METH_NOARGS}, {"capitalize", (PyCFunction)stringlib_capitalize, METH_NOARGS, _Py_capitalize__doc__}, - {"center", (PyCFunction)stringlib_center, METH_VARARGS, - _Py_center__doc__}, - {"count", (PyCFunction)bytes_count, METH_VARARGS, + {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, + {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, _Py_count__doc__}, BYTES_DECODE_METHODDEF - {"endswith", (PyCFunction)bytes_endswith, METH_VARARGS, + {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, - {"find", (PyCFunction)bytes_find, METH_VARARGS, + {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, _Py_find__doc__}, BYTES_FROMHEX_METHODDEF - {"hex", (PyCFunction)bytes_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)bytes_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, {"isalpha", (PyCFunction)stringlib_isalpha, METH_NOARGS, @@ -2444,15 +2383,16 @@ bytes_methods[] = { BYTES_MAKETRANS_METHODDEF BYTES_PARTITION_METHODDEF BYTES_REPLACE_METHODDEF - {"rfind", (PyCFunction)bytes_rfind, METH_VARARGS, _Py_rfind__doc__}, - {"rindex", (PyCFunction)bytes_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, + _Py_rfind__doc__}, + {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTES_RPARTITION_METHODDEF BYTES_RSPLIT_METHODDEF BYTES_RSTRIP_METHODDEF BYTES_SPLIT_METHODDEF BYTES_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)bytes_startswith, METH_VARARGS, + {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, _Py_startswith__doc__}, BYTES_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff -r f4406d746d27 Objects/stringlib/transmogrify.h --- a/Objects/stringlib/transmogrify.h Thu May 05 09:26:07 2016 +0300 +++ b/Objects/stringlib/transmogrify.h Thu May 05 09:49:39 2016 +0300 @@ -1,5 +1,61 @@ -/* NOTE: this API is -ONLY- for use with single byte character strings. */ -/* Do not use it with Unicode. */ +#if STRINGLIB_IS_UNICODE +# error "transmogrify.h only compatible with byte-wise strings" +#endif + +Py_LOCAL(PyObject *) +stringlib_method_find(PyObject *self, PyObject *args) +{ + return _Py_bytes_find(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_index(PyObject *self, PyObject *args) +{ + return _Py_bytes_index(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_method_rfind(PyObject *self, PyObject *args) +{ + return _Py_bytes_rfind(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_rindex(PyObject *self, PyObject *args) +{ + return _Py_bytes_rindex(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_method_count(PyObject *self, PyObject *args) +{ + return _Py_bytes_count(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(int) +stringlib_contains(PyObject *self, PyObject *arg) +{ + return _Py_bytes_contains(STRINGLIB_STR(self), STRINGLIB_LEN(self), arg); +} + +Py_LOCAL(PyObject *) +stringlib_startswith(PyObject *self, PyObject *args) +{ + return _Py_bytes_startswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_endswith(PyObject *self, PyObject *args) +{ + return _Py_bytes_endswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_hex(PyObject *self) +{ + return _Py_strhex(STRINGLIB_STR(self), STRINGLIB_LEN(self)); +} + /* the more complicated methods. parts of these should be pulled out into the shared code in bytes_methods.c to cut down on duplicate code bloat. */