aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorPaul Eggert2011-09-21 10:41:20 -0700
committerPaul Eggert2011-09-21 10:41:20 -0700
commitd311d28c3f8a3c43e6ef33d68b852c5ea7f13239 (patch)
tree84b390c8bd472074294a31d51e790437f0a9a75d /src/lisp.h
parent4768be09c9866add356a0a9b47ecd42346442b9f (diff)
downloademacs-d311d28c3f8a3c43e6ef33d68b852c5ea7f13239.tar.gz
emacs-d311d28c3f8a3c43e6ef33d68b852c5ea7f13239.zip
* alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp):
(allocate_vectorlike, buffer_memory_full, struct sdata, SDATA_SIZE) (string_bytes, check_sblock, allocate_string_data): (compact_small_strings, Fmake_bool_vector, make_string) (make_unibyte_string, make_multibyte_string) (make_string_from_bytes, make_specified_string) (allocate_vectorlike, Fmake_vector, find_string_data_in_pure) (make_pure_string, make_pure_c_string, make_pure_vector, Fpurecopy) (mark_vectorlike): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (allocate_pseudovector): Use int, not EMACS_INT, where int is wide enough. (inhibit_garbage_collection, Fgarbage_collect): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * bidi.c (bidi_mirror_char): Use EMACS_INT, not int, where int might not be wide enough. (bidi_cache_search, bidi_cache_find, bidi_init_it) (bidi_count_bytes, bidi_char_at_pos, bidi_fetch_char) (bidi_at_paragraph_end, bidi_find_paragraph_start) (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak) (bidi_level_of_next_char, bidi_move_to_visually_next): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * buffer.c (copy_overlays, Fgenerate_new_buffer_name) (Fkill_buffer, Fset_buffer_major_mode) (advance_to_char_boundary, Fbuffer_swap_text) (Fset_buffer_multibyte, overlays_at, overlays_in) (overlay_touches_p, struct sortvec, record_overlay_string) (overlay_strings, recenter_overlay_lists) (adjust_overlays_for_insert, adjust_overlays_for_delete) (fix_start_end_in_overlays, fix_overlays_before, modify_overlay) (Fmove_overlay, Fnext_overlay_change, Fprevious_overlay_change) (Foverlay_recenter, last_overlay_modification_hooks_used) (report_overlay_modification, evaporate_overlays, enlarge_buffer_text): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (validate_region): Omit unnecessary test for b <= e, since that's guaranteed by the previous test. (adjust_overlays_for_delete): Avoid pos + length overflow. (Fmove_overlay, Fdelete_overlay, add_overlay_mod_hooklist) (report_overlay_modification): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Foverlays_at, Fnext_overlay_change, Fprevious_overlay_change): Omit pointer cast, which isn't needed anyway, and doesn't work after the EMACS_INT -> ptrdiff_t change. * buffer.h: Adjust decls to match defn changes elsewhere. (struct buffer_text, struct buffer): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. Use EMACS_INT, not int, where int might not be wide enough. * bytecode.c (exec_byte_code): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. Remove unnecessary memory-full test. Use EMACS_INT, not ptrdiff_t or int, where ptrdiff_t or int might not be wide enough. * callint.c (Fcall_interactively): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * callproc.c (call_process_kill, Fcall_process): Don't assume pid_t fits into an Emacs fixnum. (call_process_cleanup, Fcall_process, child_setup): Don't assume pid_t fits into int. (call_process_cleanup, Fcall_process, delete_temp_file) (Fcall_process_region): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fcall_process): Simplify handling of volatile integers. Use int, not EMACS_INT, where int will do. * casefiddle.c (casify_object, casify_region, operate_on_word) (Fupcase_word, Fdowncase_word, Fcapitalize_word): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (casify_object): Avoid integer overflow when overallocating buffer. * casetab.c (set_identity, shuffle): Prefer int to unsigned when either works. * category.c (Fchar_category_set): Don't assume fixnum fits in int. * category.h (CATEGORYP): Don't assume arg is nonnegative. * ccl.c (GET_CCL_INT): Remove; no longer needed, since the integers are now checked earlier. All uses replaced with XINT. (ccl_driver): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. For CCL_MapSingle, check that content and value are in int range. (resolve_symbol_ccl_program): Check that vector header is in range. Always copy the vector, so that we can check its contents reliably now rather than having to recheck each instruction as it's being executed. Check that vector words fit in 'int'. (ccl_get_compiled_code, Fregister_ccl_program) (Fregister_code_conversion_map): Use ptrdiff_t, not int, for program indexes, to avoid needless 32-bit limit on 64-bit hosts. (Fccl_execute, Fccl_execute_on_string): Check that initial reg contents are in range. (Fccl_execute_on_string): Check that status is in range. * ccl.h (struct ccl_program.idx): Now ptrdiff_t, not int. * character.c (char_resolve_modifier_mask, Fchar_resolve_modifiers): Accept and return EMACS_INT, not int, because callers can pass values out of 'int' range. (c_string_width, strwidth, lisp_string_width, chars_in_text) (multibyte_chars_in_text, parse_str_as_multibyte) (str_as_multibyte, count_size_as_multibyte, str_to_multibyte) (str_as_unibyte, str_to_unibyte, string_count_byte8) (string_escape_byte8, Fget_byte): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Funibyte_string): Use CHECK_CHARACTER, not CHECK_NATNUM, to avoid mishandling large integers. * character.h: Adjust decls to match defn changes elsewhere. * charset.c (load_charset_map_from_file, find_charsets_in_text) (Ffind_charset_region): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (load_charset_map_from_file): Redo idx calculation to avoid overflow. (load_charset_map_from_vector, Fdefine_charset_internal): Don't assume fixnum fits in int or unsigned int. (load_charset_map_from_vector, Fmap_charset_chars): Remove now-unnecessary CHECK_NATNUMs. (Fdefine_charset_internal): Check ranges here, more carefully. * chartab.c (Fmake_char_table, Fset_char_table_range) (uniprop_get_decoder, uniprop_get_encoder): Don't assume fixnum fits in int. * cmds.c (move_point): New function, that does the gist of Fforward_char and Fbackward_char, but does so while checking for integer overflow more accurately. (Fforward_char, Fbackward_char, internal_self_insert): Use it. (Fforward_line, Fend_of_line, internal_self_insert) (internal_self_insert): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. Fix a FIXME, by checking for integer overflow when calculating target_clm and actual_clm. * coding.c (detect_coding_XXX, encode_coding_XXX, CODING_DECODE_CHAR) (ASSURE_DESTINATION, coding_alloc_by_realloc) (coding_alloc_by_making_gap, alloc_destination) (detect_coding_utf_8, encode_coding_utf_8, decode_coding_utf_16) (encode_coding_utf_16, detect_coding_emacs_mule) (decode_coding_emacs_mule, encode_coding_emacs_mule) (detect_coding_iso_2022, decode_coding_iso_2022) (encode_invocation_designation, encode_designation_at_bol) (encode_coding_iso_2022, detect_coding_sjis, detect_coding_big5) (decode_coding_sjis, decode_coding_big5, encode_coding_sjis) (encode_coding_big5, detect_coding_ccl, decode_coding_ccl) (encode_coding_ccl, encode_coding_raw_text) (detect_coding_charset, decode_coding_charset) (encode_coding_charset, detect_eol, decode_eol, produce_chars) (produce_composition, produce_charset, produce_annotation) (decode_coding, handle_composition_annotation) (handle_charset_annotation, consume_chars, decode_coding_gap) (decode_coding_object, encode_coding_object, detect_coding_system) (Ffind_coding_systems_region_internal, Fcheck_coding_systems_region) (code_convert_region, code_convert_string) (Fdefine_coding_system_internal): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (setup_iso_safe_charsets, consume_chars, Funencodable_char_position) (Fdefine_coding_system_internal): Don't assume fixnums fit in int. (decode_coding_gap, decode_coding_object, encode_coding_object) (Fread_coding_system, Fdetect_coding_region, Funencodable_char_position) (Fcheck_coding_systems_region): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Ffind_operation_coding_system): NATNUMP can eval its arg twice. (Fdefine_coding_system_internal): Check for charset-id overflow. * coding.h: Adjust decls to match defn changes elsewhere. (struct coding_system): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * composite.c (get_composition_id, find_composition) (run_composition_function, update_compositions) (compose_text, composition_gstring_put_cache) (composition_gstring_p, composition_gstring_width) (fill_gstring_header, fill_gstring_body, autocmp_chars) (composition_compute_stop_pos, composition_reseat_it) (composition_update_it, struct position_record) (find_automatic_composition, composition_adjust_point) (Fcomposition_get_gstring, Ffind_composition_internal): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (update_compositions): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * composite.h: Adjust decls to match defn changes elsewhere. (struct composition): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * data.c (let_shadows_buffer_binding_p, let_shadows_global_binding_p): Do not attempt to compute the address of the object just before a buffer; this is not portable. (Faref, Faset): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Faset): Use int, not EMACS_INT, where int is wide enough. (Fstring_to_number): Don't assume fixnums fit in int. (Frem): Don't assume arg is nonnegative. * dbusbind.c (xd_append_arg): Check for integers out of range. (Fdbus_call_method): Don't overflow the timeout int. * dired.c (directory_files_internal, file_name_completion, scmp) (file_name_completion_stat): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (file_name_completion): Don't overflow matchcount. (file_name_completion_stat): Use SAFE_ALLOCA, not alloca. * dispextern.h: Adjust decls to match defn changes elsewhere. (struct text_pos, struct glyph, struct bidi_saved_info) (struct bidi_string_data, struct bidi_it, struct composition_it) (struct it): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (struct display_pos, struct composition_it, struct it): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * dispnew.c (increment_matrix_positions) (increment_row_positions, mode_line_string) (marginal_area_string): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (change_frame_size_1, Fredisplay): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (duration_to_sec_usec): New function, to check for overflow better. (Fsleep_for, sit_for): Use it. * doc.c (get_doc_string, store_function_docstring): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (get_doc_string, Fsnarf_documentation): Use int, not EMACS_INT, where int is wide enough. (get_doc_string): Use SAFE_ALLOCA, not alloca. Check for overflow when converting EMACS_INT to off_t. * doprnt.c (doprnt): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * editfns.c (init_editfns, Fuser_uid, Fuser_real_uid): Don't assume uid_t fits into fixnum. (buildmark, Fgoto_char, overlays_around, find_field, Fdelete_field) (Ffield_string, Ffield_string_no_properties, Ffield_beginning) (Ffield_end, Fconstrain_to_field, Fline_beginning_position) (Fline_end_position, Fprevious_char, Fchar_after, Fchar_before) (general_insert_function) (Finsert_char, make_buffer_string, make_buffer_string_both) (update_buffer_properties, Fbuffer_substring) (Fbuffer_substring_no_properties, Fcompare_buffer_substrings) (Fsubst_char_in_region, check_translation) (Ftranslate_region_internal, save_restriction_restore, Fformat) (transpose_markers, Ftranspose_regions): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (clip_to_bounds): Move to lisp.h as an inline function). (Fconstrain_to_field): Don't assume integers are nonnegative. (Fline_beginning_position, Fsave_excursion, Fsave_current_buffer): (Fsubst_char_in_region, Fsave_restriction): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Femacs_pid): Don't assume pid_t fits into fixnum. (lo_time): Use int, not EMACS_INT, when int suffices. (lisp_time_argument): Check for usec out of range. (Fencode_time): Don't assume fixnum fits in int. * emacs.c (gdb_valbits, gdb_gctypebits): Now int, not EMACS_INT. (gdb_data_seg_bits): Now uintptr_t, not EMACS_INT. (PVEC_FLAG, gdb_array_mark_flag): Now ptrdiff_t, not EMACS_INT. (init_cmdargs, Fdump_emacs): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fkill_emacs): Don't assume fixnum fits in int; instead, take just the bottom (typically) 32 bits of the fixnum. * eval.c (specpdl_size, call_debugger): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (when_entered_debugger, Fbacktrace_debug): Don't assume fixnum can fit in int. (Fdefvaralias, Fdefvar): Do not attempt to compute the address of the object just before a buffer; this is not portable. (FletX, Flet, Funwind_protect, do_autoload, Feval, funcall_lambda) (grow_specpdl, unbind_to): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fapply, apply_lambda): Don't assume ptrdiff_t can hold fixnum. (grow_specpdl): Simplify allocation by using xpalloc. * fileio.c (Ffind_file_name_handler, Fcopy_file, Frename_file) (Finsert_file_contents, Fwrite_region, Fdo_auto_save): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Ffind_file_name_handler, non_regular_inserted, Finsert_file_contents) (a_write, e_write): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fcopy_file, non_regular_nbytes, read_non_regular) (Finsert_file_contents): Use int, not EMACS_INT, where int is wide enough. (READ_BUF_SIZE): Verify that it fits in int. (Finsert_file_contents): Check that counts are in proper range, rather than assuming fixnums fit into ptrdiff_t etc. Don't assume fixnums fit into int. (Fdo_auto_save, Fset_buffer_auto_saved) (Fclear_buffer_auto_save_failure): Don't assume time_t is signed, or that it fits in int. * fns.c (Fcompare_strings, Fstring_lessp, struct textprop_rec) (concat, string_char_byte_cache_charpos, string_char_byte_cache_bytepos) (string_char_to_byte, string_byte_to_char) (string_make_multibyte, string_to_multibyte) (string_make_unibyte, Fstring_as_unibyte, Fstring_as_multibyte) (Fstring_to_unibyte, Fsubstring, Fsubstring_no_properties) (substring_both, Fdelete, internal_equal, Ffillarray) (Fclear_string, mapcar1) (Fbase64_encode_region, Fbase64_encode_string, base64_encode_1) (Fbase64_decode_region, Fbase64_decode_string, base64_decode_1) (larger_vector, make_hash_table, maybe_resize_hash_table) (hash_lookup, hash_remove_from_table, hash_clear, sweep_weak_table) (Fmaphash, secure_hash): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (concat): Check for string index and length overflow. (Fmapconcat): Don't assume fixnums fit into ptrdiff_t. (Frequire): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (larger_vector): New API (vec, incr_min, size_max) replaces old one (vec, new_size, init). This catches size overflow. INIT was removed because it was always Qnil. All callers changed. (INDEX_SIZE_BOUND): New macro, which calculates more precisely the upper bound on a hash table index size. (make_hash_table, maybe_resize_hash_table): Use it. (secure_hash): Computer start_byte and end_byte only after they're known to be in ptrdiff_t range. * font.c (font_intern_prop, font_at, font_range, Ffont_shape_gstring) (Ffont_get_glyphs, Ffont_at): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (font_style_to_value, font_prop_validate_style, font_expand_wildcards) (Flist_fonts, Fopen_font): Don't assume fixnum can fit in int. (check_gstring): Don't assume index can fit in int. (font_match_p): Check that fixnum is a character, not a nonnegative fixnum, since the later code needs to stuff it into an int. (font_find_for_lface): Use SAFE_ALLOCA_LISP, not alloca. (font_fill_lglyph_metrics): Use unsigned, not EMACS_INT, to avoid conversion overflow issues. (Fopen_font): Check for integer out of range. (Ffont_get_glyphs): Don't assume index can fit in int. * font.h: Adjust decls to match defn changes elsewhere. * fontset.c (reorder_font_vector): Redo score calculation to avoid integer overflow. (num_auto_fontsets, fontset_from_font): Use ptrdiff_t, not printmax_t, where ptrdiff_t is wide enough. (Finternal_char_font): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * frame.c (Fset_mouse_position, Fset_mouse_pixel_position) (Fset_frame_height, Fset_frame_width, Fset_frame_size) (Fset_frame_position, x_set_frame_parameters) (x_set_line_spacing, x_set_border_width) (x_set_internal_border_width, x_set_alpha, x_figure_window_size): Check that fixnums are in proper range for system types. (frame_name_fnn_p, Fframe_parameter, Fmodify_frame_parameters): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fmodify_frame_parameters): Don't assume fixnum fits in int. Use SAFE_ALLOCA_LISP, not alloca. * frame.h (struct frame): Use intptr_t, not EMACS_INT, where intptr_t is wide enough. * fringe.c (lookup_fringe_bitmap, get_logical_fringe_bitmap) (Fdefine_fringe_bitmap): Don't assume fixnum fits in int. (Ffringe_bitmaps_at_pos): Don't assume index fits in int. Check for fixnum out of range. * ftfont.c (ftfont_list): Don't assume index fits in int. Check that fixnums are in proper range for system types. (ftfont_shape_by_flt): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. Remove no-longer-needed lint_assume. * gnutls.c (emacs_gnutls_write, emacs_gnutls_read): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fgnutls_error_fatalp, Fgnutls_error_string, Fgnutls_boot): Check that fixnums are in proper range for system types. * gnutls.h: Adjust decls to match defn changes elsewhere. * gtkutil.c (xg_dialog_run): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (update_frame_tool_bar): Check that fixnums are in proper range for system types. * image.c (parse_image_spec): Redo count calculation to avoid overflow. (lookup_image): Check that fixnums are in proper range for system types. * indent.c (last_known_column, last_known_column_point): (current_column_bol_cache): (skip_invisible, current_column, check_display_width): (check_display_width, scan_for_column, current_column_1) (Findent_to, Fcurrent_indentation, position_indentation) (indented_beyond_p, Fmove_to_column, compute_motion): (Fcompute_motion, Fvertical_motion): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (last_known_column_modified): Use EMACS_INT, not int. (check_display_width): (Fcompute_motion): Check that fixnums and floats are in proper range for system types. (compute_motion): Don't assume index or fixnum fits in int. (compute_motion, Fcompute_motion): Use int, not EMACS_INT, when it is wide enough. (vmotion): Omit local var start_hpos that is always 0; that way we don't need to worry about overflow in expressions involving it. * indent.h: Adjust decls to match defn changes elsewhere. (struct position): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. Use int, not EMACS_INT, where int is wide enough. Remove unused members ovstring_chars_done and tab_offset; all uses removed. * insdel.c (move_gap, move_gap_both, gap_left, gap_right) (adjust_markers_for_delete, adjust_markers_for_insert, adjust_point) (adjust_markers_for_replace, make_gap_larger, make_gap_smaller) (make_gap, copy_text, insert, insert_and_inherit) (insert_before_markers, insert_before_markers_and_inherit) (insert_1, count_combining_before, count_combining_after) (insert_1_both, insert_from_string) (insert_from_string_before_markers, insert_from_string_1) (insert_from_gap, insert_from_buffer, insert_from_buffer_1) (adjust_after_replace, adjust_after_insert, replace_range) (replace_range_2, del_range, del_range_1, del_range_byte) (del_range_both, del_range_2, modify_region) (prepare_to_modify_buffer, signal_before_change) (signal_after_change, Fcombine_after_change_execute): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * intervals.c (traverse_intervals, rotate_right, rotate_left) (balance_an_interval, split_interval_right, split_interval_left) (find_interval, next_interval, update_interval) (adjust_intervals_for_insertion, delete_node, delete_interval) (interval_deletion_adjustment, adjust_intervals_for_deletion) (static_offset_intervals, offset_intervals) (merge_interval_right, merge_interval_left, make_new_interval) (graft_intervals_into_buffer, temp_set_point_both) (temp_set_point, set_point, adjust_for_invis_intang) (set_point_both, move_if_not_intangible, get_property_and_range) (get_local_map, copy_intervals, copy_intervals_to_string) (compare_string_intervals, set_intervals_multibyte_1): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * intervals.h: Adjust decls to match defn changes elsewhere. (struct interval): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * keyboard.c (this_command_key_count, this_single_command_key_start) (before_command_key_count, before_command_echo_length, echo_now) (echo_length, recursive_edit_1, Frecursive_edit, Ftrack_mouse) (command_loop_1, safe_run_hooks, read_char, timer_check_2) (menu_item_eval_property, read_key_sequence, Fread_key_sequence) (Fread_key_sequence_vector, Fexecute_extended_command, Fsuspend_emacs): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (last_non_minibuf_size, last_point_position, echo_truncate) (command_loop_1, adjust_point_for_property, read_char, gen_help_event) (make_lispy_position, make_lispy_event, parse_modifiers_uncached) (parse_modifiers, modify_event_symbol, Fexecute_extended_command) (stuff_buffered_input): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (last_auto_save, command_loop_1, read_char): Use EMACS_INT, not int, to avoid integer overflow. (record_char): Avoid overflow in total_keys computation. (parse_modifiers_uncached): Redo index calculation to avoid overflow. * keyboard.h: Adjust decls to match defn changes elsewhere. * keymap.c (Fdefine_key, Fcurrent_active_maps, accessible_keymaps_1) (Fkey_description, Fdescribe_vector, Flookup_key): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (click_position): New function, to check that positions are in range. (Fcurrent_active_maps): (describe_command): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Faccessible_keymaps, Fkey_description): (preferred_sequence_p): Don't assume fixnum can fit into int. (Fkey_description): Use SAFE_ALLOCA_LISP, not alloca. Check for integer overflow in size calculations. (Ftext_char_description): Use CHECK_CHARACTER, not CHECK_NUMBER, to avoid mishandling large integers. * lisp.h: Adjust decls to match defn changes elsewhere. (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG, struct Lisp_String) (struct vectorlike_header, struct Lisp_Subr, struct Lisp_Hash_Table) (struct Lisp_Marker): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (clip_to_bounds): Now an inline function, moved here from editfns.c. (XSETSUBR): Use size of 0 since the actual size doesn't matter, and using 0 avoids overflow. (GLYPH_CODE_P): Check for overflow in system types, subsuming the need for GLYPH_CODE_CHAR_VALID_P and doing proper checking ourselves. All callers changed. (GLYPH_CODE_CHAR, GLYPH_CODE_FACE): Assume the arg has valid form, since it always does. (TYPE_RANGED_INTEGERP): Avoid bug when checking against a wide unsigned integer system type. (CHECK_RANGED_INTEGER, CHECK_TYPE_RANGED_INTEGER): New macros. (struct catchtag, specpdl_size, SPECPDL_INDEX, USE_SAFE_ALLOCA): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (struct catchtag): Use EMACS_INT, not int, since it may be a fixnum. (duration_to_sec_usec): New decl. * lread.c (read_from_string_index, read_from_string_index_byte) (read_from_string_limit, readchar, unreadchar, openp) (read_internal_start, read1, oblookup): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fload, readevalloop, Feval_buffer, Feval_region): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (openp): Check for out-of-range argument to 'access'. (read1): Use int, not EMACS_INT, where int is wide enough. Don't assume fixnum fits into int. * macros.c (Fstart_kbd_macro): Use xpalloc to check for overflow in size calculation. (Fexecute_kbd_macro): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * marker.c (cached_charpos, cached_bytepos, CONSIDER) (byte_char_debug_check, buf_charpos_to_bytepos, verify_bytepos) (buf_bytepos_to_charpos, Fset_marker, set_marker_restricted) (set_marker_both, set_marker_restricted_both, marker_position) (marker_byte_position, Fbuffer_has_markers_at): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fset_marker, set_marker_restricted): Don't assume fixnum fits in int. * menu.c (ensure_menu_items): Renamed from grow_menu_items. It now merely ensures that the menu is large enough, without necessarily growing it, as this avoids some integer overflow issues. All callers changed. (keymap_panes, parse_single_submenu, Fx_popup_menu): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (parse_single_submenu, Fx_popup_menu): Don't assume fixnum fits in int. Use SAFE_ALLOCA_LISP, not alloca. (find_and_return_menu_selection): Avoid unnecessary casts of pointers to EMACS_INT. Check that fixnums are in proper range for system types. * minibuf.c (minibuf_prompt_width, string_to_object) (Fminibuffer_contents, Fminibuffer_contents_no_properties) (Fminibuffer_completion_contents, Ftry_completion, Fall_completions): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (get_minibuffer, read_minibuf_unwind): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (read_minibuf): Omit unnecessary arg BACKUP_N, which is always nil; this simplifies overflow checking. All callers changed. (read_minibuf, Fread_buffer, Ftry_completion, Fall_completions) (Ftest_completion): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * nsfns.m (check_ns_display_info): Don't assume fixnum fits in long. (x_set_menu_bar_lines, x_set_tool_bar_lines, Fx_create_frame): Check that fixnums are in proper range for system types. (Fx_create_frame, Fx_show_tip): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * nsfont.m (ns_findfonts, nsfont_list_family): Don't assume fixnum fits in long. * nsmenu.m (ns_update_menubar, ns_menu_show, ns_popup_dialog): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (ns_update_menubar): Use intptr_t, not EMACS_INT, when intptr_t is wide enough. * nsselect.m (ns_get_local_selection): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * print.c (print_buffer_size, print_buffer_pos, print_buffer_pos_byte) (PRINTDECLARE, PRINTPREPARE): (strout, print_string): (print, print_preprocess, print_check_string_charset_prop) (print_object): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (PRINTDECLARE): (temp_output_buffer_setup, Fprin1_to_string, print_object): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (PRINTPREPARE): Use int, not ptrdiff_t, where int is wide enough. (PRINTFINISH): Use SAFE_ALLOCA, not alloca. (printchar, strout): Use xpalloc to catch size calculation overflow. (Fexternal_debugging_output): Use CHECK_CHARACTER, not CHECK_NUMBER, to avoid mishandling large integers. (print_error_message): Use SAFE_ALLOCA, not alloca. (print_object): Use int, not EMACS_INT, where int is wide enough. * process.c (Fdelete_process): Don't assume pid fits into EMACS_INT. (Fset_process_window_size, Fformat_network_address) (get_lisp_to_sockaddr_size, set_socket_option, Fmake_network_process) (Fsignal_process, sigchld_handler): Check that fixnums are in proper range for system types. (Fformat_network_address, read_process_output, send_process) (Fprocess_send_region, status_notify): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fformat_network_address, Fmake_serial_process, Fmake_network_process) (wait_reading_process_output, read_process_output, exec_sentinel): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (conv_lisp_to_sockaddr): Don't assume fixnums fit into int. (Faccept_process_output): Use duration_to_sec_usec to do proper overflow checking on durations. * scroll.c (calculate_scrolling, calculate_direct_scrolling) (line_ins_del): Use int, not EMACS_INT, where int is wide enough. * search.c (looking_at_1, string_match_1): (fast_string_match, fast_c_string_match_ignore_case) (fast_string_match_ignore_case, fast_looking_at, scan_buffer) (scan_newline, find_before_next_newline, search_command) (trivial_regexp_p, search_buffer, simple_search, boyer_moore) (set_search_regs, wordify): (Freplace_match): (Fmatch_data): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (string_match_1, search_buffer, set_search_regs): (Fmatch_data): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (wordify): Check for overflow in size calculation. (Freplace_match): Avoid potential buffer overflow in search_regs.start. (Fset_match_data): Don't assume fixnum fits in ptrdiff_t. Check that fixnums are in proper range for system types. * sound.c (struct sound_device) (wav_play, au_play, vox_write, alsa_period_size, alsa_write): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fplay_sound_internal): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * syntax.c (ST_COMMENT_STYLE, ST_STRING_STYLE): In definitions, make it clearer that these values must be out of range for the respective integer ranges. This fixes a bug with ST_STRING_STYLE and non-ASCII characters. (struct lisp_parse_state, find_start_modiff) (Finternal_describe_syntax_value, scan_lists, scan_sexps_forward): (Fparse_partial_sexp): Don't assume fixnums can fit in int. (struct lisp_parse_state, find_start_pos, find_start_value) (find_start_value_byte, find_start_begv) (update_syntax_table, char_quoted, dec_bytepos) (find_defun_start, prev_char_comend_first, back_comment): (scan_words, skip_chars, skip_syntaxes, forw_comment, Fforward_comment) (scan_lists, Fbackward_prefix_chars, scan_sexps_forward): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Finternal_describe_syntax_value): Check that match_lisp is a character, not an integer, since the code stuffs it into int. (scan_words, scan_sexps_forward): Check that fixnums are in proper range for system types. (Fforward_word): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (scan_sexps_forward): Use CHARACTERP, not INTEGERP, since the value must fit into int. (Fparse_partial_sexp): Fix doc; element 8 is not ignored. * syntax.h: Adjust decls to match defn changes elsewhere. (struct gl_state_s): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * sysdep.c (wait_for_termination_1, wait_for_termination) (interruptible_wait_for_termination, mkdir): Don't assume pid_t fits in int; on 64-bit AIX pid_t is 64-bit. (emacs_read, emacs_write): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (system_process_attributes): Don't assume uid_t, gid_t, and double all fit in int or even EMACS_INT. * term.c (set_tty_color_mode): Check that fixnums are in proper range for system types. * termhooks.h (struct input_event): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * textprop.c (validate_interval_range, interval_of) (Fadd_text_properties, set_text_properties_1) (Fremove_text_properties, Fremove_list_of_text_properties) (Ftext_property_any, Ftext_property_not_all) (copy_text_properties, text_property_list, extend_property_ranges) (verify_interval_modification): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fnext_single_char_property_change) (Fprevious_single_char_property_change): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (copy_text_properties): Check for integer overflow in index calculation. * undo.c (last_boundary_position, record_point, record_insert) (record_delete, record_marker_adjustment, record_change) (record_property_change): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (truncate_undo_list, Fprimitive_undo): Don't assume fixnum fits in int. Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * w32fns.c (Fx_create_frame, x_create_tip_frame, Fx_show_tip) (Fx_hide_tip, Fx_file_dialog): * w32menu.c (set_frame_menubar): Use ptrdiff_t, not int, for consistency with rest of code. * window.c (window_scroll_preserve_hpos, window_scroll_preserve_vpos) (select_window, Fdelete_other_windows_internal) (window_scroll_pixel_based, window_scroll_line_based) (Frecenter, Fset_window_configuration): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (Fset_window_hscroll, run_window_configuration_change_hook) (set_window_buffer, temp_output_buffer_show, scroll_command) (Fscroll_other_window): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fwindow_line_height, window_scroll, Fscroll_left, Fscroll_right): Don't assume fixnum fits in int. (Fset_window_scroll_bars): Check that fixnums are in proper range for system types. * xdisp.c (help_echo_pos, pos_visible_p, string_pos_nchars_ahead) (string_pos, c_string_pos, number_of_chars, init_iterator) (in_ellipses_for_invisible_text_p, init_from_display_pos) (compute_stop_pos, next_overlay_change, compute_display_string_pos) (compute_display_string_end, handle_face_prop) (face_before_or_after_it_pos, handle_invisible_prop, handle_display_prop) (handle_display_spec, handle_single_display_spec) (display_prop_intangible_p, string_buffer_position_lim) (string_buffer_position, handle_composition_prop, load_overlay_strings) (get_overlay_strings_1, get_overlay_strings) (iterate_out_of_display_property, forward_to_next_line_start) (back_to_previous_visible_line_start, reseat, reseat_to_string) (get_next_display_element, set_iterator_to_next) (get_visually_first_element, compute_stop_pos_backwards) (handle_stop_backwards, next_element_from_buffer) (move_it_in_display_line_to, move_it_in_display_line) (move_it_to, move_it_vertically_backward, move_it_by_lines) (add_to_log, message_dolog, message_log_check_duplicate) (message2, message2_nolog, message3, message3_nolog (with_echo_area_buffer, display_echo_area_1, resize_mini_window_1) (current_message_1, truncate_echo_area, truncate_message_1) (set_message, set_message_1, store_mode_line_noprop) (hscroll_window_tree, debug_delta, debug_delta_bytes, debug_end_vpos) (text_outside_line_unchanged_p, check_point_in_composition) (reconsider_clip_changes) (redisplay_internal, set_cursor_from_row, try_scrolling) (try_cursor_movement, set_vertical_scroll_bar, redisplay_window) (redisplay_window, find_last_unchanged_at_beg_row) (find_first_unchanged_at_end_row, row_containing_pos, try_window_id) (trailing_whitespace_p, find_row_edges, display_line) (RECORD_MAX_MIN_POS, Fcurrent_bidi_paragraph_direction) (display_mode_element, store_mode_line_string) (pint2str, pint2hrstr, decode_mode_spec) (display_count_lines, display_string, draw_glyphs) (x_produce_glyphs, x_insert_glyphs) (rows_from_pos_range, mouse_face_from_buffer_pos) (fast_find_string_pos, mouse_face_from_string_pos) (note_mode_line_or_margin_highlight, note_mouse_highlight): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (safe_call, init_from_display_pos, handle_fontified_prop) (handle_single_display_spec, load_overlay_strings) (with_echo_area_buffer, setup_echo_area_for_printing) (display_echo_area, echo_area_display) (x_consider_frame_title, prepare_menu_bars, update_menu_bar) (update_tool_bar, hscroll_window_tree, redisplay_internal) (redisplay_window, dump_glyph_row, display_mode_line, Fformat_mode_line) (decode_mode_spec, on_hot_spot_p): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (handle_single_display_spec, build_desired_tool_bar_string) (redisplay_tool_bar, scroll_window_tree, Fdump_glyph_matrix) (get_specified_cursor_type): Check that fixnums are in proper range for system types. (struct overlay_entry, resize_mini_window, Fdump_glyph_row) (Flookup_image_map): Don't assume fixnums fit in int. (compare_overlay_entries): Avoid mishandling comparisons due to subtraction overflow. (load_overlay_strings): Use SAFE_NALLOCA, not alloca. (last_escape_glyph_face_id, last_glyphless_glyph_face_id): (handle_tool_bar_click): Use int, not unsigned, since we prefer signed and the signedness doesn't matter here. (get_next_display_element, next_element_from_display_vector): Use int, not EMACS_INT, when int is wide enough. (start_hourglass): Use duration_to_sec_usec to do proper overflow checking on durations. * xfaces.c (Fbitmap_spec_p): Check that fixnums are in proper range for system types. (compare_fonts_by_sort_order): Avoid mishandling comparisons due to subtraction overflow. (Fx_family_fonts, realize_basic_faces): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fx_family_fonts): Don't assume fixnum fits in int. Use SAFE_ALLOCA_LISP, not alloca. (merge_face_heights): Remove unnecessary cast to EMACS_INT. (Finternal_make_lisp_face): Don't allocate more than MAX_FACE_ID. (face_at_buffer_position, face_for_overlay_string) (face_at_string_position): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. (merge_faces): Use int, not EMACS_INT, where int is wide enough. * xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines, x_icon_verify) (Fx_show_tip): Check that fixnums are in proper range for system types. (Fx_create_frame, x_create_tip_frame, Fx_show_tip) (Fx_hide_tip, Fx_file_dialog, Fx_select_font): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (Fx_change_window_property): Don't assume fixnums fit in int. * xfont.c (xfont_chars_supported): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * xmenu.c (Fx_popup_dialog, set_frame_menubar) (create_and_show_popup_menu, create_and_show_dialog, xmenu_show): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * xml.c (parse_region): * xrdb.c (magic_file_p): Use ptrdiff_t, not EMACS_INT, where ptrdiff_t is wide enough. * xselect.c (TRACE1): Don't assume pid_t promotes to int. (x_get_local_selection, x_reply_selection_request) (x_handle_selection_request, wait_for_property_change): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. (selection_data_to_lisp_data): Use short, not EMACS_INT, where short is wide enough. (x_send_client_event): Don't assume fixnum fits in int. * xterm.c (x_x_to_emacs_modifiers): Don't assume EMACS_INT overflows nicely into int. (x_emacs_to_x_modifiers): Use EMACS_INT, not int, because values may come from Lisp. (handle_one_xevent): NATNUMP can eval its arg twice. (x_connection_closed): Use ptrdiff_t, not int, to avoid needless 32-bit limit on 64-bit hosts. * xterm.h: Adjust decls to match defn changes elsewhere. (struct scroll_bar): Use struct vectorlike_header rather than rolling our own approximation. (SCROLL_BAR_VEC_SIZE): Remove; not used.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h291
1 files changed, 161 insertions, 130 deletions
diff --git a/src/lisp.h b/src/lisp.h
index e9a525a32b5..ed8eb2720b5 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -372,14 +372,13 @@ typedef EMACS_INT Lisp_Object;
372#define LISP_MAKE_RVALUE(o) (0+(o)) 372#define LISP_MAKE_RVALUE(o) (0+(o))
373#endif /* USE_LISP_UNION_TYPE */ 373#endif /* USE_LISP_UNION_TYPE */
374 374
375/* In the size word of a vector, this bit means the vector has been marked. 375/* In the size word of a vector, this bit means the vector has been marked. */
376 (Shift -1 left, not 1, to avoid provoking overflow diagnostics.) */
377 376
378#define ARRAY_MARK_FLAG ((EMACS_INT) -1 << (BITS_PER_EMACS_INT - 1)) 377#define ARRAY_MARK_FLAG PTRDIFF_MIN
379 378
380/* In the size word of a struct Lisp_Vector, this bit means it's really 379/* In the size word of a struct Lisp_Vector, this bit means it's really
381 some other vector-like object. */ 380 some other vector-like object. */
382#define PSEUDOVECTOR_FLAG ((EMACS_INT) 1 << (BITS_PER_EMACS_INT - 2)) 381#define PSEUDOVECTOR_FLAG (PTRDIFF_MAX - PTRDIFF_MAX / 2)
383 382
384/* In a pseudovector, the size field actually contains a word with one 383/* In a pseudovector, the size field actually contains a word with one
385 PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to 384 PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to
@@ -582,6 +581,12 @@ extern Lisp_Object make_number (EMACS_INT);
582#define FIXNUM_OVERFLOW_P(i) \ 581#define FIXNUM_OVERFLOW_P(i) \
583 (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= MOST_POSITIVE_FIXNUM)) 582 (! ((0 <= (i) || MOST_NEGATIVE_FIXNUM <= (i)) && (i) <= MOST_POSITIVE_FIXNUM))
584 583
584static inline ptrdiff_t
585clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper)
586{
587 return num < lower ? lower : num <= upper ? num : upper;
588}
589
585/* Extract a value or address from a Lisp_Object. */ 590/* Extract a value or address from a Lisp_Object. */
586 591
587#define XCONS(a) (eassert (CONSP (a)), (struct Lisp_Cons *) XPNTR (a)) 592#define XCONS(a) (eassert (CONSP (a)), (struct Lisp_Cons *) XPNTR (a))
@@ -659,8 +664,7 @@ extern Lisp_Object make_number (EMACS_INT);
659#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW)) 664#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW))
660#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_TERMINAL)) 665#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_TERMINAL))
661/* XSETSUBR is special since Lisp_Subr lacks struct vectorlike_header. */ 666/* XSETSUBR is special since Lisp_Subr lacks struct vectorlike_header. */
662#define XSETSUBR(a, b) \ 667#define XSETSUBR(a, b) XSETTYPED_PSEUDOVECTOR (a, b, 0, PVEC_SUBR)
663 XSETTYPED_PSEUDOVECTOR (a, b, XSUBR (a)->size, PVEC_SUBR)
664#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED)) 668#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
665#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER)) 669#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
666#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE)) 670#define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
@@ -788,7 +792,7 @@ struct Lisp_Cons
788#ifdef GC_CHECK_STRING_BYTES 792#ifdef GC_CHECK_STRING_BYTES
789 793
790struct Lisp_String; 794struct Lisp_String;
791extern EMACS_INT string_bytes (struct Lisp_String *); 795extern ptrdiff_t string_bytes (struct Lisp_String *);
792#define STRING_BYTES(S) string_bytes ((S)) 796#define STRING_BYTES(S) string_bytes ((S))
793 797
794#else /* not GC_CHECK_STRING_BYTES */ 798#else /* not GC_CHECK_STRING_BYTES */
@@ -835,8 +839,8 @@ extern EMACS_INT string_bytes (struct Lisp_String *);
835 839
836struct Lisp_String 840struct Lisp_String
837 { 841 {
838 EMACS_INT size; 842 ptrdiff_t size;
839 EMACS_INT size_byte; 843 ptrdiff_t size_byte;
840 INTERVAL intervals; /* text properties in this string */ 844 INTERVAL intervals; /* text properties in this string */
841 unsigned char *data; 845 unsigned char *data;
842 }; 846 };
@@ -850,7 +854,7 @@ struct Lisp_String
850 <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8546>. */ 854 <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8546>. */
851struct vectorlike_header 855struct vectorlike_header
852 { 856 {
853 EMACS_INT size; 857 ptrdiff_t size;
854 858
855 /* Pointer to the next vector-like object. It is generally a buffer or a 859 /* Pointer to the next vector-like object. It is generally a buffer or a
856 Lisp_Vector alias, so for convenience it is a union instead of a 860 Lisp_Vector alias, so for convenience it is a union instead of a
@@ -1045,7 +1049,7 @@ struct Lisp_Bool_Vector
1045 1049
1046struct Lisp_Subr 1050struct Lisp_Subr
1047 { 1051 {
1048 EMACS_INT size; 1052 ptrdiff_t size;
1049 union { 1053 union {
1050 Lisp_Object (*a0) (void); 1054 Lisp_Object (*a0) (void);
1051 Lisp_Object (*a1) (Lisp_Object); 1055 Lisp_Object (*a1) (Lisp_Object);
@@ -1238,7 +1242,7 @@ struct Lisp_Hash_Table
1238 a special way (e.g. because of weakness). */ 1242 a special way (e.g. because of weakness). */
1239 1243
1240 /* Number of key/value entries in the table. */ 1244 /* Number of key/value entries in the table. */
1241 EMACS_INT count; 1245 ptrdiff_t count;
1242 1246
1243 /* Vector of keys and values. The key of item I is found at index 1247 /* Vector of keys and values. The key of item I is found at index
1244 2 * I, the value is found at index 2 * I + 1. 1248 2 * I, the value is found at index 2 * I + 1.
@@ -1355,12 +1359,12 @@ struct Lisp_Marker
1355 That would also allow to preserve it ordered. */ 1359 That would also allow to preserve it ordered. */
1356 struct Lisp_Marker *next; 1360 struct Lisp_Marker *next;
1357 /* This is the char position where the marker points. */ 1361 /* This is the char position where the marker points. */
1358 EMACS_INT charpos; 1362 ptrdiff_t charpos;
1359 /* This is the byte position. 1363 /* This is the byte position.
1360 It's mostly used as a charpos<->bytepos cache (i.e. it's not directly 1364 It's mostly used as a charpos<->bytepos cache (i.e. it's not directly
1361 used to implement the functionality of markers, but rather to (ab)use 1365 used to implement the functionality of markers, but rather to (ab)use
1362 markers as a cache for char<->byte mappings). */ 1366 markers as a cache for char<->byte mappings). */
1363 EMACS_INT bytepos; 1367 ptrdiff_t bytepos;
1364}; 1368};
1365 1369
1366/* Forwarding pointer to an int variable. 1370/* Forwarding pointer to an int variable.
@@ -1626,18 +1630,24 @@ typedef struct {
1626 encodes a char code in the lower CHARACTERBITS bits and a (very small) 1630 encodes a char code in the lower CHARACTERBITS bits and a (very small)
1627 face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */ 1631 face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */
1628 1632
1629#define GLYPH_CODE_CHAR(gc) \ 1633#define GLYPH_CODE_P(gc) \
1630 (CONSP (gc) ? XINT (XCAR (gc)) : INTEGERP (gc) ? (XINT (gc) & ((1 << CHARACTERBITS)-1)) : 0) 1634 (CONSP (gc) \
1635 ? (CHARACTERP (XCAR (gc)) \
1636 && RANGED_INTEGERP (0, XCDR (gc), MAX_FACE_ID)) \
1637 : (RANGED_INTEGERP \
1638 (0, gc, \
1639 (MAX_FACE_ID < TYPE_MAXIMUM (EMACS_INT) >> CHARACTERBITS \
1640 ? ((EMACS_INT) MAX_FACE_ID << CHARACTERBITS) | MAX_CHAR \
1641 : TYPE_MAXIMUM (EMACS_INT)))))
1631 1642
1632#define GLYPH_CODE_FACE(gc) \ 1643/* The following are valid only if GLYPH_CODE_P (gc). */
1633 (CONSP (gc) ? XINT (XCDR (gc)) : INTEGERP (gc) ? (XINT (gc) >> CHARACTERBITS) : DEFAULT_FACE_ID)
1634 1644
1635/* Return 1 if glyph code from display vector contains valid character code. */ 1645#define GLYPH_CODE_CHAR(gc) \
1636#define GLYPH_CODE_CHAR_VALID_P(gc) CHAR_VALID_P (GLYPH_CODE_CHAR (gc)) 1646 (CONSP (gc) ? XINT (XCAR (gc)) : XINT (gc) & ((1 << CHARACTERBITS) - 1))
1637 1647
1638#define GLYPH_CODE_P(gc) ((CONSP (gc) && INTEGERP (XCAR (gc)) && INTEGERP (XCDR (gc))) || INTEGERP (gc)) 1648#define GLYPH_CODE_FACE(gc) \
1649 (CONSP (gc) ? XINT (XCDR (gc)) : XINT (gc) >> CHARACTERBITS)
1639 1650
1640/* Only called when GLYPH_CODE_P (gc) is true. */
1641#define SET_GLYPH_FROM_GLYPH_CODE(glyph, gc) \ 1651#define SET_GLYPH_FROM_GLYPH_CODE(glyph, gc) \
1642 do \ 1652 do \
1643 { \ 1653 { \
@@ -1697,7 +1707,9 @@ typedef struct {
1697#define RANGED_INTEGERP(lo, x, hi) \ 1707#define RANGED_INTEGERP(lo, x, hi) \
1698 (INTEGERP (x) && (lo) <= XINT (x) && XINT (x) <= (hi)) 1708 (INTEGERP (x) && (lo) <= XINT (x) && XINT (x) <= (hi))
1699#define TYPE_RANGED_INTEGERP(type, x) \ 1709#define TYPE_RANGED_INTEGERP(type, x) \
1700 RANGED_INTEGERP (TYPE_MINIMUM (type), x, TYPE_MAXIMUM (type)) 1710 (TYPE_SIGNED (type) \
1711 ? RANGED_INTEGERP (TYPE_MINIMUM (type), x, TYPE_MAXIMUM (type)) \
1712 : RANGED_INTEGERP (0, x, TYPE_MAXIMUM (type)))
1701 1713
1702#define INTEGERP(x) (LISP_INT_TAG_P (XTYPE ((x)))) 1714#define INTEGERP(x) (LISP_INT_TAG_P (XTYPE ((x))))
1703#define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol) 1715#define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol)
@@ -1820,6 +1832,25 @@ typedef struct {
1820#define CHECK_NATNUM(x) \ 1832#define CHECK_NATNUM(x) \
1821 CHECK_TYPE (NATNUMP (x), Qwholenump, x) 1833 CHECK_TYPE (NATNUMP (x), Qwholenump, x)
1822 1834
1835#define CHECK_RANGED_INTEGER(lo, x, hi) \
1836 do { \
1837 CHECK_NUMBER (x); \
1838 if (! ((lo) <= XINT (x) && XINT (x) <= (hi))) \
1839 args_out_of_range_3 \
1840 (x, \
1841 make_number ((lo) < 0 && (lo) < MOST_NEGATIVE_FIXNUM \
1842 ? MOST_NEGATIVE_FIXNUM \
1843 : (lo)), \
1844 make_number (min (hi, MOST_POSITIVE_FIXNUM))); \
1845 } while (0)
1846#define CHECK_TYPE_RANGED_INTEGER(type, x) \
1847 do { \
1848 if (TYPE_SIGNED (type)) \
1849 CHECK_RANGED_INTEGER (TYPE_MINIMUM (type), x, TYPE_MAXIMUM (type)); \
1850 else \
1851 CHECK_RANGED_INTEGER (0, x, TYPE_MAXIMUM (type)); \
1852 } while (0)
1853
1823#define CHECK_MARKER(x) \ 1854#define CHECK_MARKER(x) \
1824 CHECK_TYPE (MARKERP (x), Qmarkerp, x) 1855 CHECK_TYPE (MARKERP (x), Qmarkerp, x)
1825 1856
@@ -2031,9 +2062,9 @@ struct specbinding
2031 2062
2032extern struct specbinding *specpdl; 2063extern struct specbinding *specpdl;
2033extern struct specbinding *specpdl_ptr; 2064extern struct specbinding *specpdl_ptr;
2034extern EMACS_INT specpdl_size; 2065extern ptrdiff_t specpdl_size;
2035 2066
2036#define SPECPDL_INDEX() ((int) (specpdl_ptr - specpdl)) 2067#define SPECPDL_INDEX() (specpdl_ptr - specpdl)
2037 2068
2038/* Everything needed to describe an active condition case. */ 2069/* Everything needed to describe an active condition case. */
2039struct handler 2070struct handler
@@ -2086,8 +2117,8 @@ struct catchtag
2086 jmp_buf jmp; 2117 jmp_buf jmp;
2087 struct backtrace *backlist; 2118 struct backtrace *backlist;
2088 struct handler *handlerlist; 2119 struct handler *handlerlist;
2089 int lisp_eval_depth; 2120 EMACS_INT lisp_eval_depth;
2090 int pdlcount; 2121 ptrdiff_t pdlcount;
2091 int poll_suppress_count; 2122 int poll_suppress_count;
2092 int interrupt_input_blocked; 2123 int interrupt_input_blocked;
2093 struct byte_stack *byte_stack; 2124 struct byte_stack *byte_stack;
@@ -2511,8 +2542,8 @@ EXFUN (Fread_coding_system, 2);
2511EXFUN (Fread_non_nil_coding_system, 1); 2542EXFUN (Fread_non_nil_coding_system, 1);
2512EXFUN (Ffind_operation_coding_system, MANY); 2543EXFUN (Ffind_operation_coding_system, MANY);
2513EXFUN (Fdecode_coding_string, 4); 2544EXFUN (Fdecode_coding_string, 4);
2514extern Lisp_Object detect_coding_system (const unsigned char *, EMACS_INT, 2545extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
2515 EMACS_INT, int, int, Lisp_Object); 2546 ptrdiff_t, int, int, Lisp_Object);
2516extern void init_coding (void); 2547extern void init_coding (void);
2517extern void init_coding_once (void); 2548extern void init_coding_once (void);
2518extern void syms_of_coding (void); 2549extern void syms_of_coding (void);
@@ -2520,8 +2551,8 @@ extern void syms_of_coding (void);
2520/* Defined in character.c */ 2551/* Defined in character.c */
2521EXFUN (Fchar_width, 1); 2552EXFUN (Fchar_width, 1);
2522EXFUN (Fstring, MANY); 2553EXFUN (Fstring, MANY);
2523extern EMACS_INT chars_in_text (const unsigned char *, EMACS_INT); 2554extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
2524extern EMACS_INT multibyte_chars_in_text (const unsigned char *, EMACS_INT); 2555extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
2525extern int multibyte_char_to_unibyte (int); 2556extern int multibyte_char_to_unibyte (int);
2526extern int multibyte_char_to_unibyte_safe (int); 2557extern int multibyte_char_to_unibyte_safe (int);
2527extern void init_character_once (void); 2558extern void init_character_once (void);
@@ -2548,7 +2579,7 @@ extern void syms_of_syntax (void);
2548extern Lisp_Object QCrehash_size, QCrehash_threshold; 2579extern Lisp_Object QCrehash_size, QCrehash_threshold;
2549enum { NEXT_ALMOST_PRIME_LIMIT = 11 }; 2580enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
2550extern EMACS_INT next_almost_prime (EMACS_INT); 2581extern EMACS_INT next_almost_prime (EMACS_INT);
2551extern Lisp_Object larger_vector (Lisp_Object, EMACS_INT, Lisp_Object); 2582extern Lisp_Object larger_vector (Lisp_Object, ptrdiff_t, ptrdiff_t);
2552extern void sweep_weak_hash_tables (void); 2583extern void sweep_weak_hash_tables (void);
2553extern Lisp_Object Qcursor_in_echo_area; 2584extern Lisp_Object Qcursor_in_echo_area;
2554extern Lisp_Object Qstring_lessp; 2585extern Lisp_Object Qstring_lessp;
@@ -2580,8 +2611,8 @@ EXFUN (Fstring_as_multibyte, 1);
2580EXFUN (Fstring_as_unibyte, 1); 2611EXFUN (Fstring_as_unibyte, 1);
2581EXFUN (Fstring_to_multibyte, 1); 2612EXFUN (Fstring_to_multibyte, 1);
2582EXFUN (Fsubstring, 3); 2613EXFUN (Fsubstring, 3);
2583extern Lisp_Object substring_both (Lisp_Object, EMACS_INT, EMACS_INT, 2614extern Lisp_Object substring_both (Lisp_Object, ptrdiff_t, ptrdiff_t,
2584 EMACS_INT, EMACS_INT); 2615 ptrdiff_t, ptrdiff_t);
2585EXFUN (Fnth, 2); 2616EXFUN (Fnth, 2);
2586EXFUN (Fnthcdr, 2); 2617EXFUN (Fnthcdr, 2);
2587EXFUN (Fmemq, 2); 2618EXFUN (Fmemq, 2);
@@ -2609,8 +2640,8 @@ extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
2609extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object); 2640extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
2610extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object); 2641extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
2611extern void clear_string_char_byte_cache (void); 2642extern void clear_string_char_byte_cache (void);
2612extern EMACS_INT string_char_to_byte (Lisp_Object, EMACS_INT); 2643extern ptrdiff_t string_char_to_byte (Lisp_Object, ptrdiff_t);
2613extern EMACS_INT string_byte_to_char (Lisp_Object, EMACS_INT); 2644extern ptrdiff_t string_byte_to_char (Lisp_Object, ptrdiff_t);
2614extern Lisp_Object string_to_multibyte (Lisp_Object); 2645extern Lisp_Object string_to_multibyte (Lisp_Object);
2615extern Lisp_Object string_make_unibyte (Lisp_Object); 2646extern Lisp_Object string_make_unibyte (Lisp_Object);
2616EXFUN (Fcopy_alist, 1); 2647EXFUN (Fcopy_alist, 1);
@@ -2648,48 +2679,48 @@ extern void init_image (void);
2648 2679
2649/* Defined in insdel.c */ 2680/* Defined in insdel.c */
2650extern Lisp_Object Qinhibit_modification_hooks; 2681extern Lisp_Object Qinhibit_modification_hooks;
2651extern void move_gap (EMACS_INT); 2682extern void move_gap (ptrdiff_t);
2652extern void move_gap_both (EMACS_INT, EMACS_INT); 2683extern void move_gap_both (ptrdiff_t, ptrdiff_t);
2653extern void buffer_overflow (void) NO_RETURN; 2684extern void buffer_overflow (void) NO_RETURN;
2654extern void make_gap (EMACS_INT); 2685extern void make_gap (ptrdiff_t);
2655extern EMACS_INT copy_text (const unsigned char *, unsigned char *, 2686extern ptrdiff_t copy_text (const unsigned char *, unsigned char *,
2656 EMACS_INT, int, int); 2687 ptrdiff_t, int, int);
2657extern int count_combining_before (const unsigned char *, 2688extern int count_combining_before (const unsigned char *,
2658 EMACS_INT, EMACS_INT, EMACS_INT); 2689 ptrdiff_t, ptrdiff_t, ptrdiff_t);
2659extern int count_combining_after (const unsigned char *, 2690extern int count_combining_after (const unsigned char *,
2660 EMACS_INT, EMACS_INT, EMACS_INT); 2691 ptrdiff_t, ptrdiff_t, ptrdiff_t);
2661extern void insert (const char *, EMACS_INT); 2692extern void insert (const char *, ptrdiff_t);
2662extern void insert_and_inherit (const char *, EMACS_INT); 2693extern void insert_and_inherit (const char *, ptrdiff_t);
2663extern void insert_1 (const char *, EMACS_INT, int, int, int); 2694extern void insert_1 (const char *, ptrdiff_t, int, int, int);
2664extern void insert_1_both (const char *, EMACS_INT, EMACS_INT, 2695extern void insert_1_both (const char *, ptrdiff_t, ptrdiff_t,
2665 int, int, int); 2696 int, int, int);
2666extern void insert_from_gap (EMACS_INT, EMACS_INT); 2697extern void insert_from_gap (ptrdiff_t, ptrdiff_t);
2667extern void insert_from_string (Lisp_Object, EMACS_INT, EMACS_INT, 2698extern void insert_from_string (Lisp_Object, ptrdiff_t, ptrdiff_t,
2668 EMACS_INT, EMACS_INT, int); 2699 ptrdiff_t, ptrdiff_t, int);
2669extern void insert_from_buffer (struct buffer *, EMACS_INT, EMACS_INT, int); 2700extern void insert_from_buffer (struct buffer *, ptrdiff_t, ptrdiff_t, int);
2670extern void insert_char (int); 2701extern void insert_char (int);
2671extern void insert_string (const char *); 2702extern void insert_string (const char *);
2672extern void insert_before_markers (const char *, EMACS_INT); 2703extern void insert_before_markers (const char *, ptrdiff_t);
2673extern void insert_before_markers_and_inherit (const char *, EMACS_INT); 2704extern void insert_before_markers_and_inherit (const char *, ptrdiff_t);
2674extern void insert_from_string_before_markers (Lisp_Object, EMACS_INT, 2705extern void insert_from_string_before_markers (Lisp_Object, ptrdiff_t,
2675 EMACS_INT, EMACS_INT, 2706 ptrdiff_t, ptrdiff_t,
2676 EMACS_INT, int); 2707 ptrdiff_t, int);
2677extern void del_range (EMACS_INT, EMACS_INT); 2708extern void del_range (ptrdiff_t, ptrdiff_t);
2678extern Lisp_Object del_range_1 (EMACS_INT, EMACS_INT, int, int); 2709extern Lisp_Object del_range_1 (ptrdiff_t, ptrdiff_t, int, int);
2679extern void del_range_byte (EMACS_INT, EMACS_INT, int); 2710extern void del_range_byte (ptrdiff_t, ptrdiff_t, int);
2680extern void del_range_both (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT, int); 2711extern void del_range_both (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t, int);
2681extern Lisp_Object del_range_2 (EMACS_INT, EMACS_INT, 2712extern Lisp_Object del_range_2 (ptrdiff_t, ptrdiff_t,
2682 EMACS_INT, EMACS_INT, int); 2713 ptrdiff_t, ptrdiff_t, int);
2683extern void modify_region (struct buffer *, EMACS_INT, EMACS_INT, int); 2714extern void modify_region (struct buffer *, ptrdiff_t, ptrdiff_t, int);
2684extern void prepare_to_modify_buffer (EMACS_INT, EMACS_INT, EMACS_INT *); 2715extern void prepare_to_modify_buffer (ptrdiff_t, ptrdiff_t, ptrdiff_t *);
2685extern void signal_after_change (EMACS_INT, EMACS_INT, EMACS_INT); 2716extern void signal_after_change (ptrdiff_t, ptrdiff_t, ptrdiff_t);
2686extern void adjust_after_insert (EMACS_INT, EMACS_INT, EMACS_INT, 2717extern void adjust_after_insert (ptrdiff_t, ptrdiff_t, ptrdiff_t,
2687 EMACS_INT, EMACS_INT); 2718 ptrdiff_t, ptrdiff_t);
2688extern void adjust_markers_for_delete (EMACS_INT, EMACS_INT, 2719extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t,
2689 EMACS_INT, EMACS_INT); 2720 ptrdiff_t, ptrdiff_t);
2690extern void replace_range (EMACS_INT, EMACS_INT, Lisp_Object, int, int, int); 2721extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, int, int, int);
2691extern void replace_range_2 (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT, 2722extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
2692 const char *, EMACS_INT, EMACS_INT, int); 2723 const char *, ptrdiff_t, ptrdiff_t, int);
2693extern void syms_of_insdel (void); 2724extern void syms_of_insdel (void);
2694 2725
2695/* Defined in dispnew.c */ 2726/* Defined in dispnew.c */
@@ -2697,6 +2728,7 @@ extern Lisp_Object selected_frame;
2697extern Lisp_Object Vwindow_system; 2728extern Lisp_Object Vwindow_system;
2698EXFUN (Fding, 1); 2729EXFUN (Fding, 1);
2699EXFUN (Fredraw_frame, 1); 2730EXFUN (Fredraw_frame, 1);
2731void duration_to_sec_usec (double, int *, int *);
2700EXFUN (Fsleep_for, 2); 2732EXFUN (Fsleep_for, 2);
2701EXFUN (Fredisplay, 1); 2733EXFUN (Fredisplay, 1);
2702extern Lisp_Object sit_for (Lisp_Object, int, int); 2734extern Lisp_Object sit_for (Lisp_Object, int, int);
@@ -2718,7 +2750,7 @@ extern Lisp_Object QCdata, QCfile;
2718extern Lisp_Object QCmap; 2750extern Lisp_Object QCmap;
2719extern Lisp_Object Qrisky_local_variable; 2751extern Lisp_Object Qrisky_local_variable;
2720extern struct frame *last_glyphless_glyph_frame; 2752extern struct frame *last_glyphless_glyph_frame;
2721extern unsigned last_glyphless_glyph_face_id; 2753extern int last_glyphless_glyph_face_id;
2722extern int last_glyphless_glyph_merged_face_id; 2754extern int last_glyphless_glyph_merged_face_id;
2723extern int noninteractive_need_newline; 2755extern int noninteractive_need_newline;
2724extern Lisp_Object echo_area_buffer[2]; 2756extern Lisp_Object echo_area_buffer[2];
@@ -2734,15 +2766,15 @@ extern void clear_message (int, int);
2734extern void message (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2); 2766extern void message (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
2735extern void message1 (const char *); 2767extern void message1 (const char *);
2736extern void message1_nolog (const char *); 2768extern void message1_nolog (const char *);
2737extern void message2 (const char *, EMACS_INT, int); 2769extern void message2 (const char *, ptrdiff_t, int);
2738extern void message2_nolog (const char *, EMACS_INT, int); 2770extern void message2_nolog (const char *, ptrdiff_t, int);
2739extern void message3 (Lisp_Object, EMACS_INT, int); 2771extern void message3 (Lisp_Object, ptrdiff_t, int);
2740extern void message3_nolog (Lisp_Object, EMACS_INT, int); 2772extern void message3_nolog (Lisp_Object, ptrdiff_t, int);
2741extern void message_dolog (const char *, EMACS_INT, int, int); 2773extern void message_dolog (const char *, ptrdiff_t, int, int);
2742extern void message_with_string (const char *, Lisp_Object, int); 2774extern void message_with_string (const char *, Lisp_Object, int);
2743extern void message_log_maybe_newline (void); 2775extern void message_log_maybe_newline (void);
2744extern void update_echo_area (void); 2776extern void update_echo_area (void);
2745extern void truncate_echo_area (EMACS_INT); 2777extern void truncate_echo_area (ptrdiff_t);
2746extern void redisplay (void); 2778extern void redisplay (void);
2747extern void redisplay_preserve_echo_area (int); 2779extern void redisplay_preserve_echo_area (int);
2748extern void prepare_menu_bars (void); 2780extern void prepare_menu_bars (void);
@@ -2751,7 +2783,7 @@ void set_frame_cursor_types (struct frame *, Lisp_Object);
2751extern void syms_of_xdisp (void); 2783extern void syms_of_xdisp (void);
2752extern void init_xdisp (void); 2784extern void init_xdisp (void);
2753extern Lisp_Object safe_eval (Lisp_Object); 2785extern Lisp_Object safe_eval (Lisp_Object);
2754extern int pos_visible_p (struct window *, EMACS_INT, int *, 2786extern int pos_visible_p (struct window *, ptrdiff_t, int *,
2755 int *, int *, int *, int *, int *); 2787 int *, int *, int *, int *, int *);
2756 2788
2757/* Defined in xsettings.c */ 2789/* Defined in xsettings.c */
@@ -2767,7 +2799,7 @@ extern void reset_malloc_hooks (void);
2767extern void uninterrupt_malloc (void); 2799extern void uninterrupt_malloc (void);
2768extern void malloc_warning (const char *); 2800extern void malloc_warning (const char *);
2769extern void memory_full (size_t) NO_RETURN; 2801extern void memory_full (size_t) NO_RETURN;
2770extern void buffer_memory_full (EMACS_INT) NO_RETURN; 2802extern void buffer_memory_full (ptrdiff_t) NO_RETURN;
2771extern int survives_gc_p (Lisp_Object); 2803extern int survives_gc_p (Lisp_Object);
2772extern void mark_object (Lisp_Object); 2804extern void mark_object (Lisp_Object);
2773#if defined REL_ALLOC && !defined SYSTEM_MALLOC 2805#if defined REL_ALLOC && !defined SYSTEM_MALLOC
@@ -2792,26 +2824,26 @@ EXFUN (Fmake_marker, 0);
2792extern void string_overflow (void) NO_RETURN; 2824extern void string_overflow (void) NO_RETURN;
2793EXFUN (Fmake_string, 2); 2825EXFUN (Fmake_string, 2);
2794extern Lisp_Object build_string (const char *); 2826extern Lisp_Object build_string (const char *);
2795extern Lisp_Object make_string (const char *, EMACS_INT); 2827extern Lisp_Object make_string (const char *, ptrdiff_t);
2796extern Lisp_Object make_unibyte_string (const char *, EMACS_INT); 2828extern Lisp_Object make_unibyte_string (const char *, ptrdiff_t);
2797extern Lisp_Object make_multibyte_string (const char *, EMACS_INT, EMACS_INT); 2829extern Lisp_Object make_multibyte_string (const char *, ptrdiff_t, ptrdiff_t);
2798extern Lisp_Object make_event_array (int, Lisp_Object *); 2830extern Lisp_Object make_event_array (int, Lisp_Object *);
2799extern Lisp_Object make_uninit_string (EMACS_INT); 2831extern Lisp_Object make_uninit_string (EMACS_INT);
2800extern Lisp_Object make_uninit_multibyte_string (EMACS_INT, EMACS_INT); 2832extern Lisp_Object make_uninit_multibyte_string (EMACS_INT, EMACS_INT);
2801extern Lisp_Object make_string_from_bytes (const char *, EMACS_INT, EMACS_INT); 2833extern Lisp_Object make_string_from_bytes (const char *, ptrdiff_t, ptrdiff_t);
2802extern Lisp_Object make_specified_string (const char *, 2834extern Lisp_Object make_specified_string (const char *,
2803 EMACS_INT, EMACS_INT, int); 2835 ptrdiff_t, ptrdiff_t, int);
2804EXFUN (Fpurecopy, 1); 2836EXFUN (Fpurecopy, 1);
2805extern Lisp_Object make_pure_string (const char *, EMACS_INT, EMACS_INT, int); 2837extern Lisp_Object make_pure_string (const char *, ptrdiff_t, ptrdiff_t, int);
2806extern Lisp_Object make_pure_c_string (const char *data); 2838extern Lisp_Object make_pure_c_string (const char *data);
2807extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object); 2839extern Lisp_Object pure_cons (Lisp_Object, Lisp_Object);
2808extern Lisp_Object make_pure_vector (EMACS_INT); 2840extern Lisp_Object make_pure_vector (ptrdiff_t);
2809EXFUN (Fgarbage_collect, 0); 2841EXFUN (Fgarbage_collect, 0);
2810EXFUN (Fmake_byte_code, MANY); 2842EXFUN (Fmake_byte_code, MANY);
2811EXFUN (Fmake_bool_vector, 2); 2843EXFUN (Fmake_bool_vector, 2);
2812extern Lisp_Object Qchar_table_extra_slots; 2844extern Lisp_Object Qchar_table_extra_slots;
2813extern struct Lisp_Vector *allocate_vector (EMACS_INT); 2845extern struct Lisp_Vector *allocate_vector (EMACS_INT);
2814extern struct Lisp_Vector *allocate_pseudovector (int memlen, int lisplen, EMACS_INT tag); 2846extern struct Lisp_Vector *allocate_pseudovector (int memlen, int lisplen, int tag);
2815#define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \ 2847#define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \
2816 ((typ*) \ 2848 ((typ*) \
2817 allocate_pseudovector \ 2849 allocate_pseudovector \
@@ -2825,7 +2857,7 @@ extern int gc_in_progress;
2825extern int abort_on_gc; 2857extern int abort_on_gc;
2826extern Lisp_Object make_float (double); 2858extern Lisp_Object make_float (double);
2827extern void display_malloc_warning (void); 2859extern void display_malloc_warning (void);
2828extern int inhibit_garbage_collection (void); 2860extern ptrdiff_t inhibit_garbage_collection (void);
2829extern Lisp_Object make_save_value (void *, ptrdiff_t); 2861extern Lisp_Object make_save_value (void *, ptrdiff_t);
2830extern void free_marker (Lisp_Object); 2862extern void free_marker (Lisp_Object);
2831extern void free_cons (struct Lisp_Cons *); 2863extern void free_cons (struct Lisp_Cons *);
@@ -2909,7 +2941,7 @@ EXFUN (Fread_event, 3);
2909extern Lisp_Object check_obarray (Lisp_Object); 2941extern Lisp_Object check_obarray (Lisp_Object);
2910extern Lisp_Object intern (const char *); 2942extern Lisp_Object intern (const char *);
2911extern Lisp_Object intern_c_string (const char *); 2943extern Lisp_Object intern_c_string (const char *);
2912extern Lisp_Object oblookup (Lisp_Object, const char *, EMACS_INT, EMACS_INT); 2944extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t);
2913#define LOADHIST_ATTACH(x) \ 2945#define LOADHIST_ATTACH(x) \
2914 do { \ 2946 do { \
2915 if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); \ 2947 if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); \
@@ -2985,7 +3017,7 @@ extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, Lisp
2985extern Lisp_Object internal_condition_case_n (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)); 3017extern Lisp_Object internal_condition_case_n (Lisp_Object (*) (ptrdiff_t, Lisp_Object *), ptrdiff_t, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object));
2986extern void specbind (Lisp_Object, Lisp_Object); 3018extern void specbind (Lisp_Object, Lisp_Object);
2987extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object); 3019extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
2988extern Lisp_Object unbind_to (int, Lisp_Object); 3020extern Lisp_Object unbind_to (ptrdiff_t, Lisp_Object);
2989extern void error (const char *, ...) NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 2); 3021extern void error (const char *, ...) NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 2);
2990extern void verror (const char *, va_list) 3022extern void verror (const char *, va_list)
2991 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 0); 3023 NO_RETURN ATTRIBUTE_FORMAT_PRINTF (1, 0);
@@ -3037,10 +3069,9 @@ EXFUN (Fuser_login_name, 1);
3037EXFUN (Fsystem_name, 0); 3069EXFUN (Fsystem_name, 0);
3038EXFUN (Fcurrent_time, 0); 3070EXFUN (Fcurrent_time, 0);
3039EXFUN (Fget_internal_run_time, 0); 3071EXFUN (Fget_internal_run_time, 0);
3040extern EMACS_INT clip_to_bounds (EMACS_INT, EMACS_INT, EMACS_INT); 3072extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, int);
3041extern Lisp_Object make_buffer_string (EMACS_INT, EMACS_INT, int); 3073extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
3042extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT, 3074 ptrdiff_t, int);
3043 EMACS_INT, int);
3044extern void init_editfns (void); 3075extern void init_editfns (void);
3045const char *get_system_name (void); 3076const char *get_system_name (void);
3046extern void syms_of_editfns (void); 3077extern void syms_of_editfns (void);
@@ -3054,12 +3085,12 @@ extern void nsberror (Lisp_Object) NO_RETURN;
3054EXFUN (Fset_buffer_multibyte, 1); 3085EXFUN (Fset_buffer_multibyte, 1);
3055EXFUN (Foverlay_start, 1); 3086EXFUN (Foverlay_start, 1);
3056EXFUN (Foverlay_end, 1); 3087EXFUN (Foverlay_end, 1);
3057extern void adjust_overlays_for_insert (EMACS_INT, EMACS_INT); 3088extern void adjust_overlays_for_insert (ptrdiff_t, ptrdiff_t);
3058extern void adjust_overlays_for_delete (EMACS_INT, EMACS_INT); 3089extern void adjust_overlays_for_delete (ptrdiff_t, ptrdiff_t);
3059extern void fix_start_end_in_overlays (EMACS_INT, EMACS_INT); 3090extern void fix_start_end_in_overlays (ptrdiff_t, ptrdiff_t);
3060extern void report_overlay_modification (Lisp_Object, Lisp_Object, int, 3091extern void report_overlay_modification (Lisp_Object, Lisp_Object, int,
3061 Lisp_Object, Lisp_Object, Lisp_Object); 3092 Lisp_Object, Lisp_Object, Lisp_Object);
3062extern int overlay_touches_p (EMACS_INT); 3093extern int overlay_touches_p (ptrdiff_t);
3063extern Lisp_Object Vbuffer_alist; 3094extern Lisp_Object Vbuffer_alist;
3064EXFUN (Fget_buffer, 1); 3095EXFUN (Fget_buffer, 1);
3065EXFUN (Fget_buffer_create, 1); 3096EXFUN (Fget_buffer_create, 1);
@@ -3093,17 +3124,17 @@ EXFUN (Fmarker_position, 1);
3093EXFUN (Fmarker_buffer, 1); 3124EXFUN (Fmarker_buffer, 1);
3094EXFUN (Fcopy_marker, 2); 3125EXFUN (Fcopy_marker, 2);
3095EXFUN (Fset_marker, 3); 3126EXFUN (Fset_marker, 3);
3096extern EMACS_INT marker_position (Lisp_Object); 3127extern ptrdiff_t marker_position (Lisp_Object);
3097extern EMACS_INT marker_byte_position (Lisp_Object); 3128extern ptrdiff_t marker_byte_position (Lisp_Object);
3098extern void clear_charpos_cache (struct buffer *); 3129extern void clear_charpos_cache (struct buffer *);
3099extern EMACS_INT charpos_to_bytepos (EMACS_INT); 3130extern ptrdiff_t charpos_to_bytepos (ptrdiff_t);
3100extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT); 3131extern ptrdiff_t buf_charpos_to_bytepos (struct buffer *, ptrdiff_t);
3101extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT); 3132extern ptrdiff_t buf_bytepos_to_charpos (struct buffer *, ptrdiff_t);
3102extern void unchain_marker (struct Lisp_Marker *marker); 3133extern void unchain_marker (struct Lisp_Marker *marker);
3103extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object); 3134extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3104extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT); 3135extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, ptrdiff_t, ptrdiff_t);
3105extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object, 3136extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
3106 EMACS_INT, EMACS_INT); 3137 ptrdiff_t, ptrdiff_t);
3107extern void syms_of_marker (void); 3138extern void syms_of_marker (void);
3108 3139
3109/* Defined in fileio.c */ 3140/* Defined in fileio.c */
@@ -3156,18 +3187,18 @@ struct re_registers;
3156extern struct re_pattern_buffer *compile_pattern (Lisp_Object, 3187extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
3157 struct re_registers *, 3188 struct re_registers *,
3158 Lisp_Object, int, int); 3189 Lisp_Object, int, int);
3159extern EMACS_INT fast_string_match (Lisp_Object, Lisp_Object); 3190extern ptrdiff_t fast_string_match (Lisp_Object, Lisp_Object);
3160extern EMACS_INT fast_c_string_match_ignore_case (Lisp_Object, const char *); 3191extern ptrdiff_t fast_c_string_match_ignore_case (Lisp_Object, const char *);
3161extern EMACS_INT fast_string_match_ignore_case (Lisp_Object, Lisp_Object); 3192extern ptrdiff_t fast_string_match_ignore_case (Lisp_Object, Lisp_Object);
3162extern EMACS_INT fast_looking_at (Lisp_Object, EMACS_INT, EMACS_INT, 3193extern ptrdiff_t fast_looking_at (Lisp_Object, ptrdiff_t, ptrdiff_t,
3163 EMACS_INT, EMACS_INT, Lisp_Object); 3194 ptrdiff_t, ptrdiff_t, Lisp_Object);
3164extern EMACS_INT scan_buffer (int, EMACS_INT, EMACS_INT, EMACS_INT, 3195extern ptrdiff_t scan_buffer (int, ptrdiff_t, ptrdiff_t, ptrdiff_t,
3165 EMACS_INT *, int); 3196 ptrdiff_t *, int);
3166extern EMACS_INT scan_newline (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT, 3197extern EMACS_INT scan_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
3167 EMACS_INT, int); 3198 EMACS_INT, int);
3168extern EMACS_INT find_next_newline (EMACS_INT, int); 3199extern ptrdiff_t find_next_newline (ptrdiff_t, int);
3169extern EMACS_INT find_next_newline_no_quit (EMACS_INT, EMACS_INT); 3200extern ptrdiff_t find_next_newline_no_quit (ptrdiff_t, ptrdiff_t);
3170extern EMACS_INT find_before_next_newline (EMACS_INT, EMACS_INT, EMACS_INT); 3201extern ptrdiff_t find_before_next_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t);
3171extern void syms_of_search (void); 3202extern void syms_of_search (void);
3172extern void clear_regexp_cache (void); 3203extern void clear_regexp_cache (void);
3173 3204
@@ -3253,9 +3284,9 @@ extern void keys_of_keyboard (void);
3253EXFUN (Fvertical_motion, 2); 3284EXFUN (Fvertical_motion, 2);
3254EXFUN (Findent_to, 2); 3285EXFUN (Findent_to, 2);
3255EXFUN (Fmove_to_column, 2); 3286EXFUN (Fmove_to_column, 2);
3256extern EMACS_INT current_column (void); 3287extern ptrdiff_t current_column (void);
3257extern void invalidate_current_column (void); 3288extern void invalidate_current_column (void);
3258extern int indented_beyond_p (EMACS_INT, EMACS_INT, EMACS_INT); 3289extern int indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
3259extern void syms_of_indent (void); 3290extern void syms_of_indent (void);
3260 3291
3261/* Defined in frame.c */ 3292/* Defined in frame.c */
@@ -3386,12 +3417,12 @@ extern Lisp_Object Qapply;
3386extern Lisp_Object Qinhibit_read_only; 3417extern Lisp_Object Qinhibit_read_only;
3387EXFUN (Fundo_boundary, 0); 3418EXFUN (Fundo_boundary, 0);
3388extern void truncate_undo_list (struct buffer *); 3419extern void truncate_undo_list (struct buffer *);
3389extern void record_marker_adjustment (Lisp_Object, EMACS_INT); 3420extern void record_marker_adjustment (Lisp_Object, ptrdiff_t);
3390extern void record_insert (EMACS_INT, EMACS_INT); 3421extern void record_insert (ptrdiff_t, ptrdiff_t);
3391extern void record_delete (EMACS_INT, Lisp_Object); 3422extern void record_delete (ptrdiff_t, Lisp_Object);
3392extern void record_first_change (void); 3423extern void record_first_change (void);
3393extern void record_change (EMACS_INT, EMACS_INT); 3424extern void record_change (ptrdiff_t, ptrdiff_t);
3394extern void record_property_change (EMACS_INT, EMACS_INT, 3425extern void record_property_change (ptrdiff_t, ptrdiff_t,
3395 Lisp_Object, Lisp_Object, 3426 Lisp_Object, Lisp_Object,
3396 Lisp_Object); 3427 Lisp_Object);
3397extern void syms_of_undo (void); 3428extern void syms_of_undo (void);
@@ -3437,8 +3468,8 @@ extern void init_sys_modes (struct tty_display_info *);
3437extern void reset_sys_modes (struct tty_display_info *); 3468extern void reset_sys_modes (struct tty_display_info *);
3438extern void init_all_sys_modes (void); 3469extern void init_all_sys_modes (void);
3439extern void reset_all_sys_modes (void); 3470extern void reset_all_sys_modes (void);
3440extern void wait_for_termination (int); 3471extern void wait_for_termination (pid_t);
3441extern void interruptible_wait_for_termination (int); 3472extern void interruptible_wait_for_termination (pid_t);
3442extern void flush_pending_output (int); 3473extern void flush_pending_output (int);
3443extern void child_setup_tty (int); 3474extern void child_setup_tty (int);
3444extern void setup_pty (int); 3475extern void setup_pty (int);
@@ -3447,8 +3478,8 @@ extern EMACS_INT get_random (void);
3447extern void seed_random (long); 3478extern void seed_random (long);
3448extern int emacs_open (const char *, int, int); 3479extern int emacs_open (const char *, int, int);
3449extern int emacs_close (int); 3480extern int emacs_close (int);
3450extern EMACS_INT emacs_read (int, char *, EMACS_INT); 3481extern ptrdiff_t emacs_read (int, char *, ptrdiff_t);
3451extern EMACS_INT emacs_write (int, const char *, EMACS_INT); 3482extern ptrdiff_t emacs_write (int, const char *, ptrdiff_t);
3452enum { READLINK_BUFSIZE = 1024 }; 3483enum { READLINK_BUFSIZE = 1024 };
3453extern char *emacs_readlink (const char *, char [READLINK_BUFSIZE]); 3484extern char *emacs_readlink (const char *, char [READLINK_BUFSIZE]);
3454 3485
@@ -3674,7 +3705,7 @@ extern void init_system_name (void);
3674extern Lisp_Object safe_alloca_unwind (Lisp_Object); 3705extern Lisp_Object safe_alloca_unwind (Lisp_Object);
3675 3706
3676#define USE_SAFE_ALLOCA \ 3707#define USE_SAFE_ALLOCA \
3677 int sa_count = (int) SPECPDL_INDEX (), sa_must_free = 0 3708 ptrdiff_t sa_count = SPECPDL_INDEX (); int sa_must_free = 0
3678 3709
3679/* SAFE_ALLOCA allocates a simple buffer. */ 3710/* SAFE_ALLOCA allocates a simple buffer. */
3680 3711