summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-12-29 11:15:01 +0100
committerBram Moolenaar <Bram@vim.org>2020-12-29 11:15:01 +0100
commit8242ebbdba64cfa5c504c9d8dfb802076d99c602 (patch)
treeb5a016fbb3e636ca8ce0488d227d21f94be36ded
parent864a28b6a6ae4f1a56e230be26bc6d13e3f8b3d9 (diff)
downloadvim-git-8.2.2242.tar.gz
patch 8.2.2242: Vim9: bar line continuation does not work at script levelv8.2.2242
Problem: Vim9: line continuation with bar does not work at script level. Solution: Check for Vim9 script.
-rw-r--r--src/ex_docmd.c3
-rw-r--r--src/scriptfile.c8
-rw-r--r--src/structs.h4
-rw-r--r--src/testdir/test_vim9_cmd.vim49
-rw-r--r--src/userfunc.c4
-rw-r--r--src/version.c2
6 files changed, 43 insertions, 27 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 91d56d71f..dc9ea165f 100644
--- 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
index eceefd729..adc5caffc 100644
--- 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
index ba42e331b..102be0eaa 100644
--- 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
index 710af413c..ed0c7dda3 100644
--- 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
index 85941d1ea..9393b62cc 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3292,7 +3292,7 @@ define_function(exarg_T *eap, char_u *name_arg)
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 *name_arg)
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 e9327f19b..ee0d9878c 100644
--- 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,