summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-03-08 19:50:24 +0100
committerBram Moolenaar <Bram@vim.org>2021-03-08 19:50:24 +0100
commit86c3a2162c2e78b4f0b87b47779cc1452990ee1b (patch)
tree81b19a2455734ecc2dcabcee2ae55e313efaa4a7
parent9355ae41497cbcce58ddd79f9125eb3e9dfe0a43 (diff)
downloadvim-git-8.2.2578.tar.gz
patch 8.2.2578: Lua cannot handle a passed in lambdav8.2.2578
Problem: Lua cannot handle a passed in lambda. Solution: Handle VAR_PARTIAL. (Prabir Shrestha, closes #7937, closes #7936)
-rw-r--r--src/if_lua.c5
-rw-r--r--src/testdir/test_lua.vim9
-rw-r--r--src/version.c2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/if_lua.c b/src/if_lua.c
index e20298311..abcd850b3 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -568,6 +568,11 @@ luaV_pushtypval(lua_State *L, typval_T *tv)
case VAR_FUNC:
luaV_pushfuncref(L, tv->vval.v_string);
break;
+ case VAR_PARTIAL:
+ // TODO: handle partial arguments
+ luaV_pushfuncref(L, partial_name(tv->vval.v_partial));
+ break;
+
case VAR_BLOB:
luaV_pushblob(L, tv->vval.v_blob);
break;
diff --git a/src/testdir/test_lua.vim b/src/testdir/test_lua.vim
index 43b4aa30f..7de457453 100644
--- a/src/testdir/test_lua.vim
+++ b/src/testdir/test_lua.vim
@@ -121,6 +121,15 @@ func Test_lua_eval()
lua v = nil
endfunc
+" Test luaeval() with lambda
+func Test_luaeval_with_lambda()
+ lua function hello_luaeval_lambda(a, cb) return a .. cb() end
+ call assert_equal('helloworld',
+ \ luaeval('hello_luaeval_lambda(_A[1], _A[2])',
+ \ ['hello', {->'world'}]))
+ lua hello_luaeval_lambda = nil
+endfunc
+
" Test vim.window()
func Test_lua_window()
e Xfoo2
diff --git a/src/version.c b/src/version.c
index f7c2171de..6c9617596 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2578,
+/**/
2577,
/**/
2576,