diff options
| author | bfredl <bjorn.linse@gmail.com> | 2022-06-20 15:04:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-20 15:04:40 +0200 |
| commit | e3bfc1293e30512a6aa23964a3486ee709ac3f21 (patch) | |
| tree | c8d1b70ef948a4beafe82195431f1c6607fbe8b7 /src/nvim/generators | |
| parent | b2ed439bd5ab1b431bb61f8754554c48453495c5 (diff) | |
| parent | 5d6987210578f5f1c3151988b99a9411f9603374 (diff) | |
| download | rneovim-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-x | src/nvim/generators/gen_api_ui_events.lua | 21 |
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) |