* Removed an application of SCM_C[AD]R to non pairs.
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Fri, 20 Apr 2001 07:55:19 +0000 (07:55 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Fri, 20 Apr 2001 07:55:19 +0000 (07:55 +0000)
libguile/ChangeLog
libguile/struct.c

index 9969207..4540aed 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-20  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * struct.c (scm_free_structs):  Only pairs may be accessed with
+       SCM_C[AD]R.
+
 2001-04-19  Mikael Djurfeldt  <mdj@linnaeus.mit.edu>
 
        * unif.h (SCM_ARRAY_CONTIGUOUS): Reintroduced as deprecated.
index d972ba5..3262ef9 100644 (file)
@@ -377,7 +377,7 @@ scm_free_structs (void *dummy1, void *dummy2, void *dummy3)
     {
       /* Mark vtables in GC chain.  GC mark set means delay freeing. */
       SCM chain = newchain;
-      while (SCM_NNULLP (chain))
+      while (!SCM_NULLP (chain))
        {
          SCM vtable = SCM_STRUCT_VTABLE (chain);
          if (SCM_STRUCT_GC_CHAIN (vtable) != 0 && vtable != chain)
@@ -387,7 +387,7 @@ scm_free_structs (void *dummy1, void *dummy2, void *dummy3)
       /* Free unmarked structs.  */
       chain = newchain;
       newchain = SCM_EOL;
-      while (SCM_NNULLP (chain))
+      while (!SCM_NULLP (chain))
        {
          SCM obj = chain;
          chain = SCM_STRUCT_GC_CHAIN (chain);
@@ -402,7 +402,7 @@ scm_free_structs (void *dummy1, void *dummy2, void *dummy3)
              scm_bits_t word0 = SCM_CELL_WORD_0 (obj) - scm_tc3_cons_gloc;
              /* access as struct */
              scm_bits_t * vtable_data = (scm_bits_t *) word0;
-             scm_bits_t * data = (scm_bits_t *) SCM_UNPACK (SCM_CDR (obj));
+             scm_bits_t * data = SCM_STRUCT_DATA (obj);
              scm_struct_free_t free_struct_data
                = ((scm_struct_free_t) vtable_data[scm_struct_i_free]);
              SCM_SET_CELL_TYPE (obj, scm_tc_free_cell);
@@ -410,7 +410,7 @@ scm_free_structs (void *dummy1, void *dummy2, void *dummy3)
            }
        }
     }
-  while (SCM_NNULLP (newchain));
+  while (!SCM_NULLP (newchain));
   return 0;
 }