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/typval.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/typval.c')
-rw-r--r-- | src/nvim/eval/typval.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 61de83fc21..4275ff7c61 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -1162,6 +1162,49 @@ void callback_free(Callback *callback) } } callback->type = kCallbackNone; + callback->data.funcref = NULL; +} + +/// Copy a callback into a typval_T. +void callback_put(Callback *cb, typval_T *tv) + FUNC_ATTR_NONNULL_ALL +{ + switch (cb->type) { + case kCallbackPartial: + tv->v_type = VAR_PARTIAL; + tv->vval.v_partial = cb->data.partial; + cb->data.partial->pt_refcount++; + break; + case kCallbackFuncref: + tv->v_type = VAR_FUNC; + tv->vval.v_string = vim_strsave(cb->data.funcref); + func_ref(cb->data.funcref); + break; + default: + tv->v_type = VAR_SPECIAL; + tv->vval.v_special = kSpecialVarNull; + break; + } +} + +// Copy callback from "src" to "dest", incrementing the refcounts. +void callback_copy(Callback *dest, Callback *src) + FUNC_ATTR_NONNULL_ALL +{ + dest->type = src->type; + switch (src->type) { + case kCallbackPartial: + dest->data.partial = src->data.partial; + dest->data.partial->pt_refcount++; + break; + case kCallbackFuncref: + dest->data.funcref = vim_strsave(src->data.funcref); + func_ref(src->data.funcref); + break; + default: + dest->data.funcref = NULL; + break; + } } /// Remove watcher from a dictionary |