Use shortcuts for Flength

When calculating the length of a Lisp object whose type is
known, use a specialized length operation on it to save a bit
of runtime overhead.
* src/callint.c (Fcall_interactively):
* src/minibuf.c (read_minibuf_unwind):
Use ASIZE rather than Flength on values that must be vectors.
* src/charset.c (Fsort_charsets):
* src/coding.c (detect_coding_sjis):
(Fdefine_coding_system_internal):
* src/data.c (wrong_choice):
* src/eval.c (Flet, eval_sub, Fapply, apply_lambda):
* src/fns.c (sort_list):
* src/font.c (font_vconcat_entity_vectors)
(font_find_for_lface):
* src/frame.c (Fmodify_frame_parameters):
* src/fringe.c (get_logical_fringe_bitmap):
* src/ftfont.c (ftfont_get_open_type_spec):
* src/gtkutil.c (xg_print_frames_dialog):
* src/lread.c (read1, read_vector):
* src/keymap.c (Fkey_description):
* src/kqueue.c (Fkqueue_add_watch):
* src/macfont.m (macfont_get_open_type_spec):
* src/menu.c (parse_single_submenu, x_popup_menu_1):
* src/minibuf.c (Finternal_complete_buffer):
* src/nsfont.m (ns_findfonts, nsfont_list_family):
* src/process.c (Fmake_process):
* src/search.c (Fset_match_data):
* src/xfaces.c (Fx_family_fonts):
Use list_length rather than Flength on values that must be lists.
* src/fns.c (list_length): New function.
(Flength): Use it.
* src/nsfont.m (ns_findfonts):
Use !NILP (x) rather than XFIXNUM (Flength (x)) != 0.
* src/xdisp.c (store_mode_line_string):
Use SCHARS rather than Flength on values that must be strings.
This commit is contained in:
Paul Eggert 2019-01-09 09:52:38 -08:00
parent f9d0fd6c19
commit a84650334e
23 changed files with 98 additions and 124 deletions

View file

@ -572,7 +572,7 @@ invoke it. If KEYS is omitted or nil, the return value of
/* If the key sequence ends with a down-event,
discard the following up-event. */
Lisp_Object teml
= Faref (args[i], make_fixnum (XFIXNUM (Flength (args[i])) - 1));
= Faref (args[i], make_fixnum (ASIZE (args[i]) - 1));
if (CONSP (teml))
teml = XCAR (teml);
if (SYMBOLP (teml))

View file

@ -2242,8 +2242,7 @@ Return the sorted list. CHARSETS is modified by side effects.
See also `charset-priority-list' and `set-charset-priority'. */)
(Lisp_Object charsets)
{
Lisp_Object len = Flength (charsets);
ptrdiff_t n = XFIXNAT (len), i, j;
ptrdiff_t n = list_length (charsets), i, j;
int done;
Lisp_Object tail, elt, attrs;
struct charset_sort_data *sort_data;

View file

@ -4591,8 +4591,7 @@ detect_coding_sjis (struct coding_system *coding,
int max_first_byte_of_2_byte_code;
CODING_GET_INFO (coding, attrs, charset_list);
max_first_byte_of_2_byte_code
= (XFIXNUM (Flength (charset_list)) > 3 ? 0xFC : 0xEF);
max_first_byte_of_2_byte_code = list_length (charset_list) <= 3 ? 0xEF : 0xFC;
detect_info->checked |= CATEGORY_MASK_SJIS;
/* A coding system of this category is always ASCII compatible. */
@ -10387,14 +10386,11 @@ usage: (define-coding-system-internal ...) */)
}
else if (EQ (coding_type, Qshift_jis))
{
struct charset *charset;
if (XFIXNUM (Flength (charset_list)) != 3
&& XFIXNUM (Flength (charset_list)) != 4)
ptrdiff_t charset_list_len = list_length (charset_list);
if (charset_list_len != 3 && charset_list_len != 4)
error ("There should be three or four charsets");
charset = CHARSET_FROM_ID (XFIXNUM (XCAR (charset_list)));
struct charset *charset = CHARSET_FROM_ID (XFIXNUM (XCAR (charset_list)));
if (CHARSET_DIMENSION (charset) != 1)
error ("Dimension of charset %s is not one",
SDATA (SYMBOL_NAME (CHARSET_NAME (charset))));
@ -10429,7 +10425,7 @@ usage: (define-coding-system-internal ...) */)
{
struct charset *charset;
if (XFIXNUM (Flength (charset_list)) != 2)
if (list_length (charset_list) != 2)
error ("There should be just two charsets");
charset = CHARSET_FROM_ID (XFIXNUM (XCAR (charset_list)));

View file

@ -980,14 +980,12 @@ chain of aliases, signal a `cyclic-variable-indirection' error. */)
swap_in_symval_forwarding for that. */
Lisp_Object
do_symval_forwarding (register union Lisp_Fwd *valcontents)
do_symval_forwarding (union Lisp_Fwd *valcontents)
{
register Lisp_Object val;
switch (XFWDTYPE (valcontents))
{
case Lisp_Fwd_Int:
XSETINT (val, *XFIXNUMFWD (valcontents)->intvar);
return val;
return make_fixnum (*XFIXNUMFWD (valcontents)->intvar);
case Lisp_Fwd_Bool:
return (*XBOOLFWD (valcontents)->boolvar ? Qt : Qnil);
@ -1023,7 +1021,7 @@ do_symval_forwarding (register union Lisp_Fwd *valcontents)
void
wrong_choice (Lisp_Object choice, Lisp_Object wrong)
{
ptrdiff_t i = 0, len = XFIXNUM (Flength (choice));
ptrdiff_t i = 0, len = list_length (choice);
Lisp_Object obj, *args;
AUTO_STRING (one_of, "One of ");
AUTO_STRING (comma, ", ");

View file

@ -951,16 +951,15 @@ usage: (let VARLIST BODY...) */)
(Lisp_Object args)
{
Lisp_Object *temps, tem, lexenv;
Lisp_Object elt, varlist;
Lisp_Object elt;
ptrdiff_t count = SPECPDL_INDEX ();
ptrdiff_t argnum;
USE_SAFE_ALLOCA;
varlist = XCAR (args);
CHECK_LIST (varlist);
Lisp_Object varlist = XCAR (args);
/* Make space to hold the values to give the bound variables. */
EMACS_INT varlist_len = XFIXNAT (Flength (varlist));
EMACS_INT varlist_len = list_length (varlist);
SAFE_ALLOCA_LISP (temps, varlist_len);
ptrdiff_t nvars = varlist_len;
@ -2263,14 +2262,15 @@ eval_sub (Lisp_Object form)
if (SUBRP (fun))
{
Lisp_Object args_left = original_args;
Lisp_Object numargs = Flength (args_left);
ptrdiff_t numargs = list_length (args_left);
check_cons_list ();
if (XFIXNUM (numargs) < XSUBR (fun)->min_args
if (numargs < XSUBR (fun)->min_args
|| (XSUBR (fun)->max_args >= 0
&& XSUBR (fun)->max_args < XFIXNUM (numargs)))
xsignal2 (Qwrong_number_of_arguments, original_fun, numargs);
&& XSUBR (fun)->max_args < numargs))
xsignal2 (Qwrong_number_of_arguments, original_fun,
make_fixnum (numargs));
else if (XSUBR (fun)->max_args == UNEVALLED)
val = (XSUBR (fun)->function.aUNEVALLED) (args_left);
@ -2281,9 +2281,9 @@ eval_sub (Lisp_Object form)
ptrdiff_t argnum = 0;
USE_SAFE_ALLOCA;
SAFE_ALLOCA_LISP (vals, XFIXNUM (numargs));
SAFE_ALLOCA_LISP (vals, numargs);
while (CONSP (args_left) && argnum < XFIXNUM (numargs))
while (CONSP (args_left) && argnum < numargs)
{
Lisp_Object arg = XCAR (args_left);
args_left = XCDR (args_left);
@ -2313,7 +2313,7 @@ eval_sub (Lisp_Object form)
args_left = Fcdr (args_left);
}
set_backtrace_args (specpdl + count, argvals, XFIXNUM (numargs));
set_backtrace_args (specpdl + count, argvals, numargs);
switch (i)
{
@ -2417,16 +2417,13 @@ Thus, (apply \\='+ 1 2 \\='(3 4)) returns 10.
usage: (apply FUNCTION &rest ARGUMENTS) */)
(ptrdiff_t nargs, Lisp_Object *args)
{
ptrdiff_t i, numargs, funcall_nargs;
register Lisp_Object *funcall_args = NULL;
register Lisp_Object spread_arg = args[nargs - 1];
ptrdiff_t i, funcall_nargs;
Lisp_Object *funcall_args = NULL;
Lisp_Object spread_arg = args[nargs - 1];
Lisp_Object fun = args[0];
Lisp_Object retval;
USE_SAFE_ALLOCA;
CHECK_LIST (spread_arg);
numargs = XFIXNUM (Flength (spread_arg));
ptrdiff_t numargs = list_length (spread_arg);
if (numargs == 0)
return Ffuncall (nargs - 1, args);
@ -2476,7 +2473,7 @@ usage: (apply FUNCTION &rest ARGUMENTS) */)
spread_arg = XCDR (spread_arg);
}
retval = Ffuncall (funcall_nargs, funcall_args);
Lisp_Object retval = Ffuncall (funcall_nargs, funcall_args);
SAFE_FREE ();
return retval;
@ -2974,25 +2971,22 @@ funcall_subr (struct Lisp_Subr *subr, ptrdiff_t numargs, Lisp_Object *args)
static Lisp_Object
apply_lambda (Lisp_Object fun, Lisp_Object args, ptrdiff_t count)
{
Lisp_Object args_left;
ptrdiff_t i;
EMACS_INT numargs;
Lisp_Object *arg_vector;
Lisp_Object tem;
USE_SAFE_ALLOCA;
numargs = XFIXNAT (Flength (args));
ptrdiff_t numargs = list_length (args);
SAFE_ALLOCA_LISP (arg_vector, numargs);
args_left = args;
Lisp_Object args_left = args;
for (i = 0; i < numargs; )
for (ptrdiff_t i = 0; i < numargs; i++)
{
tem = Fcar (args_left), args_left = Fcdr (args_left);
tem = eval_sub (tem);
arg_vector[i++] = tem;
arg_vector[i] = tem;
}
set_backtrace_args (specpdl + count, arg_vector, i);
set_backtrace_args (specpdl + count, arg_vector, numargs);
tem = funcall_lambda (fun, numargs, arg_vector);
check_cons_list ();

View file

@ -91,42 +91,50 @@ See Info node `(elisp)Random Numbers' for more details. */)
/* Random data-structure functions. */
/* Return the length of LIST. Signal an error if LIST is not a proper
list or if the length does not fit into a fixnum or into ptrdiff_t. */
ptrdiff_t
list_length (Lisp_Object list)
{
intptr_t i = 0;
FOR_EACH_TAIL (list)
i++;
CHECK_LIST_END (list, list);
if (i <= min (PTRDIFF_MAX, MOST_POSITIVE_FIXNUM))
return i;
overflow_error ();
}
DEFUN ("length", Flength, Slength, 1, 1, 0,
doc: /* Return the length of vector, list or string SEQUENCE.
A byte-code function object is also allowed.
If the string contains multibyte characters, this is not necessarily
the number of bytes in the string; it is the number of characters.
To get the number of bytes, use `string-bytes'. */)
(register Lisp_Object sequence)
(Lisp_Object sequence)
{
register Lisp_Object val;
EMACS_INT val;
if (STRINGP (sequence))
XSETFASTINT (val, SCHARS (sequence));
val = SCHARS (sequence);
else if (VECTORP (sequence))
XSETFASTINT (val, ASIZE (sequence));
val = ASIZE (sequence);
else if (CHAR_TABLE_P (sequence))
XSETFASTINT (val, MAX_CHAR);
val = MAX_CHAR;
else if (BOOL_VECTOR_P (sequence))
XSETFASTINT (val, bool_vector_size (sequence));
val = bool_vector_size (sequence);
else if (COMPILEDP (sequence) || RECORDP (sequence))
XSETFASTINT (val, PVSIZE (sequence));
val = PVSIZE (sequence);
else if (CONSP (sequence))
{
intptr_t i = 0;
FOR_EACH_TAIL (sequence)
i++;
CHECK_LIST_END (sequence, sequence);
if (MOST_POSITIVE_FIXNUM < i)
overflow_error ();
val = make_fixnum (i);
}
val = list_length (sequence);
else if (NILP (sequence))
XSETFASTINT (val, 0);
val = 0;
else
wrong_type_argument (Qsequencep, sequence);
return val;
return make_fixnum (val);
}
DEFUN ("safe-length", Fsafe_length, Ssafe_length, 1, 1, 0,
@ -1957,24 +1965,15 @@ See also the function `nreverse', which is used more often. */)
static Lisp_Object
sort_list (Lisp_Object list, Lisp_Object predicate)
{
Lisp_Object front, back;
Lisp_Object len, tem;
EMACS_INT length;
front = list;
len = Flength (list);
length = XFIXNUM (len);
ptrdiff_t length = list_length (list);
if (length < 2)
return list;
XSETINT (len, (length / 2) - 1);
tem = Fnthcdr (len, list);
back = Fcdr (tem);
Lisp_Object tem = Fnthcdr (make_fixnum (length / 2 - 1), list);
Lisp_Object back = Fcdr (tem);
Fsetcdr (tem, Qnil);
front = Fsort (front, predicate);
back = Fsort (back, predicate);
return merge (front, back, predicate);
return merge (Fsort (list, predicate), Fsort (back, predicate), predicate);
}
/* Using PRED to compare, return whether A and B are in order.

View file

@ -2174,13 +2174,12 @@ font_score (Lisp_Object entity, Lisp_Object *spec_prop)
static Lisp_Object
font_vconcat_entity_vectors (Lisp_Object list)
{
EMACS_INT nargs = XFIXNAT (Flength (list));
ptrdiff_t nargs = list_length (list);
Lisp_Object *args;
USE_SAFE_ALLOCA;
SAFE_ALLOCA_LISP (args, nargs);
ptrdiff_t i;
for (i = 0; i < nargs; i++, list = XCDR (list))
for (ptrdiff_t i = 0; i < nargs; i++, list = XCDR (list))
args[i] = XCAR (list);
Lisp_Object result = Fvconcat (nargs, args);
SAFE_FREE ();
@ -3241,7 +3240,7 @@ font_find_for_lface (struct frame *f, Lisp_Object *attrs, Lisp_Object spec, int
if (! NILP (alters))
{
EMACS_INT alterslen = XFIXNAT (Flength (alters));
EMACS_INT alterslen = list_length (alters);
SAFE_ALLOCA_LISP (family, alterslen + 2);
for (i = 0; CONSP (alters); i++, alters = XCDR (alters))
family[i] = XCAR (alters);

View file

@ -3190,7 +3190,7 @@ list, but are otherwise ignored. */)
#endif
{
EMACS_INT length = XFIXNAT (Flength (alist));
EMACS_INT length = list_length (alist);
ptrdiff_t i;
Lisp_Object *parms;
Lisp_Object *values;

View file

@ -719,7 +719,7 @@ static int
get_logical_fringe_bitmap (struct window *w, Lisp_Object bitmap, int right_p, int partial_p)
{
Lisp_Object cmap, bm1 = Qnil, bm2 = Qnil, bm;
EMACS_INT ln1 = 0, ln2 = 0;
ptrdiff_t ln1 = 0, ln2 = 0;
int ix1 = right_p;
int ix2 = ix1 + (partial_p ? 2 : 0);
@ -743,7 +743,7 @@ get_logical_fringe_bitmap (struct window *w, Lisp_Object bitmap, int right_p, in
return NO_FRINGE_BITMAP;
if (CONSP (bm1))
{
ln1 = XFIXNUM (Flength (bm1));
ln1 = list_length (bm1);
if (partial_p)
{
if (ln1 > ix2)
@ -778,7 +778,7 @@ get_logical_fringe_bitmap (struct window *w, Lisp_Object bitmap, int right_p, in
{
if (CONSP (bm2))
{
ln2 = XFIXNUM (Flength (bm2));
ln2 = list_length (bm2);
if (partial_p)
{
if (ln2 > ix2)

View file

@ -594,16 +594,14 @@ ftfont_get_open_type_spec (Lisp_Object otf_spec)
spec->nfeatures[0] = spec->nfeatures[1] = 0;
for (i = 0; i < 2 && ! NILP (otf_spec); i++, otf_spec = XCDR (otf_spec))
{
Lisp_Object len;
val = XCAR (otf_spec);
if (NILP (val))
continue;
len = Flength (val);
ptrdiff_t len = list_length (val);
spec->features[i] =
(min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < XFIXNUM (len)
(min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < len
? 0
: malloc (XFIXNUM (len) * sizeof *spec->features[i]));
: malloc (len * sizeof *spec->features[i]));
if (! spec->features[i])
{
if (i > 0 && spec->features[0])

View file

@ -4299,7 +4299,7 @@ xg_print_frames_dialog (Lisp_Object frames)
gtk_print_operation_set_print_settings (print, print_settings);
if (page_setup != NULL)
gtk_print_operation_set_default_page_setup (print, page_setup);
gtk_print_operation_set_n_pages (print, XFIXNUM (Flength (frames)));
gtk_print_operation_set_n_pages (print, list_length (frames));
g_signal_connect (print, "draw-page", G_CALLBACK (draw_page), &frames);
res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
NULL, NULL);

View file

@ -2042,7 +2042,7 @@ For an approximate inverse of this, see `kbd'. */)
else if (VECTORP (list))
size = ASIZE (list);
else if (CONSP (list))
size = XFIXNUM (Flength (list));
size = list_length (list);
else
wrong_type_argument (Qarrayp, list);

View file

@ -395,11 +395,12 @@ only when the upper directory of the renamed file is watched. */)
maxfd = 256;
/* We assume 50 file descriptors are sufficient for the rest of Emacs. */
if ((maxfd - 50) < XFIXNUM (Flength (watch_list)))
ptrdiff_t watch_list_len = list_length (watch_list);
if (maxfd - 50 < watch_list_len)
xsignal2
(Qfile_notify_error,
build_string ("File watching not possible, no file descriptor left"),
Flength (watch_list));
make_fixnum (watch_list_len));
if (kqueuefd < 0)
{

View file

@ -3413,6 +3413,7 @@ extern void syms_of_syntax (void);
/* Defined in fns.c. */
enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
extern ptrdiff_t list_length (Lisp_Object);
extern EMACS_INT next_almost_prime (EMACS_INT) ATTRIBUTE_CONST;
extern Lisp_Object larger_vector (Lisp_Object, ptrdiff_t, ptrdiff_t);
extern void sweep_weak_hash_tables (void);

View file

@ -2879,7 +2879,7 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
/* Sub char-table can't be read as a regular
vector because of a two C integer fields. */
Lisp_Object tbl, tmp = read_list (1, readcharfun);
ptrdiff_t size = XFIXNUM (Flength (tmp));
ptrdiff_t size = list_length (tmp);
int i, depth, min_char;
struct Lisp_Cons *cell;
@ -3846,8 +3846,7 @@ static Lisp_Object
read_vector (Lisp_Object readcharfun, bool bytecodeflag)
{
Lisp_Object tem = read_list (1, readcharfun);
Lisp_Object len = Flength (tem);
ptrdiff_t size = XFIXNAT (len);
ptrdiff_t size = list_length (tem);
if (bytecodeflag && size <= COMPILED_STACK_DEPTH)
error ("Invalid byte code");
Lisp_Object vector = make_nil_vector (size);

View file

@ -1791,16 +1791,14 @@ static int macfont_variation_glyphs (struct font *, int c,
spec->nfeatures[0] = spec->nfeatures[1] = 0;
for (i = 0; i < 2 && ! NILP (otf_spec); i++, otf_spec = XCDR (otf_spec))
{
Lisp_Object len;
val = XCAR (otf_spec);
if (NILP (val))
continue;
len = Flength (val);
ptrdiff_t len = list_length (val);
spec->features[i] =
(min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < XFIXNUM (len)
(min (PTRDIFF_MAX, SIZE_MAX) / sizeof (int) < len
? 0
: malloc (XFIXNUM (len) * sizeof *spec->features[i]));
: malloc (len * sizeof *spec->features[i]));
if (! spec->features[i])
{
if (i > 0 && spec->features[0])

View file

@ -524,19 +524,15 @@ bool
parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name,
Lisp_Object maps)
{
Lisp_Object length;
EMACS_INT len;
Lisp_Object *mapvec;
ptrdiff_t i;
bool top_level_items = 0;
USE_SAFE_ALLOCA;
length = Flength (maps);
len = XFIXNUM (length);
ptrdiff_t len = list_length (maps);
/* Convert the list MAPS into a vector MAPVEC. */
SAFE_ALLOCA_LISP (mapvec, len);
for (i = 0; i < len; i++)
for (ptrdiff_t i = 0; i < len; i++)
{
mapvec[i] = Fcar (maps);
maps = Fcdr (maps);
@ -544,7 +540,7 @@ parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name,
/* Loop over the given keymaps, making a pane for each map.
But don't make a pane that is empty--ignore that map instead. */
for (i = 0; i < len; i++)
for (ptrdiff_t i = 0; i < len; i++)
{
if (!KEYMAPP (mapvec[i]))
{
@ -1309,7 +1305,7 @@ x_popup_menu_1 (Lisp_Object position, Lisp_Object menu)
else if (CONSP (menu) && KEYMAPP (XCAR (menu)))
{
/* We were given a list of keymaps. */
EMACS_INT nmaps = XFIXNAT (Flength (menu));
ptrdiff_t nmaps = list_length (menu);
Lisp_Object *maps;
ptrdiff_t i;
USE_SAFE_ALLOCA;

View file

@ -780,8 +780,7 @@ read_minibuf_unwind (void)
/* Restore prompt, etc, from outer minibuffer level. */
Lisp_Object key_vec = Fcar (minibuf_save_list);
eassert (VECTORP (key_vec));
this_command_key_count = XFIXNAT (Flength (key_vec));
this_command_key_count = ASIZE (key_vec);
this_command_keys = key_vec;
minibuf_save_list = Fcdr (minibuf_save_list);
minibuf_prompt = Fcar (minibuf_save_list);
@ -1783,7 +1782,7 @@ If FLAG is nil, invoke `try-completion'; if it is t, invoke
while (CONSP (bufs) && SREF (XCAR (bufs), 0) == ' ')
bufs = XCDR (bufs);
if (NILP (bufs))
return (EQ (Flength (res), Flength (Vbuffer_alist))
return (list_length (res) == list_length (Vbuffer_alist)
/* If all bufs are internal don't strip them out. */
? res : bufs);
res = bufs;

View file

@ -576,7 +576,7 @@ but also for ascii (which causes unnecessary font substitution). */
/* Add synthItal member if needed. */
family = [fdesc objectForKey: NSFontFamilyAttribute];
if (family != nil && !foundItal && XFIXNUM (Flength (list)) > 0)
if (family != nil && !foundItal && !NILP (list))
{
NSFontDescriptor *s1 = [NSFontDescriptor new];
NSFontDescriptor *sDesc
@ -595,8 +595,8 @@ but also for ascii (which causes unnecessary font substitution). */
return ns_fallback_entity ();
if (NSFONT_TRACE)
fprintf (stderr, " Returning %"pI"d entities.\n",
XFIXNUM (Flength (list)));
fprintf (stderr, " Returning %"pD"d entities.\n",
list_length (list));
return list;
}
@ -667,8 +667,8 @@ Properties to be considered are same as for list(). */
/* FIXME: escape the name? */
if (NSFONT_TRACE)
fprintf (stderr, "nsfont: list families returning %"pI"d entries\n",
XFIXNUM (Flength (list)));
fprintf (stderr, "nsfont: list families returning %"pD"d entries\n",
list_length (list));
unblock_input ();
return list;

View file

@ -1804,7 +1804,7 @@ usage: (make-process &rest ARGS) */)
val = Vcoding_system_for_read;
if (NILP (val))
{
ptrdiff_t nargs2 = 3 + XFIXNUM (Flength (command));
ptrdiff_t nargs2 = 3 + list_length (command);
Lisp_Object tem2;
SAFE_ALLOCA_LISP (args2, nargs2);
ptrdiff_t i = 0;
@ -1834,7 +1834,7 @@ usage: (make-process &rest ARGS) */)
{
if (EQ (coding_systems, Qt))
{
ptrdiff_t nargs2 = 3 + XFIXNUM (Flength (command));
ptrdiff_t nargs2 = 3 + list_length (command);
Lisp_Object tem2;
SAFE_ALLOCA_LISP (args2, nargs2);
ptrdiff_t i = 0;

View file

@ -2992,13 +2992,11 @@ If optional arg RESEAT is non-nil, make markers on LIST point nowhere. */)
/* Allocate registers if they don't already exist. */
{
EMACS_INT length = XFIXNAT (Flength (list)) / 2;
ptrdiff_t length = list_length (list) / 2;
if (length > search_regs.num_regs)
{
ptrdiff_t num_regs = search_regs.num_regs;
if (PTRDIFF_MAX < length)
memory_full (SIZE_MAX);
search_regs.start =
xpalloc (search_regs.start, &num_regs, length - num_regs,
min (PTRDIFF_MAX, UINT_MAX), sizeof *search_regs.start);

View file

@ -24137,7 +24137,7 @@ store_mode_line_string (const char *string, Lisp_Object lisp_string,
}
else
{
len = XFIXNAT (Flength (lisp_string));
len = SCHARS (lisp_string);
if (precision > 0 && len > precision)
{
len = precision;

View file

@ -1424,7 +1424,6 @@ the face font sort order. */)
Lisp_Object font_spec, list, *drivers, vec;
struct frame *f = decode_live_frame (frame);
ptrdiff_t i, nfonts;
EMACS_INT ndrivers;
Lisp_Object result;
USE_SAFE_ALLOCA;
@ -1457,7 +1456,7 @@ the face font sort order. */)
font_props_for_sorting[i++] = FONT_ADSTYLE_INDEX;
font_props_for_sorting[i++] = FONT_REGISTRY_INDEX;
ndrivers = XFIXNUM (Flength (list));
ptrdiff_t ndrivers = list_length (list);
SAFE_ALLOCA_LISP (drivers, ndrivers);
for (i = 0; i < ndrivers; i++, list = XCDR (list))
drivers[i] = XCAR (list);