Mercurial > hg > xemacs-beta
comparison src/lisp.h @ 5179:14fda1dbdb26
add memory usage info for specifiers
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-03-29 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (lisp_object_storage_size):
* alloc.c (Fobject_memory_usage):
* alloc.c (lisp_object_memory_usage_full):
Don't crash if passed a non-record object (int or char).
* alloc.c (tree_memory_usage_1):
* lrecord.h:
New function tree_memory_usage() to return the memory usage of
a tree of conses and/or vectors.
* lisp.h:
* lisp.h (PRIVATE_UNVERIFIED_LIST_LOOP_7):
Add SAFE_LIST_LOOP_* functions for looping over a list not known
to be correct or non-circular, but without signalling an error --
instead, just stop enumerating when an error detected.
* emacs.c (main_1):
* specifier.c:
* specifier.c (specifier_memory_usage):
* specifier.c (vars_of_specifier):
* symsinit.h:
Add memory usage info for specifiers.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 29 Mar 2010 22:47:55 -0500 |
parents | 5ddbab03b0e6 |
children | 4cd28c29a7a1 |
comparison
equal
deleted
inserted
replaced
5172:be6e5ea38dda | 5179:14fda1dbdb26 |
---|---|
2117 Lisp_Object elt, tail, tortoise_##elt; \ | 2117 Lisp_Object elt, tail, tortoise_##elt; \ |
2118 EMACS_INT len; \ | 2118 EMACS_INT len; \ |
2119 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \ | 2119 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \ |
2120 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | 2120 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) |
2121 | 2121 |
2122 | 2122 #define PRIVATE_UNVERIFIED_LIST_LOOP_7(elt, list, len, hare, \ |
2123 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ | 2123 tortoise, suspicion_length, \ |
2124 tortoise, suspicion_length) \ | 2124 signalp) \ |
2125 for (tortoise = hare = list, len = 0; \ | 2125 for (tortoise = hare = list, len = 0; \ |
2126 \ | 2126 \ |
2127 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ | 2127 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \ |
2128 (NILP (hare) ? 0 : \ | 2128 (NILP (hare) ? 0 : \ |
2129 (signal_malformed_list_error (list), 0))); \ | 2129 ((signalp ? signal_malformed_list_error (list) : 0), 0))); \ |
2130 \ | 2130 \ |
2131 hare = XCDR (hare), \ | 2131 hare = XCDR (hare), \ |
2132 (void) \ | 2132 (void) \ |
2133 ((++len > suspicion_length) \ | 2133 ((++len > suspicion_length) \ |
2134 && \ | 2134 && \ |
2135 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \ | 2135 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \ |
2136 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0))))) | 2136 (EQ (hare, tortoise) && \ |
2137 ((signalp ? signal_circular_list_error (list) : 0), 0))))) | |
2138 | |
2139 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \ | |
2140 tortoise, suspicion_length) \ | |
2141 PRIVATE_UNVERIFIED_LIST_LOOP_7 (elt, list, len, hare, tortoise, \ | |
2142 suspicion_length, 1) | |
2143 | |
2144 #define PRIVATE_SAFE_LIST_LOOP_6(elt, list, len, hare, \ | |
2145 tortoise, suspicion_length) \ | |
2146 PRIVATE_UNVERIFIED_LIST_LOOP_7 (elt, list, len, hare, tortoise, \ | |
2147 suspicion_length, 0) | |
2148 | |
2149 /* Similar to EXTERNAL_LIST_LOOP_2() but don't signal when an error | |
2150 is detected, just stop. */ | |
2151 #define SAFE_LIST_LOOP_2(elt, list) \ | |
2152 Lisp_Object elt, hare_##elt, tortoise_##elt; \ | |
2153 EMACS_INT len_##elt; \ | |
2154 PRIVATE_SAFE_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \ | |
2155 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | |
2156 | |
2157 #define SAFE_LIST_LOOP_3(elt, list, tail) \ | |
2158 Lisp_Object elt, tail, tortoise_##elt; \ | |
2159 EMACS_INT len_##elt; \ | |
2160 PRIVATE_SAFE_LIST_LOOP_6 (elt, list, len_##elt, tail, \ | |
2161 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH) | |
2137 | 2162 |
2138 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH: | 2163 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH: |
2139 | 2164 |
2140 These two macros return the length of LIST (either an internal or external | 2165 These two macros return the length of LIST (either an internal or external |
2141 list, according to which macro is used), stored into LEN (which must | 2166 list, according to which macro is used), stored into LEN (which must |