Mercurial > hg > xemacs-beta
comparison src/lrecord.h @ 5124:623d57b7fbe8 ben-lisp-object
separate regular and disksave finalization, print method fixes.
Create separate disksave method and make the finalize method only be for
actual object finalization, not disksave finalization.
Fix places where 0 was given in place of a printer -- print methods are
mandatory, and internal objects formerly without a print method now must
explicitly specify internal_object_printer().
Change the defn of CONSOLE_LIVE_P to avoid problems in some weird situations.
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-01-20 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (very_old_free_lcrecord):
* alloc.c (disksave_object_finalization_1):
* alloc.c (make_lcrecord_list):
* alloc.c (alloc_managed_lcrecord):
* alloc.c (free_managed_lcrecord):
* alloc.c (sweep_lcrecords_1):
* buffer.c:
* bytecode.c:
* bytecode.c (Fcompiled_function_p):
* chartab.c:
* console-impl.h:
* console-impl.h (CONSOLE_TYPE_P):
* console.c:
* console.c (set_quit_events):
* data.c:
* data.c (Fmake_ephemeron):
* database.c:
* database.c (finalize_database):
* database.c (Fclose_database):
* device-msw.c:
* device-msw.c (finalize_devmode):
* device-msw.c (allocate_devmode):
* device.c:
* elhash.c:
* elhash.c (finalize_hash_table):
* eval.c:
* eval.c (bind_multiple_value_limits):
* event-stream.c:
* event-stream.c (finalize_command_builder):
* events.c:
* events.c (mark_event):
* extents.c:
* extents.c (finalize_extent_info):
* extents.c (uninit_buffer_extents):
* faces.c:
* file-coding.c:
* file-coding.c (finalize_coding_system):
* file-coding.h:
* file-coding.h (struct coding_system_methods):
* file-coding.h (struct detector):
* floatfns.c:
* floatfns.c (extract_float):
* fns.c:
* fns.c (Fidentity):
* font-mgr.c (finalize_fc_pattern):
* font-mgr.c (finalize_fc_config):
* frame.c:
* glyphs.c:
* glyphs.c (finalize_image_instance):
* glyphs.c (unmap_subwindow_instance_cache_mapper):
* gui.c:
* gui.c (gui_error):
* keymap.c:
* lisp.h (struct Lisp_Symbol):
* lrecord.h:
* lrecord.h (struct lrecord_implementation):
* lrecord.h (MC_ALLOC_CALL_FINALIZER):
* lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE):
* lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT):
* lrecord.h (MAKE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT):
* lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT):
* lrecord.h (MAKE_MODULE_LISP_OBJECT):
* lstream.c:
* lstream.c (finalize_lstream):
* lstream.c (disksave_lstream):
* marker.c:
* marker.c (finalize_marker):
* mule-charset.c (make_charset):
* number.c:
* objects.c:
* objects.c (finalize_color_instance):
* objects.c (finalize_font_instance):
* opaque.c:
* opaque.c (make_opaque_ptr):
* process-nt.c:
* process-nt.c (nt_finalize_process_data):
* process-nt.c (nt_deactivate_process):
* process.c:
* process.c (finalize_process):
* procimpl.h (struct process_methods):
* scrollbar.c:
* scrollbar.c (free_scrollbar_instance):
* specifier.c (finalize_specifier):
* symbols.c:
* toolbar.c:
* toolbar.c (Ftoolbar_button_p):
* tooltalk.c:
* ui-gtk.c:
* ui-gtk.c (emacs_gtk_object_finalizer):
* ui-gtk.c (allocate_emacs_gtk_boxed_data):
* window.c:
* window.c (finalize_window):
* window.c (mark_window_as_deleted):
Separate out regular and disksave finalization. Instead of a
FOR_DISKSAVE argument to the finalizer, create a separate object
method `disksaver'. Make `finalizer' have only one argument.
Go through and separate out all finalize methods into finalize
and disksave. Delete lots of thereby redundant disksave checking.
Delete places that signal an error if we attempt to disksave --
all of these objects are non-dumpable and we will get an error
from pdump anyway if we attempt to dump them. After this is done,
only one object remains that has a disksave method -- lstream.
Change DEFINE_*_LISP_OBJECT_WITH_PROPS to DEFINE_*_GENERAL_LISP_OBJECT,
which is used for specifying either property methods or disksave
methods (or in the future, any other less-used methods).
Remove the for_disksave argument to finalize_process_data. Don't
provide a disksaver for processes because no one currently needs
it.
Clean up various places where objects didn't provide a print method.
It was made mandatory in previous changes, and all methods now
either provide their own print method or use internal_object_printer
or external_object_printer.
Change the definition of CONSOLE_LIVE_P to use the contype enum
rather than looking into the conmeths structure -- in some weird
situations with dead objects, the conmeths structure is NULL,
and printing such objects from debug_print() will crash if we try
to look into the conmeths structure.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 20 Jan 2010 07:05:57 -0600 |
parents | d1247f3cc363 |
children | b5df3737028a |
comparison
equal
deleted
inserted
replaced
5123:fc85923c49af | 5124:623d57b7fbe8 |
---|---|
352 description below instead), unless the data description is missing. | 352 description below instead), unless the data description is missing. |
353 Yes, this currently means there is logic duplication. Eventually the | 353 Yes, this currently means there is logic duplication. Eventually the |
354 mark methods will be removed. */ | 354 mark methods will be removed. */ |
355 Lisp_Object (*marker) (Lisp_Object); | 355 Lisp_Object (*marker) (Lisp_Object); |
356 | 356 |
357 /* `printer' converts the object to a printed representation. | 357 /* `printer' converts the object to a printed representation. `printer' |
358 This can be NULL; in this case internal_object_printer() will be | 358 should never be NULL (if so, you will get an assertion failure when |
359 used instead. */ | 359 trying to print such an object). Either supply a specific printing |
360 method, or use the default methods internal_object_printer() (for | |
361 internal objects that should not be visible at Lisp level) or | |
362 external_object_printer() (for objects visible at Lisp level). */ | |
360 void (*printer) (Lisp_Object, Lisp_Object printcharfun, int escapeflag); | 363 void (*printer) (Lisp_Object, Lisp_Object printcharfun, int escapeflag); |
361 | 364 |
362 /* `finalizer' is called at GC time when the object is about to | 365 /* `finalizer' is called at GC time when the object is about to be freed. |
363 be freed, and at dump time (FOR_DISKSAVE will be non-zero in this | 366 It should perform any necessary cleanup, such as freeing malloc()ed |
364 case). It should perform any necessary cleanup (e.g. freeing | 367 memory or releasing pointers or handles to objects created in external |
365 malloc()ed memory). This can be NULL, meaning no special | 368 libraries, such as window-system windows or file handles. This can be |
366 finalization is necessary. | 369 NULL, meaning no special finalization is necessary. */ |
367 | 370 void (*finalizer) (void *header); |
368 WARNING: remember that `finalizer' is called at dump time even | |
369 though the object is not being freed. */ | |
370 void (*finalizer) (void *header, int for_disksave); | |
371 | 371 |
372 /* This can be NULL, meaning compare objects with EQ(). */ | 372 /* This can be NULL, meaning compare objects with EQ(). */ |
373 int (*equal) (Lisp_Object obj1, Lisp_Object obj2, int depth); | 373 int (*equal) (Lisp_Object obj1, Lisp_Object obj2, int depth); |
374 | 374 |
375 /* `hash' generates hash values for use with hash tables that have | 375 /* `hash' generates hash values for use with hash tables that have |
389 `get', `put', `remprop', and `object-plist'. */ | 389 `get', `put', `remprop', and `object-plist'. */ |
390 Lisp_Object (*getprop) (Lisp_Object obj, Lisp_Object prop); | 390 Lisp_Object (*getprop) (Lisp_Object obj, Lisp_Object prop); |
391 int (*putprop) (Lisp_Object obj, Lisp_Object prop, Lisp_Object val); | 391 int (*putprop) (Lisp_Object obj, Lisp_Object prop, Lisp_Object val); |
392 int (*remprop) (Lisp_Object obj, Lisp_Object prop); | 392 int (*remprop) (Lisp_Object obj, Lisp_Object prop); |
393 Lisp_Object (*plist) (Lisp_Object obj); | 393 Lisp_Object (*plist) (Lisp_Object obj); |
394 | |
395 /* `disksaver' is called at dump time. It is used for objects that | |
396 contain pointers or handles to objects created in external libraries, | |
397 such as window-system windows or file handles. Such external objects | |
398 cannot be dumped, so it is necessary to release them at dump time and | |
399 arrange somehow or other for them to be resurrected if necessary later | |
400 on. | |
401 | |
402 It seems that even non-dumpable objects may be around at dump time, | |
403 and a disksaver may be provided. (In fact, the only object currently | |
404 with a disksaver, lstream, is non-dumpable.) | |
405 | |
406 Objects rarely need to provide this method; most of the time it will | |
407 be NULL. */ | |
408 void (*disksaver) (Lisp_Object); | |
394 | 409 |
395 /* Only one of `static_size' and `size_in_bytes_method' is non-0. If | 410 /* Only one of `static_size' and `size_in_bytes_method' is non-0. If |
396 `static_size' is 0, this type is not instantiable by | 411 `static_size' is 0, this type is not instantiable by |
397 ALLOC_LISP_OBJECT(). If both are 0 (this should never happen), this | 412 ALLOC_LISP_OBJECT(). If both are 0 (this should never happen), this |
398 object cannot be instantiated; you will get an abort() if you try.*/ | 413 object cannot be instantiated; you will get an abort() if you try.*/ |
452 const struct lrecord_implementation *MCACF_implementation \ | 467 const struct lrecord_implementation *MCACF_implementation \ |
453 = LHEADER_IMPLEMENTATION (MCACF_lheader); \ | 468 = LHEADER_IMPLEMENTATION (MCACF_lheader); \ |
454 if (MCACF_implementation && MCACF_implementation->finalizer) \ | 469 if (MCACF_implementation && MCACF_implementation->finalizer) \ |
455 { \ | 470 { \ |
456 GC_STAT_FINALIZED; \ | 471 GC_STAT_FINALIZED; \ |
457 MCACF_implementation->finalizer (ptr, 0); \ | 472 MCACF_implementation->finalizer (ptr); \ |
458 } \ | 473 } \ |
459 } \ | 474 } \ |
460 } while (0) | 475 } while (0) |
461 | 476 |
462 /* Tell mc-alloc how to call a finalizer for disksave. */ | 477 /* Tell mc-alloc how to call a finalizer for disksave. */ |
467 if (XRECORD_LHEADER (MCACF_obj) && LRECORDP (MCACF_obj) \ | 482 if (XRECORD_LHEADER (MCACF_obj) && LRECORDP (MCACF_obj) \ |
468 && !LRECORD_FREE_P (MCACF_lheader) ) \ | 483 && !LRECORD_FREE_P (MCACF_lheader) ) \ |
469 { \ | 484 { \ |
470 const struct lrecord_implementation *MCACF_implementation \ | 485 const struct lrecord_implementation *MCACF_implementation \ |
471 = LHEADER_IMPLEMENTATION (MCACF_lheader); \ | 486 = LHEADER_IMPLEMENTATION (MCACF_lheader); \ |
472 if (MCACF_implementation && MCACF_implementation->finalizer) \ | 487 if (MCACF_implementation && MCACF_implementation->disksaver) \ |
473 MCACF_implementation->finalizer (ptr, 1); \ | 488 MCACF_implementation->disksaver (ptr); \ |
474 } \ | 489 } \ |
475 } while (0) | 490 } while (0) |
476 | 491 |
477 #define LRECORD_FREE_P(ptr) \ | 492 #define LRECORD_FREE_P(ptr) \ |
478 (((struct lrecord_header *) ptr)->free) | 493 (((struct lrecord_header *) ptr)->free) |
1141 large blocks ("frob blocks"), which are parceled up individually. Such | 1156 large blocks ("frob blocks"), which are parceled up individually. Such |
1142 objects need special handling in alloc.c. This does not apply to | 1157 objects need special handling in alloc.c. This does not apply to |
1143 NEW_GC, because it does this automatically. | 1158 NEW_GC, because it does this automatically. |
1144 | 1159 |
1145 DEFINE_*_INTERNAL_LISP_OBJECT is for "internal" objects that should | 1160 DEFINE_*_INTERNAL_LISP_OBJECT is for "internal" objects that should |
1146 never be visible on the Lisp level. This is a shorthand for the | 1161 never be visible on the Lisp level. This is a shorthand for the most |
1147 most common type of internal objects, which have no equal or hash | 1162 common type of internal objects, which have no equal or hash method |
1148 method (since they generally won't appear in hash tables), no | 1163 (since they generally won't appear in hash tables), no finalizer and |
1149 finalizer and internal_object_printer() as their print method | 1164 internal_object_printer() as their print method (which prints that the |
1150 (which prints that the object is internal and shouldn't be visible | 1165 object is internal and shouldn't be visible externally). For internal |
1151 externally). For internal objects needing a finalizer, equal or | 1166 objects needing a finalizer, equal or hash method, or wanting to |
1152 hash method, use the normal DEFINE_*_LISP_OBJECT mechanism for | 1167 customize the print method, use the normal DEFINE_*_LISP_OBJECT |
1153 defining these objects. | 1168 mechanism for defining these objects. |
1154 | 1169 |
1155 DEFINE_*_WITH_PROPS is for objects which support the unified property | 1170 DEFINE_*_GENERAL_LISP_OBJECT is for objects that need to provide one of |
1156 interface using `get', `put', `remprop' and `object-plist'. | 1171 the less common methods that are omitted on most objects. These methods |
1172 include the methods supporting the unified property interface using | |
1173 `get', `put', `remprop' and `object-plist', and (for dumpable objects | |
1174 only) the `disksaver' method. | |
1157 | 1175 |
1158 DEFINE_MODULE_* is for objects defined in an external module. | 1176 DEFINE_MODULE_* is for objects defined in an external module. |
1159 | 1177 |
1160 MAKE_LISP_OBJECT and MAKE_MODULE_LISP_OBJECT are what underlies all of | 1178 MAKE_LISP_OBJECT and MAKE_MODULE_LISP_OBJECT are what underlies all of |
1161 these; they define a structure containing pointers to object methods | 1179 these; they define a structure containing pointers to object methods |
1170 #endif | 1188 #endif |
1171 | 1189 |
1172 /********* The dumpable versions *********** */ | 1190 /********* The dumpable versions *********** */ |
1173 | 1191 |
1174 #define DEFINE_DUMPABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ | 1192 #define DEFINE_DUMPABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ |
1175 DEFINE_DUMPABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1193 DEFINE_DUMPABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1176 | 1194 |
1177 #define DEFINE_DUMPABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1195 #define DEFINE_DUMPABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1178 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype) | 1196 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof (structtype),0,0,structtype) |
1179 | 1197 |
1180 #define DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1198 #define DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1181 DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype) | 1199 DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,structtype) |
1182 | 1200 |
1183 #define DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 1201 #define DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizer,structtype) \ |
1184 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 1202 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,0,sizer,0,structtype) |
1185 | 1203 |
1186 #define DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ | 1204 #define DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ |
1187 DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1205 DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1188 | 1206 |
1189 #define DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1207 #define DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1190 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof(structtype),0,1,structtype) | 1208 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof(structtype),0,1,structtype) |
1191 | 1209 |
1192 #define DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1210 #define DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1193 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,1,structtype) | 1211 MAKE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,0,sizer,1,structtype) |
1194 | 1212 |
1195 #define DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,structtype) \ | 1213 #define DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,structtype) \ |
1196 DEFINE_DUMPABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,structtype) | 1214 DEFINE_DUMPABLE_GENERAL_LISP_OBJECT(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,0,structtype) |
1197 | 1215 |
1198 #define DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,sizer,structtype) \ | 1216 #define DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,sizer,structtype) \ |
1199 DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,sizer,structtype) | 1217 DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,0,sizer,structtype) |
1200 | 1218 |
1201 /********* The non-dumpable versions *********** */ | 1219 /********* The non-dumpable versions *********** */ |
1202 | 1220 |
1203 #define DEFINE_NODUMP_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ | 1221 #define DEFINE_NODUMP_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ |
1204 DEFINE_NODUMP_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1222 DEFINE_NODUMP_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1205 | 1223 |
1206 #define DEFINE_NODUMP_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1224 #define DEFINE_NODUMP_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1207 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype) | 1225 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof (structtype),0,0,structtype) |
1208 | 1226 |
1209 #define DEFINE_NODUMP_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1227 #define DEFINE_NODUMP_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1210 DEFINE_NODUMP_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype) | 1228 DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,structtype) |
1211 | 1229 |
1212 #define DEFINE_NODUMP_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 1230 #define DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizer,structtype) \ |
1213 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 1231 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,0,sizer,0,structtype) |
1214 | 1232 |
1215 #define DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ | 1233 #define DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,structtype) \ |
1216 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1234 DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1217 | 1235 |
1218 #define DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT_WITH_PROPS(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1236 #define DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1219 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof(structtype),0,1,structtype) | 1237 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof(structtype),0,1,structtype) |
1220 | 1238 |
1221 #define DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1239 #define DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT(name,c_name,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1222 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,1,structtype) | 1240 MAKE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,0,sizer,1,structtype) |
1223 | 1241 |
1224 #define DEFINE_NODUMP_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,structtype) \ | 1242 #define DEFINE_NODUMP_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,structtype) \ |
1225 DEFINE_NODUMP_LISP_OBJECT_WITH_PROPS(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,structtype) | 1243 DEFINE_NODUMP_GENERAL_LISP_OBJECT(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,0,structtype) |
1226 | 1244 |
1227 #define DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,sizer,structtype) \ | 1245 #define DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT(name,c_name,marker,desc,sizer,structtype) \ |
1228 DEFINE_NODUMP_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,sizer,structtype) | 1246 DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,marker,internal_object_printer,0,0,0,desc,0,0,0,0,0,sizer,structtype) |
1229 | 1247 |
1230 /********* MAKE_LISP_OBJECT, the underlying macro *********** */ | 1248 /********* MAKE_LISP_OBJECT, the underlying macro *********** */ |
1231 | 1249 |
1232 #ifdef NEW_GC | 1250 #ifdef NEW_GC |
1233 #define MAKE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,frob_block_p,structtype) \ | 1251 #define MAKE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,size,sizer,frob_block_p,structtype) \ |
1234 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ | 1252 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
1235 const struct lrecord_implementation lrecord_##c_name = \ | 1253 const struct lrecord_implementation lrecord_##c_name = \ |
1236 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ | 1254 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ |
1237 getprop, putprop, remprop, plist, size, sizer, \ | 1255 getprop, putprop, remprop, plist, disksaver, size, sizer, \ |
1238 lrecord_type_##c_name } | 1256 lrecord_type_##c_name } |
1239 #else /* not NEW_GC */ | 1257 #else /* not NEW_GC */ |
1240 #define MAKE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,frob_block_p,structtype) \ | 1258 #define MAKE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,size,sizer,frob_block_p,structtype) \ |
1241 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ | 1259 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
1242 const struct lrecord_implementation lrecord_##c_name = \ | 1260 const struct lrecord_implementation lrecord_##c_name = \ |
1243 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ | 1261 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ |
1244 getprop, putprop, remprop, plist, size, sizer, \ | 1262 getprop, putprop, remprop, plist, disksaver, size, sizer, \ |
1245 lrecord_type_##c_name, frob_block_p } | 1263 lrecord_type_##c_name, frob_block_p } |
1246 #endif /* not NEW_GC */ | 1264 #endif /* not NEW_GC */ |
1247 | 1265 |
1248 | 1266 |
1249 /********* The module dumpable versions *********** */ | 1267 /********* The module dumpable versions *********** */ |
1250 | 1268 |
1251 #define DEFINE_DUMPABLE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,structtype) \ | 1269 #define DEFINE_DUMPABLE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,structtype) \ |
1252 DEFINE_DUMPABLE_MODULE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1270 DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1253 | 1271 |
1254 #define DEFINE_DUMPABLE_MODULE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1272 #define DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1255 MAKE_MODULE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype) | 1273 MAKE_MODULE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof (structtype),0,0,structtype) |
1256 | 1274 |
1257 #define DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1275 #define DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1258 DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype) | 1276 DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,structtype) |
1259 | 1277 |
1260 #define DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 1278 #define DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizer,structtype) \ |
1261 MAKE_MODULE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 1279 MAKE_MODULE_LISP_OBJECT(name,c_name,1 /*dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,0,sizer,0,structtype) |
1262 | 1280 |
1263 /********* The module non-dumpable versions *********** */ | 1281 /********* The module non-dumpable versions *********** */ |
1264 | 1282 |
1265 #define DEFINE_NODUMP_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,structtype) \ | 1283 #define DEFINE_NODUMP_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,structtype) \ |
1266 DEFINE_NODUMP_MODULE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,structtype) | 1284 DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,structtype) |
1267 | 1285 |
1268 #define DEFINE_NODUMP_MODULE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,structtype) \ | 1286 #define DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,structtype) \ |
1269 MAKE_MODULE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizeof (structtype),0,0,structtype) | 1287 MAKE_MODULE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizeof (structtype),0,0,structtype) |
1270 | 1288 |
1271 #define DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ | 1289 #define DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,sizer,structtype) \ |
1272 DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,sizer,structtype) | 1290 DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,0,0,0,0,0,sizer,structtype) |
1273 | 1291 |
1274 #define DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT_WITH_PROPS(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,sizer,structtype) \ | 1292 #define DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,sizer,structtype) \ |
1275 MAKE_MODULE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,0,sizer,0,structtype) | 1293 MAKE_MODULE_LISP_OBJECT(name,c_name,0 /*non-dumpable*/,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,0,sizer,0,structtype) |
1276 | 1294 |
1277 /********* MAKE_MODULE_LISP_OBJECT, the underlying macro *********** */ | 1295 /********* MAKE_MODULE_LISP_OBJECT, the underlying macro *********** */ |
1278 | 1296 |
1279 #ifdef NEW_GC | 1297 #ifdef NEW_GC |
1280 #define MAKE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,frob_block_p,structtype) \ | 1298 #define MAKE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,size,sizer,frob_block_p,structtype) \ |
1281 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ | 1299 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
1282 int lrecord_type_##c_name; \ | 1300 int lrecord_type_##c_name; \ |
1283 struct lrecord_implementation lrecord_##c_name = \ | 1301 struct lrecord_implementation lrecord_##c_name = \ |
1284 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ | 1302 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ |
1285 getprop, putprop, remprop, plist, size, sizer, \ | 1303 getprop, putprop, remprop, plist, disksaver, size, sizer, \ |
1286 lrecord_type_last_built_in_type } | 1304 lrecord_type_last_built_in_type } |
1287 #else /* not NEW_GC */ | 1305 #else /* not NEW_GC */ |
1288 #define MAKE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,size,sizer,frob_block_p,structtype) \ | 1306 #define MAKE_MODULE_LISP_OBJECT(name,c_name,dumpable,marker,printer,nuker,equal,hash,desc,getprop,putprop,remprop,plist,disksaver,size,sizer,frob_block_p,structtype) \ |
1289 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ | 1307 DECLARE_ERROR_CHECK_TYPES(c_name, structtype) \ |
1290 int lrecord_type_##c_name; \ | 1308 int lrecord_type_##c_name; \ |
1291 struct lrecord_implementation lrecord_##c_name = \ | 1309 struct lrecord_implementation lrecord_##c_name = \ |
1292 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ | 1310 { name, dumpable, marker, printer, nuker, equal, hash, desc, \ |
1293 getprop, putprop, remprop, plist, size, sizer, \ | 1311 getprop, putprop, remprop, plist, disksaver, size, sizer, \ |
1294 lrecord_type_last_built_in_type, frob_block_p } | 1312 lrecord_type_last_built_in_type, frob_block_p } |
1295 #endif /* not NEW_GC */ | 1313 #endif /* not NEW_GC */ |
1296 | 1314 |
1297 #ifdef USE_KKCC | 1315 #ifdef USE_KKCC |
1298 extern MODULE_API const struct memory_description *lrecord_memory_descriptions[]; | 1316 extern MODULE_API const struct memory_description *lrecord_memory_descriptions[]; |