Mercurial > hg > xemacs-beta
view src/objects-impl.h @ 934:c925bacdda60
[xemacs-hg @ 2002-07-29 09:21:12 by michaels]
2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de>
Markus Kaltenbach <makalten@informatik.uni-tuebingen.de>
Mike Sperber <mike@xemacs.org>
configure flag to turn these changes on: --use-kkcc
First we added a dumpable flag to lrecord_implementation. It shows,
if the object is dumpable and should be processed by the dumper.
* lrecord.h (struct lrecord_implementation): added dumpable flag
(MAKE_LRECORD_IMPLEMENTATION): fitted the different makro definitions
to the new lrecord_implementation and their calls.
Then we changed mark_object, that it no longer needs a mark method for
those types that have pdump descritions.
* alloc.c:
(mark_object): If the object has a description, the new mark algorithm
is called, and the object is marked according to its description.
Otherwise it uses the mark method like before.
These procedures mark objects according to their descriptions. They
are modeled on the corresponding pdumper procedures.
(mark_with_description):
(get_indirect_count):
(structure_size):
(mark_struct_contents):
These procedures still call mark_object, this is needed while there are
Lisp_Objects without descriptions left.
We added pdump descriptions for many Lisp_Objects:
* extents.c: extent_auxiliary_description
* database.c: database_description
* gui.c: gui_item_description
* scrollbar.c: scrollbar_instance_description
* toolbar.c: toolbar_button_description
* event-stream.c: command_builder_description
* mule-charset.c: charset_description
* device-msw.c: devmode_description
* dialog-msw.c: mswindows_dialog_id_description
* eldap.c: ldap_description
* postgresql.c: pgconn_description
pgresult_description
* tooltalk.c: tooltalk_message_description
tooltalk_pattern_description
* ui-gtk.c: emacs_ffi_description
emacs_gtk_object_description
* events.c:
* events.h:
* event-stream.c:
* event-Xt.c:
* event-gtk.c:
* event-tty.c:
To write a pdump description for Lisp_Event, we converted every struct
in the union event to a Lisp_Object. So we created nine new
Lisp_Objects: Lisp_Key_Data, Lisp_Button_Data, Lisp_Motion_Data,
Lisp_Process_Data, Lisp_Timeout_Data, Lisp_Eval_Data,
Lisp_Misc_User_Data, Lisp_Magic_Data, Lisp_Magic_Eval_Data.
We also wrote makro selectors and mutators for the fields of the new
designed Lisp_Event and added everywhere these new abstractions.
We implemented XD_UNION support in (mark_with_description), so
we can describe exspecially console/device specific data with XD_UNION.
To describe with XD_UNION, we added a field to these objects, which
holds the variant type of the object. This field is initialized in
the appendant constructor. The variant is an integer, it has also to
be described in an description, if XD_UNION is used.
XD_UNION is used in following descriptions:
* console.c: console_description
(get_console_variant): returns the variant
(create_console): added variant initialization
* console.h (console_variant): the different console types
* console-impl.h (struct console): added enum console_variant contype
* device.c: device_description
(Fmake_device): added variant initialization
* device-impl.h (struct device): added enum console_variant devtype
* objects.c: image_instance_description
font_instance_description
(Fmake_color_instance): added variant initialization
(Fmake_font_instance): added variant initialization
* objects-impl.h (struct Lisp_Color_Instance): added color_instance_type
* objects-impl.h (struct Lisp_Font_Instance): added font_instance_type
* process.c: process_description
(make_process_internal): added variant initialization
* process.h (process_variant): the different process types
author | michaels |
---|---|
date | Mon, 29 Jul 2002 09:21:25 +0000 |
parents | 79c6ff3eef26 |
children | e22b0213b713 |
line wrap: on
line source
/* Generic object functions -- header implementation. Copyright (C) 1995 Board of Trustees, University of Illinois. Copyright (C) 1995, 1996, 2002 Ben Wing. This file is part of XEmacs. XEmacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. XEmacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ #ifndef INCLUDED_objects_impl_h_ #define INCLUDED_objects_impl_h_ #include "specifier.h" #include "objects.h" /***************************************************************************** * Color Specifier Object * *****************************************************************************/ struct color_specifier { Lisp_Object face; /* face this is attached to, or nil */ Lisp_Object face_property; /* property of that face */ }; #define COLOR_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, color) #define COLOR_SPECIFIER_FACE(g) (COLOR_SPECIFIER_DATA (g)->face) #define COLOR_SPECIFIER_FACE_PROPERTY(g) \ (COLOR_SPECIFIER_DATA (g)->face_property) DECLARE_SPECIFIER_TYPE (color); #define XCOLOR_SPECIFIER(x) XSPECIFIER_TYPE (x, color) #define COLOR_SPECIFIERP(x) SPECIFIER_TYPEP (x, color) #define CHECK_COLOR_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, color) #define CONCHECK_COLOR_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, color) /***************************************************************************** * Font Specifier Object * *****************************************************************************/ struct font_specifier { Lisp_Object face; /* face this is attached to, or nil */ Lisp_Object face_property; /* property of that face */ }; #define FONT_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, font) #define FONT_SPECIFIER_FACE(g) (FONT_SPECIFIER_DATA (g)->face) #define FONT_SPECIFIER_FACE_PROPERTY(g) \ (FONT_SPECIFIER_DATA (g)->face_property) DECLARE_SPECIFIER_TYPE (font); #define XFONT_SPECIFIER(x) XSPECIFIER_TYPE (x, font) #define FONT_SPECIFIERP(x) SPECIFIER_TYPEP (x, font) #define CHECK_FONT_SPECIFIER(x) CHECK_SPECIFIER_TYPE (x, font) #define CONCHECK_FONT_SPECIFIER(x) CONCHECK_SPECIFIER_TYPE (x, font) /***************************************************************************** * Face Boolean Specifier Object * *****************************************************************************/ struct face_boolean_specifier { Lisp_Object face; /* face this is attached to, or nil */ Lisp_Object face_property; /* property of that face */ }; #define FACE_BOOLEAN_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, face_boolean) #define FACE_BOOLEAN_SPECIFIER_FACE(g) (FACE_BOOLEAN_SPECIFIER_DATA (g)->face) #define FACE_BOOLEAN_SPECIFIER_FACE_PROPERTY(g) \ (FACE_BOOLEAN_SPECIFIER_DATA (g)->face_property) DECLARE_SPECIFIER_TYPE (face_boolean); extern Lisp_Object Qface_boolean; #define XFACE_BOOLEAN_SPECIFIER(x) XSPECIFIER_TYPE (x, face_boolean) #define FACE_BOOLEAN_SPECIFIERP(x) SPECIFIER_TYPEP (x, face_boolean) #define CHECK_FACE_BOOLEAN_SPECIFIER(x) \ CHECK_SPECIFIER_TYPE (x, face_boolean) #define CONCHECK_FACE_BOOLEAN_SPECIFIER(x) \ CONCHECK_SPECIFIER_TYPE (x, face_boolean) /**************************************************************************** * Color Instance Object * ****************************************************************************/ struct Lisp_Color_Instance { struct lcrecord_header header; Lisp_Object name; Lisp_Object device; #ifdef USE_KKCC enum console_variant color_instance_type; #endif /* USE_KKCC */ /* console-type-specific data */ void *data; }; #define COLOR_INSTANCE_NAME(c) ((c)->name) #define COLOR_INSTANCE_DEVICE(c) ((c)->device) /**************************************************************************** * Font Instance Object * ****************************************************************************/ struct Lisp_Font_Instance { struct lcrecord_header header; Lisp_Object name; /* the instantiator used to create the font instance */ Lisp_Object truename; /* used by the device-specific methods; we need to call them to get the truename (#### in reality, they all probably just store the truename here if they know it, and nil otherwise; we should check this and enforce it as a general policy) */ Lisp_Object device; #ifdef USE_KKCC enum console_variant font_instance_type; #endif /* USE_KKCC */ unsigned short ascent; /* extracted from `font', or made up */ unsigned short descent; unsigned short width; unsigned short height; int proportional_p; /* console-type-specific data */ void *data; }; #define FONT_INSTANCE_NAME(f) ((f)->name) #define FONT_INSTANCE_TRUENAME(f) ((f)->name) #define FONT_INSTANCE_DEVICE(f) ((f)->device) #define FONT_INSTANCE_ASCENT(f) ((f)->ascent) #define FONT_INSTANCE_DESCENT(f) ((f)->descent) #define FONT_INSTANCE_WIDTH(f) ((f)->width) #define FONT_INSTANCE_HEIGHT(f) ((f)->height) #define XFONT_INSTANCE_NAME(f) FONT_INSTANCE_NAME (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_TRUENAME(f) FONT_INSTANCE_TRUENAME (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_DEVICE(f) FONT_INSTANCE_DEVICE (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_ASCENT(f) FONT_INSTANCE_ASCENT (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_DESCENT(f) FONT_INSTANCE_DESCENT (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_WIDTH(f) FONT_INSTANCE_WIDTH (XFONT_INSTANCE (f)) #define XFONT_INSTANCE_HEIGHT(f) FONT_INSTANCE_HEIGHT (XFONT_INSTANCE (f)) #endif /* INCLUDED_objects_impl_h_ */