aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/autocmd.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-02-11 15:46:14 +0100
committerbfredl <bjorn.linse@gmail.com>2024-02-13 11:54:44 +0100
commit0353dd3029f9ce31c3894530385443a90f6677ee (patch)
treefa288427461ee2c1ce1c271d01a760977a161bf5 /src/nvim/autocmd.c
parent89135cff030b06f60cd596a9ae81cd9583987517 (diff)
downloadrneovim-0353dd3029f9ce31c3894530385443a90f6677ee.tar.gz
rneovim-0353dd3029f9ce31c3894530385443a90f6677ee.tar.bz2
rneovim-0353dd3029f9ce31c3894530385443a90f6677ee.zip
refactor(lua): use Arena when converting from lua stack to API args
and for return value of nlua_exec/nlua_call_ref, as this uses the same family of functions. NB: the handling of luaref:s is a bit of a mess. add api_luarefs_free_XX functions as a stop-gap as refactoring luarefs is a can of worms for another PR:s. as a minor feature/bug-fix, nvim_buf_call and nvim_win_call now preserves arbitrary return values.
Diffstat (limited to 'src/nvim/autocmd.c')
-rw-r--r--src/nvim/autocmd.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c
index 1edc60f230..3b747e0920 100644
--- a/src/nvim/autocmd.c
+++ b/src/nvim/autocmd.c
@@ -2002,15 +2002,15 @@ static bool call_autocmd_callback(const AutoCmd *ac, const AutoPatCmd *apc)
{
Callback callback = ac->exec.callable.cb;
if (callback.type == kCallbackLua) {
- Dictionary data = ARRAY_DICT_INIT;
- PUT(data, "id", INTEGER_OBJ(ac->id));
- PUT(data, "event", CSTR_TO_OBJ(event_nr2name(apc->event)));
- PUT(data, "match", CSTR_TO_OBJ(autocmd_match));
- PUT(data, "file", CSTR_TO_OBJ(autocmd_fname));
- PUT(data, "buf", INTEGER_OBJ(autocmd_bufnr));
+ MAXSIZE_TEMP_DICT(data, 7);
+ PUT_C(data, "id", INTEGER_OBJ(ac->id));
+ PUT_C(data, "event", CSTR_AS_OBJ(event_nr2name(apc->event)));
+ PUT_C(data, "match", CSTR_AS_OBJ(autocmd_match));
+ PUT_C(data, "file", CSTR_AS_OBJ(autocmd_fname));
+ PUT_C(data, "buf", INTEGER_OBJ(autocmd_bufnr));
if (apc->data) {
- PUT(data, "data", copy_object(*apc->data, NULL));
+ PUT_C(data, "data", *apc->data);
}
int group = ac->pat->group;
@@ -2023,21 +2023,15 @@ static bool call_autocmd_callback(const AutoCmd *ac, const AutoPatCmd *apc)
// omit group in these cases
break;
default:
- PUT(data, "group", INTEGER_OBJ(group));
+ PUT_C(data, "group", INTEGER_OBJ(group));
break;
}
MAXSIZE_TEMP_ARRAY(args, 1);
ADD_C(args, DICTIONARY_OBJ(data));
- Object result = nlua_call_ref(callback.data.luaref, NULL, args, true, NULL);
- bool ret = false;
- if (result.type == kObjectTypeBoolean) {
- ret = result.data.boolean;
- }
- api_free_dictionary(data);
- api_free_object(result);
- return ret;
+ Object result = nlua_call_ref(callback.data.luaref, NULL, args, kRetNilBool, NULL, NULL);
+ return LUARET_TRUTHY(result);
} else {
typval_T argsin = TV_INITIAL_VALUE;
typval_T rettv = TV_INITIAL_VALUE;