model: add another level of cache for MClassType::collect_mclasses
authorJean Privat <jean@pryen.org>
Sat, 29 Nov 2014 02:31:10 +0000 (21:31 -0500)
committerJean Privat <jean@pryen.org>
Sat, 29 Nov 2014 02:31:10 +0000 (21:31 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

src/model/model.nit

index fa9c4d4..a4de6a6 100644 (file)
@@ -1030,14 +1030,21 @@ class MClassType
 
        redef fun collect_mclasses(mmodule)
        do
+               if collect_mclasses_last_module == mmodule then return collect_mclasses_last_module_cache
                assert not self.need_anchor
                var cache = self.collect_mclasses_cache
                if not cache.has_key(mmodule) then
                        self.collect_things(mmodule)
                end
-               return cache[mmodule]
+               var res = cache[mmodule]
+               collect_mclasses_last_module = mmodule
+               collect_mclasses_last_module_cache = res
+               return res
        end
 
+       private var collect_mclasses_last_module: nullable MModule = null
+       private var collect_mclasses_last_module_cache: Set[MClass] is noinit
+
        redef fun collect_mtypes(mmodule)
        do
                assert not self.need_anchor