]> granicus.if.org Git - python/commitdiff
bpo-32338: OrderedDict import is no longer needed in re. (GH-4891)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 11 Mar 2018 07:01:58 +0000 (23:01 -0800)
committerGitHub <noreply@github.com>
Sun, 11 Mar 2018 07:01:58 +0000 (23:01 -0800)
(cherry picked from commit b931bd0a2fe7e9293339019352baf3317166b769)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/re.py

index a8b6753d3909643e34ea1e50f4fe6791bd7c04fb..94d486579e08b822592ac675d9512d31e6b5a20e 100644 (file)
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -128,12 +128,6 @@ try:
 except ImportError:
     _locale = None
 
-# try _collections first to reduce startup cost
-try:
-    from _collections import OrderedDict
-except ImportError:
-    from collections import OrderedDict
-
 
 # public symbols
 __all__ = [
@@ -271,7 +265,7 @@ Match = type(sre_compile.compile('', 0).match(''))
 # --------------------------------------------------------------------
 # internals
 
-_cache = OrderedDict()
+_cache = {}  # ordered!
 
 _MAXCACHE = 512
 def _compile(pattern, flags):
@@ -292,9 +286,10 @@ def _compile(pattern, flags):
     p = sre_compile.compile(pattern, flags)
     if not (flags & DEBUG):
         if len(_cache) >= _MAXCACHE:
+            # Drop the oldest item
             try:
-                _cache.popitem(last=False)
-            except KeyError:
+                del _cache[next(iter(_cache))]
+            except (StopIteration, RuntimeError, KeyError):
                 pass
         _cache[type(pattern), pattern, flags] = p
     return p