Skip to content
Prev Previous commit
Next Next commit
Revert "Use anylib_count in unicode_count_impl"
This reverts commit 2dabc73.
  • Loading branch information
sobolevn committed Oct 12, 2022
commit 74f8c1c564bd3d3ac28dd05faa6053980b8e4f95
56 changes: 37 additions & 19 deletions Objects/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -8964,21 +8964,6 @@ _PyUnicode_InsertThousandsGrouping(
return count;
}

static Py_ssize_t
anylib_count(int kind, PyObject *sstr, const void* sbuf, Py_ssize_t slen,
PyObject *str1, const void *buf1, Py_ssize_t len1, Py_ssize_t maxcount)
{
switch (kind) {
case PyUnicode_1BYTE_KIND:
return ucs1lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_2BYTE_KIND:
return ucs2lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_4BYTE_KIND:
return ucs4lib_count(sbuf, slen, buf1, len1, maxcount);
}
Py_UNREACHABLE();
}

static Py_ssize_t
unicode_count_impl(PyObject *str,
PyObject *substr,
Expand Down Expand Up @@ -9012,10 +8997,28 @@ unicode_count_impl(PyObject *str,
goto onError;
}

result = anylib_count(kind1,
str, buf1 + start, end - start,
substr, buf2, len2,
PY_SSIZE_T_MAX);
switch (kind1) {
case PyUnicode_1BYTE_KIND:
result = ucs1lib_count(
((const Py_UCS1*)buf1) + start, end - start,
buf2, len2, PY_SSIZE_T_MAX
);
break;
case PyUnicode_2BYTE_KIND:
result = ucs2lib_count(
((const Py_UCS2*)buf1) + start, end - start,
buf2, len2, PY_SSIZE_T_MAX
);
break;
case PyUnicode_4BYTE_KIND:
result = ucs4lib_count(
((const Py_UCS4*)buf1) + start, end - start,
buf2, len2, PY_SSIZE_T_MAX
);
break;
default:
Py_UNREACHABLE();
}

assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substr)));
if (kind2 != kind1)
Expand Down Expand Up @@ -9900,6 +9903,21 @@ anylib_find(int kind, PyObject *str1, const void *buf1, Py_ssize_t len1,
Py_UNREACHABLE();
}

static Py_ssize_t
anylib_count(int kind, PyObject *sstr, const void* sbuf, Py_ssize_t slen,
PyObject *str1, const void *buf1, Py_ssize_t len1, Py_ssize_t maxcount)
{
switch (kind) {
case PyUnicode_1BYTE_KIND:
return ucs1lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_2BYTE_KIND:
return ucs2lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_4BYTE_KIND:
return ucs4lib_count(sbuf, slen, buf1, len1, maxcount);
}
Py_UNREACHABLE();
}

static void
replace_1char_inplace(PyObject *u, Py_ssize_t pos,
Py_UCS4 u1, Py_UCS4 u2, Py_ssize_t maxcount)
Expand Down