mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.0504: looking up an Ex command is a bit slow
Problem: Looking up an Ex command is a bit slow.
Solution: Instead of just using the first letter, also use the second letter
to skip ahead in the list of commands. Generate the table with a
Perl script. (Dominique Pelle, closes vim/vim#1589)
e5e0fbcd42
This commit is contained in:
parent
2470c88291
commit
c3158e230d
@ -155,6 +155,8 @@ struct dbg_stuff {
|
||||
# include "ex_cmds_defs.generated.h"
|
||||
#endif
|
||||
|
||||
static const int command_count = 539;
|
||||
|
||||
static char_u dollar_command[2] = {'$', 0};
|
||||
|
||||
static void save_dbg_stuff(struct dbg_stuff *dsp)
|
||||
@ -2440,10 +2442,23 @@ static char_u *find_command(exarg_T *eap, int *full)
|
||||
}
|
||||
}
|
||||
|
||||
if (ASCII_ISLOWER(*eap->cmd))
|
||||
eap->cmdidx = cmdidxs[CharOrdLow(*eap->cmd)];
|
||||
else
|
||||
eap->cmdidx = cmdidxs[26];
|
||||
if (ASCII_ISLOWER(eap->cmd[0])) {
|
||||
if (command_count != (int)CMD_SIZE) {
|
||||
iemsg((char_u *)_("E943: Command table needs to be updated, run 'make cmdidxs'"));
|
||||
getout(1);
|
||||
}
|
||||
|
||||
// Use a precomputed index for fast look-up in cmdnames[]
|
||||
// taking into account the first 2 letters of eap->cmd.
|
||||
const int c1 = eap->cmd[0];
|
||||
const int c2 = eap->cmd[1];
|
||||
eap->cmdidx = cmdidxs1[CharOrdLow(c1)];
|
||||
if (ASCII_ISLOWER(c2)) {
|
||||
eap->cmdidx += cmdidxs2[CharOrdLow(c1)][CharOrdLow(c2)];
|
||||
}
|
||||
} else {
|
||||
eap->cmdidx = CMD_bang;
|
||||
}
|
||||
|
||||
for (; (int)eap->cmdidx < (int)CMD_SIZE;
|
||||
eap->cmdidx = (cmdidx_T)((int)eap->cmdidx + 1))
|
||||
|
Loading…
Reference in New Issue
Block a user