* The name property of hooks is deprecated.
[bpt/guile.git] / libguile / gc.c
index cf463fa..4100338 100644 (file)
@@ -282,12 +282,6 @@ typedef struct scm_heap_seg_data_t
 
   /* number of cells per object in this segment */
   int span;
-
-  /* If SEG_DATA->valid is non-zero, the conservative marking
-     functions will apply SEG_DATA->valid to the purported pointer and
-     SEG_DATA, and mark the object iff the function returns non-zero.
-     At the moment, I don't think anyone uses this.  */
-  int (*valid) ();
 } scm_heap_seg_data_t;
 
 
@@ -375,7 +369,7 @@ free_list_length (char *title, int i, SCM freelist)
   SCM ls;
   int n = 0;
   for (ls = freelist; SCM_NNULLP (ls); ls = SCM_CDR (ls))
-    if (SCM_UNPACK_CAR (ls) == scm_tc_free_cell)
+    if (SCM_CELL_TYPE (ls) == scm_tc_free_cell)
       ++n;
     else
       {
@@ -860,22 +854,11 @@ scm_igc (const char *what)
                          / sizeof (SCM_STACKITEM)));
 
   {
-    /* stack_len is long rather than scm_sizet in order to guarantee that
-       &stack_len is long aligned */
+    scm_sizet stack_len = scm_stack_size (scm_stack_base);
 #ifdef SCM_STACK_GROWS_UP
-#ifdef nosve
-    long stack_len = (SCM_STACKITEM *) (&stack_len) - scm_stack_base;
-#else
-    long stack_len = scm_stack_size (scm_stack_base);
-#endif
-    scm_mark_locations (scm_stack_base, (scm_sizet) stack_len);
+    scm_mark_locations (scm_stack_base, stack_len);
 #else
-#ifdef nosve
-    long stack_len = scm_stack_base - (SCM_STACKITEM *) (&stack_len);
-#else
-    long stack_len = scm_stack_size (scm_stack_base);
-#endif
-    scm_mark_locations ((scm_stack_base - stack_len), (scm_sizet) stack_len);
+    scm_mark_locations (scm_stack_base - stack_len, stack_len);
 #endif
   }
 
@@ -1277,12 +1260,9 @@ scm_mark_locations (SCM_STACKITEM x[], scm_sizet n)
                          break;
                      }
                  }
-               if (!scm_heap_table[seg_id].valid
-                   || scm_heap_table[seg_id].valid (ptr,
-                                                    &scm_heap_table[seg_id]))
-                  if (scm_heap_table[seg_id].span == 1
-                     || SCM_DOUBLE_CELLP (* (SCM *) &x[m]))
-                    scm_gc_mark (* (SCM *) &x[m]);
+               if (scm_heap_table[seg_id].span == 1
+                   || SCM_DOUBLE_CELLP (* (SCM *) &x[m]))
+                 scm_gc_mark (* (SCM *) &x[m]);
                break;
              }
 
@@ -1314,7 +1294,6 @@ scm_cellp (SCM value)
 
     if (SCM_PTR_LE (scm_heap_table[i].bounds[0], ptr) 
        && SCM_PTR_GT (scm_heap_table[i].bounds[1], ptr)
-       && (!scm_heap_table[i].valid || scm_heap_table[i].valid (ptr, &scm_heap_table[i]))
        && (scm_heap_table[i].span == 1 || SCM_DOUBLE_CELLP (value))) {
       return 1;
     } else {
@@ -1898,7 +1877,6 @@ init_heap_seg (SCM_CELLPTR seg_org, scm_sizet size, scm_freelist_t *freelist)
 
   ++scm_n_heap_segs;
 
-  scm_heap_table[new_seg_index].valid = 0;
   scm_heap_table[new_seg_index].span = span;
   scm_heap_table[new_seg_index].freelist = freelist;
   scm_heap_table[new_seg_index].bounds[0] = ptr;
@@ -2362,6 +2340,7 @@ void
 scm_init_gc ()
 {
   scm_after_gc_hook = scm_create_hook ("after-gc-hook", 0);
+  scm_protect_object (scm_after_gc_hook);
 #include "libguile/gc.x"
 }