aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/generators
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-06-20 15:04:40 +0200
committerGitHub <noreply@github.com>2022-06-20 15:04:40 +0200
commite3bfc1293e30512a6aa23964a3486ee709ac3f21 (patch)
treec8d1b70ef948a4beafe82195431f1c6607fbe8b7 /src/nvim/generators
parentb2ed439bd5ab1b431bb61f8754554c48453495c5 (diff)
parent5d6987210578f5f1c3151988b99a9411f9603374 (diff)
downloadrneovim-e3bfc1293e30512a6aa23964a3486ee709ac3f21.tar.gz
rneovim-e3bfc1293e30512a6aa23964a3486ee709ac3f21.tar.bz2
rneovim-e3bfc1293e30512a6aa23964a3486ee709ac3f21.zip
Merge pull request #18988 from bfredl/uipack
refactor(ui): encode "redraw" events without intermediate allocations
Diffstat (limited to 'src/nvim/generators')
-rwxr-xr-xsrc/nvim/generators/gen_api_ui_events.lua21
1 files changed, 8 insertions, 13 deletions
diff --git a/src/nvim/generators/gen_api_ui_events.lua b/src/nvim/generators/gen_api_ui_events.lua
index 99dfac05e8..93bbaab74c 100755
--- a/src/nvim/generators/gen_api_ui_events.lua
+++ b/src/nvim/generators/gen_api_ui_events.lua
@@ -36,20 +36,12 @@ local function write_signature(output, ev, prefix, notype)
output:write(')')
end
-local function write_arglist(output, ev, need_copy)
- output:write(' Array args = ARRAY_DICT_INIT;\n')
+local function write_arglist(output, ev)
for j = 1, #ev.parameters do
local param = ev.parameters[j]
local kind = string.upper(param[1])
- local do_copy = need_copy and (kind == "ARRAY" or kind == "DICTIONARY" or kind == "STRING" or kind == "OBJECT")
- output:write(' ADD(args, ')
- if do_copy then
- output:write('copy_object(')
- end
+ output:write(' ADD_C(args, ')
output:write(kind..'_OBJ('..param[2]..')')
- if do_copy then
- output:write(')')
- end
output:write(');\n')
end
end
@@ -119,7 +111,9 @@ for i = 1, #events do
remote_output:write('static void remote_ui_'..ev.name)
write_signature(remote_output, ev, 'UI *ui')
remote_output:write('\n{\n')
- write_arglist(remote_output, ev, true)
+ remote_output:write(' UIData *data = ui->data;\n')
+ remote_output:write(' Array args = data->call_buf;\n')
+ write_arglist(remote_output, ev)
remote_output:write(' push_call(ui, "'..ev.name..'", args);\n')
remote_output:write('}\n\n')
end
@@ -186,9 +180,10 @@ for i = 1, #events do
write_signature(call_output, ev, '')
call_output:write('\n{\n')
if ev.remote_only then
- write_arglist(call_output, ev, false)
+ call_output:write(' Array args = call_buf;\n')
+ write_arglist(call_output, ev)
call_output:write(' UI_LOG('..ev.name..');\n')
- call_output:write(' ui_event("'..ev.name..'", args);\n')
+ call_output:write(' ui_call_event("'..ev.name..'", args);\n')
elseif ev.compositor_impl then
call_output:write(' UI_CALL')
write_signature(call_output, ev, '!ui->composed, '..ev.name..', ui', true)