changeset 23398:40f824f5c7c7 v8.2.2242

patch 8.2.2242: Vim9: bar line continuation does not work at script level Commit: https://github.com/vim/vim/commit/8242ebbdba64cfa5c504c9d8dfb802076d99c602 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Dec 29 11:15:01 2020 +0100 patch 8.2.2242: Vim9: bar line continuation does not work at script level Problem: Vim9: line continuation with bar does not work at script level. Solution: Check for Vim9 script.
author Bram Moolenaar <Bram@vim.org>
date Tue, 29 Dec 2020 11:15:34 +0100
parents 0a99720fc406
children 8b4c5f00449e
files src/ex_docmd.c src/scriptfile.c src/structs.h src/testdir/test_vim9_cmd.vim src/userfunc.c src/version.c
diffstat 6 files changed, 43 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -889,7 +889,8 @@ do_cmdline(
 #else
 		    0
 #endif
-		    , TRUE)) == NULL)
+		    , in_vim9script() ? GETLINE_CONCAT_CONTBAR
+					       : GETLINE_CONCAT_CONT)) == NULL)
 	    {
 		// Don't call wait_return for aborted command line.  The NULL
 		// returned for the end of a sourced file or executed function
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1741,8 +1741,8 @@ getsourceline(
     char_u		*p;
     int			do_vim9_all = in_vim9script()
 					      && options == GETLINE_CONCAT_ALL;
-    int			do_vim9_cont = do_vim9_all
-					 || options == GETLINE_CONCAT_CONTDEF;
+    int			do_bar_cont = do_vim9_all
+					 || options == GETLINE_CONCAT_CONTBAR;
 
 #ifdef FEAT_EVAL
     // If breakpoints have been added/deleted need to check for it.
@@ -1797,7 +1797,7 @@ getsourceline(
 			      || (p[0] == '"' && p[1] == '\\' && p[2] == ' ')
 			      || (do_vim9_all && (*p == NUL
 						     || vim9_comment_start(p)))
-			      || (do_vim9_cont && p[0] == '|' && p[1] != '|')))
+			      || (do_bar_cont && p[0] == '|' && p[1] != '|')))
 	{
 	    garray_T    ga;
 
@@ -1817,7 +1817,7 @@ getsourceline(
 		if (sp->nextline == NULL)
 		    break;
 		p = skipwhite(sp->nextline);
-		if (*p == '\\' || (do_vim9_cont && p[0] == '|' && p[1] != '|'))
+		if (*p == '\\' || (do_bar_cont && p[0] == '|' && p[1] != '|'))
 		{
 		    // Adjust the growsize to the current length to speed up
 		    // concatenating many lines.
--- a/src/structs.h
+++ b/src/structs.h
@@ -1565,8 +1565,8 @@ typedef void (*cfunc_free_T)(void *state
 // type of getline() last argument
 typedef enum {
     GETLINE_NONE,	    // do not concatenate any lines
-    GETLINE_CONCAT_CONT,    // concatenate continuation lines in Vim9 script
-    GETLINE_CONCAT_CONTDEF, // concatenate continuation lines always
+    GETLINE_CONCAT_CONT,    // concatenate continuation lines with backslash
+    GETLINE_CONCAT_CONTBAR, // concatenate continuation lines with \ and |
     GETLINE_CONCAT_ALL	    // concatenate continuation and Vim9 # comment lines
 } getline_opt_T;
 
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -536,6 +536,37 @@ def Test_command_modifiers_keep()
   quit!
 enddef
 
+def Test_bar_line_continuation()
+  var lines =<< trim END
+      au BufNewFile Xfile g:readFile = 1
+          | g:readExtra = 2
+      g:readFile = 0
+      g:readExtra = 0
+      edit Xfile
+      assert_equal(1, g:readFile)
+      assert_equal(2, g:readExtra)
+      bwipe!
+      au! BufNewFile
+
+      au BufNewFile Xfile g:readFile = 1
+          | g:readExtra = 2
+          | g:readMore = 3
+      g:readFile = 0
+      g:readExtra = 0
+      g:readMore = 0
+      edit Xfile
+      assert_equal(1, g:readFile)
+      assert_equal(2, g:readExtra)
+      assert_equal(3, g:readMore)
+      bwipe!
+      au! BufNewFile
+      unlet g:readFile
+      unlet g:readExtra
+      unlet g:readMore
+  END
+  CheckDefAndScriptSuccess(lines)
+enddef
+
 def Test_command_modifier_other()
   new Xsomefile
   setline(1, 'changed')
@@ -548,33 +579,15 @@ def Test_command_modifier_other()
   bwipe!
 
   au BufNewFile Xfile g:readFile = 1
-      | g:readExtra = 2
   g:readFile = 0
-  g:readExtra = 0
   edit Xfile
   assert_equal(1, g:readFile)
-  assert_equal(2, g:readExtra)
   bwipe!
   g:readFile = 0
   noautocmd edit Xfile
   assert_equal(0, g:readFile)
   au! BufNewFile
-
-  au BufNewFile Xfile g:readFile = 1
-      | g:readExtra = 2
-      | g:readMore = 3
-  g:readFile = 0
-  g:readExtra = 0
-  g:readMore = 0
-  edit Xfile
-  assert_equal(1, g:readFile)
-  assert_equal(2, g:readExtra)
-  assert_equal(3, g:readMore)
-  bwipe!
-  au! BufNewFile
   unlet g:readFile
-  unlet g:readExtra
-  unlet g:readMore
 
   noswapfile edit XnoSwap
   assert_equal(0, &l:swapfile)
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3292,7 +3292,7 @@ define_function(exarg_T *eap, char_u *na
     nesting = 0;
     nesting_def[nesting] = (eap->cmdidx == CMD_def);
     getline_options = eap->cmdidx == CMD_def
-				? GETLINE_CONCAT_CONTDEF : GETLINE_CONCAT_CONT;
+				? GETLINE_CONCAT_CONTBAR : GETLINE_CONCAT_CONT;
     for (;;)
     {
 	if (KeyTyped)
@@ -3368,7 +3368,7 @@ define_function(exarg_T *eap, char_u *na
 		    VIM_CLEAR(skip_until);
 		    VIM_CLEAR(heredoc_trimmed);
 		    getline_options = eap->cmdidx == CMD_def
-				? GETLINE_CONCAT_CONTDEF : GETLINE_CONCAT_CONT;
+				? GETLINE_CONCAT_CONTBAR : GETLINE_CONCAT_CONT;
 		    is_heredoc = FALSE;
 		}
 	    }
--- 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 */
 /**/
+    2242,
+/**/
     2241,
 /**/
     2240,