comparison src/lisp.h @ 2720:6fa9919a9a0b

[xemacs-hg @ 2005-04-08 23:10:01 by crestani] ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add `--enable-mc-alloc' as         a new configure flag.         * configure.in (AC_INIT_PARSE_ARGS): Add `--mc-alloc' as a new         configure flag.         * configure.usage: Add description for `mc-alloc'.         DUMP_IN_EXEC:         * Makefile.in.in: Condition the installation of a separate dump         file on !DUMP_ON_EXEC.         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add         `--enable-dump-in-exec' as a new configure flag.         * configure.ac: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.in (AC_INIT_PARSE_ARGS): Add `--dump-in-exec' as a         new configure flag.         * configure.in: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.usage: Add description for `dump-in-exec'. lib-src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         DUMP_IN_EXEC:                  * Makefile.in.in: Only compile insert-data-in-exec if         DUMP_IN_EXEC is defined. lisp/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         MEMORY_USAGE_STATS         * diagnose.el: Add new lisp function to pretty print statistics         about the new allocator.         * diagnose.el (show-mc-alloc-memory-usage): New. modules/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         Remove Lcrecords:                  * postgresql/postgresql.c (allocate_pgconn): Allocate with new         allocator.         * postgresql/postgresql.c (allocate_pgresult): Allocate PGresult         with new allocator.           * postgresql/postgresql.h (struct Lisp_PGconn): Add         lrecord_header.         * postgresql/postgresql.h (struct Lisp_PGresult): Add         lrecord_header.         * ldap/eldap.c (allocate_ldap): Allocate with new allocator.         * ldap/eldap.h (struct Lisp_LDAP): Add lrecord_header. nt/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.inc.samp: Add new flag `MC_ALLOC'.         * xemacs.mak: Add flag and configuration output for `MC_ALLOC'.         New files:         * xemacs.dsp: Add source files mc-alloc.c and mc-alloc.h.         * xemacs.mak: Add new object file mc-alloc.obj to dependencies. src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.h.in: Add new flag `MC_ALLOC'.         New files:         * Makefile.in.in: Add new object file mc-alloc.o.         * depend: Add new files to dependencies.         * mc-alloc.c: New.         * mc-alloc.h: New.         Running the new allocator from XEmacs:         * alloc.c (deadbeef_memory): Moved to mc-alloc.c.         * emacs.c (main_1): Initialize the new allocator and add         syms_of_mc_alloc.         * symsinit.h: Add syms_of_mc_alloc.         New lrecord allocation and free functions:         * alloc.c (alloc_lrecord): New. Allocates an lrecord, includes         type checking and initializing of the lrecord_header.         * alloc.c (noseeum_alloc_lrecord): Same as above, but increments         the NOSEEUM cons counter.         * alloc.c (free_lrecord): New. Calls the finalizer and frees the         lrecord.         * lrecord.h: Add lrecord allocation prototypes and comments.         Remove old lrecord FROB block allocation:                  * alloc.c (allocate_lisp_storage): Former function to expand         heap. Not needed anymore, remove.         * alloc.c: Completely remove `Fixed-size type macros'         * alloc.c (release_breathing_space): Remove.         * alloc.c (memory_full): Remove release_breathing_space.         * alloc.c (refill_memory_reserve): Remove.         * alloc.c (TYPE_ALLOC_SIZE): Remove.         * alloc.c (DECLARE_FIXED_TYPE_ALLOC): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_FROM_BLOCK): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_1): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (NOSEEUM_ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (struct Lisp_Free): Remove.         * alloc.c (LRECORD_FREE_P): Remove.         * alloc.c (MARK_LRECORD_AS_FREE): Remove.         * alloc.c (MARK_LRECORD_AS_NOT_FREE): Remove.         * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST): Remove.         * alloc.c (FREE_FIXED_TYPE): Remove.         * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): Remove.         Allocate old lrecords with new allocator:                  * alloc.c: DECLARE_FIXED_TYPE_ALLOC removed for all lrecords         defined in alloc.c.         * alloc.c (Fcons): Allocate with new allocator.         * alloc.c (noseeum_cons): Allocate with new allocator.         * alloc.c (make_float): Allocate with new allocator.         * alloc.c (make_bignum): Allocate with new allocator.         * alloc.c (make_bignum_bg): Allocate with new allocator.         * alloc.c (make_ratio): Allocate with new allocator.         * alloc.c (make_ratio_bg): Allocate with new allocator.         * alloc.c (make_ratio_rt): Allocate with new allocator.         * alloc.c (make_bigfloat): Allocate with new allocator.         * alloc.c (make_bigfloat_bf): Allocate with new allocator.         * alloc.c (make_compiled_function): Allocate with new allocator.         * alloc.c (Fmake_symbol): Allocate with new allocator.         * alloc.c (allocate_extent): Allocate with new allocator.         * alloc.c (allocate_event): Allocate with new allocator.         * alloc.c (make_key_data): Allocate with new allocator.         * alloc.c (make_button_data): Allocate with new allocator.         * alloc.c (make_motion_data): Allocate with new allocator.         * alloc.c (make_process_data): Allocate with new allocator.         * alloc.c (make_timeout_data): Allocate with new allocator.         * alloc.c (make_magic_data): Allocate with new allocator.         * alloc.c (make_magic_eval_data): Allocate with new allocator.         * alloc.c (make_eval_data): Allocate with new allocator.         * alloc.c (make_misc_user_data): Allocate with new allocator.         * alloc.c (Fmake_marker): Allocate with new allocator.         * alloc.c (noseeum_make_marker): Allocate with new allocator.         * alloc.c (make_uninit_string): Allocate with new allocator.         * alloc.c (resize_string): Allocate with new allocator.         * alloc.c (make_string_nocopy): Allocate with new allocator.         Garbage Collection:         * alloc.c (GC_CHECK_NOT_FREE): Remove obsolete assertions.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK): Remove.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK_1): Remove.         * alloc.c (sweep_conses): Remove.         * alloc.c (free_cons): Use new allocator to free.         * alloc.c (sweep_compiled_functions): Remove.         * alloc.c (sweep_floats): Remove.         * alloc.c (sweep_bignums): Remove.         * alloc.c (sweep_ratios): Remove.         * alloc.c (sweep_bigfloats): Remove.         * alloc.c (sweep_symbols): Remove.         * alloc.c (sweep_extents): Remove.         * alloc.c (sweep_events): Remove.         * alloc.c (sweep_key_data): Remove.         * alloc.c (free_key_data): Use new allocator to free.         * alloc.c (sweep_button_data): Remove.         * alloc.c (free_button_data): Use new allocator to free.         * alloc.c (sweep_motion_data): Remove.         * alloc.c (free_motion_data): Use new allocator to free.         * alloc.c (sweep_process_data): Remove.         * alloc.c (free_process_data): Use new allocator to free.         * alloc.c (sweep_timeout_data): Remove.         * alloc.c (free_timeout_data): Use new allocator to free.         * alloc.c (sweep_magic_data): Remove.         * alloc.c (free_magic_data): Use new allocator to free.         * alloc.c (sweep_magic_eval_data): Remove.         * alloc.c (free_magic_eval_data): Use new allocator to free.         * alloc.c (sweep_eval_data): Remove.         * alloc.c (free_eval_data): Use new allocator to free.         * alloc.c (sweep_misc_user_data): Remove.         * alloc.c (free_misc_user_data): Use new allocator to free.         * alloc.c (sweep_markers): Remove.         * alloc.c (free_marker): Use new allocator to free.         * alloc.c (garbage_collect_1): Remove release_breathing_space.         * alloc.c (gc_sweep): Remove all the old lcrecord and lrecord         related stuff. Sweeping now works like this: compact string         chars, finalize, sweep.         * alloc.c (common_init_alloc_early): Remove old lrecord         initializations, remove breathing_space.         * emacs.c (Fdump_emacs): Remove release_breathing_space.         * lisp.h: Remove prototype for release_breathing_space.         * lisp.h: Adjust the special cons mark makros.         Lrecord Finalizer:         * alloc.c: Add finalizer to lrecord definition.         * alloc.c (finalize_string): Add finalizer for string.         * bytecode.c: Add finalizer to lrecord definition.         * bytecode.c (finalize_compiled_function): Add finalizer for         compiled function.         * marker.c: Add finalizer to lrecord definition.         * marker.c (finalize_marker): Add finalizer for marker.         These changes build the interface to mc-alloc:         * lrecord.h (MC_ALLOC_CALL_FINALIZER): Tell mc-alloc how to         finalize lrecords.         * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): Tell         mc-alloc how to finalize for disksave.         Unify lrecords and lcrecords:         * lisp.h (struct Lisp_String): Adjust string union hack to         new lrecord header.         * lrecord.h: Adjust comments.         * lrecord.h (struct lrecord_header): The new lrecord header         includes type, lisp-readonly, free, and uid.         * lrecord.h (set_lheader_implementation): Adjust to new         lrecord_header.         * lrecord.h (struct lrecord_implementation): The field basic_p         for indication of an old lrecord is not needed anymore, remove.         * lrecord.h (MAKE_LRECORD_IMPLEMENTATION): Remove basic_p.         * lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION): Remove         basic_p.         * lrecord.h (copy_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (copy_lrecord): Remove distinction between old         lrecords and lcrecords.         * lrecord.h (zero_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (zero_lrecord): Remove distinction between old         lrecords and lcrecords.         Remove lcrecords and lcrecord lists:         * alloc.c (basic_alloc_lcrecord): Not needed anymore, remove.         * alloc.c (very_old_free_lcrecord): Not needed anymore, remove.         * alloc.c (copy_lisp_object): No more distinction between         lrecords and lcrecords.         * alloc.c (all_lcrecords): Not needed anymore, remove.         * alloc.c (make_vector_internal): Allocate as lrecord.         * alloc.c (make_bit_vector_internal): Allocate as lrecord.         * alloc.c: Completely remove `lcrecord lists'.         * alloc.c (free_description): Remove.         * alloc.c (lcrecord_list_description): Remove.         * alloc.c (mark_lcrecord_list): Remove.         * alloc.c (make_lcrecord_list): Remove.         * alloc.c (alloc_managed_lcrecord): Remove.         * alloc.c (free_managed_lcrecord): Remove.         * alloc.c (alloc_automanaged_lcrecord): Remove.         * alloc.c (free_lcrecord): Remove.         * alloc.c (lcrecord_stats): Remove.         * alloc.c (tick_lcrecord_stats): Remove.         * alloc.c (disksave_object_finalization_1): Add call to         mc_finalize_for_disksave. Remove the lcrecord way to visit all         objects.         * alloc.c (kkcc_marking): Remove XD_FLAG_FREE_LISP_OBJECT         * alloc.c (sweep_lcrecords_1): Remove.         * alloc.c (common_init_alloc_early): Remove everything related         to lcrecords, remove old lrecord initializations,         * alloc.c (init_lcrecord_lists): Not needed anymore, remove.         * alloc.c (reinit_alloc_early): Remove everything related to         lcrecords.         * alloc.c (init_alloc_once_early): Remove everything related to         lcrecords.         * buffer.c (allocate_buffer): Allocate as lrecord.         * buffer.c (nuke_all_buffer_slots): Use lrecord functions.         * buffer.c (common_init_complex_vars_of_buffer): Allocate as         lrecord.         * buffer.h (struct buffer): Add lrecord_header.         * casetab.c (allocate_case_table): Allocate as lrecord.         * casetab.h (struct Lisp_Case_Table): Add lrecord_header.         * charset.h (struct Lisp_Charset): Add lrecord_header.         * chartab.c (fill_char_table): Use lrecord functions.         * chartab.c (Fmake_char_table): Allocate as lrecord.         * chartab.c (make_char_table_entry): Allocate as lrecord.         * chartab.c (copy_char_table_entry): Allocate as lrecord.         * chartab.c (Fcopy_char_table): Allocate as lrecord.         * chartab.c (put_char_table): Use lrecord functions.         * chartab.h (struct Lisp_Char_Table_Entry): Add lrecord_header.         * chartab.h (struct Lisp_Char_Table): Add lrecord_header.         * console-impl.h (struct console): Add lrecord_header.         * console-msw-impl.h (struct Lisp_Devmode): Add lrecord_header.         * console-msw-impl.h (struct mswindows_dialog_id): Add         lrecord_header.         * console.c (allocate_console): Allocate as lrecord.         * console.c (nuke_all_console_slots): Use lrecord functions.         * console.c (common_init_complex_vars_of_console): Allocate as         lrecord.         * data.c (make_weak_list): Allocate as lrecord.         * data.c (make_weak_box): Allocate as lrecord.         * data.c (make_ephemeron): Allocate as lrecord.         * database.c (struct Lisp_Database): Add lrecord_header.         * database.c (allocate_database): Allocate as lrecord.         * device-impl.h (struct device): Add lrecord_header.         * device-msw.c (allocate_devmode): Allocate as lrecord.         * device.c (nuke_all_device_slots): Use lrecord functions.         * device.c (allocate_device): Allocate as lrecord.         * dialog-msw.c (handle_question_dialog_box): Allocate as lrecord.         * elhash.c (struct Lisp_Hash_Table): Add lrecord_header.         * elhash.c (make_general_lisp_hash_table): Allocate as lrecord.         * elhash.c (Fcopy_hash_table): Allocate as lrecord.         * event-stream.c: Lcrecord lists Vcommand_builder_free_list and         Vtimeout_free_list are no longer needed. Remove.         * event-stream.c (allocate_command_builder): Allocate as lrecord.         * event-stream.c (free_command_builder): Use lrecord functions.         * event-stream.c (event_stream_generate_wakeup): Allocate as         lrecord.         * event-stream.c (event_stream_resignal_wakeup): Use lrecord         functions.         * event-stream.c (event_stream_disable_wakeup): Use lrecord         functions.         * event-stream.c (reinit_vars_of_event_stream): Lcrecord lists         remove.         * events.h (struct Lisp_Timeout): Add lrecord_header.         * events.h (struct command_builder): Add lrecord_header.         * extents-impl.h (struct extent_auxiliary): Add lrecord_header.         * extents-impl.h (struct extent_info): Add lrecord_header.         * extents.c (allocate_extent_auxiliary): Allocate as lrecord.         * extents.c (allocate_extent_info): Allocate as lrecord.         * extents.c (copy_extent): Allocate as lrecord.         * faces.c (allocate_face): Allocate as lrecord.         * faces.h (struct Lisp_Face): Add lrecord_header.         * file-coding.c (allocate_coding_system): Allocate as lrecord.         * file-coding.c (Fcopy_coding_system): Allocate as lrecord.         * file-coding.h (struct Lisp_Coding_System): Add lrecord_header.         * fns.c (Ffillarray): Allocate as lrecord.         * frame-impl.h (struct frame): Add lrecord_header.         * frame.c (nuke_all_frame_slots): Use lrecord functions.         * frame.c (allocate_frame_core): Allocate as lrecord.         * glyphs.c (allocate_image_instance): Allocate as lrecord.         * glyphs.c (Fcolorize_image_instance): Allocate as lrecord.         * glyphs.c (allocate_glyph): Allocate as lrecord.         * glyphs.h (struct Lisp_Image_Instance): Add lrecord_header.         * glyphs.h (struct Lisp_Glyph): Add lrecord_header.         * gui.c (allocate_gui_item): Allocate as lrecord.         * gui.h (struct Lisp_Gui_Item): Add lrecord_header.         * keymap.c (struct Lisp_Keymap): Add lrecord_header.         * keymap.c (make_keymap): Allocate as lrecord.         * lisp.h (struct Lisp_Vector): Add lrecord_header.         * lisp.h (struct Lisp_Bit_Vector): Add lrecord_header.         * lisp.h (struct weak_box): Add lrecord_header.         * lisp.h (struct ephemeron): Add lrecord_header.         * lisp.h (struct weak_list): Add lrecord_header.         * lrecord.h (struct lcrecord_header): Not used, remove.         * lrecord.h (struct free_lcrecord_header): Not used, remove.         * lrecord.h (struct lcrecord_list): Not needed anymore, remove.         * lrecord.h (lcrecord_list): Not needed anymore, remove.         * lrecord.h: (enum data_description_entry_flags): Remove         XD_FLAG_FREE_LISP_OBJECT.         * lstream.c: Lrecord list Vlstream_free_list remove.         * lstream.c (Lstream_new): Allocate as lrecord.         * lstream.c (Lstream_delete): Use lrecod functions.         * lstream.c (reinit_vars_of_lstream): Vlstream_free_list         initialization remove.           * lstream.h (struct lstream): Add lrecord_header.         * emacs.c (main_1): Remove lstream initialization.         * mule-charset.c (make_charset): Allocate as lrecord.         * objects-impl.h (struct Lisp_Color_Instance): Add         lrecord_header.         * objects-impl.h (struct Lisp_Font_Instance): Add lrecord_header.         * objects.c (Fmake_color_instance): Allocate as lrecord.         * objects.c (Fmake_font_instance): Allocate as lrecord.         * objects.c (reinit_vars_of_objects): Allocate as lrecord.         * opaque.c: Lcreord list Vopaque_ptr_list remove.         * opaque.c (make_opaque): Allocate as lrecord.         * opaque.c (make_opaque_ptr): Allocate as lrecord.         * opaque.c (free_opaque_ptr): Use lrecord functions.         * opaque.c (reinit_opaque_early):         * opaque.c (init_opaque_once_early): Vopaque_ptr_list         initialization remove.         * opaque.h (Lisp_Opaque): Add lrecord_header.         * opaque.h (Lisp_Opaque_Ptr): Add lrecord_header.         * emacs.c (main_1): Remove opaque variable initialization.         * print.c (default_object_printer): Use new lrecord_header.         * print.c (print_internal): Use new lrecord_header.         * print.c (debug_p4): Use new lrecord_header.         * process.c (make_process_internal): Allocate as lrecord.         * procimpl.h (struct Lisp_Process): Add lrecord_header.         * rangetab.c (Fmake_range_table): Allocate as lrecord.         * rangetab.c (Fcopy_range_table): Allocate as lrecord.         * rangetab.h (struct Lisp_Range_Table): Add lrecord_header.         * scrollbar.c (create_scrollbar_instance): Allocate as lrecord.         * scrollbar.h (struct scrollbar_instance): Add lrecord_header.         * specifier.c (make_specifier_internal): Allocate as lrecord.         * specifier.h (struct Lisp_Specifier): Add lrecord_header.         * symbols.c:         * symbols.c (Fmake_variable_buffer_local): Allocate as lrecord.         * symbols.c (Fdontusethis_set_symbol_value_handler): Allocate         as lrecord.         * symbols.c (Fdefvaralias): Allocate as lrecord.         * symeval.h (struct symbol_value_magic): Add lrecord_header.         * toolbar.c (update_toolbar_button): Allocate as lrecord.         * toolbar.h (struct toolbar_button): Add lrecord_header.         * tooltalk.c (struct Lisp_Tooltalk_Message): Add lrecord_header.         * tooltalk.c (make_tooltalk_message): Allocate as lrecord.         * tooltalk.c (struct Lisp_Tooltalk_Pattern): Add lrecord_header.         * tooltalk.c (make_tooltalk_pattern): Allocate as lrecord.         * ui-gtk.c (allocate_ffi_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_object_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_boxed_data): Allocate as lrecord.         * ui-gtk.h (structs): Add lrecord_header.         * window-impl.h (struct window): Add lrecord_header.         * window-impl.h (struct window_mirror): Add lrecord_header.         * window.c (allocate_window): Allocate as lrecord.         * window.c (new_window_mirror): Allocate as lrecord.         * window.c (make_dummy_parent): Allocate as lrecord.         MEMORY_USAGE_STATS         * alloc.c (fixed_type_block_overhead): Not used anymore, remove.         * buffer.c (compute_buffer_usage): Get storage size from new         allocator.         * marker.c (compute_buffer_marker_usage): Get storage size from         new allocator.         * mule-charset.c (compute_charset_usage): Get storage size from         new allocator.         * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage):         Get storage size from new allocator.         * scrollbar-x.c (x_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar.c (compute_scrollbar_instance_usage): Get storage         size from new allocator.         * unicode.c (compute_from_unicode_table_size_1): Get storage         size from new allocator.         * unicode.c (compute_to_unicode_table_size_1): Get storage size         from new allocator.         * window.c (compute_window_mirror_usage): Get storage size from         new allocator.         * window.c (compute_window_usage): Get storage size from new         allocator.         MC_ALLOC_TYPE_STATS:         * alloc.c (alloc_lrecord): Bump lrecord count.         * alloc.c (noseeum_alloc_lrecord): Bump lrecord count.         * alloc.c (struct lrecord_stats): Storage for counts.         * alloc.c (init_lrecord_stats): Zero statistics.         * alloc.c (inc_lrecord_stats): Increase the statistic.         * alloc.c (dec_lrecord_stats): Decrease the statistic.         * alloc.c (gc_plist_hack): Used to print the information.         * alloc.c (Fgarbage_collect): Return the collected information.         * mc-alloc.c (remove_cell): Decrease lrecord count.         * mc-alloc.h: Set flag MC_ALLOC_TYPE_STATS.         * emacs.c (main_1): Init lrecord statistics.         * lrecord.h: Add prototypes for *_lrecord_stats.         Strings:         * alloc.c (Fmake_string): Initialize ascii_begin to zero.         * alloc.c (gc_count_num_short_string_in_use): Remove.         * alloc.c (gc_count_string_total_size): Remove.         * alloc.c (gc_count_short_string_total_size): Remove.         * alloc.c (debug_string_purity): Remove.         * alloc.c (debug_string_purity_print): Remove.         * alloc.c (sweep_strings): Remove.                  Remove static C-readonly Lisp objects:         * alloc.c (c_readonly): Not needed anymore, remove.         * alloc.c (GC_CHECK_LHEADER_INVARIANTS): Remove some obsolete         lheader invariants assertions.         * buffer.c (DEFVAR_BUFFER_LOCAL_1): Allocate dynamically.         * console.c (DEFVAR_CONSOLE_LOCAL_1): Allocate dynamically.         * gpmevent.c: Indirection via MC_ALLOC_Freceive_gpm_event.         * gpmevent.c (Fgpm_enable): Allocate dynamically.         * gpmevent.c (syms_of_gpmevent): Allocate dynamically.         * lisp.h (C_READONLY): Not needed anymore, remove.         * lisp.h (DEFUN): Allocate dynamically.         * lrecord.h (C_READONLY_RECORD_HEADER_P): Not needed anymore,         remove.         * lrecord.h (SET_C_READONLY_RECORD_HEADER): Not needed anymore,         remove.         * symbols.c (guts_of_unbound_marker):         * symeval.h (defsubr): Allocate dynamically.         * symeval.h (DEFSUBR_MACRO): Allocate dynamically.         * symeval.h (DEFVAR_ SYMVAL_FWD): Allocate dynamically.         * tests.c (TESTS_DEFSUBR): Allocate dynamically.         Definition of mcpro:         * lisp.h: Add mcpro prototypes.         * alloc.c (common_init_alloc_early): Add initialization for         mcpros.         * alloc.c (mcpro_description_1): New.         * alloc.c (mcpro_description): New.         * alloc.c (mcpros_description_1): New.         * alloc.c (mcpros_description): New.         * alloc.c (mcpro_one_name_description_1): New.         * alloc.c (mcpro_one_name_description): New.         * alloc.c (mcpro_names_description_1): New.         * alloc.c (mcpro_names_description): New.         * alloc.c (mcpros): New.         * alloc.c (mcpro_names): New.         * alloc.c (mcpro_1): New.         * alloc.c (mc_pro): New.         * alloc.c (garbage_collect_1): Add mcpros to root set.         Usage of mcpro:         * alloc.c (make_string_nocopy): Add string to root set.         * symbols.c (init_symbols_once_early): Add Qunbound to root set.         Changes to the Portable Dumper:                  * alloc.c (FREE_OR_REALLOC_BEGIN): Since dumped objects can be         freed with the new allocator, remove assertion for !DUMPEDP.         * dumper.c: Adjust comments, increase PDUMP_HASHSIZE.         * dumper.c (pdump_make_hash): Shift address only 2 bytes, to         avoid collisions.         * dumper.c (pdump_objects_unmark): No more mark bits within         the object, remove.         * dumper.c (mc_addr_elt): New. Element data structure for mc         hash table.         * dumper.c (pdump_mc_hash): New hash table: `lookup table'.         * dumper.c (pdump_get_mc_addr): New. Lookup for hash table.         * dumper.c (pdump_get_indirect_mc_addr): New. Lookup for         convertibles.         * dumper.c (pdump_put_mc_addr): New. Putter for hash table.         * dumper.c (pdump_dump_mc_data): New. Writes the table for         relocation at load time to the dump file.         * dumper.c (pdump_scan_lisp_objects_by_alignment): New.         Visits all dumped Lisp objects.         * dumper.c (pdump_scan_non_lisp_objects_by_alignment): New.         Visits all other dumped objects.         * dumper.c (pdump_reloc_one_mc): New. Updates all pointers         of an object by using the hash table pdump_mc_hash.         * dumper.c (pdump_reloc_one): Replaced by pdump_reloc_one_mc.         * dumper.c (pdump): Change the structure of the dump file, add         the mc post dump relocation table to dump file.         * dumper.c (pdump_load_finish): Hand all dumped objects to the         new allocator and use the mc post dump relocation table for         relocating the dumped objects at dump file load time, free not         longer used data structures.         * dumper.c (pdump_load): Free the dump file.         * dumper.h: Remove pdump_objects_unmark.         * lrecord.h (DUMPEDP): Dumped objects can be freed, remove.              DUMP_IN_EXEC:         * Makefile.in.in: Linking for and with dump in executable only if         DUMP_IN_EXEC is defined.         * config.h.in: Add new flag `DUMP_IN_EXEC'         * emacs.c: Condition dump-data.h on DUMP_IN_EXEC.         * emacs.c (main_1): Flag `-si' only works if dump image is         written into executable.         Miscellanious         * lrecord.h (enum lrecord_type): Added numbers to all types,         very handy for debugging.         * xemacs.def.in.in: Add mc-alloc functions to make them visible         to the modules.
author crestani
date Fri, 08 Apr 2005 23:11:35 +0000
parents e6854ec89f8e
children 520c08f04735
comparison
equal deleted inserted replaced
2719:5f6ef2b26d9f 2720:6fa9919a9a0b
1748 #define wrap_cons(p) wrap_record (p, cons) 1748 #define wrap_cons(p) wrap_record (p, cons)
1749 #define CONSP(x) RECORDP (x, cons) 1749 #define CONSP(x) RECORDP (x, cons)
1750 #define CHECK_CONS(x) CHECK_RECORD (x, cons) 1750 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
1751 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) 1751 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
1752 1752
1753 #ifdef MC_ALLOC
1754 #define CONS_MARKED_P(c) MARKED_P (&((c)->lheader))
1755 #define MARK_CONS(c) MARK (&((c)->lheader))
1756 #else /* not MC_ALLOC */
1753 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader)) 1757 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
1754 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader)) 1758 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
1759 #endif /* not MC_ALLOC */
1755 1760
1756 extern MODULE_API Lisp_Object Qnil; 1761 extern MODULE_API Lisp_Object Qnil;
1757 1762
1758 #define NILP(x) EQ (x, Qnil) 1763 #define NILP(x) EQ (x, Qnil)
1759 #define cons_car(a) ((a)->car_) 1764 #define cons_car(a) ((a)->car_)
2281 struct 2286 struct
2282 { 2287 {
2283 /* WARNING: Everything before ascii_begin must agree exactly with 2288 /* WARNING: Everything before ascii_begin must agree exactly with
2284 struct lrecord_header */ 2289 struct lrecord_header */
2285 unsigned int type :8; 2290 unsigned int type :8;
2291 #ifdef MC_ALLOC
2292 unsigned int lisp_readonly :1;
2293 unsigned int free :1;
2294 /* Number of chars at beginning of string that are one byte in length
2295 (byte_ascii_p) */
2296 unsigned int ascii_begin :22;
2297 #else /* not MC_ALLOC */
2286 unsigned int mark :1; 2298 unsigned int mark :1;
2287 unsigned int c_readonly :1; 2299 unsigned int c_readonly :1;
2288 unsigned int lisp_readonly :1; 2300 unsigned int lisp_readonly :1;
2289 /* Number of chars at beginning of string that are one byte in length 2301 /* Number of chars at beginning of string that are one byte in length
2290 (byte_ascii_p) */ 2302 (byte_ascii_p) */
2291 unsigned int ascii_begin :21; 2303 unsigned int ascii_begin :21;
2304 #endif /* not MC_ALLOC */
2292 } v; 2305 } v;
2293 } u; 2306 } u;
2294 Bytecount size_; 2307 Bytecount size_;
2295 Ibyte *data_; 2308 Ibyte *data_;
2296 Lisp_Object plist; 2309 Lisp_Object plist;
2353 2366
2354 /*------------------------------ vector --------------------------------*/ 2367 /*------------------------------ vector --------------------------------*/
2355 2368
2356 struct Lisp_Vector 2369 struct Lisp_Vector
2357 { 2370 {
2371 #ifdef MC_ALLOC
2372 struct lrecord_header header;
2373 #else /* MC_ALLOC */
2358 struct lcrecord_header header; 2374 struct lcrecord_header header;
2375 #endif /* MC_ALLOC */
2359 long size; 2376 long size;
2360 Lisp_Object contents[1]; 2377 Lisp_Object contents[1];
2361 }; 2378 };
2362 typedef struct Lisp_Vector Lisp_Vector; 2379 typedef struct Lisp_Vector Lisp_Vector;
2363 2380
2390 #error You really have 128-bit integers?! 2407 #error You really have 128-bit integers?!
2391 #endif 2408 #endif
2392 2409
2393 struct Lisp_Bit_Vector 2410 struct Lisp_Bit_Vector
2394 { 2411 {
2412 #ifdef MC_ALLOC
2413 struct lrecord_header lheader;
2414 #else /* MC_ALLOC */
2395 struct lcrecord_header lheader; 2415 struct lcrecord_header lheader;
2416 #endif /* MC_ALLOC */
2396 Elemcount size; 2417 Elemcount size;
2397 unsigned long bits[1]; 2418 unsigned long bits[1];
2398 }; 2419 };
2399 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; 2420 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
2400 2421
2694 } while (0) 2715 } while (0)
2695 2716
2696 2717
2697 /*--------------------------- readonly objects -------------------------*/ 2718 /*--------------------------- readonly objects -------------------------*/
2698 2719
2720 #ifndef MC_ALLOC
2699 #define CHECK_C_WRITEABLE(obj) \ 2721 #define CHECK_C_WRITEABLE(obj) \
2700 do { if (c_readonly (obj)) c_write_error (obj); } while (0) 2722 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
2701 2723
2724 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
2725 #endif /* not MC_ALLOC */
2726
2702 #define CHECK_LISP_WRITEABLE(obj) \ 2727 #define CHECK_LISP_WRITEABLE(obj) \
2703 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0) 2728 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
2704 2729
2705 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
2706 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj))) 2730 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
2707 2731
2708 /*----------------------------- structures ----------------------------*/ 2732 /*----------------------------- structures ----------------------------*/
2709 2733
2710 typedef struct structure_keyword_entry structure_keyword_entry; 2734 typedef struct structure_keyword_entry structure_keyword_entry;
2748 2772
2749 /*---------------------------- weak boxes ------------------------------*/ 2773 /*---------------------------- weak boxes ------------------------------*/
2750 2774
2751 struct weak_box 2775 struct weak_box
2752 { 2776 {
2777 #ifdef MC_ALLOC
2778 struct lrecord_header header;
2779 #else /* MC_ALLOC */
2753 struct lcrecord_header header; 2780 struct lcrecord_header header;
2781 #endif /* MC_ALLOC */
2754 Lisp_Object value; 2782 Lisp_Object value;
2755 2783
2756 Lisp_Object next_weak_box; /* don't mark through this! */ 2784 Lisp_Object next_weak_box; /* don't mark through this! */
2757 }; 2785 };
2758 2786
2770 2798
2771 /*--------------------------- ephemerons ----------------------------*/ 2799 /*--------------------------- ephemerons ----------------------------*/
2772 2800
2773 struct ephemeron 2801 struct ephemeron
2774 { 2802 {
2803 #ifdef MC_ALLOC
2804 struct lrecord_header header;
2805 #else /* MC_ALLOC */
2775 struct lcrecord_header header; 2806 struct lcrecord_header header;
2807 #endif /* MC_ALLOC */
2776 2808
2777 Lisp_Object key; 2809 Lisp_Object key;
2778 2810
2779 /* This field holds a pair. The cdr of this cons points to the next 2811 /* This field holds a pair. The cdr of this cons points to the next
2780 ephemeron in Vall_ephemerons. The car points to another pair 2812 ephemeron in Vall_ephemerons. The car points to another pair
2829 WEAK_LIST_FULL_ASSOC 2861 WEAK_LIST_FULL_ASSOC
2830 }; 2862 };
2831 2863
2832 struct weak_list 2864 struct weak_list
2833 { 2865 {
2866 #ifdef MC_ALLOC
2867 struct lrecord_header header;
2868 #else /* MC_ALLOC */
2834 struct lcrecord_header header; 2869 struct lcrecord_header header;
2870 #endif /* MC_ALLOC */
2835 Lisp_Object list; /* don't mark through this! */ 2871 Lisp_Object list; /* don't mark through this! */
2836 enum weak_list_type type; 2872 enum weak_list_type type;
2837 Lisp_Object next_weak; /* don't mark through this! */ 2873 Lisp_Object next_weak; /* don't mark through this! */
2838 }; 2874 };
2839 2875
2938 #define UNEVALLED -1 2974 #define UNEVALLED -1
2939 2975
2940 /* Can't be const, because then subr->doc is read-only and 2976 /* Can't be const, because then subr->doc is read-only and
2941 Snarf_documentation chokes */ 2977 Snarf_documentation chokes */
2942 2978
2979 #ifdef MC_ALLOC
2980 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
2981 Lisp_Object Fname (EXFUN_##max_args); \
2982 static struct Lisp_Subr MC_ALLOC_S##Fname = \
2983 { \
2984 { /* struct lrecord_header */ \
2985 lrecord_type_subr, /* lrecord_type_index */ \
2986 1, /* lisp_readonly bit */ \
2987 0, /* free */ \
2988 0 /* uid */ \
2989 }, \
2990 min_args, \
2991 max_args, \
2992 prompt, \
2993 0, /* doc string */ \
2994 lname, \
2995 (lisp_fn_t) Fname \
2996 }; \
2997 Lisp_Object Fname (DEFUN_##max_args arglist)
2998
2999 #define DEFUN_NORETURN(lname, Fname, min_args, max_args, prompt, arglist) \
3000 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, Fname (EXFUN_##max_args)); \
3001 static struct Lisp_Subr MC_ALLOC_S##Fname = \
3002 { \
3003 { /* struct lrecord_header */ \
3004 lrecord_type_subr, /* lrecord_type_index */ \
3005 1, /* lisp_readonly bit */ \
3006 0, /* free */ \
3007 0 /* uid */ \
3008 }, \
3009 min_args, \
3010 max_args, \
3011 prompt, \
3012 0, /* doc string */ \
3013 lname, \
3014 (lisp_fn_t) Fname \
3015 }; \
3016 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
3017 #else /* not MC_ALLOC */
2943 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \ 3018 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
2944 Lisp_Object Fname (EXFUN_##max_args); \ 3019 Lisp_Object Fname (EXFUN_##max_args); \
2945 static struct Lisp_Subr S##Fname = \ 3020 static struct Lisp_Subr S##Fname = \
2946 { \ 3021 { \
2947 { /* struct lrecord_header */ \ 3022 { /* struct lrecord_header */ \
2977 0, /* doc string */ \ 3052 0, /* doc string */ \
2978 lname, \ 3053 lname, \
2979 (lisp_fn_t) Fname \ 3054 (lisp_fn_t) Fname \
2980 }; \ 3055 }; \
2981 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist) 3056 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
3057 #endif /* not MC_ALLOC */
2982 3058
2983 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a 3059 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
2984 prototype that matches max_args, and add the obligatory 3060 prototype that matches max_args, and add the obligatory
2985 `Lisp_Object' type declaration to the formal C arguments. */ 3061 `Lisp_Object' type declaration to the formal C arguments. */
2986 3062
3481 MODULE_API void unstaticpro_nodump (Lisp_Object *); 3557 MODULE_API void unstaticpro_nodump (Lisp_Object *);
3482 #endif 3558 #endif
3483 3559
3484 #endif 3560 #endif
3485 3561
3562 #ifdef MC_ALLOC
3563 extern Lisp_Object_dynarr *mcpros;
3564 #ifdef DEBUG_XEMACS
3565 /* Help debug crashes gc-marking a mcpro'ed object. */
3566 MODULE_API void mcpro_1 (Lisp_Object, char *);
3567 #define mcpro(ptr) mcpro_1 (ptr, #ptr)
3568 #else /* not DEBUG_XEMACS */
3569 /* Call mcpro (&var) to protect mc variable `var'. */
3570 MODULE_API void mcpro (Lisp_Object);
3571 #endif /* not DEBUG_XEMACS */
3572 #endif /* MC_ALLOC */
3573
3486 void register_post_gc_action (void (*fun) (void *), void *arg); 3574 void register_post_gc_action (void (*fun) (void *), void *arg);
3487 int begin_gc_forbidden (void); 3575 int begin_gc_forbidden (void);
3488 void end_gc_forbidden (int count); 3576 void end_gc_forbidden (int count);
3489 extern int gc_currently_forbidden; 3577 extern int gc_currently_forbidden;
3490 3578
3537 MODULE_API EXFUN (Fmake_string, 2); 3625 MODULE_API EXFUN (Fmake_string, 2);
3538 MODULE_API EXFUN (Fmake_symbol, 1); 3626 MODULE_API EXFUN (Fmake_symbol, 1);
3539 MODULE_API EXFUN (Fmake_vector, 2); 3627 MODULE_API EXFUN (Fmake_vector, 2);
3540 MODULE_API EXFUN (Fvector, MANY); 3628 MODULE_API EXFUN (Fvector, MANY);
3541 3629
3630 #ifndef MC_ALLOC
3542 void release_breathing_space (void); 3631 void release_breathing_space (void);
3632 #endif /* not MC_ALLOC */
3543 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object); 3633 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
3544 MODULE_API Lisp_Object make_vector (Elemcount, Lisp_Object); 3634 MODULE_API Lisp_Object make_vector (Elemcount, Lisp_Object);
3545 MODULE_API Lisp_Object vector1 (Lisp_Object); 3635 MODULE_API Lisp_Object vector1 (Lisp_Object);
3546 MODULE_API Lisp_Object vector2 (Lisp_Object, Lisp_Object); 3636 MODULE_API Lisp_Object vector2 (Lisp_Object, Lisp_Object);
3547 MODULE_API Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object); 3637 MODULE_API Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object);