From 52ab8b0d7af5a9e5bd7a0e2b9d54e3d64392c51a Mon Sep 17 00:00:00 2001 From: MercylinPreethi Date: Wed, 4 Nov 2026 20:38:28 +0530 Subject: [PATCH] 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 fbdbaefb399193..34157821270633 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):