changeset 30930:cbfbf0e17cd0 v9.0.0799

patch 9.0.0799: in compiled function ->() on next line not recognized Commit: https://github.com/vim/vim/commit/d0fbb41eaa737dd64877c8cebaff19854e2d504f Author: Bram Moolenaar <Bram@vim.org> Date: Wed Oct 19 18:04:49 2022 +0100 patch 9.0.0799: in compiled function ->() on next line not recognized Problem: In compiled function ->() on next line not recognized. Solution: Also check for "(". (closes https://github.com/vim/vim/issues/11405)
author Bram Moolenaar <Bram@vim.org>
date Wed, 19 Oct 2022 19:15:03 +0200
parents 88b181cb4a74
children 7be47c0470b5
files src/testdir/test_lambda.vim src/version.c src/vim9expr.c
diffstat 3 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_lambda.vim
+++ b/src/testdir/test_lambda.vim
@@ -82,6 +82,23 @@ func Test_lambda_vim9cmd_linebreak()
   call v9.CheckDefAndScriptSuccess(lines)
 endfunc
 
+def Test_lamba_compiled_linebreak()
+  var lines =<< trim END
+      vim9script
+
+      def Echo(what: any)
+        assert_equal('hello world', what)
+      enddef
+      def That()
+        printf("hello ")
+          ->((x) => x .. "world")()
+          ->Echo()
+      enddef
+      That()
+  END
+  v9.CheckScriptSuccess(lines)
+enddef
+
 func Test_lambda_with_partial()
   let l:Cb = function({... -> ['zero', a:1, a:2, a:3]}, ['one', 'two'])
   call assert_equal(['zero', 'one', 'two', 'three'], l:Cb('three'))
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    799,
+/**/
     798,
 /**/
     797,
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -1788,12 +1788,13 @@ compile_subscript(
 	{
 	    char_u *next = peek_next_line_from_context(cctx);
 
-	    // If a following line starts with "->{" or "->X" advance to that
-	    // line, so that a line break before "->" is allowed.
+	    // If a following line starts with "->{", "->(" or "->X" advance to
+	    // that line, so that a line break before "->" is allowed.
 	    // Also if a following line starts with ".x".
 	    if (next != NULL &&
 		    ((next[0] == '-' && next[1] == '>'
 				 && (next[2] == '{'
+				       || next[2] == '('
 				       || ASCII_ISALPHA(*skipwhite(next + 2))))
 		    || (next[0] == '.' && eval_isdictc(next[1]))))
 	    {