Author: Antonio Cuni <[email protected]>
Branch:
Changeset: r98242:317104f1b067
Date: 2019-12-06 16:32 +0100
http://bitbucket.org/pypy/pypy/changeset/317104f1b067/
Log: Use a cache to avoid parsing the same cdecl again and again, which
is done e.g. for all the various cts.cast(...) around. On my
machine, with this patch the time needed to run a single cpyext test
goes from ~54s to ~29s
diff --git a/pypy/module/cpyext/cparser.py b/pypy/module/cpyext/cparser.py
--- a/pypy/module/cpyext/cparser.py
+++ b/pypy/module/cpyext/cparser.py
@@ -705,6 +705,7 @@
self.struct_typedefs = {}
self._handled = set()
self._frozen = False
+ self._cdecl_type_cache = {} # {cdecl: TYPE} cache
if includes is not None:
for header in includes:
self.include(header)
@@ -840,6 +841,14 @@
raise NotImplementedError
def gettype(self, cdecl):
+ try:
+ return self._cdecl_type_cache[cdecl]
+ except KeyError:
+ result = self._real_gettype(cdecl)
+ self._cdecl_type_cache[cdecl] = result
+ return result
+
+ def _real_gettype(self, cdecl):
obj = self.ctx.parse_type(cdecl)
result = self.convert_type(obj)
if isinstance(result, DelayedStruct):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit