@@ -36,6 +36,7 @@ def __init__(self, includes=None, defines=None, cache_dir=None):
3636 self .delete_cache = False
3737 self .cache_dir = cache_dir
3838 self .cache_files = []
39+ self .mem_cache = {}
3940 # create the cache dir
4041 if cache_dir :
4142 try :
@@ -142,8 +143,7 @@ def Parse(self, header, interface, tail=None):
142143 declarations = self .GetCache (header , interface , tail )
143144 if declarations is None :
144145 declarations = self .ParseWithGCCXML (header , tail )
145- if self .cache_dir is not None :
146- self .CreateCache (header , interface , tail , declarations )
146+ self .CreateCache (header , interface , tail , declarations )
147147 return declarations , header
148148
149149
@@ -158,13 +158,19 @@ def CacheFileName(self, interface):
158158 def GetCache (self , header , interface , tail ):
159159 if self .cache_dir is None :
160160 return None
161+
162+ key = (header , interface , tail )
163+ # try memory cache first
164+ if key in self .mem_cache :
165+ return self .mem_cache [key ]
166+
167+ # get the cache from the disk
161168 header = self .FindHeader (header )
162169 cache_file = self .CacheFileName (interface )
163170 if os .path .isfile (cache_file ):
164171 f = file (cache_file , 'rb' )
165172 try :
166173 cache = load (f )
167- key = (header , interface , tail )
168174 if cache .has_key (key ):
169175 self .cache_files .append (cache_file )
170176 return cache [key ]
@@ -177,6 +183,15 @@ def GetCache(self, header, interface, tail):
177183
178184
179185 def CreateCache (self , header , interface , tail , declarations ):
186+ key = (header , interface , tail )
187+
188+ # our memory cache only holds one item
189+ self .mem_cache .clear ()
190+ self .mem_cache [key ] = declarations
191+
192+ # save the cache in the disk
193+ if self .cache_dir is None :
194+ return
180195 header = self .FindHeader (header )
181196 cache_file = self .CacheFileName (interface )
182197 if os .path .isfile (cache_file ):
@@ -187,7 +202,6 @@ def CreateCache(self, header, interface, tail, declarations):
187202 f .close ()
188203 else :
189204 cache = {}
190- key = (header , interface , tail )
191205 cache [key ] = declarations
192206 self .cache_files .append (cache_file )
193207 f = file (cache_file , 'wb' )
0 commit comments