Mercurial > hg > xemacs-beta
comparison src/data.c @ 2645:e6854ec89f8e
[xemacs-hg @ 2005-03-10 09:12:36 by crestani]
KKCC backtrace.
2005-03-01 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
* alloc.c: Add functionality for backtracing the KKCC mark
algorithm.
* alloc.c (kkcc_backtrace): New.
* alloc.c (kkcc_bt_push): New.
* alloc.c (kkcc_gc_stack_push):
* alloc.c (kkcc_gc_stack_push_lisp_object):
* alloc.c (mark_object_maybe_checking_free):
* alloc.c (mark_struct_contents):
* alloc.c (kkcc_marking):
* alloc.c (mark_object):
* data.c (finish_marking_weak_lists):
* data.c (continue_marking_ephemerons):
* data.c (finish_marking_ephemerons):
* elhash.c (MARK_OBJ):
* lisp.h:
* profile.c (mark_profiling_info_maphash): Add level (current
depth of mark tree) and pos (position within description) as
additional arguments to KKCC mark functions.
author | crestani |
---|---|
date | Thu, 10 Mar 2005 09:12:38 +0000 |
parents | 9f70af3ac939 |
children | 6fa9919a9a0b |
comparison
equal
deleted
inserted
replaced
2644:0b4097b3552f | 2645:e6854ec89f8e |
---|---|
2737 } | 2737 } |
2738 | 2738 |
2739 if (need_to_mark_elem && ! marked_p (elem)) | 2739 if (need_to_mark_elem && ! marked_p (elem)) |
2740 { | 2740 { |
2741 #ifdef USE_KKCC | 2741 #ifdef USE_KKCC |
2742 kkcc_gc_stack_push_lisp_object (elem); | 2742 kkcc_gc_stack_push_lisp_object (elem, 0, -1); |
2743 #else /* NOT USE_KKCC */ | 2743 #else /* NOT USE_KKCC */ |
2744 mark_object (elem); | 2744 mark_object (elem); |
2745 #endif /* NOT USE_KKCC */ | 2745 #endif /* NOT USE_KKCC */ |
2746 did_mark = 1; | 2746 did_mark = 1; |
2747 } | 2747 } |
2765 /* In case of imperfect list, need to mark the final cons | 2765 /* In case of imperfect list, need to mark the final cons |
2766 because we're not removing it */ | 2766 because we're not removing it */ |
2767 if (!NILP (rest2) && ! marked_p (rest2)) | 2767 if (!NILP (rest2) && ! marked_p (rest2)) |
2768 { | 2768 { |
2769 #ifdef USE_KKCC | 2769 #ifdef USE_KKCC |
2770 kkcc_gc_stack_push_lisp_object (rest2); | 2770 kkcc_gc_stack_push_lisp_object (rest2, 0, -1); |
2771 #else /* NOT USE_KKCC */ | 2771 #else /* NOT USE_KKCC */ |
2772 mark_object (rest2); | 2772 mark_object (rest2); |
2773 #endif /* NOT USE_KKCC */ | 2773 #endif /* NOT USE_KKCC */ |
2774 did_mark = 1; | 2774 did_mark = 1; |
2775 } | 2775 } |
3146 MARK_CONS (XCONS (XEPHEMERON (rest)->cons_chain)); | 3146 MARK_CONS (XCONS (XEPHEMERON (rest)->cons_chain)); |
3147 if (marked_p (XEPHEMERON (rest)->key)) | 3147 if (marked_p (XEPHEMERON (rest)->key)) |
3148 { | 3148 { |
3149 #ifdef USE_KKCC | 3149 #ifdef USE_KKCC |
3150 kkcc_gc_stack_push_lisp_object | 3150 kkcc_gc_stack_push_lisp_object |
3151 (XCAR (XEPHEMERON (rest)->cons_chain)); | 3151 (XCAR (XEPHEMERON (rest)->cons_chain), 0, -1); |
3152 #else /* NOT USE_KKCC */ | 3152 #else /* NOT USE_KKCC */ |
3153 mark_object (XCAR (XEPHEMERON (rest)->cons_chain)); | 3153 mark_object (XCAR (XEPHEMERON (rest)->cons_chain)); |
3154 #endif /* NOT USE_KKCC */ | 3154 #endif /* NOT USE_KKCC */ |
3155 did_mark = 1; | 3155 did_mark = 1; |
3156 XSET_EPHEMERON_NEXT (rest, Vnew_all_ephemerons); | 3156 XSET_EPHEMERON_NEXT (rest, Vnew_all_ephemerons); |
3196 if (! NILP (XEPHEMERON_FINALIZER (rest))) | 3196 if (! NILP (XEPHEMERON_FINALIZER (rest))) |
3197 { | 3197 { |
3198 MARK_CONS (XCONS (XEPHEMERON (rest)->cons_chain)); | 3198 MARK_CONS (XCONS (XEPHEMERON (rest)->cons_chain)); |
3199 #ifdef USE_KKCC | 3199 #ifdef USE_KKCC |
3200 kkcc_gc_stack_push_lisp_object | 3200 kkcc_gc_stack_push_lisp_object |
3201 (XCAR (XEPHEMERON (rest)->cons_chain)); | 3201 (XCAR (XEPHEMERON (rest)->cons_chain), 0, -1); |
3202 #else /* NOT USE_KKCC */ | 3202 #else /* NOT USE_KKCC */ |
3203 mark_object (XCAR (XEPHEMERON (rest)->cons_chain)); | 3203 mark_object (XCAR (XEPHEMERON (rest)->cons_chain)); |
3204 #endif /* NOT USE_KKCC */ | 3204 #endif /* NOT USE_KKCC */ |
3205 | 3205 |
3206 /* Register the finalizer */ | 3206 /* Register the finalizer */ |