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 | |
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')
-rw-r--r-- | src/nvim/eval/typval.c | 43 | ||||
-rw-r--r-- | src/nvim/eval/typval.h | 2 |
2 files changed, 44 insertions, 1 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 diff --git a/src/nvim/eval/typval.h b/src/nvim/eval/typval.h index 2b4612016b..050b84efec 100644 --- a/src/nvim/eval/typval.h +++ b/src/nvim/eval/typval.h @@ -120,7 +120,7 @@ typedef enum { VAR_DICT, ///< Dictionary, .v_dict is used. VAR_FLOAT, ///< Floating-point value, .v_float is used. VAR_BOOL, ///< true, false - VAR_SPECIAL, ///< Special value (true, false, null), .v_special + VAR_SPECIAL, ///< Special value (null), .v_special ///< is used. VAR_PARTIAL, ///< Partial, .v_partial is used. } VarType; |