aboutsummaryrefslogtreecommitdiff
path: root/src/gen/gen_events.lua
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-03-10 06:56:02 +0800
committerGitHub <noreply@github.com>2025-03-10 06:56:02 +0800
commit15f2da55a8ded9f1b7737cdd2d38c286fc581fd2 (patch)
treec2f43ab9e06fb3fc08ccc22d1842094739e938fc /src/gen/gen_events.lua
parent37786ccfcf07706c7524cdeef321bb4defba45b2 (diff)
downloadrneovim-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.lua25
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()