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