Mercurial > hg > xemacs-beta
annotate src/objects-impl.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 | a9c41067dd88 |
| rev | line source |
|---|---|
| 872 | 1 /* Generic object functions -- header implementation. |
| 2 Copyright (C) 1995 Board of Trustees, University of Illinois. | |
| 3 Copyright (C) 1995, 1996, 2002 Ben Wing. | |
| 4 | |
| 5 This file is part of XEmacs. | |
| 6 | |
| 7 XEmacs is free software; you can redistribute it and/or modify it | |
| 8 under the terms of the GNU General Public License as published by the | |
| 9 Free Software Foundation; either version 2, or (at your option) any | |
| 10 later version. | |
| 11 | |
| 12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
| 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 15 for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with XEmacs; see the file COPYING. If not, write to | |
| 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 20 Boston, MA 02111-1307, USA. */ | |
| 21 | |
| 22 /* Synched up with: Not in FSF. */ | |
| 23 | |
| 24 #ifndef INCLUDED_objects_impl_h_ | |
| 25 #define INCLUDED_objects_impl_h_ | |
| 26 | |
| 27 #include "specifier.h" | |
| 28 #include "objects.h" | |
| 29 | |
| 30 /***************************************************************************** | |
| 31 * Color Specifier Object * | |
| 32 *****************************************************************************/ | |
| 33 | |
| 34 struct color_specifier | |
| 35 { | |
| 36 Lisp_Object face; /* face this is attached to, or nil */ | |
| 37 Lisp_Object face_property; /* property of that face */ | |
| 38 }; | |
| 39 | |
| 40 #define COLOR_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, color) | |
| 41 #define COLOR_SPECIFIER_FACE(g) (COLOR_SPECIFIER_DATA (g)->face) | |
| 42 #define COLOR_SPECIFIER_FACE_PROPERTY(g) \ | |
| 43 (COLOR_SPECIFIER_DATA (g)->face_property) | |
| 44 | |
| 45 DECLARE_SPECIFIER_TYPE (color); | |
| 46 #define XCOLOR_SPECIFIER(x) XSPECIFIER_TYPE (x, color) | |
| 47 #define COLOR_SPECIFIERP(x) SPECIFIER_TYPEP (x, color) | |
| 48 #define CHECK_COLOR_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, color) | |
| 49 #define CONCHECK_COLOR_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, color) | |
| 50 | |
| 51 /***************************************************************************** | |
| 52 * Font Specifier Object * | |
| 53 *****************************************************************************/ | |
| 54 | |
| 55 struct font_specifier | |
| 56 { | |
| 57 Lisp_Object face; /* face this is attached to, or nil */ | |
| 58 Lisp_Object face_property; /* property of that face */ | |
| 59 }; | |
| 60 | |
| 61 #define FONT_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, font) | |
| 62 #define FONT_SPECIFIER_FACE(g) (FONT_SPECIFIER_DATA (g)->face) | |
| 63 #define FONT_SPECIFIER_FACE_PROPERTY(g) \ | |
| 64 (FONT_SPECIFIER_DATA (g)->face_property) | |
| 65 | |
| 66 DECLARE_SPECIFIER_TYPE (font); | |
| 67 #define XFONT_SPECIFIER(x) XSPECIFIER_TYPE (x, font) | |
| 68 #define FONT_SPECIFIERP(x) SPECIFIER_TYPEP (x, font) | |
| 69 #define CHECK_FONT_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, font) | |
| 70 #define CONCHECK_FONT_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, font) | |
| 71 | |
| 72 /***************************************************************************** | |
| 73 * Face Boolean Specifier Object * | |
| 74 *****************************************************************************/ | |
| 75 | |
| 76 struct face_boolean_specifier | |
| 77 { | |
| 78 Lisp_Object face; /* face this is attached to, or nil */ | |
| 79 Lisp_Object face_property; /* property of that face */ | |
| 80 }; | |
| 81 | |
| 82 #define FACE_BOOLEAN_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, face_boolean) | |
| 83 #define FACE_BOOLEAN_SPECIFIER_FACE(g) (FACE_BOOLEAN_SPECIFIER_DATA (g)->face) | |
| 84 #define FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY(g) \ | |
| 85 (FACE_BOOLEAN_SPECIFIER_DATA (g)->face_property) | |
| 86 | |
| 87 DECLARE_SPECIFIER_TYPE (face_boolean); | |
| 88 extern Lisp_Object Qface_boolean; | |
| 89 #define XFACE_BOOLEAN_SPECIFIER(x) XSPECIFIER_TYPE (x, face_boolean) | |
| 90 #define FACE_BOOLEAN_SPECIFIERP(x) SPECIFIER_TYPEP (x, face_boolean) | |
| 91 #define CHECK_FACE_BOOLEAN_SPECIFIER(x) \ | |
| 92 CHECK_SPECIFIER_TYPE (x, face_boolean) | |
| 93 #define CONCHECK_FACE_BOOLEAN_SPECIFIER(x) \ | |
| 94 CONCHECK_SPECIFIER_TYPE (x, face_boolean) | |
| 95 | |
| 96 /**************************************************************************** | |
| 97 * Color Instance Object * | |
| 98 ****************************************************************************/ | |
| 99 | |
| 100 struct Lisp_Color_Instance | |
| 101 { | |
|
5120
d1247f3cc363
latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents:
3094
diff
changeset
|
102 LISP_OBJECT_HEADER header; |
| 872 | 103 Lisp_Object name; |
| 104 Lisp_Object device; | |
| 105 | |
| 1204 | 106 /* See comment in struct console about console variants. */ |
| 934 | 107 enum console_variant color_instance_type; |
| 108 | |
| 872 | 109 /* console-type-specific data */ |
| 110 void *data; | |
| 111 }; | |
| 112 | |
| 113 #define COLOR_INSTANCE_NAME(c) ((c)->name) | |
| 114 #define COLOR_INSTANCE_DEVICE(c) ((c)->device) | |
| 115 | |
| 116 /**************************************************************************** | |
| 117 * Font Instance Object * | |
| 118 ****************************************************************************/ | |
| 119 | |
| 120 struct Lisp_Font_Instance | |
| 121 { | |
|
5120
d1247f3cc363
latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents:
3094
diff
changeset
|
122 LISP_OBJECT_HEADER header; |
| 872 | 123 Lisp_Object name; /* the instantiator used to create the font instance */ |
| 124 Lisp_Object truename; /* used by the device-specific methods; we need to | |
| 125 call them to get the truename (#### in reality, | |
| 126 they all probably just store the truename here | |
| 127 if they know it, and nil otherwise; we should | |
| 3094 | 128 check this and enforce it as a general policy |
| 129 X and GTK do this, except that when they don't | |
| 130 know they return NAME and don't update TRUENAME. | |
| 131 MS Windows initializes TRUENAME when the font is | |
| 132 initialized. TTY doesn't do truename.) */ | |
| 872 | 133 Lisp_Object device; |
| 3094 | 134 Lisp_Object charset; /* Mule charset, or whatever */ |
| 872 | 135 |
| 1204 | 136 /* See comment in struct console about console variants. */ |
| 934 | 137 enum console_variant font_instance_type; |
| 138 | |
| 872 | 139 unsigned short ascent; /* extracted from `font', or made up */ |
| 140 unsigned short descent; | |
| 141 unsigned short width; | |
| 142 unsigned short height; | |
| 143 int proportional_p; | |
| 144 | |
| 145 /* console-type-specific data */ | |
| 146 void *data; | |
| 147 }; | |
| 148 | |
| 149 #define FONT_INSTANCE_NAME(f) ((f)->name) | |
| 3094 | 150 #define FONT_INSTANCE_TRUENAME(f) ((f)->truename) |
| 151 #define FONT_INSTANCE_CHARSET(f) ((f)->charset) | |
| 872 | 152 #define FONT_INSTANCE_DEVICE(f) ((f)->device) |
| 153 #define FONT_INSTANCE_ASCENT(f) ((f)->ascent) | |
| 154 #define FONT_INSTANCE_DESCENT(f) ((f)->descent) | |
| 155 #define FONT_INSTANCE_WIDTH(f) ((f)->width) | |
| 156 #define FONT_INSTANCE_HEIGHT(f) ((f)->height) | |
| 157 | |
| 158 #define XFONT_INSTANCE_NAME(f) FONT_INSTANCE_NAME (XFONT_INSTANCE (f)) | |
| 159 #define XFONT_INSTANCE_TRUENAME(f) FONT_INSTANCE_TRUENAME (XFONT_INSTANCE (f)) | |
| 3094 | 160 #define XFONT_INSTANCE_CHARSET(f) FONT_INSTANCE_CHARSET (XFONT_INSTANCE (f)) |
| 872 | 161 #define XFONT_INSTANCE_DEVICE(f) FONT_INSTANCE_DEVICE (XFONT_INSTANCE (f)) |
| 162 #define XFONT_INSTANCE_ASCENT(f) FONT_INSTANCE_ASCENT (XFONT_INSTANCE (f)) | |
| 163 #define XFONT_INSTANCE_DESCENT(f) FONT_INSTANCE_DESCENT (XFONT_INSTANCE (f)) | |
| 164 #define XFONT_INSTANCE_WIDTH(f) FONT_INSTANCE_WIDTH (XFONT_INSTANCE (f)) | |
| 165 #define XFONT_INSTANCE_HEIGHT(f) FONT_INSTANCE_HEIGHT (XFONT_INSTANCE (f)) | |
| 166 | |
| 167 #endif /* INCLUDED_objects_impl_h_ */ |
