Mercurial > emacs
comparison src/alloc.c @ 56239:a446552d2240
(allocate_misc): Update total_free_markers.
(free_misc): New function.
(safe_alloca_unwind, free_marker): Use it.
| author | Kim F. Storm <storm@cua.dk> |
|---|---|
| date | Thu, 24 Jun 2004 22:01:27 +0000 |
| parents | db1817b88294 |
| children | 1529ab7bab88 8e4ea1e2c254 59dcbfe97385 |
comparison
equal
deleted
inserted
replaced
| 56238:f186f03b4d6b | 56239:a446552d2240 |
|---|---|
| 588 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg); | 588 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg); |
| 589 | 589 |
| 590 p->dogc = 0; | 590 p->dogc = 0; |
| 591 xfree (p->pointer); | 591 xfree (p->pointer); |
| 592 p->pointer = 0; | 592 p->pointer = 0; |
| 593 free_misc (arg); | |
| 593 return Qnil; | 594 return Qnil; |
| 594 } | 595 } |
| 595 | 596 |
| 596 | 597 |
| 597 /* Like malloc but used for allocating Lisp data. NBYTES is the | 598 /* Like malloc but used for allocating Lisp data. NBYTES is the |
| 2919 MEM_TYPE_MISC); | 2920 MEM_TYPE_MISC); |
| 2920 new->next = marker_block; | 2921 new->next = marker_block; |
| 2921 marker_block = new; | 2922 marker_block = new; |
| 2922 marker_block_index = 0; | 2923 marker_block_index = 0; |
| 2923 n_marker_blocks++; | 2924 n_marker_blocks++; |
| 2925 total_free_markers += MARKER_BLOCK_SIZE; | |
| 2924 } | 2926 } |
| 2925 XSETMISC (val, &marker_block->markers[marker_block_index]); | 2927 XSETMISC (val, &marker_block->markers[marker_block_index]); |
| 2926 marker_block_index++; | 2928 marker_block_index++; |
| 2927 } | 2929 } |
| 2928 | 2930 |
| 2931 --total_free_markers; | |
| 2929 consing_since_gc += sizeof (union Lisp_Misc); | 2932 consing_since_gc += sizeof (union Lisp_Misc); |
| 2930 misc_objects_consed++; | 2933 misc_objects_consed++; |
| 2931 XMARKER (val)->gcmarkbit = 0; | 2934 XMARKER (val)->gcmarkbit = 0; |
| 2932 return val; | 2935 return val; |
| 2936 } | |
| 2937 | |
| 2938 /* Free a Lisp_Misc object */ | |
| 2939 | |
| 2940 void | |
| 2941 free_misc (misc) | |
| 2942 Lisp_Object misc; | |
| 2943 { | |
| 2944 XMISC (misc)->u_marker.type = Lisp_Misc_Free; | |
| 2945 XMISC (misc)->u_free.chain = marker_free_list; | |
| 2946 marker_free_list = XMISC (misc); | |
| 2947 | |
| 2948 total_free_markers++; | |
| 2933 } | 2949 } |
| 2934 | 2950 |
| 2935 /* Return a Lisp_Misc_Save_Value object containing POINTER and | 2951 /* Return a Lisp_Misc_Save_Value object containing POINTER and |
| 2936 INTEGER. This is used to package C values to call record_unwind_protect. | 2952 INTEGER. This is used to package C values to call record_unwind_protect. |
| 2937 The unwind function can get the C values back using XSAVE_VALUE. */ | 2953 The unwind function can get the C values back using XSAVE_VALUE. */ |
| 2976 void | 2992 void |
| 2977 free_marker (marker) | 2993 free_marker (marker) |
| 2978 Lisp_Object marker; | 2994 Lisp_Object marker; |
| 2979 { | 2995 { |
| 2980 unchain_marker (XMARKER (marker)); | 2996 unchain_marker (XMARKER (marker)); |
| 2981 | 2997 free_misc (marker); |
| 2982 XMISC (marker)->u_marker.type = Lisp_Misc_Free; | |
| 2983 XMISC (marker)->u_free.chain = marker_free_list; | |
| 2984 marker_free_list = XMISC (marker); | |
| 2985 | |
| 2986 total_free_markers++; | |
| 2987 } | 2998 } |
| 2988 | 2999 |
| 2989 | 3000 |
| 2990 /* Return a newly created vector or string with specified arguments as | 3001 /* Return a newly created vector or string with specified arguments as |
| 2991 elements. If all the arguments are characters that can fit | 3002 elements. If all the arguments are characters that can fit |
