diff options
| author | Paul Eggert | 2019-01-09 09:52:38 -0800 |
|---|---|---|
| committer | Paul Eggert | 2019-01-09 09:59:10 -0800 |
| commit | a84650334e30b2451bf4a8957bf2d57ade296d4e (patch) | |
| tree | b5642bb98eb89733def116fb6d864f74855023e2 /src/menu.c | |
| parent | f9d0fd6c1953138f7473a22917a1508740b2ce40 (diff) | |
| download | emacs-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.c | 12 |
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 | |||
| 524 | parse_single_submenu (Lisp_Object item_key, Lisp_Object item_name, | 524 | parse_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; |