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 =