* Simplified handling of static glocal SCM variable.
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Thu, 13 Sep 2001 21:58:15 +0000 (21:58 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Thu, 13 Sep 2001 21:58:15 +0000 (21:58 +0000)
libguile/ChangeLog
libguile/guardians.c

index 7e98f15..59dbe7e 100644 (file)
@@ -1,3 +1,10 @@
+2001-09-13  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * guardians.c (mark_dependencies_in_tconc,
+       whine_about_self_centered_zombies, scm_init_guardians):  Register
+       the static global variable `self_centered_zombies' via
+       scm_gc_register_root, to make some cdr-ing unnecessary.
+
 2001-09-13  Dirk Herrmann  <D.Herrmann@tu-bs.de>
 
        * backtrace.c (display_backtrace_file,
index c54395a..edc0793 100644 (file)
@@ -464,8 +464,8 @@ mark_dependencies_in_tconc (tconc_t *tc)
                  complain about it later. */
               *prev_ptr = next_pair;
               SCM_SETGCMARK (pair);
-              SCM_SETCDR (pair, SCM_CDR (self_centered_zombies));
-              SCM_SETCDR (self_centered_zombies, pair);
+              SCM_SETCDR (pair, self_centered_zombies);
+              self_centered_zombies = pair;
             }
           else
             {
@@ -595,21 +595,21 @@ whine_about_self_centered_zombies (void *dummy1 SCM_UNUSED,
                                   void *dummy2 SCM_UNUSED,
                                   void *dummy3 SCM_UNUSED)
 {
-  if (! SCM_NULLP (SCM_CDR (self_centered_zombies)))
+  if (!SCM_NULLP (self_centered_zombies))
     {
       SCM pair;
       
       scm_puts ("** WARNING: the following guarded objects were unguarded due to cycles:",
                 scm_cur_errp);
       scm_newline (scm_cur_errp);
-      for (pair = SCM_CDR (self_centered_zombies);
-           ! SCM_NULLP (pair); pair = SCM_CDR (pair))
+      for (pair = self_centered_zombies;
+           !SCM_NULLP (pair); pair = SCM_CDR (pair))
         {
           scm_display (SCM_CAR (pair), scm_cur_errp);
           scm_newline (scm_cur_errp);
         }
 
-      SCM_SETCDR (self_centered_zombies, SCM_EOL);
+      self_centered_zombies = SCM_EOL;
     }
   
   return 0;
@@ -627,8 +627,7 @@ scm_init_guardians ()
   scm_c_hook_add (&scm_before_mark_c_hook, guardian_gc_init, 0, 0);
   scm_c_hook_add (&scm_before_sweep_c_hook, guardian_zombify, 0, 0);
 
-  self_centered_zombies =
-    scm_permanent_object (scm_cons (SCM_UNDEFINED, SCM_EOL));
+  scm_gc_register_root (&self_centered_zombies);
   scm_c_hook_add (&scm_after_gc_c_hook,
                   whine_about_self_centered_zombies, 0, 0);