aboutsummaryrefslogtreecommitdiffstats
path: root/src/menu.c
diff options
context:
space:
mode:
authorPaul Eggert2019-01-09 09:52:38 -0800
committerPaul Eggert2019-01-09 09:59:10 -0800
commita84650334e30b2451bf4a8957bf2d57ade296d4e (patch)
treeb5642bb98eb89733def116fb6d864f74855023e2 /src/menu.c
parentf9d0fd6c1953138f7473a22917a1508740b2ce40 (diff)
downloademacs-a84650334e30b2451bf4a8957bf2d57ade296d4e.tar.gz
emacs-a84650334e30b2451bf4a8957bf2d57ade296d4e.zip
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.
Diffstat (limited to 'src/menu.c')
-rw-r--r--src/menu.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/menu.c b/src/menu.c
index c35d711b314..c0e5bd9caf6 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -524,19 +524,15 @@ bool
524parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name, 524parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name,
525 Lisp_Object maps) 525 Lisp_Object maps)
526{ 526{
527 Lisp_Object length;
528 EMACS_INT len;
529 Lisp_Object *mapvec; 527 Lisp_Object *mapvec;
530 ptrdiff_t i;
531 bool top_level_items = 0; 528 bool top_level_items = 0;
532 USE_SAFE_ALLOCA; 529 USE_SAFE_ALLOCA;
533 530
534 length = Flength (maps); 531 ptrdiff_t len = list_length (maps);
535 len = XFIXNUM (length);
536 532
537 /* Convert the list MAPS into a vector MAPVEC. */ 533 /* Convert the list MAPS into a vector MAPVEC. */
538 SAFE_ALLOCA_LISP (mapvec, len); 534 SAFE_ALLOCA_LISP (mapvec, len);
539 for (i = 0; i < len; i++) 535 for (ptrdiff_t i = 0; i < len; i++)
540 { 536 {
541 mapvec[i] = Fcar (maps); 537 mapvec[i] = Fcar (maps);
542 maps = Fcdr (maps); 538 maps = Fcdr (maps);
@@ -544,7 +540,7 @@ parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name,
544 540
545 /* Loop over the given keymaps, making a pane for each map. 541 /* Loop over the given keymaps, making a pane for each map.
546 But don't make a pane that is empty--ignore that map instead. */ 542 But don't make a pane that is empty--ignore that map instead. */
547 for (i = 0; i < len; i++) 543 for (ptrdiff_t i = 0; i < len; i++)
548 { 544 {
549 if (!KEYMAPP (mapvec[i])) 545 if (!KEYMAPP (mapvec[i]))
550 { 546 {
@@ -1309,7 +1305,7 @@ x_popup_menu_1 (Lisp_Object position, Lisp_Object menu)
1309 else if (CONSP (menu) && KEYMAPP (XCAR (menu))) 1305 else if (CONSP (menu) && KEYMAPP (XCAR (menu)))
1310 { 1306 {
1311 /* We were given a list of keymaps. */ 1307 /* We were given a list of keymaps. */
1312 EMACS_INT nmaps = XFIXNAT (Flength (menu)); 1308 ptrdiff_t nmaps = list_length (menu);
1313 Lisp_Object *maps; 1309 Lisp_Object *maps;
1314 ptrdiff_t i; 1310 ptrdiff_t i;
1315 USE_SAFE_ALLOCA; 1311 USE_SAFE_ALLOCA;