aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/autocmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/autocmd.c')
-rw-r--r--src/nvim/autocmd.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c
index 51d952ed3e..28c3906ce3 100644
--- a/src/nvim/autocmd.c
+++ b/src/nvim/autocmd.c
@@ -618,36 +618,30 @@ bool is_aucmd_win(win_T *win)
event_T event_name2nr(const char *start, char **end)
{
const char *p;
- int i;
// the event name ends with end of line, '|', a blank or a comma
for (p = start; *p && !ascii_iswhite(*p) && *p != ',' && *p != '|'; p++) {}
- for (i = 0; event_names[i].name != NULL; i++) {
- int len = (int)event_names[i].len;
- if (len == p - start && STRNICMP(event_names[i].name, start, len) == 0) {
- break;
- }
- }
+
+ int hash_idx = event_name2nr_hash(start, (size_t)(p - start));
if (*p == ',') {
p++;
}
*end = (char *)p;
- if (event_names[i].name == NULL) {
+ if (hash_idx < 0) {
return NUM_EVENTS;
}
- return (event_T)abs(event_names[i].event);
+ return (event_T)abs(event_names[event_hash[hash_idx]].event);
}
/// Return the event number for event name "str".
/// Return NUM_EVENTS if the event name was not found.
event_T event_name2nr_str(String str)
{
- for (int i = 0; event_names[i].name != NULL; i++) {
- if (str.size == event_names[i].len && STRNICMP(str.data, event_names[i].name, str.size) == 0) {
- return (event_T)abs(event_names[i].event);
- }
+ int hash_idx = event_name2nr_hash(str.data, str.size);
+ if (hash_idx < 0) {
+ return NUM_EVENTS;
}
- return NUM_EVENTS;
+ return (event_T)abs(event_names[event_hash[hash_idx]].event);
}
/// Return the name for event