[Python-checkins] gh-97982: Remove asciilib_count() (#98164)
vstinner
webhook-mailer at python.org
Tue Oct 11 12:00:20 EDT 2022
https://github.com/python/cpython/commit/df3a6d9beb8a7a3fe87a6d4126384fd3e0213853
commit: df3a6d9beb8a7a3fe87a6d4126384fd3e0213853
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2022-10-11T17:59:58+02:00
summary:
gh-97982: Remove asciilib_count() (#98164)
asciilib_count() is the same than ucs1lib_count(): the code is not
specialized for ASCII strings, so it's not worth it to have a
separated function. Remove asciilib_count() function.
files:
M Objects/stringlib/count.h
M Objects/unicodeobject.c
diff --git a/Objects/stringlib/count.h b/Objects/stringlib/count.h
index f48500bf561f..e20edcd104b1 100644
--- a/Objects/stringlib/count.h
+++ b/Objects/stringlib/count.h
@@ -4,6 +4,11 @@
#error must include "stringlib/fastsearch.h" before including this module
#endif
+// gh-97982: Implementing asciilib_count() is not worth it, FASTSEARCH() does
+// not specialize the code for ASCII strings. Use ucs1lib_count() for ASCII and
+// UCS1 strings: it's the same than asciilib_count().
+#if !STRINGLIB_IS_UNICODE || STRINGLIB_MAX_CHAR > 0x7Fu
+
Py_LOCAL_INLINE(Py_ssize_t)
STRINGLIB(count)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
@@ -24,4 +29,4 @@ STRINGLIB(count)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
return count;
}
-
+#endif
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index bd169ed71421..51e660afba08 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -9000,16 +9000,10 @@ PyUnicode_Count(PyObject *str,
switch (kind1) {
case PyUnicode_1BYTE_KIND:
- if (PyUnicode_IS_ASCII(str) && PyUnicode_IS_ASCII(substr))
- result = asciilib_count(
- ((const Py_UCS1*)buf1) + start, end - start,
- buf2, len2, PY_SSIZE_T_MAX
- );
- else
- result = ucs1lib_count(
- ((const Py_UCS1*)buf1) + start, end - start,
- buf2, len2, PY_SSIZE_T_MAX
- );
+ result = ucs1lib_count(
+ ((const Py_UCS1*)buf1) + start, end - start,
+ buf2, len2, PY_SSIZE_T_MAX
+ );
break;
case PyUnicode_2BYTE_KIND:
result = ucs2lib_count(
@@ -9904,10 +9898,7 @@ anylib_count(int kind, PyObject *sstr, const void* sbuf, Py_ssize_t slen,
{
switch (kind) {
case PyUnicode_1BYTE_KIND:
- if (PyUnicode_IS_ASCII(sstr) && PyUnicode_IS_ASCII(str1))
- return asciilib_count(sbuf, slen, buf1, len1, maxcount);
- else
- return ucs1lib_count(sbuf, slen, buf1, len1, maxcount);
+ return ucs1lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_2BYTE_KIND:
return ucs2lib_count(sbuf, slen, buf1, len1, maxcount);
case PyUnicode_4BYTE_KIND:
More information about the Python-checkins
mailing list