]> granicus.if.org Git - clang/commitdiff
[cindex.py] Replace CachedProperty with our own implementation
authorTobias Grosser <grosser@fim.uni-passau.de>
Sat, 19 Jan 2013 11:03:42 +0000 (11:03 +0000)
committerTobias Grosser <grosser@fim.uni-passau.de>
Sat, 19 Jan 2013 11:03:42 +0000 (11:03 +0000)
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

bindings/python/clang/cindex.py

index 474e10b43462a7a6f3a24639caa3d54a71a70c43..5e261f865762b953c3d75963aa27431a642b980f 100644 (file)
@@ -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):