comparison src/alloc.c @ 2551:9f70af3ac939

[xemacs-hg @ 2005-02-03 16:14:02 by james] Commit Olivier Galibert's dumper updates for bignums and use them. See xemacs-patches message with ID <ps8y685c6p.fsf@diannao.ittc.ku.edu>.
author james
date Thu, 03 Feb 2005 16:14:08 +0000
parents 989a7680c221
children e6854ec89f8e
comparison
equal deleted inserted replaced
2550:317f30471f4e 2551:9f70af3ac939
2660 2660
2661 See detailed comment in lcrecord.h. 2661 See detailed comment in lcrecord.h.
2662 */ 2662 */
2663 2663
2664 const struct memory_description free_description[] = { 2664 const struct memory_description free_description[] = {
2665 { XD_LISP_OBJECT, offsetof (struct free_lcrecord_header, chain), 0, 0, 2665 { XD_LISP_OBJECT, offsetof (struct free_lcrecord_header, chain), 0, { 0 },
2666 XD_FLAG_FREE_LISP_OBJECT }, 2666 XD_FLAG_FREE_LISP_OBJECT },
2667 { XD_END } 2667 { XD_END }
2668 }; 2668 };
2669 2669
2670 DEFINE_LRECORD_IMPLEMENTATION ("free", free, 2670 DEFINE_LRECORD_IMPLEMENTATION ("free", free,
2672 0, internal_object_printer, 2672 0, internal_object_printer,
2673 0, 0, 0, free_description, 2673 0, 0, 0, free_description,
2674 struct free_lcrecord_header); 2674 struct free_lcrecord_header);
2675 2675
2676 const struct memory_description lcrecord_list_description[] = { 2676 const struct memory_description lcrecord_list_description[] = {
2677 { XD_LISP_OBJECT, offsetof (struct lcrecord_list, free), 0, 0, 2677 { XD_LISP_OBJECT, offsetof (struct lcrecord_list, free), 0, { 0 },
2678 XD_FLAG_FREE_LISP_OBJECT }, 2678 XD_FLAG_FREE_LISP_OBJECT },
2679 { XD_END } 2679 { XD_END }
2680 }; 2680 };
2681 2681
2682 static Lisp_Object 2682 static Lisp_Object
3150 { 3150 {
3151 EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj); 3151 EMACS_INT val = lispdesc_indirect_count (desc1->data1, desc, obj);
3152 3152
3153 return (val * 3153 return (val *
3154 lispdesc_block_size 3154 lispdesc_block_size
3155 (rdata, lispdesc_indirect_description (obj, desc1->data2))); 3155 (rdata,
3156 lispdesc_indirect_description (obj, desc1->data2.descr)));
3156 } 3157 }
3157 case XD_OPAQUE_DATA_PTR: 3158 case XD_OPAQUE_DATA_PTR:
3158 return sizeof (void *); 3159 return sizeof (void *);
3159 case XD_UNION_DYNAMIC_SIZE: 3160 case XD_UNION_DYNAMIC_SIZE:
3160 { 3161 {
3161 /* If an explicit size was given in the first-level structure 3162 /* If an explicit size was given in the first-level structure
3162 description, use it; else compute size based on current union 3163 description, use it; else compute size based on current union
3163 constant. */ 3164 constant. */
3164 const struct sized_memory_description *sdesc = 3165 const struct sized_memory_description *sdesc =
3165 lispdesc_indirect_description (obj, desc1->data2); 3166 lispdesc_indirect_description (obj, desc1->data2.descr);
3166 if (sdesc->size) 3167 if (sdesc->size)
3167 return sdesc->size; 3168 return sdesc->size;
3168 else 3169 else
3169 { 3170 {
3170 desc1 = lispdesc_process_xd_union (desc1, desc, obj); 3171 desc1 = lispdesc_process_xd_union (desc1, desc, obj);
3177 { 3178 {
3178 /* If an explicit size was given in the first-level structure 3179 /* If an explicit size was given in the first-level structure
3179 description, use it; else compute size based on maximum of all 3180 description, use it; else compute size based on maximum of all
3180 possible structures. */ 3181 possible structures. */
3181 const struct sized_memory_description *sdesc = 3182 const struct sized_memory_description *sdesc =
3182 lispdesc_indirect_description (obj, desc1->data2); 3183 lispdesc_indirect_description (obj, desc1->data2.descr);
3183 if (sdesc->size) 3184 if (sdesc->size)
3184 return sdesc->size; 3185 return sdesc->size;
3185 else 3186 else
3186 { 3187 {
3187 int count; 3188 int count;
3518 case XD_BLOCK_PTR: 3519 case XD_BLOCK_PTR:
3519 { 3520 {
3520 EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, 3521 EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
3521 data); 3522 data);
3522 const struct sized_memory_description *sdesc = 3523 const struct sized_memory_description *sdesc =
3523 lispdesc_indirect_description (data, desc1->data2); 3524 lispdesc_indirect_description (data, desc1->data2.descr);
3524 const char *dobj = * (const char **) rdata; 3525 const char *dobj = * (const char **) rdata;
3525 if (dobj) 3526 if (dobj)
3526 mark_struct_contents (dobj, sdesc, count); 3527 mark_struct_contents (dobj, sdesc, count);
3527 break; 3528 break;
3528 } 3529 }
3529 case XD_BLOCK_ARRAY: 3530 case XD_BLOCK_ARRAY:
3530 { 3531 {
3531 EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc, 3532 EMACS_INT count = lispdesc_indirect_count (desc1->data1, desc,
3532 data); 3533 data);
3533 const struct sized_memory_description *sdesc = 3534 const struct sized_memory_description *sdesc =
3534 lispdesc_indirect_description (data, desc1->data2); 3535 lispdesc_indirect_description (data, desc1->data2.descr);
3535 3536
3536 mark_struct_contents (rdata, sdesc, count); 3537 mark_struct_contents (rdata, sdesc, count);
3537 break; 3538 break;
3538 } 3539 }
3539 case XD_UNION: 3540 case XD_UNION: