# HG changeset patch # User Bram Moolenaar # Date 1609236934 -3600 # Node ID 40f824f5c7c7b2915a6d05937ba58a932bee21a7 # Parent 0a99720fc406b1b03ce95cac7de91f0af369786a 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 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. diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- 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 diff --git a/src/scriptfile.c b/src/scriptfile.c --- 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. diff --git a/src/structs.h b/src/structs.h --- 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; diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim --- 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) diff --git a/src/userfunc.c b/src/userfunc.c --- 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; } } diff --git a/src/version.c b/src/version.c --- 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,