Mercurial > hg > xemacs-beta
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: |