]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1200: Vim9: cannot disassemble a lambda function v8.2.1200
authorBram Moolenaar <Bram@vim.org>
Mon, 13 Jul 2020 16:18:00 +0000 (18:18 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 13 Jul 2020 16:18:00 +0000 (18:18 +0200)
Problem:    Vim9: cannot disassemble a lambda function.
Solution:   Recognize "<lambda>123" as a function name.

src/testdir/test_vim9_disassemble.vim
src/version.c
src/vim9execute.c

index 6cde5dda71f615bfc945630d10504c67927a12ce..f1f943ecb85075e1bf982638316198cfa77c844d 100644 (file)
@@ -664,6 +664,19 @@ def Test_disassemble_lambda()
         '\d PCALL (argc 1)\_s*' ..
         '\d RETURN',
         instr)
+
+   let name = substitute(instr, '.*\(<lambda>\d\+\).*', '\1', '')
+   instr = execute('disassemble ' .. name)
+   assert_match('<lambda>\d\+\_s*' ..
+        'return "X" .. a .. "X"\_s*' ..
+        '\d PUSHS "X"\_s*' ..
+        '\d LOAD arg\[-1\]\_s*' ..
+        '\d 2STRING stack\[-1\]\_s*' ..
+        '\d CONCAT\_s*' ..
+        '\d PUSHS "X"\_s*' ..
+        '\d CONCAT\_s*' ..
+        '\d RETURN',
+        instr)
 enddef
 
 def AndOr(arg: any): string
index 21ff2bc9eade65aefaa549439e7c984392ddbfa3..87eda28b4319b84863b80e94c5402c9ac829480e 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1200,
 /**/
     1199,
 /**/
index 544c4226b2a91e31c33f965bb7ae1e5f849f83d2..5fdbfbf5185fa0bea0ecc23f67ebfa36bd4ac4f4 100644 (file)
@@ -2397,7 +2397,14 @@ ex_disassemble(exarg_T *eap)
     int                prev_current = 0;
     int                is_global = FALSE;
 
-    fname = trans_function_name(&arg, &is_global, FALSE,
+    if (STRNCMP(arg, "<lambda>", 8) == 0)
+    {
+       arg += 8;
+       (void)getdigits(&arg);
+       fname = vim_strnsave(eap->arg, arg - eap->arg);
+    }
+    else
+       fname = trans_function_name(&arg, &is_global, FALSE,
                            TFN_INT | TFN_QUIET | TFN_NO_AUTOLOAD, NULL, NULL);
     if (fname == NULL)
     {