From 56aaaf9bbaf9772ea714b16aa7ed2a9693ac92e3 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 2 Mar 2017 13:48:47 -0800 Subject: Restore XFLOATINT but with restricted args Turn instances of extract_float into XFLOAT_DATA when possible, and to a resurrected XFLOATINT when the arg is a number. The resurrected XFLOATINT is more like XFLOAT and XINT in that is valid only if its arg is a number. This clarifies the ways in which floats can be extracted at the C level. * src/editfns.c (styled_format): * src/floatfns.c (extract_float, Fexpt): Use XFLOATINT rather than open-coding it. * src/fns.c (internal_equal): * src/image.c (imagemagick_load_image): * src/xdisp.c (resize_mini_window): Prefer XFLOAT_DATA to extract_float on values known to be floats. * src/frame.c (x_set_screen_gamma): * src/frame.h (NUMVAL): * src/image.c (x_edge_detection, compute_image_size): * src/lread.c (read_filtered_event): * src/window.c (Fset_window_vscroll): * src/xdisp.c (handle_single_display_spec, try_scrolling) (redisplay_window, calc_pixel_width_or_height, x_produce_glyphs) (on_hot_spot_p): Prefer XFLOATINT to extract_float on values known to be numbers. * src/lisp.h (XFLOATINT): Bring back this function, except it now assumes its argument is a number. --- src/floatfns.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'src/floatfns.c') diff --git a/src/floatfns.c b/src/floatfns.c index 737fb22091e..dda03698093 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -67,10 +67,7 @@ double extract_float (Lisp_Object num) { CHECK_NUMBER_OR_FLOAT (num); - - if (FLOATP (num)) - return XFLOAT_DATA (num); - return (double) XINT (num); + return XFLOATINT (num); } /* Trig functions. */ @@ -207,8 +204,6 @@ DEFUN ("expt", Fexpt, Sexpt, 2, 2, 0, doc: /* Return the exponential ARG1 ** ARG2. */) (Lisp_Object arg1, Lisp_Object arg2) { - double f1, f2, f3; - CHECK_NUMBER_OR_FLOAT (arg1); CHECK_NUMBER_OR_FLOAT (arg2); if (INTEGERP (arg1) /* common lisp spec */ @@ -232,10 +227,7 @@ DEFUN ("expt", Fexpt, Sexpt, 2, 2, 0, XSETINT (val, acc); return val; } - f1 = FLOATP (arg1) ? XFLOAT_DATA (arg1) : XINT (arg1); - f2 = FLOATP (arg2) ? XFLOAT_DATA (arg2) : XINT (arg2); - f3 = pow (f1, f2); - return make_float (f3); + return make_float (pow (XFLOATINT (arg1), XFLOATINT (arg2))); } DEFUN ("log", Flog, Slog, 1, 2, 0, -- cgit v1.2.3