From 52ab8b0d7af5a9e5bd7a0e2b9d54e3d64392c51a Mon Sep 17 00:00:00 2001 From: MercylinPreethi Date: Wed, 4 Nov 2026 20:38:28 +0530 Subject: [PATCH 1/2] Collapse runs of adjacent LITERAL opcodes into one _sre dispatch --- Modules/_sre/sre_lib.h | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/Modules/_sre/sre_lib.h b/Modules/_sre/sre_lib.h index fbdbaefb399193d..34157821270633d 100644 --- a/Modules/_sre/sre_lib.h +++ b/Modules/_sre/sre_lib.h @@ -735,12 +735,17 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel) TARGET(SRE_OP_LITERAL): /* match literal string */ /* */ - TRACE(("|%p|%p|LITERAL %d\n", pattern, - ptr, *pattern)); - if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0]) - RETURN_FAILURE; - pattern++; - ptr++; + do { + TRACE(("|%p|%p|LITERAL %d\n", pattern, + ptr, *pattern)); + if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0]) + RETURN_FAILURE; + pattern++; + ptr++; + if (*pattern != SRE_OP_LITERAL) + break; + pattern++; + } while (1); DISPATCH; TARGET(SRE_OP_NOT_LITERAL): @@ -816,13 +821,18 @@ SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel) DISPATCH; TARGET(SRE_OP_LITERAL_IGNORE): - TRACE(("|%p|%p|LITERAL_IGNORE %d\n", - pattern, ptr, pattern[0])); - if (ptr >= end || - sre_lower_ascii(*ptr) != *pattern) - RETURN_FAILURE; - pattern++; - ptr++; + do { + TRACE(("|%p|%p|LITERAL_IGNORE %d\n", + pattern, ptr, pattern[0])); + if (ptr >= end || + sre_lower_ascii(*ptr) != *pattern) + RETURN_FAILURE; + pattern++; + ptr++; + if (*pattern != SRE_OP_LITERAL_IGNORE) + break; + pattern++; + } while (1); DISPATCH; TARGET(SRE_OP_LITERAL_UNI_IGNORE): From 4377a9f9f74a75ff4b8e44acfa9f6ca35a6fecd9 Mon Sep 17 00:00:00 2001 From: MercylinPreethi Date: Wed, 4 Nov 2026 23:20:26 +0530 Subject: [PATCH 2/2] gh-161335: Add NEWS entry --- .../Library/2026-11-04-23-20-13.gh-issue-161335.0BLq7m.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2026-11-04-23-20-13.gh-issue-161335.0BLq7m.rst diff --git a/Misc/NEWS.d/next/Library/2026-11-04-23-20-13.gh-issue-161335.0BLq7m.rst b/Misc/NEWS.d/next/Library/2026-11-04-23-20-13.gh-issue-161335.0BLq7m.rst new file mode 100644 index 000000000000000..2851e0a9ad85eee --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-11-04-23-20-13.gh-issue-161335.0BLq7m.rst @@ -0,0 +1,3 @@ +Speed up :mod:`re` matching of patterns that contain runs of literal +characters, by matching consecutive literal characters in a single step of +the regular expression engine.