aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2021-06-24 19:36:21 -0400
committerGitHub <noreply@github.com>2021-06-24 19:36:21 -0400
commit510ed996d2a92de527c70888208e3ad7ce157126 (patch)
tree44987c69a0895383ac639611e9acb68604a8e25a /src/nvim/eval.c
parent1e2fc1f9cd121ff16823e283a3dd074e668ce6b5 (diff)
parent9081cd30a5ffa2d6cb41cbb5990c4a5d68cf9b6c (diff)
downloadrneovim-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.c22
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)