From daf1b748d6417c015a2cf0092120a3d608c55886 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 15 Dec 2017 20:20:15 +0200 Subject: [PATCH] bpo-32338: OrderedDict import is no longer needed in re. --- Lib/re.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/Lib/re.py b/Lib/re.py index a8b6753d390964..94d486579e08b8 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -128,12 +128,6 @@ 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 @@ def escape(pattern): # -------------------------------------------------------------------- # 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