* dynwind.c (scm_swap_bindings): Ditto.
[bpt/guile.git] / libguile / gc.h
index 49cabac..e4a3e50 100644 (file)
@@ -3,17 +3,17 @@
 #ifndef GCH
 #define GCH
 /* Copyright (C) 1995, 96, 98, 99, 2000 Free Software Foundation, Inc.
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
  * any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this software; see the file COPYING.  If not, write to
  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
                        : SCM_GCMARKP(x))
 #define SCM_NMARKEDP(x) (!SCM_MARKEDP(x))
 
-extern struct scm_heap_seg_data *scm_heap_table;
+extern struct scm_heap_seg_data_t *scm_heap_table;
 extern int scm_n_heap_segs;
 extern int scm_take_stdin;
 extern int scm_block_gc;
 extern int scm_gc_heap_lock;
 \f
 
-typedef struct scm_freelist_t {
-  SCM cells;
-#ifdef GUILE_NEW_GC_SCHEME
-  int n_objects;
-  /* a list of freelists, each of size gc_trigger,
-     except the last one which may be shorter */
-  SCM clusters;
-  SCM *clustertail;
-  /* GC trigger */
-  int triggeredp;
-  /* minimum number of objects allocated before GC is triggered and
-   * cluster size.  These two concepts should be divorced when we go
-   * to POSIX threads.
-   */
-  int gc_trigger;
-#endif
-  /* number of cells per object on this list */
-  int span;
-  /* number of collected cells during last GC */
-  int collected;
-  /* total number of cells in heap segments
-   * belonging to this list.
-   */
-  int heap_size;
-} scm_freelist_t;
-
-extern unsigned long scm_heap_size;
+extern scm_sizet scm_max_segment_size;
 extern SCM_CELLPTR scm_heap_org;
 #ifdef GUILE_NEW_GC_SCHEME
 extern SCM scm_freelist;
-extern scm_freelist_t scm_master_freelist;
+extern struct scm_freelist_t scm_master_freelist;
 extern SCM scm_freelist2;
-extern scm_freelist_t scm_master_freelist2;
+extern struct scm_freelist_t scm_master_freelist2;
 #else
-extern scm_freelist_t scm_freelist;
-extern scm_freelist_t scm_freelist2;
+extern struct scm_freelist_t scm_freelist;
+extern struct scm_freelist_t scm_freelist2;
 #endif
 extern unsigned long scm_gc_cells_collected;
+#ifdef GUILE_NEW_GC_SCHEME
+extern unsigned long scm_gc_yield;
+#endif
 extern unsigned long scm_gc_malloc_collected;
 extern unsigned long scm_gc_ports_collected;
 extern unsigned long scm_cells_allocated;
 extern long scm_mallocated;
 extern unsigned long scm_mtrigger;
 
-#ifdef GUILE_DEBUG_FREELIST
+#if defined (GUILE_DEBUG) || defined (GUILE_DEBUG_FREELIST)
 extern SCM scm_map_free_list (void);
+extern SCM scm_free_list_length (void);
+#endif
+#ifdef GUILE_DEBUG_FREELIST
 extern SCM scm_debug_newcell (void);
 extern SCM scm_debug_newcell2 (void);
 extern SCM scm_gc_set_debug_check_freelist_x (SCM flag);
@@ -126,11 +106,14 @@ extern SCM scm_gc_stats (void);
 extern void scm_gc_start (const char *what);
 extern void scm_gc_end (void);
 extern SCM scm_gc (void);
-extern void scm_gc_for_alloc (scm_freelist_t *freelistp);
+extern void scm_gc_for_alloc (struct scm_freelist_t *freelist);
 #ifdef GUILE_NEW_GC_SCHEME
-extern SCM scm_gc_for_newcell (scm_freelist_t *master, SCM *freelist);
+extern SCM scm_gc_for_newcell (struct scm_freelist_t *master, SCM *freelist);
+#if 0
+extern void scm_alloc_cluster (struct scm_freelist_t *master);
+#endif
 #else
-extern SCM scm_gc_for_newcell (scm_freelist_t *freelistp);
+extern SCM scm_gc_for_newcell (struct scm_freelist_t *freelist);
 #endif
 extern void scm_igc (const char *what);
 extern void scm_gc_mark (SCM p);
@@ -151,10 +134,17 @@ extern SCM scm_protect_object (SCM obj);
 extern SCM scm_unprotect_object (SCM obj);
 #ifdef GUILE_NEW_GC_SCHEME
 extern int scm_init_storage (scm_sizet init_heap_size, int trig,
-                             scm_sizet init_heap2_size, int trig2);
+                             scm_sizet init_heap2_size, int trig2,
+                            scm_sizet max_segment_size);
 #else
 extern int scm_init_storage (scm_sizet init_heap_size,
                              scm_sizet init_heap2_size);
 #endif
 extern void scm_init_gc (void);
 #endif  /* GCH */
+
+/*
+  Local Variables:
+  c-file-style: "gnu"
+  End:
+*/