aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorMattias EngdegÄrd2022-02-12 16:05:17 +0100
committerMattias EngdegÄrd2022-02-12 18:00:21 +0100
commita8245e122075175df2f124b20e9e5b1b583eff89 (patch)
tree4e7c180a785879d056149013c2933b62445f1361 /src/alloc.c
parentbe06b40ebdd6cfbd23558ce210a8a7ad2b4c7a40 (diff)
downloademacs-a8245e122075175df2f124b20e9e5b1b583eff89.tar.gz
emacs-a8245e122075175df2f124b20e9e5b1b583eff89.zip
Replace ptrdiff_t with new specpdl_ref type for specpdl references
The specpdl_ref type is just an alias for ptrdiff_t; the compiled code remains the same. All operations on specpdl_ref (arithmetic, comparison etc) now go through inline functions. The bulk of the change is almost completely mechanical. It is done to prepare for a type-safe representation and subsequent performance improvement. * src/lisp.h (specpdl_ref, specpdl_count_to_ref, specpdl_ref_to_count) (specpdl_ref_eq, specpdl_ref_lt, specpdl_ref_valid_p) (make_invalid_specpdl_ref, specpdl_ref_add, specpdl_ref_to_ptr): New. (SPECPDL_INDEX, struct handler, USE_SAFE_ALLOCA, safe_free) (safe_free_unbind_to): * src/alloc.c (run_finalizer_function, inhibit_garbage_collection) (garbage_collect, Fgarbage_collect, which_symbols): * src/bidi.c (bidi_at_paragraph_end, bidi_find_paragraph_start): * src/buffer.c (Fkill_buffer, Fset_buffer_major_mode, Fmove_overlay) (Fdelete_overlay): * src/bytecode.c (exec_byte_code): * src/callint.c (Ffuncall_interactively, Fcall_interactively): * src/callproc.c (Fcall_process, call_process, create_temp_file) (Fcall_process_region): * src/charset.c (load_charset_map_from_file): * src/coding.c (decode_coding_gap, decode_coding_object) (encode_coding_object, Fread_coding_system): * src/comp.c (emit_static_object, helper_unbind_n, load_comp_unit): * src/composite.c (update_compositions, autocmp_chars): * src/cygw32.c (conv_filename_to_w32_unicode) (conv_filename_from_w32_unicode): * src/data.c (notify_variable_watchers): * src/decompress.c (Fzlib_decompress_region): * src/dired.c (directory_files_internal, file_name_completion) (file_attributes): * src/dispnew.c (Fredisplay): * src/doc.c (get_doc_string, Fsnarf_documentation): * src/editfns.c (Fsave_excursion, Fsave_current_buffer) (Freplace_buffer_contents, Fsubst_char_in_region, Fsave_restriction) (styled_format): * src/emacs-module.c (Fmodule_load, funcall_module): * src/emacs.c (init_cmdargs, Fdump_emacs): * src/eval.c (call_debugger, do_debug_on_call, FletX, Flet) (Ffuncall_with_delayed_message, Funwind_protect) (internal_lisp_condition_case, signal_or_quit) (load_with_autoload_queue, Feval, grow_specpdl_allocation) (record_in_backtrace, eval_sub, Ffuncall, apply_lambda) (funcall_lambda, clear_unwind_protect, set_unwind_protect) (set_unwind_protect_ptr, unbind_to, Fbacktrace_eval): * src/fileio.c (Fmake_temp_file_internal, Fcopy_file, Frename_file) (Finsert_file_contents, write_region, Fdo_auto_save): * src/fns.c (Fyes_or_no_p, Frequire, hash_table_user_defined_call): * src/fringe.c (update_window_fringes): * src/gtkutil.c (xg_dialog_run): * src/haiku_io.c (c_specpdl_idx_from_cxx): * src/haiku_support.cc (be_popup_file_dialog): * src/haiku_support.h (c_specpdl_idx_from_cxx): * src/haikufns.c (haiku_create_frame, haiku_create_tip_frame) (haiku_hide_tip, Fx_show_tip, Fhaiku_read_file_name): * src/haikumenu.c (haiku_popup_dialog, set_frame_menubar): * src/image.c (slurp_file): * src/indent.c (line_number_display_width, Fvertical_motion): * src/insdel.c (signal_before_change, signal_after_change) (Fcombine_after_change_execute): * src/intervals.c (get_local_map): * src/json.c (lisp_to_json_nonscalar_1, Fjson_serialize, Fjson_insert) (Fjson_parse_string, Fjson_parse_buffer): * src/keyboard.c (recursive_edit_1, Frecursive_edit, cmd_error) (Finternal_track_mouse, command_loop_1, read_menu_command) (safe_run_hooks, read_event_from_main_queue, read_char, timer_check_2) (menu_item_eval_property, read_key_sequence, read_key_sequence_vs) (Fsuspend_emacs): * src/keymap.c (Fcurrent_active_maps, Fdescribe_vector) (Fhelp__describe_vector): * src/lread.c (Fload, save_match_data_load, readevalloop) (Feval_buffer, Feval_region, grow_read_buffer, read_integer, read1): * src/macros.c (Fexecute_kbd_macro): * src/menu.c (x_popup_menu_1): * src/minibuf.c (read_minibuf, set_minibuffer_mode) (read_minibuf_unwind, Fread_string, Fread_buffer): * src/nsfns.m (Fx_create_frame, Fx_show_tip): * src/nsmenu.m (ns_update_menubar, ns_menu_show, ns_popup_dialog): * src/pdumper.c (Fdump_emacs_portable): * src/pgtkfns.c (Fx_create_frame, x_create_tip_frame, x_hide_tip) (Fx_show_tip, Fpgtk_print_frames_dialog, Fx_file_dialog, Fx_select_font): * src/pgtkmenu.c (set_frame_menubar, create_and_show_popup_menu) (pgtk_menu_show, create_and_show_dialog, pgtk_dialog_show) (pgtk_popup_dialog): * src/pgtkterm.c (pgtk_cr_export_frames): * src/print.c (PRINTPREPARE, temp_output_buffer_setup) (Fprin1_to_string, print_vectorlike): * src/process.c (Fmake_process, create_process, Fmake_pipe_process) (Fmake_serial_process, connect_network_socket, Fmake_network_process) (network_interface_info, server_accept_connection) (wait_reading_process_output, read_process_output, exec_sentinel): * src/regex-emacs.c (re_match_2_internal): * src/search.c (looking_at_1, fast_looking_at, search_buffer_re): * src/sound.c (Fplay_sound_internal): * src/sysdep.c (system_process_attributes): * src/term.c (tty_menu_show): * src/textprop.c (Fnext_single_char_property_change) (Fprevious_single_char_property_change, add_text_properties_1) (set_text_properties, set_text_properties_1, Fremove_text_properties) (Fremove_list_of_text_properties): * src/thread.c (Fmutex_lock, invoke_thread_function): * src/undo.c (truncate_undo_list): * src/w32fns.c (Fx_create_frame, w32_create_tip_frame, w32_hide_tip) (Fx_show_tip, Fx_file_dialog): * src/w32font.c (Fx_select_font): * src/w32menu.c (set_frame_menubar): * src/window.c (window_list, next_window, window_list_1) (run_window_configuration_change_hook, Frun_window_scroll_functions) (run_window_change_functions, set_window_buffer) (temp_output_buffer_show, window_scroll, scroll_command) (Fscroll_other_window, Fscroll_other_window_down): * src/xdisp.c (safe__call, handle_fontified_prop, handle_face_prop) (handle_single_display_spec, Fbuffer_text_pixel_size) (message_dolog, with_echo_area_buffer, setup_echo_area_for_printing) (display_echo_area, set_message, clear_message, echo_area_display) (gui_consider_frame_title, prepare_menu_bars, update_menu_bar) (update_tab_bar, update_tool_bar, redisplay_internal) (redisplay_preserve_echo_area, run_window_scroll_functions) (redisplay_window, extend_face_to_end_of_line) (display_count_lines_logically, display_count_lines_visually) (display_mode_lines, display_mode_line, Fformat_mode_line) (decode_mode_spec): * src/xfns.c (Fx_create_frame, x_create_tip_frame, x_hide_tip) (Fx_show_tip, Fx_file_dialog, Fx_select_font, Fx_print_frames_dialog): * src/xmenu.c (set_frame_menubar, create_and_show_popup_menu) (x_menu_show, create_and_show_dialog, x_dialog_show) (xw_popup_dialog): * src/xselect.c (x_get_local_selection, x_reply_selection_request) (x_handle_selection_request, wait_for_property_change): * src/xterm.c (x_cr_export_frames, x_connection_closed): Replace ptrdiff_t with specpdl_ref for referencing specpdl and use the corresponding functions instead of direct arithmetic.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 5d7b484f6ea..a3410be7e26 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3891,7 +3891,7 @@ run_finalizer_handler (Lisp_Object args)
3891static void 3891static void
3892run_finalizer_function (Lisp_Object function) 3892run_finalizer_function (Lisp_Object function)
3893{ 3893{
3894 ptrdiff_t count = SPECPDL_INDEX (); 3894 specpdl_ref count = SPECPDL_INDEX ();
3895#ifdef HAVE_PDUMPER 3895#ifdef HAVE_PDUMPER
3896 ++number_finalizers_run; 3896 ++number_finalizers_run;
3897#endif 3897#endif
@@ -5744,10 +5744,10 @@ allow_garbage_collection (intmax_t consing)
5744 garbage_collection_inhibited--; 5744 garbage_collection_inhibited--;
5745} 5745}
5746 5746
5747ptrdiff_t 5747specpdl_ref
5748inhibit_garbage_collection (void) 5748inhibit_garbage_collection (void)
5749{ 5749{
5750 ptrdiff_t count = SPECPDL_INDEX (); 5750 specpdl_ref count = SPECPDL_INDEX ();
5751 record_unwind_protect_intmax (allow_garbage_collection, consing_until_gc); 5751 record_unwind_protect_intmax (allow_garbage_collection, consing_until_gc);
5752 garbage_collection_inhibited++; 5752 garbage_collection_inhibited++;
5753 consing_until_gc = HI_THRESHOLD; 5753 consing_until_gc = HI_THRESHOLD;
@@ -6107,7 +6107,7 @@ garbage_collect (void)
6107 Lisp_Object tail, buffer; 6107 Lisp_Object tail, buffer;
6108 char stack_top_variable; 6108 char stack_top_variable;
6109 bool message_p; 6109 bool message_p;
6110 ptrdiff_t count = SPECPDL_INDEX (); 6110 specpdl_ref count = SPECPDL_INDEX ();
6111 struct timespec start; 6111 struct timespec start;
6112 6112
6113 eassert (weak_hash_tables == NULL); 6113 eassert (weak_hash_tables == NULL);
@@ -6265,7 +6265,7 @@ garbage_collect (void)
6265 6265
6266 if (!NILP (Vpost_gc_hook)) 6266 if (!NILP (Vpost_gc_hook))
6267 { 6267 {
6268 ptrdiff_t gc_count = inhibit_garbage_collection (); 6268 specpdl_ref gc_count = inhibit_garbage_collection ();
6269 safe_run_hooks (Qpost_gc_hook); 6269 safe_run_hooks (Qpost_gc_hook);
6270 unbind_to (gc_count, Qnil); 6270 unbind_to (gc_count, Qnil);
6271 } 6271 }
@@ -6318,7 +6318,7 @@ For further details, see Info node `(elisp)Garbage Collection'. */)
6318 if (garbage_collection_inhibited) 6318 if (garbage_collection_inhibited)
6319 return Qnil; 6319 return Qnil;
6320 6320
6321 ptrdiff_t count = SPECPDL_INDEX (); 6321 specpdl_ref count = SPECPDL_INDEX ();
6322 specbind (Qsymbols_with_pos_enabled, Qnil); 6322 specbind (Qsymbols_with_pos_enabled, Qnil);
6323 garbage_collect (); 6323 garbage_collect ();
6324 unbind_to (count, Qnil); 6324 unbind_to (count, Qnil);
@@ -7421,7 +7421,7 @@ Lisp_Object
7421which_symbols (Lisp_Object obj, EMACS_INT find_max) 7421which_symbols (Lisp_Object obj, EMACS_INT find_max)
7422{ 7422{
7423 struct symbol_block *sblk; 7423 struct symbol_block *sblk;
7424 ptrdiff_t gc_count = inhibit_garbage_collection (); 7424 specpdl_ref gc_count = inhibit_garbage_collection ();
7425 Lisp_Object found = Qnil; 7425 Lisp_Object found = Qnil;
7426 7426
7427 if (! deadp (obj)) 7427 if (! deadp (obj))