Branch: Tag:

2000-07-18

2000-07-18 05:48:20 by Martin Stjernholm <mast@lysator.liu.se>

Fixed tricky gc problems by implementing a gc-tailored call stack that can
be rotated. That also made the whole thing quite a bit less hairy.

Rev: src/array.c:1.78
Rev: src/array.h:1.21
Rev: src/gc.c:1.107
Rev: src/gc.h:1.55
Rev: src/mapping.c:1.93
Rev: src/mapping.h:1.27
Rev: src/multiset.c:1.25
Rev: src/multiset.h:1.13
Rev: src/object.c:1.136
Rev: src/object.h:1.49
Rev: src/program.c:1.251
Rev: src/program.h:1.96
Rev: src/svalue.c:1.84
Rev: src/testsuite.in:1.314

5:   \*/      /* -  * $Id: array.h,v 1.20 2000/06/09 22:43:04 mast Exp $ +  * $Id: array.h,v 1.21 2000/07/18 05:48:20 mast Exp $    */   #ifndef ARRAY_H   #define ARRAY_H
165:   unsigned gc_touch_all_arrays(void);   void gc_check_all_arrays(void);   void gc_mark_all_arrays(void); - void real_gc_cycle_check_array(struct array *a); - void real_gc_cycle_check_array_weak(struct array *a); + void real_gc_cycle_check_array(struct array *a, int weak);   void gc_cycle_check_all_arrays(void); -  + void gc_zap_ext_weak_refs_in_arrays(void);   void gc_free_all_unreferenced_arrays(void);   void debug_dump_type_field(TYPE_FIELD t);   void debug_dump_array(struct array *a);
177:   struct array *implode_array(struct array *a, struct array *b);   /* Prototypes end here */    - #define gc_cycle_check_array(X) \ -  enqueue_lifo(&gc_mark_queue, (queue_call) real_gc_cycle_check_array, (X)) - #define gc_cycle_check_array_weak(X) \ -  enqueue_lifo(&gc_mark_queue, (queue_call) real_gc_cycle_check_array_weak, (X)) + #define gc_cycle_check_array(X, WEAK) \ +  gc_cycle_enqueue((gc_cycle_check_cb *) real_gc_cycle_check_array, (X), (WEAK))      #endif /* ARRAY_H */