Mercurial > hg > xemacs-beta
comparison src/symbols.c @ 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 | e0db3c197671 |
children | b5df3737028a |
comparison
equal
deleted
inserted
replaced
5123:fc85923c49af | 5124:623d57b7fbe8 |
---|---|
137 symbol_remprop (Lisp_Object symbol, Lisp_Object property) | 137 symbol_remprop (Lisp_Object symbol, Lisp_Object property) |
138 { | 138 { |
139 return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME); | 139 return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME); |
140 } | 140 } |
141 | 141 |
142 DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT_WITH_PROPS ("symbol", symbol, | 142 DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT ("symbol", symbol, |
143 mark_symbol, print_symbol, | 143 mark_symbol, print_symbol, |
144 0, 0, 0, symbol_description, | 144 0, 0, 0, symbol_description, |
145 symbol_getprop, | 145 symbol_getprop, |
146 symbol_putprop, | 146 symbol_putprop, |
147 symbol_remprop, | 147 symbol_remprop, |
148 Fsymbol_plist, | 148 Fsymbol_plist, |
149 0 /* no disksaver */, | |
149 Lisp_Symbol); | 150 Lisp_Symbol); |
150 | 151 |
151 /**********************************************************************/ | 152 /**********************************************************************/ |
152 /* Intern */ | 153 /* Intern */ |
153 /**********************************************************************/ | 154 /**********************************************************************/ |
1042 static const struct memory_description symbol_value_forward_description[] = { | 1043 static const struct memory_description symbol_value_forward_description[] = { |
1043 { XD_END } | 1044 { XD_END } |
1044 }; | 1045 }; |
1045 | 1046 |
1046 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-forward", | 1047 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-forward", |
1047 symbol_value_forward, | 1048 symbol_value_forward, |
1048 0, | 1049 0, |
1049 print_symbol_value_magic, 0, 0, 0, | 1050 print_symbol_value_magic, 0, 0, 0, |
1050 symbol_value_forward_description, | 1051 symbol_value_forward_description, |
1051 struct symbol_value_forward); | 1052 struct symbol_value_forward); |
1052 | 1053 |
1053 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-buffer-local", | 1054 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-buffer-local", |
1054 symbol_value_buffer_local, | 1055 symbol_value_buffer_local, |
1055 mark_symbol_value_buffer_local, | 1056 mark_symbol_value_buffer_local, |
1056 print_symbol_value_magic, 0, 0, 0, | 1057 print_symbol_value_magic, 0, 0, 0, |
1057 symbol_value_buffer_local_description, | 1058 symbol_value_buffer_local_description, |
1058 struct symbol_value_buffer_local); | 1059 struct symbol_value_buffer_local); |
1059 | 1060 |
1060 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-lisp-magic", | 1061 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-lisp-magic", |
1061 symbol_value_lisp_magic, | 1062 symbol_value_lisp_magic, |
1062 mark_symbol_value_lisp_magic, | 1063 mark_symbol_value_lisp_magic, |
1063 print_symbol_value_magic, 0, 0, 0, | 1064 print_symbol_value_magic, 0, 0, 0, |
1064 symbol_value_lisp_magic_description, | 1065 symbol_value_lisp_magic_description, |
1065 struct symbol_value_lisp_magic); | 1066 struct symbol_value_lisp_magic); |
1066 | 1067 |
1067 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-varalias", | 1068 DEFINE_DUMPABLE_LISP_OBJECT ("symbol-value-varalias", |
1068 symbol_value_varalias, | 1069 symbol_value_varalias, |
1069 mark_symbol_value_varalias, | 1070 mark_symbol_value_varalias, |
1070 print_symbol_value_magic, 0, 0, 0, | 1071 print_symbol_value_magic, 0, 0, 0, |
1071 symbol_value_varalias_description, | 1072 symbol_value_varalias_description, |
1072 struct symbol_value_varalias); | 1073 struct symbol_value_varalias); |
1073 | 1074 |
1074 | 1075 |
1075 /* Getting and setting values of symbols */ | 1076 /* Getting and setting values of symbols */ |
1076 | 1077 |
1077 /* Given the raw contents of a symbol value cell, return the Lisp value of | 1078 /* Given the raw contents of a symbol value cell, return the Lisp value of |