diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-12-27 00:28:33 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-12-27 00:28:33 +0100 |
commit | 6436cd83f90a0efc326798792e49e8ff96a43dce (patch) | |
tree | 4c037d58e17fe18e02c9f06dc541d7b902c735dd /src/ex_cmds.c | |
parent | 00b1e041654e8a38fb6b81218a037e1dc94e0943 (diff) |
patch 8.1.0644: finding next sign ID is inefficientv8.1.0644
Problem: Finding next sign ID is inefficient.
Solution: Add next_sign_id. (Yegappan Lakshmanan, closes #3717)
Diffstat (limited to 'src/ex_cmds.c')
-rw-r--r-- | src/ex_cmds.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 52b669ae94..6a79451061 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -7871,16 +7871,7 @@ sign_place( return FAIL; } if (*sign_id == 0) - { - // Allocate a new sign id - int id = 1; - signlist_T *sign; - - while ((sign = buf_getsign_with_id(buf, id, sign_group)) != NULL) - id++; - - *sign_id = id; - } + *sign_id = sign_group_get_next_signid(buf, sign_group); if (lnum > 0) // ":sign place {id} line={lnum} name={name} file={fname}": @@ -8193,7 +8184,7 @@ ex_sign(exarg_T *eap) else if (idx == SIGNCMD_JUMP) { /* ":sign jump {id} file={fname}" */ - if (lnum >= 0 || sign_name != NULL) + if (lnum >= 0 || sign_name != NULL || buf == NULL) EMSG(_(e_invarg)); else if ((lnum = buf_findsign(buf, id, group)) > 0) { /* goto a sign ... */ @@ -8350,7 +8341,7 @@ sign_get_placed_in_buf( return; dict_add_list(d, "signs", l); - FOR_ALL_SIGNS_IN_BUF(buf) + FOR_ALL_SIGNS_IN_BUF(buf, sign) { if (!sign_in_group(sign, sign_group)) continue; |