From 9c97e5c40e48c463cebf3c72f3893fcda5eac616 Mon Sep 17 00:00:00 2001
From: Konstantin Ritt <ritt.ks@gmail.com>
Date: Fri, 20 Mar 2015 20:33:11 +0400
Subject: [PATCH] [locale database utility] Optimize by caching the locale
 lookup chain

Change-Id: I1b95b3365337753ca0ab782091fa61870b77b051
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
---
 util/local_database/xpathlite.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/util/local_database/xpathlite.py b/util/local_database/xpathlite.py
index 112dc14ce84..ecf1dad4445 100644
--- a/util/local_database/xpathlite.py
+++ b/util/local_database/xpathlite.py
@@ -191,8 +191,12 @@ def findAlias(file):
         return False
     return alias_elt.attributes['source'].nodeValue
 
+lookup_chain_cache = {}
 parent_locales = {}
 def _fixedLookupChain(dirname, name):
+    if lookup_chain_cache.has_key(name):
+        return lookup_chain_cache[name]
+
     # see http://www.unicode.org/reports/tr35/#Parent_Locales
     if not parent_locales:
         for ns in findTagsInFile(dirname + "/../supplemental/supplementalData.xml", "parentLocales"):
@@ -218,7 +222,10 @@ def _fixedLookupChain(dirname, name):
                         items = items[:i+1]
                     else:
                         items = items[:i+1] + _fixedLookupChain(dirname, parent_locale)
+                    lookup_chain_cache[name] = items
                     return items
+
+    lookup_chain_cache[name] = items
     return items
 
 def _findEntry(base, path, draft=None, attribute=None):
-- 
GitLab