]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #28193: Use lru_cache in the re module.
authorRaymond Hettinger <python@rcn.com>
Mon, 19 Sep 2016 03:17:21 +0000 (20:17 -0700)
committerRaymond Hettinger <python@rcn.com>
Mon, 19 Sep 2016 03:17:21 +0000 (20:17 -0700)
Lib/re.py

index 0850f0db8d81af7359f56ef1fd4c7512738b0fde..d321cff92c9cb5d2688cab51896a21d19adbb524 100644 (file)
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -122,6 +122,7 @@ This module also defines an exception 'error'.
 import enum
 import sre_compile
 import sre_parse
+import functools
 try:
     import _locale
 except ImportError:
@@ -234,7 +235,7 @@ def compile(pattern, flags=0):
 def purge():
     "Clear the regular expression caches"
     _cache.clear()
-    _cache_repl.clear()
+    _compile_repl.cache_clear()
 
 def template(pattern, flags=0):
     "Compile a template pattern, returning a pattern object"
@@ -278,7 +279,6 @@ def escape(pattern):
 # internals
 
 _cache = {}
-_cache_repl = {}
 
 _pattern_type = type(sre_compile.compile("", 0))
 
@@ -311,17 +311,10 @@ def _compile(pattern, flags):
         _cache[type(pattern), pattern, flags] = p, loc
     return p
 
+@functools.lru_cache(_MAXCACHE)
 def _compile_repl(repl, pattern):
     # internal: compile replacement pattern
-    try:
-        return _cache_repl[repl, pattern]
-    except KeyError:
-        pass
-    p = sre_parse.parse_template(repl, pattern)
-    if len(_cache_repl) >= _MAXCACHE:
-        _cache_repl.clear()
-    _cache_repl[repl, pattern] = p
-    return p
+    return sre_parse.parse_template(repl, pattern)
 
 def _expand(pattern, match, template):
     # internal: match.expand implementation hook