Mercurial > hg > xemacs-beta
comparison src/tooltalk.c @ 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 | 804517e16990 |
children | 5b372a329b97 |
comparison
equal
deleted
inserted
replaced
933:f6bc42928b34 | 934:c925bacdda60 |
---|---|
150 struct lcrecord_header header; | 150 struct lcrecord_header header; |
151 Lisp_Object plist_sym, callback; | 151 Lisp_Object plist_sym, callback; |
152 Tt_message m; | 152 Tt_message m; |
153 }; | 153 }; |
154 | 154 |
155 #ifdef USE_KKCC | |
156 static const struct lrecord_description tooltalk_message_description [] = { | |
157 { XD_LISP_OBJECT, offsetof (struct Lisp_Tooltalk_Message, callback) }, | |
158 { XD_LISP_OBJECT, offsetof (struct Lisp_Tooltalk_Message, plist_sym) }, | |
159 { XD_END } | |
160 }; | |
161 #endif /* USE_KKCC */ | |
162 | |
155 static Lisp_Object | 163 static Lisp_Object |
156 mark_tooltalk_message (Lisp_Object obj) | 164 mark_tooltalk_message (Lisp_Object obj) |
157 { | 165 { |
158 mark_object (XTOOLTALK_MESSAGE (obj)->callback); | 166 mark_object (XTOOLTALK_MESSAGE (obj)->callback); |
159 return XTOOLTALK_MESSAGE (obj)->plist_sym; | 167 return XTOOLTALK_MESSAGE (obj)->plist_sym; |
171 | 179 |
172 write_fmt_string (printcharfun, "#<tooltalk_message id:0x%lx 0x%x>", | 180 write_fmt_string (printcharfun, "#<tooltalk_message id:0x%lx 0x%x>", |
173 (long) (p->m), p->header.uid); | 181 (long) (p->m), p->header.uid); |
174 } | 182 } |
175 | 183 |
184 #ifdef USE_KKCC | |
185 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message, | |
186 mark_tooltalk_message, print_tooltalk_message, | |
187 0, 0, 0, | |
188 tooltalk_message_description, | |
189 Lisp_Tooltalk_Message); | |
190 #else /* not USE_KKCC */ | |
176 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message, | 191 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message, |
177 mark_tooltalk_message, print_tooltalk_message, | 192 mark_tooltalk_message, print_tooltalk_message, |
178 0, 0, 0, 0, | 193 0, 0, 0, 0, |
179 Lisp_Tooltalk_Message); | 194 Lisp_Tooltalk_Message); |
195 #endif /* not USE_KKCC */ | |
180 | 196 |
181 static Lisp_Object | 197 static Lisp_Object |
182 make_tooltalk_message (Tt_message m) | 198 make_tooltalk_message (Tt_message m) |
183 { | 199 { |
184 Lisp_Object val; | 200 Lisp_Object val; |
220 struct lcrecord_header header; | 236 struct lcrecord_header header; |
221 Lisp_Object plist_sym, callback; | 237 Lisp_Object plist_sym, callback; |
222 Tt_pattern p; | 238 Tt_pattern p; |
223 }; | 239 }; |
224 | 240 |
241 #ifdef USE_KKCC | |
242 static const struct lrecord_description tooltalk_pattern_description [] = { | |
243 { XD_LISP_OBJECT, offsetof (struct Lisp_Tooltalk_Pattern, callback) }, | |
244 { XD_LISP_OBJECT, offsetof (struct Lisp_Tooltalk_Pattern, plist_sym) }, | |
245 { XD_END } | |
246 }; | |
247 #endif /* USE_KKCC */ | |
248 | |
225 static Lisp_Object | 249 static Lisp_Object |
226 mark_tooltalk_pattern (Lisp_Object obj) | 250 mark_tooltalk_pattern (Lisp_Object obj) |
227 { | 251 { |
228 mark_object (XTOOLTALK_PATTERN (obj)->callback); | 252 mark_object (XTOOLTALK_PATTERN (obj)->callback); |
229 return XTOOLTALK_PATTERN (obj)->plist_sym; | 253 return XTOOLTALK_PATTERN (obj)->plist_sym; |
241 | 265 |
242 write_fmt_string (printcharfun, "#<tooltalk_pattern id:0x%lx 0x%x>", | 266 write_fmt_string (printcharfun, "#<tooltalk_pattern id:0x%lx 0x%x>", |
243 (long) (p->p), p->header.uid); | 267 (long) (p->p), p->header.uid); |
244 } | 268 } |
245 | 269 |
270 #ifdef USE_KKCC | |
271 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern, | |
272 mark_tooltalk_pattern, print_tooltalk_pattern, | |
273 0, 0, 0, | |
274 tooltalk_pattern_description, | |
275 Lisp_Tooltalk_Pattern); | |
276 #else /* not USE_KKCC */ | |
246 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern, | 277 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern, |
247 mark_tooltalk_pattern, print_tooltalk_pattern, | 278 mark_tooltalk_pattern, print_tooltalk_pattern, |
248 0, 0, 0, 0, | 279 0, 0, 0, 0, |
249 Lisp_Tooltalk_Pattern); | 280 Lisp_Tooltalk_Pattern); |
281 #endif /* not USE_KKCC */ | |
250 | 282 |
251 static Lisp_Object | 283 static Lisp_Object |
252 make_tooltalk_pattern (Tt_pattern p) | 284 make_tooltalk_pattern (Tt_pattern p) |
253 { | 285 { |
254 Lisp_Tooltalk_Pattern *pat = | 286 Lisp_Tooltalk_Pattern *pat = |