diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-06-24 19:36:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-24 19:36:21 -0400 |
commit | 510ed996d2a92de527c70888208e3ad7ce157126 (patch) | |
tree | 44987c69a0895383ac639611e9acb68604a8e25a /src/nvim/eval.c | |
parent | 1e2fc1f9cd121ff16823e283a3dd074e668ce6b5 (diff) | |
parent | 9081cd30a5ffa2d6cb41cbb5990c4a5d68cf9b6c (diff) | |
download | rneovim-510ed996d2a92de527c70888208e3ad7ce157126.tar.gz rneovim-510ed996d2a92de527c70888208e3ad7ce157126.tar.bz2 rneovim-510ed996d2a92de527c70888208e3ad7ce157126.zip |
Merge pull request #14886 from janlazo/vim-8.1.1437
vim-patch:8.1.{1437,2391},8.2.{1255,2185,2294,3033,3034,3037,3038,3043}
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index a3fa9c986f..1b78147ec2 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7200,12 +7200,15 @@ bool callback_from_typval(Callback *const callback, typval_T *const arg) r = FAIL; } else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) { char_u *name = arg->vval.v_string; - if (name != NULL) { + if (name == NULL) { + r = FAIL; + } else if (*name == NUL) { + callback->type = kCallbackNone; + callback->data.funcref = NULL; + } else { func_ref(name); callback->data.funcref = vim_strsave(name); callback->type = kCallbackFuncref; - } else { - r = FAIL; } } else if (nlua_is_table_from_lua(arg)) { char_u *name = nlua_register_table_as_callable(arg); @@ -7216,8 +7219,10 @@ bool callback_from_typval(Callback *const callback, typval_T *const arg) } else { r = FAIL; } - } else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) { + } else if (arg->v_type == VAR_SPECIAL + || (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0)) { callback->type = kCallbackNone; + callback->data.funcref = NULL; } else { r = FAIL; } @@ -7324,14 +7329,7 @@ void add_timer_info(typval_T *rettv, timer_T *timer) return; } - if (timer->callback.type == kCallbackPartial) { - di->di_tv.v_type = VAR_PARTIAL; - di->di_tv.vval.v_partial = timer->callback.data.partial; - timer->callback.data.partial->pt_refcount++; - } else if (timer->callback.type == kCallbackFuncref) { - di->di_tv.v_type = VAR_FUNC; - di->di_tv.vval.v_string = vim_strsave(timer->callback.data.funcref); - } + callback_put(&timer->callback, &di->di_tv); } void add_timer_info_all(typval_T *rettv) |