• Paul Eggert's avatar
    Improve bignum support for system types · d77d01d2
    Paul Eggert authored
    Use bignums when Emacs converts to and from system types like
    off_t for file sizes whose values can exceed fixnum range.
    Formerly, Emacs sometimes generted floats and sometimes ad-hoc
    conses of integers.  Emacs still accepts floats and conses for
    these system types, in case some stray Lisp code is generating
    them, though this usage is obsolescent.
    * doc/lispref/files.texi (File Attributes):
    * doc/lispref/hash.texi (Defining Hash):
    * doc/lispref/nonascii.texi (Character Sets):
    * doc/lispref/os.texi (User Identification):
    * doc/lispref/processes.texi (System Processes):
    * etc/NEWS:
    Document changes.
    * src/bignum.c (mpz_set_uintmax, make_biguint)
    (mpz_set_uintmax_slow, bignum_to_intmax, bignum_to_uintmax):
    New functions.
    (mpz_set_intmax_slow): Implement via mpz_limbs_write,
    to avoid the need for an extra pass through a negative number.
    * src/charset.c (Fencode_char):
    * src/composite.h (LGLYPH_SET_CODE):
    * src/dired.c (file_attributes):
    * src/dosfns.c, src/w32.c (list_system_processes)
    * src/editfns.c (init_editfns, Fuser_uid, Fuser_real_uid)
    (Fgroup_gid, Fgroup_real_gid, Femacs_pid):
    * src/emacs-module.c (check_vec_index):
    * src/fns.c (Fsafe_length):
    * src/process.c (record_deleted_pid, Fprocess_id):
    * src/sysdep.c (list_system_processes, system_process_attributes):
    * src/xselect.c (x_own_selection, selection_data_to_lisp_data):
    * src/xterm.c (set_wm_state):
    * src/inotify.c (inotifyevent_to_event, add_watch)
    If an integer is out of fixnum range, use a bignum
    instead of converting it to a float or a cons of integers.
    * src/coding.c (Fdefine_coding_system_internal):
    * src/frame.c (frame_windows_min_size)
    * src/fringe.c (Fdefine_fringe_bitmap):
    * src/nsterm.m (mouseDown:):
    * src/syntax.c (find_defun_start):
    * src/w32fns.c (x_set_undecorated, w32_createwindow)
    (w32_wnd_proc, Fx_create_frame, Fx_show_tip)
    * src/w32inevt.c (key_event):
    * src/w32proc.c (Fw32_get_locale_info):
    Do not mishandle floats by treating their addresses as their
    * src/data.c (store_symval_forwarding):
    * src/gnutls.c (Fgnutls_error_fatalp, Fgnutls_error_string):
    * src/keyboard.c (command_loop_1, make_lispy_event):
    * src/lread.c (read_filtered_event, read1)
    * src/window.c (Fcoordinates_in_window_p, Fwindow_at)
    (window_resize_apply, Fset_window_vscroll):
    * src/xdisp.c (handle_single_display_spec, try_scrolling)
    (redisplay_window, calc_pixel_width_or_height)
    (calc_line_height_property, on_hot_spot_p):
    * src/xfaces.c (check_lface_attrs):
    * src/xselect.c (x_get_local_selection, cons_to_x_long)
    (lisp_data_to_selection_data, clean_local_selection_data)
    (x_check_property_data, x_fill_property_data):
    Do not reject bignums.
    * src/data.c (INTBIG_TO_LISP, intbig_to_lisp)
    Remove.  All uses removed.
    * src/data.c (cons_to_unsigned, cons_to_signed):
    * src/dbusbind.c (xd_signature, xd_extract_signed)
    * src/dispnew.c (sit_for):
    * src/dosfns.c, src/w32.c (system_process_attributes):
    * src/editfns.c (Fuser_full_name):
    * src/fileio.c (file_offset):
    * src/fileio.c (write_region):
    * src/font.c (font_unparse_xlfd, font_open_for_lface, Fopen_font):
    * src/frame.c (x_set_screen_gamma):
    * src/frame.h (NUMVAL, FRAME_PIXEL_X_FROM_CANON_X)
    * src/image.c (parse_image_spec, x_edge_detection)
    * src/json.c (json_to_lisp):
    * src/lcms.c (PARSE_LAB_LIST_FIELD, Flcms_cie_de2000)
    * src/nsimage.m (ns_load_image, setSizeFromSpec):
    * src/process.c (Fsignal_process, handle_child_signal):
    * src/sysdep.c (system_process_attributes):
    * src/xdisp.c (calc_line_height_property):
    Handle bignums.
    * src/data.c (Fnumber_to_string): Use proper predicate name in
    signal if the argument is not a number.
    * src/lisp.h (make_uint): New function.
    (INT_TO_INTEGER): New macro.
    (make_fixnum_or_float): Remove; no longer used.
    * src/nsfns.m, src/w32fns.c, src/xfns.c (Fx_create_frame):
    Reject floating-point min-width or min-height.
    * src/process.c (handle_child_signal): Do not worry
    about floating-point pids, as they are no longer generated.
xfns.c 245 KB