patch 8.2.2316: Vim9: cannot list a lambda function
Problem: Vim9: cannot list a lambda function.
Solution: Support the <lambda>9 notation, like :disassemble. (closes #7634)
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index fb37401..3d4f4c9 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1802,6 +1802,16 @@
Line_continuation_in_lambda()->assert_equal(['D', 'C', 'B', 'A'])
enddef
+def Test_list_lambda()
+ timer_start(1000, (_) => 0)
+ var body = execute(timer_info()[0].callback
+ ->string()
+ ->substitute("('", ' ', '')
+ ->substitute("')", '', '')
+ ->substitute('function\zs', ' ', ''))
+ assert_match('def <lambda>\d\+(_: any, ...): number\n1 return 0\n enddef', body)
+enddef
+
func Test_silent_echo()
CheckScreendump
diff --git a/src/userfunc.c b/src/userfunc.c
index 1918e54..ded9ef7 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3094,7 +3094,15 @@
}
else
{
- name = trans_function_name(&p, &is_global, eap->skip,
+ if (STRNCMP(p, "<lambda>", 8) == 0)
+ {
+ p += 8;
+ (void)getdigits(&p);
+ name = vim_strnsave(eap->arg, p - eap->arg);
+ CLEAR_FIELD(fudi);
+ }
+ else
+ name = trans_function_name(&p, &is_global, eap->skip,
TFN_NO_AUTOLOAD, &fudi, NULL, NULL);
paren = (vim_strchr(p, '(') != NULL);
if (name == NULL && (fudi.fd_dict == NULL || !paren) && !eap->skip)
diff --git a/src/version.c b/src/version.c
index 1078665..f4cfa2b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2316,
+/**/
2315,
/**/
2314,