aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/lua/converter.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-03-18 03:21:47 +0800
committerGitHub <noreply@github.com>2022-03-17 20:21:47 +0100
commitcac90d2de728181edce7ba38fb9ad588d231651b (patch)
tree07c115a1d88ff2d975754d019dae9738f91780e9 /src/nvim/lua/converter.c
parent09a3b33d36a62823081f4a199223eac7785b06f6 (diff)
downloadrneovim-cac90d2de728181edce7ba38fb9ad588d231651b.tar.gz
rneovim-cac90d2de728181edce7ba38fb9ad588d231651b.tar.bz2
rneovim-cac90d2de728181edce7ba38fb9ad588d231651b.zip
feat(api, lua): support converting nested Funcref back to LuaRef (#17749)
Diffstat (limited to 'src/nvim/lua/converter.c')
-rw-r--r--src/nvim/lua/converter.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/nvim/lua/converter.c b/src/nvim/lua/converter.c
index beea1959e1..0bb224c729 100644
--- a/src/nvim/lua/converter.c
+++ b/src/nvim/lua/converter.c
@@ -476,7 +476,13 @@ static bool typval_conv_special = false;
#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
do { \
- TYPVAL_ENCODE_CONV_NIL(tv); \
+ ufunc_T *fp = find_func(fun); \
+ assert(fp != NULL); \
+ if (fp->uf_cb == nlua_CFunction_func_call) { \
+ nlua_pushref(lstate, ((LuaCFunctionState *)fp->uf_cb_state)->lua_callable.func_ref); \
+ } else { \
+ TYPVAL_ENCODE_CONV_NIL(tv); \
+ } \
goto typval_encode_stop_converting_one_item; \
} while (0)
@@ -615,14 +621,6 @@ bool nlua_push_typval(lua_State *lstate, typval_T *const tv, bool special)
semsg(_("E1502: Lua failed to grow stack to %i"), initial_size + 4);
return false;
}
- if (tv->v_type == VAR_FUNC) {
- ufunc_T *fp = find_func(tv->vval.v_string);
- assert(fp != NULL);
- if (fp->uf_cb == nlua_CFunction_func_call) {
- nlua_pushref(lstate, ((LuaCFunctionState *)fp->uf_cb_state)->lua_callable.func_ref);
- return true;
- }
- }
if (encode_vim_to_lua(lstate, tv, "nlua_push_typval argument") == FAIL) {
return false;
}