comparison src/alloc.c @ 4952:19a72041c5ed

Mule-izing, various fixes related to char * arguments -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (print_pgresult): * postgresql/postgresql.c (Fpq_conn_defaults): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_result_status): * postgresql/postgresql.c (Fpq_res_status): Mule-ize large parts of it. 2010-01-26 Ben Wing <ben@xemacs.org> * ldap/eldap.c (print_ldap): * ldap/eldap.c (allocate_ldap): Use write_ascstring(). src/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (build_ascstring): * alloc.c (build_msg_cistring): * alloc.c (staticpro_1): * alloc.c (staticpro_name): * alloc.c (staticpro_nodump_1): * alloc.c (staticpro_nodump_name): * alloc.c (unstaticpro_nodump_1): * alloc.c (mcpro_1): * alloc.c (mcpro_name): * alloc.c (object_memory_usage_stats): * alloc.c (common_init_alloc_early): * alloc.c (init_alloc_once_early): * buffer.c (print_buffer): * buffer.c (vars_of_buffer): * buffer.c (common_init_complex_vars_of_buffer): * buffer.c (init_initial_directory): * bytecode.c (invalid_byte_code): * bytecode.c (print_compiled_function): * bytecode.c (mark_compiled_function): * chartab.c (print_table_entry): * chartab.c (print_char_table): * config.h.in: * console-gtk.c: * console-gtk.c (gtk_device_to_console_connection): * console-gtk.c (gtk_semi_canonicalize_console_connection): * console-gtk.c (gtk_canonicalize_console_connection): * console-gtk.c (gtk_semi_canonicalize_device_connection): * console-gtk.c (gtk_canonicalize_device_connection): * console-stream.c (stream_init_frame_1): * console-stream.c (vars_of_console_stream): * console-stream.c (init_console_stream): * console-x.c (x_semi_canonicalize_console_connection): * console-x.c (x_semi_canonicalize_device_connection): * console-x.c (x_canonicalize_device_connection): * console-x.h: * data.c (eq_with_ebola_notice): * data.c (Fsubr_interactive): * data.c (Fnumber_to_string): * data.c (digit_to_number): * device-gtk.c (gtk_init_device): * device-msw.c (print_devmode): * device-x.c (x_event_name): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-msw.c (vars_of_dialog_mswindows): * doc.c (weird_doc): * doc.c (Fsnarf_documentation): * doc.c (vars_of_doc): * dumper.c (pdump): * dynarr.c: * dynarr.c (Dynarr_realloc): * editfns.c (Fuser_real_login_name): * editfns.c (get_home_directory): * elhash.c (print_hash_table_data): * elhash.c (print_hash_table): * emacs.c (main_1): * emacs.c (vars_of_emacs): * emodules.c: * emodules.c (_emodules_list): * emodules.c (Fload_module): * emodules.c (Funload_module): * emodules.c (Flist_modules): * emodules.c (find_make_module): * emodules.c (attempt_module_delete): * emodules.c (emodules_load): * emodules.c (emodules_doc_subr): * emodules.c (emodules_doc_sym): * emodules.c (syms_of_module): * emodules.c (vars_of_module): * emodules.h: * eval.c (print_subr): * eval.c (signal_call_debugger): * eval.c (build_error_data): * eval.c (signal_error): * eval.c (maybe_signal_error): * eval.c (signal_continuable_error): * eval.c (maybe_signal_continuable_error): * eval.c (signal_error_2): * eval.c (maybe_signal_error_2): * eval.c (signal_continuable_error_2): * eval.c (maybe_signal_continuable_error_2): * eval.c (signal_ferror): * eval.c (maybe_signal_ferror): * eval.c (signal_continuable_ferror): * eval.c (maybe_signal_continuable_ferror): * eval.c (signal_ferror_with_frob): * eval.c (maybe_signal_ferror_with_frob): * eval.c (signal_continuable_ferror_with_frob): * eval.c (maybe_signal_continuable_ferror_with_frob): * eval.c (syntax_error): * eval.c (syntax_error_2): * eval.c (maybe_syntax_error): * eval.c (sferror): * eval.c (sferror_2): * eval.c (maybe_sferror): * eval.c (invalid_argument): * eval.c (invalid_argument_2): * eval.c (maybe_invalid_argument): * eval.c (invalid_constant): * eval.c (invalid_constant_2): * eval.c (maybe_invalid_constant): * eval.c (invalid_operation): * eval.c (invalid_operation_2): * eval.c (maybe_invalid_operation): * eval.c (invalid_change): * eval.c (invalid_change_2): * eval.c (maybe_invalid_change): * eval.c (invalid_state): * eval.c (invalid_state_2): * eval.c (maybe_invalid_state): * eval.c (wtaerror): * eval.c (stack_overflow): * eval.c (out_of_memory): * eval.c (print_multiple_value): * eval.c (issue_call_trapping_problems_warning): * eval.c (backtrace_specials): * eval.c (backtrace_unevalled_args): * eval.c (Fbacktrace): * eval.c (warn_when_safe): * event-Xt.c (modwarn): * event-Xt.c (modbarf): * event-Xt.c (check_modifier): * event-Xt.c (store_modifier): * event-Xt.c (emacs_Xt_format_magic_event): * event-Xt.c (describe_event): * event-gtk.c (dragndrop_data_received): * event-gtk.c (store_modifier): * event-gtk.c (gtk_reset_modifier_mapping): * event-msw.c (dde_eval_string): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (FROB): * event-msw.c (emacs_mswindows_format_magic_event): * event-stream.c (external_debugging_print_event): * event-stream.c (execute_help_form): * event-stream.c (vars_of_event_stream): * events.c (print_event_1): * events.c (print_event): * events.c (event_equal): * extents.c (print_extent_1): * extents.c (print_extent): * extents.c (vars_of_extents): * faces.c (print_face): * faces.c (complex_vars_of_faces): * file-coding.c: * file-coding.c (print_coding_system): * file-coding.c (print_coding_system_in_print_method): * file-coding.c (default_query_method): * file-coding.c (find_coding_system): * file-coding.c (make_coding_system_1): * file-coding.c (chain_print): * file-coding.c (undecided_print): * file-coding.c (gzip_print): * file-coding.c (vars_of_file_coding): * file-coding.c (complex_vars_of_file_coding): * fileio.c: * fileio.c (report_file_type_error): * fileio.c (report_error_with_errno): * fileio.c (report_file_error): * fileio.c (barf_or_query_if_file_exists): * fileio.c (vars_of_fileio): * floatfns.c (matherr): * fns.c (print_bit_vector): * fns.c (Fmapconcat): * fns.c (add_suffix_to_symbol): * fns.c (add_prefix_to_symbol): * frame-gtk.c: * frame-gtk.c (Fgtk_window_id): * frame-x.c (def): * frame-x.c (x_cde_transfer_callback): * frame.c: * frame.c (Fmake_frame): * gc.c (show_gc_cursor_and_message): * gc.c (vars_of_gc): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (gtk_print_image_instance): * glyphs-msw.c (mswindows_print_image_instance): * glyphs-x.c (x_print_image_instance): * glyphs-x.c (update_widget_face): * glyphs.c (make_string_from_file): * glyphs.c (print_image_instance): * glyphs.c (signal_image_error): * glyphs.c (signal_image_error_2): * glyphs.c (signal_double_image_error): * glyphs.c (signal_double_image_error_2): * glyphs.c (xbm_mask_file_munging): * glyphs.c (pixmap_to_lisp_data): * glyphs.h: * gui.c (gui_item_display_flush_left): * hpplay.c (player_error_internal): * hpplay.c (myHandler): * intl-win32.c: * intl-win32.c (langcode_to_lang): * intl-win32.c (sublangcode_to_lang): * intl-win32.c (Fmswindows_get_locale_info): * intl-win32.c (lcid_to_locale_mule_or_no): * intl-win32.c (mswindows_multibyte_to_unicode_print): * intl-win32.c (complex_vars_of_intl_win32): * keymap.c: * keymap.c (print_keymap): * keymap.c (ensure_meta_prefix_char_keymapp): * keymap.c (Fkey_description): * keymap.c (Ftext_char_description): * lisp.h: * lisp.h (struct): * lisp.h (DECLARE_INLINE_HEADER): * lread.c (Fload_internal): * lread.c (locate_file): * lread.c (read_escape): * lread.c (read_raw_string): * lread.c (read1): * lread.c (read_list): * lread.c (read_compiled_function): * lread.c (init_lread): * lrecord.h: * marker.c (print_marker): * marker.c (marker_equal): * menubar-msw.c (displayable_menu_item): * menubar-x.c (command_builder_operate_menu_accelerator): * menubar.c (vars_of_menubar): * minibuf.c (reinit_complex_vars_of_minibuf): * minibuf.c (complex_vars_of_minibuf): * mule-charset.c (Fmake_charset): * mule-charset.c (complex_vars_of_mule_charset): * mule-coding.c (iso2022_print): * mule-coding.c (fixed_width_query): * number.c (bignum_print): * number.c (ratio_print): * number.c (bigfloat_print): * number.c (bigfloat_finalize): * objects-msw.c: * objects-msw.c (mswindows_color_to_string): * objects-msw.c (mswindows_color_list): * objects-tty.c: * objects-tty.c (tty_font_list): * objects-tty.c (tty_find_charset_font): * objects-xlike-inc.c (xft_find_charset_font): * objects-xlike-inc.c (endif): * print.c: * print.c (write_istring): * print.c (write_ascstring): * print.c (Fterpri): * print.c (Fprint): * print.c (print_error_message): * print.c (print_vector_internal): * print.c (print_cons): * print.c (print_string): * print.c (printing_unreadable_object): * print.c (print_internal): * print.c (print_float): * print.c (print_symbol): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_canonicalize_host_name): * process-unix.c (unix_canonicalize_host_name): * process.c (print_process): * process.c (report_process_error): * process.c (report_network_error): * process.c (make_process_internal): * process.c (Fstart_process_internal): * process.c (status_message): * process.c (putenv_internal): * process.c (vars_of_process): * process.h: * profile.c (vars_of_profile): * rangetab.c (print_range_table): * realpath.c (vars_of_realpath): * redisplay.c (vars_of_redisplay): * search.c (wordify): * search.c (Freplace_match): * sheap.c (sheap_adjust_h): * sound.c (report_sound_error): * sound.c (Fplay_sound_file): * specifier.c (print_specifier): * symbols.c (Fsubr_name): * symbols.c (do_symval_forwarding): * symbols.c (set_default_buffer_slot_variable): * symbols.c (set_default_console_slot_variable): * symbols.c (store_symval_forwarding): * symbols.c (default_value): * symbols.c (defsymbol_massage_name_1): * symbols.c (defsymbol_massage_name_nodump): * symbols.c (defsymbol_massage_name): * symbols.c (defsymbol_massage_multiword_predicate_nodump): * symbols.c (defsymbol_massage_multiword_predicate): * symbols.c (defsymbol_nodump): * symbols.c (defsymbol): * symbols.c (defkeyword): * symbols.c (defkeyword_massage_name): * symbols.c (check_module_subr): * symbols.c (deferror_1): * symbols.c (deferror): * symbols.c (deferror_massage_name): * symbols.c (deferror_massage_name_and_message): * symbols.c (defvar_magic): * symeval.h: * symeval.h (DEFVAR_SYMVAL_FWD): * sysdep.c: * sysdep.c (init_system_name): * sysdll.c: * sysdll.c (MAYBE_PREPEND_UNDERSCORE): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (dll_error): * sysdll.c (dll_open): * sysdll.c (dll_close): * sysdll.c (image_for_address): * sysdll.c (my_find_image): * sysdll.c (search_linked_libs): * sysdll.h: * sysfile.h: * sysfile.h (DEFAULT_DIRECTORY_FALLBACK): * syswindows.h: * tests.c (DFC_CHECK_LENGTH): * tests.c (DFC_CHECK_CONTENT): * tests.c (Ftest_hash_tables): * text.c (vars_of_text): * text.h: * tooltalk.c (tt_opnum_string): * tooltalk.c (tt_message_arg_ival_string): * tooltalk.c (Ftooltalk_default_procid): * tooltalk.c (Ftooltalk_default_session): * tooltalk.c (init_tooltalk): * tooltalk.c (vars_of_tooltalk): * ui-gtk.c (Fdll_load): * ui-gtk.c (type_to_marshaller_type): * ui-gtk.c (Fgtk_import_function_internal): * ui-gtk.c (emacs_gtk_object_printer): * ui-gtk.c (emacs_gtk_boxed_printer): * unicode.c (unicode_to_ichar): * unicode.c (unicode_print): * unicode.c (unicode_query): * unicode.c (vars_of_unicode): * unicode.c (complex_vars_of_unicode): * win32.c: * win32.c (mswindows_report_process_error): * window.c (print_window): * xemacs.def.in.in: BASIC IDEA: Further fixing up uses of char * and CIbyte * to reflect their actual semantics; Mule-izing some code; redoing of the not-yet-working code to handle message translation. Clean up code to handle message-translation (not yet working). Create separate versions of build_msg_string() for working with Ibyte *, CIbyte *, and Ascbyte * arguments. Assert that Ascbyte * arguments are pure-ASCII. Make build_msg_string() be the same as build_msg_ascstring(). Create same three versions of GETTEXT() and DEFER_GETTEXT(). Also create build_defer_string() and variants for the equivalent of DEFER_GETTEXT() when building a string. Remove old CGETTEXT(). Clean up code where GETTEXT(), DEFER_GETTEXT(), build_msg_string(), etc. was being called and introduce some new calls to build_msg_string(), etc. Remove GETTEXT() from calls to weird_doc() -- we assume that the message snarfer knows about weird_doc(). Remove uses of DEFER_GETTEXT() from error messages in sysdep.c and instead use special comments /* @@@begin-snarf@@@ */ and /* @@@end-snarf@@@ */ that the message snarfer presumably knows about. Create build_ascstring() and use it in many instances in place of build_string(). The purpose of having Ascbyte * variants is to make the code more self-documenting in terms of what sort of semantics is expected for char * strings. In fact in the process of looking for uses of build_string(), much improperly Mule-ized was discovered. Mule-ize a lot of code as described in previous paragraph, e.g. in sysdep.c. Make the error functions take Ascbyte * strings and fix up a couple of places where non-pure-ASCII strings were being passed in (file-coding.c, mule-coding.c, unicode.c). (It's debatable whether we really need to make the error functions work this way. It helps catch places where code is written in a way that message translation won't work, but we may well never implement message translation.) Make staticpro() and friends take Ascbyte * strings instead of raw char * strings. Create a const_Ascbyte_ptr dynarr type to describe what's held by staticpro_names[] and friends, create pdump descriptions for const_Ascbyte_ptr dynarrs, and use them in place of specially-crafted staticpro descriptions. Mule-ize certain other functions (e.g. x_event_name) by correcting raw use of char * to Ascbyte *, Rawbyte * or another such type, and raw use of char[] buffers to another type (usually Ascbyte[]). Change many uses of write_c_string() to write_msg_string(), write_ascstring(), etc. Mule-ize emodules.c, emodules.h, sysdll.h. Fix some un-Mule-ized code in intl-win32.c. A comment in event-Xt.c and the limitations of the message snarfer (make-msgfile or whatever) is presumably incorrect -- it should be smart enough to handle function calls spread over more than one line. Clean up code in event-Xt.c that was written awkwardly for this reason. In config.h.in, instead of NEED_ERROR_CHECK_TYPES_INLINES, create a more general XEMACS_DEFS_NEEDS_INLINE_DECLS to indicate when inlined functions need to be declared in xemacs.defs.in.in, and make use of it in xemacs.defs.in.in. We need to do this because postgresql.c now calls qxestrdup(), which is an inline function. Make nconc2() and other such functions MODULE_API and put them in xemacs.defs.in.in since postgresql.c now uses them. Clean up indentation in lread.c and a few other places. In text.h, document ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN(), group together the stand-in encodings and add some more for DLL symbols, function and variable names, etc.
author Ben Wing <ben@xemacs.org>
date Tue, 26 Jan 2010 23:22:30 -0600
parents 299dce99bdad
children 304aebb79cd3
comparison
equal deleted inserted replaced
4951:de60897044f4 4952:19a72041c5ed
2892 } 2892 }
2893 2893
2894 Lisp_Object 2894 Lisp_Object
2895 build_string (const CIbyte *str) 2895 build_string (const CIbyte *str)
2896 { 2896 {
2897 /* Some strlen's crash and burn if passed null. */ 2897 return build_intstring ((const Ibyte *) str);
2898 return make_string ((const Ibyte *) str, (str ? strlen (str) : 0)); 2898 }
2899
2900 Lisp_Object
2901 build_ascstring (const Ascbyte *str)
2902 {
2903 ASSERT_ASCTEXT_ASCII (str);
2904 return build_intstring ((const Ibyte *) str);
2899 } 2905 }
2900 2906
2901 Lisp_Object 2907 Lisp_Object
2902 build_ext_string (const Extbyte *str, Lisp_Object coding_system) 2908 build_ext_string (const Extbyte *str, Lisp_Object coding_system)
2903 { 2909 {
2906 (str ? dfc_external_data_len (str, coding_system) : 2912 (str ? dfc_external_data_len (str, coding_system) :
2907 0), 2913 0),
2908 coding_system); 2914 coding_system);
2909 } 2915 }
2910 2916
2911 Lisp_Object 2917 /* Build a string whose content is a translatable message, and translate
2912 build_msg_intstring (const Ibyte *str) 2918 the message according to the current language environment. */
2913 { 2919
2914 return build_intstring (GETTEXT (str)); 2920 Lisp_Object
2915 } 2921 build_msg_istring (const Ibyte *str)
2916 2922 {
2917 Lisp_Object 2923 return build_intstring (IGETTEXT (str));
2918 build_msg_string (const CIbyte *str) 2924 }
2919 { 2925
2920 return build_string (CGETTEXT (str)); 2926 /* Build a string whose content is a translatable message, and translate
2927 the message according to the current language environment. */
2928
2929 Lisp_Object
2930 build_msg_cistring (const CIbyte *str)
2931 {
2932 return build_msg_istring ((const Ibyte *) str);
2933 }
2934
2935 /* Build a string whose content is a translatable message, and translate
2936 the message according to the current language environment.
2937 String must be pure-ASCII, and when compiled with error-checking,
2938 an abort will have if not pure-ASCII. */
2939
2940 Lisp_Object
2941 build_msg_ascstring (const Ascbyte *str)
2942 {
2943 ASSERT_ASCTEXT_ASCII (str);
2944 return build_msg_istring ((const Ibyte *) str);
2945 }
2946
2947 /* Build a string whose content is a translatable message, but don't
2948 translate the message immediately. Perhaps do something else instead,
2949 such as put a property on the string indicating that it needs to be
2950 translated.
2951
2952 This is useful for strings that are built at dump time or init time,
2953 rather than on-the-fly when the current language environment is set
2954 properly. */
2955
2956 Lisp_Object
2957 build_defer_istring (const Ibyte *str)
2958 {
2959 Lisp_Object retval = build_intstring ((Ibyte *) str);
2960 /* Possibly do something to the return value */
2961 return retval;
2962 }
2963
2964 Lisp_Object
2965 build_defer_cistring (const CIbyte *str)
2966 {
2967 return build_defer_istring ((Ibyte *) str);
2968 }
2969
2970 Lisp_Object
2971 build_defer_ascstring (const Ascbyte *str)
2972 {
2973 ASSERT_ASCTEXT_ASCII (str);
2974 return build_defer_istring ((Ibyte *) str);
2921 } 2975 }
2922 2976
2923 Lisp_Object 2977 Lisp_Object
2924 make_string_nocopy (const Ibyte *contents, Bytecount length) 2978 make_string_nocopy (const Ibyte *contents, Bytecount length)
2925 { 2979 {
3241 staticpros_description_1 3295 staticpros_description_1
3242 }; 3296 };
3243 3297
3244 #ifdef DEBUG_XEMACS 3298 #ifdef DEBUG_XEMACS
3245 3299
3246 static const struct memory_description staticpro_one_name_description_1[] = {
3247 { XD_ASCII_STRING, 0 },
3248 { XD_END }
3249 };
3250
3251 static const struct sized_memory_description staticpro_one_name_description = {
3252 sizeof (char *),
3253 staticpro_one_name_description_1
3254 };
3255
3256 static const struct memory_description staticpro_names_description_1[] = {
3257 XD_DYNARR_DESC (char_ptr_dynarr, &staticpro_one_name_description),
3258 { XD_END }
3259 };
3260
3261
3262 extern const struct sized_memory_description staticpro_names_description;
3263
3264 const struct sized_memory_description staticpro_names_description = {
3265 sizeof (char_ptr_dynarr),
3266 staticpro_names_description_1
3267 };
3268
3269 /* Help debug crashes gc-marking a staticpro'ed object. */ 3300 /* Help debug crashes gc-marking a staticpro'ed object. */
3270 3301
3271 Lisp_Object_ptr_dynarr *staticpros; 3302 Lisp_Object_ptr_dynarr *staticpros;
3272 char_ptr_dynarr *staticpro_names; 3303 const_Ascbyte_ptr_dynarr *staticpro_names;
3273 3304
3274 /* Mark the Lisp_Object at non-heap VARADDRESS as a root object for 3305 /* Mark the Lisp_Object at non-heap VARADDRESS as a root object for
3275 garbage collection, and for dumping. */ 3306 garbage collection, and for dumping. */
3276 void 3307 void
3277 staticpro_1 (Lisp_Object *varaddress, char *varname) 3308 staticpro_1 (Lisp_Object *varaddress, const Ascbyte *varname)
3278 { 3309 {
3279 Dynarr_add (staticpros, varaddress); 3310 Dynarr_add (staticpros, varaddress);
3280 Dynarr_add (staticpro_names, varname); 3311 Dynarr_add (staticpro_names, varname);
3281 dump_add_root_lisp_object (varaddress); 3312 dump_add_root_lisp_object (varaddress);
3282 } 3313 }
3283 3314
3284 /* External debugging function: Return the name of the variable at offset 3315 /* External debugging function: Return the name of the variable at offset
3285 COUNT. */ 3316 COUNT. */
3286 char * 3317 const Ascbyte *
3287 staticpro_name (int count) 3318 staticpro_name (int count)
3288 { 3319 {
3289 return Dynarr_at (staticpro_names, count); 3320 return Dynarr_at (staticpro_names, count);
3290 } 3321 }
3291 3322
3292 Lisp_Object_ptr_dynarr *staticpros_nodump; 3323 Lisp_Object_ptr_dynarr *staticpros_nodump;
3293 char_ptr_dynarr *staticpro_nodump_names; 3324 const_Ascbyte_ptr_dynarr *staticpro_nodump_names;
3294 3325
3295 /* Mark the Lisp_Object at heap VARADDRESS as a root object for 3326 /* Mark the Lisp_Object at heap VARADDRESS as a root object for
3296 garbage collection, but not for dumping. (See below.) */ 3327 garbage collection, but not for dumping. (See below.) */
3297 void 3328 void
3298 staticpro_nodump_1 (Lisp_Object *varaddress, char *varname) 3329 staticpro_nodump_1 (Lisp_Object *varaddress, const Ascbyte *varname)
3299 { 3330 {
3300 Dynarr_add (staticpros_nodump, varaddress); 3331 Dynarr_add (staticpros_nodump, varaddress);
3301 Dynarr_add (staticpro_nodump_names, varname); 3332 Dynarr_add (staticpro_nodump_names, varname);
3302 } 3333 }
3303 3334
3304 /* External debugging function: Return the name of the variable at offset 3335 /* External debugging function: Return the name of the variable at offset
3305 COUNT. */ 3336 COUNT. */
3306 char * 3337 const Ascbyte *
3307 staticpro_nodump_name (int count) 3338 staticpro_nodump_name (int count)
3308 { 3339 {
3309 return Dynarr_at (staticpro_nodump_names, count); 3340 return Dynarr_at (staticpro_nodump_names, count);
3310 } 3341 }
3311 3342
3312 #ifdef HAVE_SHLIB 3343 #ifdef HAVE_SHLIB
3313 /* Stop treating the Lisp_Object at non-heap VARADDRESS as a root object 3344 /* Stop treating the Lisp_Object at non-heap VARADDRESS as a root object
3314 for garbage collection, but not for dumping. */ 3345 for garbage collection, but not for dumping. */
3315 void 3346 void
3316 unstaticpro_nodump_1 (Lisp_Object *varaddress, char *varname) 3347 unstaticpro_nodump_1 (Lisp_Object *varaddress, const Ascbyte *varname)
3317 { 3348 {
3318 Dynarr_delete_object (staticpros, varaddress); 3349 Dynarr_delete_object (staticpros, varaddress);
3319 Dynarr_delete_object (staticpro_names, varname); 3350 Dynarr_delete_object (staticpro_names, varname);
3320 } 3351 }
3321 #endif 3352 #endif
3395 mcpros_description_1 3426 mcpros_description_1
3396 }; 3427 };
3397 3428
3398 #ifdef DEBUG_XEMACS 3429 #ifdef DEBUG_XEMACS
3399 3430
3400 static const struct memory_description mcpro_one_name_description_1[] = {
3401 { XD_ASCII_STRING, 0 },
3402 { XD_END }
3403 };
3404
3405 static const struct sized_memory_description mcpro_one_name_description = {
3406 sizeof (char *),
3407 mcpro_one_name_description_1
3408 };
3409
3410 static const struct memory_description mcpro_names_description_1[] = {
3411 XD_DYNARR_DESC (char_ptr_dynarr, &mcpro_one_name_description),
3412 { XD_END }
3413 };
3414
3415 extern const struct sized_memory_description mcpro_names_description;
3416
3417 const struct sized_memory_description mcpro_names_description = {
3418 sizeof (char_ptr_dynarr),
3419 mcpro_names_description_1
3420 };
3421
3422 /* Help debug crashes gc-marking a mcpro'ed object. */ 3431 /* Help debug crashes gc-marking a mcpro'ed object. */
3423 3432
3424 Lisp_Object_dynarr *mcpros; 3433 Lisp_Object_dynarr *mcpros;
3425 char_ptr_dynarr *mcpro_names; 3434 const_Ascbyte_ptr_dynarr *mcpro_names;
3426 3435
3427 /* Mark the Lisp_Object at non-heap VARADDRESS as a root object for 3436 /* Mark the Lisp_Object at non-heap VARADDRESS as a root object for
3428 garbage collection, and for dumping. */ 3437 garbage collection, and for dumping. */
3429 void 3438 void
3430 mcpro_1 (Lisp_Object varaddress, char *varname) 3439 mcpro_1 (Lisp_Object varaddress, const Ascbyte *varname)
3431 { 3440 {
3432 Dynarr_add (mcpros, varaddress); 3441 Dynarr_add (mcpros, varaddress);
3433 Dynarr_add (mcpro_names, varname); 3442 Dynarr_add (mcpro_names, varname);
3434 } 3443 }
3435 3444
3436 /* External debugging function: Return the name of the variable at offset 3445 /* External debugging function: Return the name of the variable at offset
3437 COUNT. */ 3446 COUNT. */
3438 char * 3447 const Ascbyte *
3439 mcpro_name (int count) 3448 mcpro_name (int count)
3440 { 3449 {
3441 return Dynarr_at (mcpro_names, count); 3450 return Dynarr_at (mcpro_names, count);
3442 } 3451 }
3443 3452
4470 4479
4471 for (i = 0; i < countof (lrecord_implementations_table); i++) 4480 for (i = 0; i < countof (lrecord_implementations_table); i++)
4472 { 4481 {
4473 if (lrecord_stats[i].instances_in_use != 0) 4482 if (lrecord_stats[i].instances_in_use != 0)
4474 { 4483 {
4475 char buf [255]; 4484 Ascbyte buf[255];
4476 const char *name = lrecord_implementations_table[i]->name; 4485 const Ascbyte *name = lrecord_implementations_table[i]->name;
4477 int len = strlen (name); 4486 int len = strlen (name);
4478 4487
4479 if (lrecord_stats[i].bytes_in_use_including_overhead != 4488 if (lrecord_stats[i].bytes_in_use_including_overhead !=
4480 lrecord_stats[i].bytes_in_use) 4489 lrecord_stats[i].bytes_in_use)
4481 { 4490 {
4514 { 4523 {
4515 if (lcrecord_stats[i].bytes_in_use != 0 4524 if (lcrecord_stats[i].bytes_in_use != 0
4516 || lcrecord_stats[i].bytes_freed != 0 4525 || lcrecord_stats[i].bytes_freed != 0
4517 || lcrecord_stats[i].instances_on_free_list != 0) 4526 || lcrecord_stats[i].instances_on_free_list != 0)
4518 { 4527 {
4519 char buf [255]; 4528 Ascbyte buf[255];
4520 const char *name = lrecord_implementations_table[i]->name; 4529 const Ascbyte *name = lrecord_implementations_table[i]->name;
4521 int len = strlen (name); 4530 int len = strlen (name);
4522 4531
4523 sprintf (buf, "%s-storage", name); 4532 sprintf (buf, "%s-storage", name);
4524 pl = gc_plist_hack (buf, lcrecord_stats[i].bytes_in_use, pl); 4533 pl = gc_plist_hack (buf, lcrecord_stats[i].bytes_in_use, pl);
4525 tgu_val += lcrecord_stats[i].bytes_in_use; 4534 tgu_val += lcrecord_stats[i].bytes_in_use;
4957 staticpros_nodump = Dynarr_new2 (Lisp_Object_ptr_dynarr, Lisp_Object *); 4966 staticpros_nodump = Dynarr_new2 (Lisp_Object_ptr_dynarr, Lisp_Object *);
4958 Dynarr_resize (staticpros_nodump, 100); /* merely a small optimization */ 4967 Dynarr_resize (staticpros_nodump, 100); /* merely a small optimization */
4959 #ifdef DEBUG_XEMACS 4968 #ifdef DEBUG_XEMACS
4960 if (staticpro_nodump_names) 4969 if (staticpro_nodump_names)
4961 Dynarr_free (staticpro_nodump_names); 4970 Dynarr_free (staticpro_nodump_names);
4962 staticpro_nodump_names = Dynarr_new2 (char_ptr_dynarr, char *); 4971 staticpro_nodump_names = Dynarr_new2 (const_Ascbyte_ptr_dynarr,
4972 const Ascbyte *);
4963 Dynarr_resize (staticpro_nodump_names, 100); /* ditto */ 4973 Dynarr_resize (staticpro_nodump_names, 100); /* ditto */
4964 #endif 4974 #endif
4965 4975
4966 #ifdef NEW_GC 4976 #ifdef NEW_GC
4967 mcpros = Dynarr_new2 (Lisp_Object_dynarr, Lisp_Object); 4977 mcpros = Dynarr_new2 (Lisp_Object_dynarr, Lisp_Object);
4968 Dynarr_resize (mcpros, 1410); /* merely a small optimization */ 4978 Dynarr_resize (mcpros, 1410); /* merely a small optimization */
4969 dump_add_root_block_ptr (&mcpros, &mcpros_description); 4979 dump_add_root_block_ptr (&mcpros, &mcpros_description);
4970 #ifdef DEBUG_XEMACS 4980 #ifdef DEBUG_XEMACS
4971 mcpro_names = Dynarr_new2 (char_ptr_dynarr, char *); 4981 mcpro_names = Dynarr_new2 (const_Ascbyte_ptr_dynarr, const Ascbyte *);
4972 Dynarr_resize (mcpro_names, 1410); /* merely a small optimization */ 4982 Dynarr_resize (mcpro_names, 1410); /* merely a small optimization */
4973 dump_add_root_block_ptr (&mcpro_names, &mcpro_names_description); 4983 dump_add_root_block_ptr (&mcpro_names,
4984 &const_Ascbyte_ptr_dynarr_description_1);
4974 #endif 4985 #endif
4975 #endif /* NEW_GC */ 4986 #endif /* NEW_GC */
4976 4987
4977 consing_since_gc = 0; 4988 consing_since_gc = 0;
4978 need_to_check_c_alloca = 0; 4989 need_to_check_c_alloca = 0;
5061 5072
5062 staticpros = Dynarr_new2 (Lisp_Object_ptr_dynarr, Lisp_Object *); 5073 staticpros = Dynarr_new2 (Lisp_Object_ptr_dynarr, Lisp_Object *);
5063 Dynarr_resize (staticpros, 1410); /* merely a small optimization */ 5074 Dynarr_resize (staticpros, 1410); /* merely a small optimization */
5064 dump_add_root_block_ptr (&staticpros, &staticpros_description); 5075 dump_add_root_block_ptr (&staticpros, &staticpros_description);
5065 #ifdef DEBUG_XEMACS 5076 #ifdef DEBUG_XEMACS
5066 staticpro_names = Dynarr_new2 (char_ptr_dynarr, char *); 5077 staticpro_names = Dynarr_new2 (const_Ascbyte_ptr_dynarr, const Ascbyte *);
5067 Dynarr_resize (staticpro_names, 1410); /* merely a small optimization */ 5078 Dynarr_resize (staticpro_names, 1410); /* merely a small optimization */
5068 dump_add_root_block_ptr (&staticpro_names, &staticpro_names_description); 5079 dump_add_root_block_ptr (&staticpro_names,
5080 &const_Ascbyte_ptr_dynarr_description);
5069 #endif 5081 #endif
5070 5082
5071 #ifdef NEW_GC 5083 #ifdef NEW_GC
5072 mcpros = Dynarr_new2 (Lisp_Object_dynarr, Lisp_Object); 5084 mcpros = Dynarr_new2 (Lisp_Object_dynarr, Lisp_Object);
5073 Dynarr_resize (mcpros, 1410); /* merely a small optimization */ 5085 Dynarr_resize (mcpros, 1410); /* merely a small optimization */
5074 dump_add_root_block_ptr (&mcpros, &mcpros_description); 5086 dump_add_root_block_ptr (&mcpros, &mcpros_description);
5075 #ifdef DEBUG_XEMACS 5087 #ifdef DEBUG_XEMACS
5076 mcpro_names = Dynarr_new2 (char_ptr_dynarr, char *); 5088 mcpro_names = Dynarr_new2 (const_Ascbyte_ptr_dynarr, const Ascbyte *);
5077 Dynarr_resize (mcpro_names, 1410); /* merely a small optimization */ 5089 Dynarr_resize (mcpro_names, 1410); /* merely a small optimization */
5078 dump_add_root_block_ptr (&mcpro_names, &mcpro_names_description); 5090 dump_add_root_block_ptr (&mcpro_names,
5091 &const_Ascbyte_ptr_dynarr_description);
5079 #endif 5092 #endif
5080 #else /* not NEW_GC */ 5093 #else /* not NEW_GC */
5081 init_lcrecord_lists (); 5094 init_lcrecord_lists ();
5082 #endif /* not NEW_GC */ 5095 #endif /* not NEW_GC */
5083 } 5096 }