From c1c47c166b1012d34f2c6e111ee9ccb5c4d12de7 Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Thu, 5 Oct 2017 17:19:26 +0900 Subject: bpo-31671: re: Convert RegexFlag to int before compile (GH-3862) sre_compile does bit test (e.g. `flags & SRE_FLAG_IGNORECASE`) in loop. `IntFlag.__and__` and `IntFlag.__new__` made it slower. So this commit convert it to normal int before passing flags to `sre_compile()`. --- Lib/re.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Lib/re.py') diff --git a/Lib/re.py b/Lib/re.py index d772979f91..abbf8d6e29 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -275,6 +275,8 @@ _cache = OrderedDict() _MAXCACHE = 512 def _compile(pattern, flags): # internal: compile pattern + if isinstance(flags, RegexFlag): + flags = flags.value try: return _cache[type(pattern), pattern, flags] except KeyError: @@ -331,6 +333,8 @@ copyreg.pickle(Pattern, _pickle, _compile) class Scanner: def __init__(self, lexicon, flags=0): from sre_constants import BRANCH, SUBPATTERN + if isinstance(flags, RegexFlag): + flags = flags.value self.lexicon = lexicon # combine phrases into a compound pattern p = [] -- cgit v1.2.1