diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-06-22 22:02:59 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-06-23 23:16:20 -0400 |
commit | 4cb0bf09421e88adb812bb716b56af22bd51353e (patch) | |
tree | ed9c686270a620545f39a39cae5e8a00f1fe4ff2 /src/nvim/eval/typval.c | |
parent | d5329c0331a4e899ea88277b745df8d1bf3a99fa (diff) | |
download | rneovim-4cb0bf09421e88adb812bb716b56af22bd51353e.tar.gz rneovim-4cb0bf09421e88adb812bb716b56af22bd51353e.tar.bz2 rneovim-4cb0bf09421e88adb812bb716b56af22bd51353e.zip |
vim-patch:8.2.1255: cannot use a lambda with quickfix functions
Problem: Cannot use a lambda with quickfix functions.
Solution: Add support for lambda. (Yegappan Lakshmanan, closes vim/vim#6499)
https://github.com/vim/vim/commit/d43906d2e5969288f239df851f5ad7b1dc2c7251
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r-- | src/nvim/eval/typval.c | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 4118ec407c..4275ff7c61 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -1162,20 +1162,48 @@ 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 { - if (cb->type == kCallbackPartial) { - tv->v_type = VAR_PARTIAL; - tv->vval.v_partial = cb->data.partial; - cb->data.partial->pt_refcount++; - } else if (cb->type == kCallbackFuncref) { - tv->v_type = VAR_FUNC; - tv->vval.v_string = vim_strsave(cb->data.funcref); - func_ref(cb->data.funcref); + 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; } } |