aboutsummaryrefslogtreecommitdiffstats
path: root/src/window.c
diff options
context:
space:
mode:
authorPaul Eggert2018-08-27 21:27:50 -0700
committerPaul Eggert2018-08-27 21:45:23 -0700
commitd77d01d22902acdc45c2c7059de4f1b158ab5806 (patch)
tree35f2b77594dc43e824852bb29598430945c5e6a4 /src/window.c
parent9abaf5f3581ecb76f30e8a6e7ee0e9633c133d1c (diff)
downloademacs-d77d01d22902acdc45c2c7059de4f1b158ab5806.tar.gz
emacs-d77d01d22902acdc45c2c7059de4f1b158ab5806.zip
Improve bignum support for system types
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) (system_process_attributes): * 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) (inotify_callback): 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) (x_set_frame_parameters): * 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) (w32_console_toggle_lock_key): * src/w32inevt.c (key_event): * src/w32proc.c (Fw32_get_locale_info): Do not mishandle floats by treating their addresses as their values. * 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) (substitute_object_recurse): * 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): (x_send_client_event): Do not reject bignums. * src/data.c (INTBIG_TO_LISP, intbig_to_lisp) (uintbig_to_lisp): Remove. All uses removed. * src/data.c (cons_to_unsigned, cons_to_signed): * src/dbusbind.c (xd_signature, xd_extract_signed) (xd_extract_unsigned): * 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) (FRAME_PIXEL_Y_FROM_CANON_Y): * src/image.c (parse_image_spec, x_edge_detection) (compute_image_size): * src/json.c (json_to_lisp): * src/lcms.c (PARSE_LAB_LIST_FIELD, Flcms_cie_de2000) (PARSE_XYZ_LIST_FIELD, PARSE_JCH_LIST_FIELD) (PARSE_JAB_LIST_FIELD, PARSE_VIEW_CONDITION_FLOAT) (Flcms_temp_to_white_point): * 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. (FIXED_OR_FLOATP, CHECK_FIXNUM_OR_FLOAT) (CHECK_FIXNUM_OR_FLOAT_COERCE_MARKER, INTEGER_TO_CONS) (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.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/window.c b/src/window.c
index 67cfdc12b5d..d4fc5568a5a 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1383,8 +1383,8 @@ If they are in the windows's left or right marginal areas, `left-margin'\n\
1383 CHECK_CONS (coordinates); 1383 CHECK_CONS (coordinates);
1384 lx = Fcar (coordinates); 1384 lx = Fcar (coordinates);
1385 ly = Fcdr (coordinates); 1385 ly = Fcdr (coordinates);
1386 CHECK_FIXNUM_OR_FLOAT (lx); 1386 CHECK_NUMBER (lx);
1387 CHECK_FIXNUM_OR_FLOAT (ly); 1387 CHECK_NUMBER (ly);
1388 x = FRAME_PIXEL_X_FROM_CANON_X (f, lx) + FRAME_INTERNAL_BORDER_WIDTH (f); 1388 x = FRAME_PIXEL_X_FROM_CANON_X (f, lx) + FRAME_INTERNAL_BORDER_WIDTH (f);
1389 y = FRAME_PIXEL_Y_FROM_CANON_Y (f, ly) + FRAME_INTERNAL_BORDER_WIDTH (f); 1389 y = FRAME_PIXEL_Y_FROM_CANON_Y (f, ly) + FRAME_INTERNAL_BORDER_WIDTH (f);
1390 1390
@@ -1533,9 +1533,8 @@ column 0. */)
1533{ 1533{
1534 struct frame *f = decode_live_frame (frame); 1534 struct frame *f = decode_live_frame (frame);
1535 1535
1536 /* Check that arguments are integers or floats. */ 1536 CHECK_NUMBER (x);
1537 CHECK_FIXNUM_OR_FLOAT (x); 1537 CHECK_NUMBER (y);
1538 CHECK_FIXNUM_OR_FLOAT (y);
1539 1538
1540 return window_from_coordinates (f, 1539 return window_from_coordinates (f,
1541 (FRAME_PIXEL_X_FROM_CANON_X (f, x) 1540 (FRAME_PIXEL_X_FROM_CANON_X (f, x)
@@ -1972,7 +1971,7 @@ though when run from an idle timer with a delay of zero seconds. */)
1972 row = (NILP (body) 1971 row = (NILP (body)
1973 ? MATRIX_ROW (w->current_matrix, 0) 1972 ? MATRIX_ROW (w->current_matrix, 0)
1974 : MATRIX_FIRST_TEXT_ROW (w->current_matrix)); 1973 : MATRIX_FIRST_TEXT_ROW (w->current_matrix));
1975 else if (FIXED_OR_FLOATP (first)) 1974 else if (FIXNUMP (first))
1976 { 1975 {
1977 CHECK_RANGED_INTEGER (first, 0, w->current_matrix->nrows); 1976 CHECK_RANGED_INTEGER (first, 0, w->current_matrix->nrows);
1978 row = MATRIX_ROW (w->current_matrix, XFIXNUM (first)); 1977 row = MATRIX_ROW (w->current_matrix, XFIXNUM (first));
@@ -1985,7 +1984,7 @@ though when run from an idle timer with a delay of zero seconds. */)
1985 end_row = (NILP (body) 1984 end_row = (NILP (body)
1986 ? MATRIX_ROW (w->current_matrix, w->current_matrix->nrows) 1985 ? MATRIX_ROW (w->current_matrix, w->current_matrix->nrows)
1987 : MATRIX_BOTTOM_TEXT_ROW (w->current_matrix, w)); 1986 : MATRIX_BOTTOM_TEXT_ROW (w->current_matrix, w));
1988 else if (FIXED_OR_FLOATP (last)) 1987 else if (FIXNUMP (last))
1989 { 1988 {
1990 CHECK_RANGED_INTEGER (last, 0, w->current_matrix->nrows); 1989 CHECK_RANGED_INTEGER (last, 0, w->current_matrix->nrows);
1991 end_row = MATRIX_ROW (w->current_matrix, XFIXNUM (last)); 1990 end_row = MATRIX_ROW (w->current_matrix, XFIXNUM (last));
@@ -3994,7 +3993,7 @@ window_resize_apply (struct window *w, bool horflag)
3994 { 3993 {
3995 w->pixel_width = XFIXNAT (w->new_pixel); 3994 w->pixel_width = XFIXNAT (w->new_pixel);
3996 w->total_cols = w->pixel_width / unit; 3995 w->total_cols = w->pixel_width / unit;
3997 if (FIXED_OR_FLOATP (w->new_normal)) 3996 if (NUMBERP (w->new_normal))
3998 wset_normal_cols (w, w->new_normal); 3997 wset_normal_cols (w, w->new_normal);
3999 3998
4000 edge = w->pixel_left; 3999 edge = w->pixel_left;
@@ -4003,7 +4002,7 @@ window_resize_apply (struct window *w, bool horflag)
4003 { 4002 {
4004 w->pixel_height = XFIXNAT (w->new_pixel); 4003 w->pixel_height = XFIXNAT (w->new_pixel);
4005 w->total_lines = w->pixel_height / unit; 4004 w->total_lines = w->pixel_height / unit;
4006 if (FIXED_OR_FLOATP (w->new_normal)) 4005 if (NUMBERP (w->new_normal))
4007 wset_normal_lines (w, w->new_normal); 4006 wset_normal_lines (w, w->new_normal);
4008 4007
4009 edge = w->pixel_top; 4008 edge = w->pixel_top;
@@ -7360,7 +7359,7 @@ If PIXELS-P is non-nil, the return value is VSCROLL. */)
7360 struct window *w = decode_live_window (window); 7359 struct window *w = decode_live_window (window);
7361 struct frame *f = XFRAME (w->frame); 7360 struct frame *f = XFRAME (w->frame);
7362 7361
7363 CHECK_FIXNUM_OR_FLOAT (vscroll); 7362 CHECK_NUMBER (vscroll);
7364 7363
7365 if (FRAME_WINDOW_P (f)) 7364 if (FRAME_WINDOW_P (f))
7366 { 7365 {