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