Mercurial > hg > xemacs-beta
comparison src/symbols.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 | eaedf30d9d76 |
children | 25e260cb7994 |
comparison
equal
deleted
inserted
replaced
933:f6bc42928b34 | 934:c925bacdda60 |
---|---|
134 symbol_remprop (Lisp_Object symbol, Lisp_Object property) | 134 symbol_remprop (Lisp_Object symbol, Lisp_Object property) |
135 { | 135 { |
136 return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME); | 136 return external_remprop (&XSYMBOL (symbol)->plist, property, 0, ERROR_ME); |
137 } | 137 } |
138 | 138 |
139 #ifdef USE_KKCC | |
140 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol, | |
141 1, /*dumpable-flag*/ | |
142 mark_symbol, print_symbol, | |
143 0, 0, 0, symbol_description, | |
144 symbol_getprop, | |
145 symbol_putprop, | |
146 symbol_remprop, | |
147 Fsymbol_plist, | |
148 Lisp_Symbol); | |
149 #else /* not USE_KKCC */ | |
139 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol, | 150 DEFINE_BASIC_LRECORD_IMPLEMENTATION_WITH_PROPS ("symbol", symbol, |
140 mark_symbol, print_symbol, | 151 mark_symbol, print_symbol, |
141 0, 0, 0, symbol_description, | 152 0, 0, 0, symbol_description, |
142 symbol_getprop, | 153 symbol_getprop, |
143 symbol_putprop, | 154 symbol_putprop, |
144 symbol_remprop, | 155 symbol_remprop, |
145 Fsymbol_plist, | 156 Fsymbol_plist, |
146 Lisp_Symbol); | 157 Lisp_Symbol); |
147 | 158 #endif /* not USE_KKCC */ |
148 | 159 |
149 /**********************************************************************/ | 160 /**********************************************************************/ |
150 /* Intern */ | 161 /* Intern */ |
151 /**********************************************************************/ | 162 /**********************************************************************/ |
152 | 163 |
1005 { XD_LISP_OBJECT, offsetof (struct symbol_value_varalias, aliasee) }, | 1016 { XD_LISP_OBJECT, offsetof (struct symbol_value_varalias, aliasee) }, |
1006 { XD_LISP_OBJECT, offsetof (struct symbol_value_varalias, shadowed) }, | 1017 { XD_LISP_OBJECT, offsetof (struct symbol_value_varalias, shadowed) }, |
1007 { XD_END } | 1018 { XD_END } |
1008 }; | 1019 }; |
1009 | 1020 |
1021 #ifdef USE_KKCC | |
1022 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-forward", | |
1023 symbol_value_forward, | |
1024 1, /*dumpable-flag*/ | |
1025 0, | |
1026 print_symbol_value_magic, 0, 0, 0, | |
1027 symbol_value_forward_description, | |
1028 struct symbol_value_forward); | |
1029 | |
1030 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-buffer-local", | |
1031 symbol_value_buffer_local, | |
1032 1, /*dumpable-flag*/ | |
1033 mark_symbol_value_buffer_local, | |
1034 print_symbol_value_magic, 0, 0, 0, | |
1035 symbol_value_buffer_local_description, | |
1036 struct symbol_value_buffer_local); | |
1037 | |
1038 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-lisp-magic", | |
1039 symbol_value_lisp_magic, | |
1040 1, /*dumpable-flag*/ | |
1041 mark_symbol_value_lisp_magic, | |
1042 print_symbol_value_magic, 0, 0, 0, | |
1043 symbol_value_lisp_magic_description, | |
1044 struct symbol_value_lisp_magic); | |
1045 | |
1046 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-varalias", | |
1047 symbol_value_varalias, | |
1048 1, /*dumpable-flag*/ | |
1049 mark_symbol_value_varalias, | |
1050 print_symbol_value_magic, 0, 0, 0, | |
1051 symbol_value_varalias_description, | |
1052 struct symbol_value_varalias); | |
1053 | |
1054 #else /* not USE_KKCC */ | |
1055 | |
1010 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-forward", | 1056 DEFINE_LRECORD_IMPLEMENTATION ("symbol-value-forward", |
1011 symbol_value_forward, | 1057 symbol_value_forward, |
1012 0, | 1058 0, |
1013 print_symbol_value_magic, 0, 0, 0, | 1059 print_symbol_value_magic, 0, 0, 0, |
1014 symbol_value_forward_description, | 1060 symbol_value_forward_description, |
1032 symbol_value_varalias, | 1078 symbol_value_varalias, |
1033 mark_symbol_value_varalias, | 1079 mark_symbol_value_varalias, |
1034 print_symbol_value_magic, 0, 0, 0, | 1080 print_symbol_value_magic, 0, 0, 0, |
1035 symbol_value_varalias_description, | 1081 symbol_value_varalias_description, |
1036 struct symbol_value_varalias); | 1082 struct symbol_value_varalias); |
1037 | 1083 #endif /* not USE_KKCC */ |
1038 | 1084 |
1039 /* Getting and setting values of symbols */ | 1085 /* Getting and setting values of symbols */ |
1040 | 1086 |
1041 /* Given the raw contents of a symbol value cell, return the Lisp value of | 1087 /* Given the raw contents of a symbol value cell, return the Lisp value of |
1042 the symbol. However, VALCONTENTS cannot be a symbol-value-buffer-local, | 1088 the symbol. However, VALCONTENTS cannot be a symbol-value-buffer-local, |
3371 { | 3417 { |
3372 /* Need to fix lisp.h and eval.c if SUBR_MAX_ARGS too small */ | 3418 /* Need to fix lisp.h and eval.c if SUBR_MAX_ARGS too small */ |
3373 assert (subr->max_args <= SUBR_MAX_ARGS); | 3419 assert (subr->max_args <= SUBR_MAX_ARGS); |
3374 assert (subr->min_args <= subr->max_args); | 3420 assert (subr->min_args <= subr->max_args); |
3375 } | 3421 } |
3376 | |
3377 assert (UNBOUNDP (XSYMBOL (sym)->function)); | 3422 assert (UNBOUNDP (XSYMBOL (sym)->function)); |
3378 } | 3423 } |
3379 } | 3424 } |
3380 #else | 3425 #else |
3381 #define check_sane_subr(subr, sym) /* nothing */ | 3426 #define check_sane_subr(subr, sym) /* nothing */ |