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
index 91d56d7..dc9ea16 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -889,7 +889,8 @@
#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
index eceefd7..adc5caf 100644
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1741,8 +1741,8 @@
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 @@
|| (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 @@
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
index ba42e33..102be0e 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1565,8 +1565,8 @@
// 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
index 710af41..ed0c7dd 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -536,6 +536,37 @@
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 @@
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
index 85941d1..9393b62 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3292,7 +3292,7 @@
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 @@
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
index e9327f1..ee0d987 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2242,
+/**/
2241,
/**/
2240,