From: Tobias Grosser Date: Sat, 19 Jan 2013 11:03:42 +0000 (+0000) Subject: [cindex.py] Replace CachedProperty with our own implementation X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eca36d1ae23d0e4c46a3c2c2b91a19f4a2f8055d;p=clang [cindex.py] Replace CachedProperty with our own implementation This is a very performance critical point for auto completion. The manual implementation gives a large speedup. As it does not complicate the code a lot, I figured it is worth the change. If anybody understands why the CachedProperty is here so much slower, I am very interested in working on an improvement of CachedProperty. Formatting time changes from 0.72 to 0.57 seconds. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172900 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 474e10b434..5e261f8657 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -1659,6 +1659,7 @@ class CompletionChunk: def __init__(self, completionString, key): self.cs = completionString self.key = key + self.__kindNumberCache = -1 def __repr__(self): return "{'" + self.spelling + "', " + str(self.kind) + "}" @@ -1667,10 +1668,15 @@ class CompletionChunk: def spelling(self): return conf.lib.clang_getCompletionChunkText(self.cs, self.key).spelling - @CachedProperty + # We do not use @CachedProperty here, as the manual implementation is + # apparently still significantly faster. Please profile carefully if you + # would like to add CachedProperty back. + @property def __kindNumber(self): - res = conf.lib.clang_getCompletionChunkKind(self.cs, self.key) - return res + if self.__kindNumberCache == -1: + self.__kindNumberCache = \ + conf.lib.clang_getCompletionChunkKind(self.cs, self.key) + return self.__kindNumberCache @CachedProperty def kind(self):