diff options
| author | zeertzjq <zeertzjq@outlook.com> | 2025-03-10 06:56:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-10 06:56:02 +0800 |
| commit | 15f2da55a8ded9f1b7737cdd2d38c286fc581fd2 (patch) | |
| tree | c2f43ab9e06fb3fc08ccc22d1842094739e938fc /src/gen/gen_events.lua | |
| parent | 37786ccfcf07706c7524cdeef321bb4defba45b2 (diff) | |
| download | rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.tar.gz rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.tar.bz2 rneovim-15f2da55a8ded9f1b7737cdd2d38c286fc581fd2.zip | |
perf(events): use hashy for event name lookup (#32802)
Diffstat (limited to 'src/gen/gen_events.lua')
| -rw-r--r-- | src/gen/gen_events.lua | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/gen/gen_events.lua b/src/gen/gen_events.lua index 020599301c..23ca81b684 100644 --- a/src/gen/gen_events.lua +++ b/src/gen/gen_events.lua @@ -1,6 +1,7 @@ local fileio_enum_file = arg[1] local names_file = arg[2] +local hashy = require('gen.hashy') local auevents = require('nvim.auevents') local events = auevents.events local aliases = auevents.aliases @@ -41,9 +42,27 @@ for i, name in ipairs(names) do end enum_tgt:write(('\n NUM_EVENTS = %u,'):format(#names)) +enum_tgt:write('\n} event_T;\n') +enum_tgt:close() + names_tgt:write('\n [NUM_EVENTS] = {0, NULL, (event_T)0},\n};\n') names_tgt:write('\nstatic AutoCmdVec autocmds[NUM_EVENTS] = { 0 };\n') -names_tgt:close() -enum_tgt:write('\n} event_T;\n') -enum_tgt:close() +local hashorder = vim.tbl_map(string.lower, names) +table.sort(hashorder) +local hashfun +hashorder, hashfun = hashy.hashy_hash('event_name2nr', hashorder, function(idx) + return 'event_names[event_hash[' .. idx .. ']].name' +end, true) + +names_tgt:write([[ + +static const event_T event_hash[] = {]]) + +for _, lower_name in ipairs(hashorder) do + names_tgt:write(('\n EVENT_%s,'):format(lower_name:upper())) +end + +names_tgt:write('\n};\n\n') +names_tgt:write('static ' .. hashfun) +names_tgt:close() |