Avoid adding top of environment to cache.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 19 Oct 2016 22:21:06 +0000 (00:21 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 19 Oct 2016 22:21:06 +0000 (00:21 +0200)
* mes.c (assq_ref_cache): Only consider caching symbols deeper than
  4*CACHE_SIZE depth.  50% speedup.

mes.c

diff --git a/mes.c b/mes.c
index 95787bcd31eed15bb8022e00948ec75d6a43246f..2d32c6c32f03b6b9f11c547ebdcc1f1ec1cd4344 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -370,9 +370,10 @@ assq_ref_cache (scm *x, scm *a)
   x->value++;
   scm *c = cache_lookup (x);
   if (c != &scm_undefined) return c;
-  while (a != &scm_nil && x != a->car->car) a = a->cdr;
+  int i = 0;
+  while (a != &scm_nil && x != a->car->car) {i++;a = a->cdr;}
   if (a == &scm_nil) return &scm_undefined;
-  cache_save (a->car);
+  if (i>4*CACHE_SIZE) cache_save (a->car);
   return a->car->cdr;
 }
 #endif // ENV_CACHE