Browse Source

Issue #23573: Restored optimization of bytes.rfind() and bytearray.rfind()

for single-byte argument on Linux.
pull/9921/head
Serhiy Storchaka 11 years ago
parent
commit
c8fe04484e
  1. 3
      Misc/NEWS
  2. 10
      Objects/bytearrayobject.c
  3. 10
      Objects/bytesobject.c

3
Misc/NEWS

@ -32,6 +32,9 @@ Release date: 2015-07-26
Core and Builtins
-----------------
- Issue #23573: Restored optimization of bytes.rfind() and bytearray.rfind()
for single-byte argument on Linux.
- Issue #24569: Make PEP 448 dictionary evaluation more consistent.
- Issue #24583: Fix crash when set is mutated while being updated.

10
Objects/bytearrayobject.c

@ -1171,12 +1171,16 @@ bytearray_find_internal(PyByteArrayObject *self, PyObject *args, int dir)
ADJUST_INDICES(start, end, len);
if (end - start < sub_len)
res = -1;
/* Issue #23573: FIXME, windows has no memrchr() */
else if (sub_len == 1 && dir > 0) {
else if (sub_len == 1
#ifndef HAVE_MEMRCHR
&& dir > 0
#endif
) {
unsigned char needle = *sub;
int mode = (dir > 0) ? FAST_SEARCH : FAST_RSEARCH;
res = stringlib_fastsearch_memchr_1char(
PyByteArray_AS_STRING(self) + start, end - start,
needle, needle, FAST_SEARCH);
needle, needle, mode);
if (res >= 0)
res += start;
}

10
Objects/bytesobject.c

@ -1815,12 +1815,16 @@ bytes_find_internal(PyBytesObject *self, PyObject *args, int dir)
ADJUST_INDICES(start, end, len);
if (end - start < sub_len)
res = -1;
/* Issue #23573: FIXME, windows has no memrchr() */
else if (sub_len == 1 && dir > 0) {
else if (sub_len == 1
#ifndef HAVE_MEMRCHR
&& dir > 0
#endif
) {
unsigned char needle = *sub;
int mode = (dir > 0) ? FAST_SEARCH : FAST_RSEARCH;
res = stringlib_fastsearch_memchr_1char(
PyBytes_AS_STRING(self) + start, end - start,
needle, needle, FAST_SEARCH);
needle, needle, mode);
if (res >= 0)
res += start;
}

Loading…
Cancel
Save