summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-23 17:07:30 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-23 17:07:30 +0200
commita72cfb80cd7aa589ad2a4fb8766ed6d30ea8ae33 (patch)
tree4e0ba772f84209f1d2364b6ed0c59db5f08530c7
parentf7b398c6a9476a2004a42555b731ebf47b866408 (diff)
patch 8.2.0624: Vim9: no check for space before #commentv8.2.0624
Problem: Vim9: no check for space before #comment. Solution: Add space checks. Fix :throw with double quoted string.
-rw-r--r--src/testdir/test_vim9_script.vim92
-rw-r--r--src/usercmd.c4
-rw-r--r--src/userfunc.c4
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c5
5 files changed, 94 insertions, 13 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 219a86f270..5eda50b733 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -361,7 +361,7 @@ def Test_try_catch()
enddef
def ThrowFromDef()
- throw 'getout'
+ throw "getout" # comment
enddef
func CatchInFunc()
@@ -430,7 +430,7 @@ def Test_try_catch_fails()
call CheckDefFailure(['if 2', 'endtry'], 'E171:')
call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
- call CheckDefFailure(['throw'], 'E471:')
+ call CheckDefFailure(['throw'], 'E1015:')
call CheckDefFailure(['throw xxx'], 'E1001:')
enddef
@@ -937,12 +937,18 @@ def Test_execute_cmd()
setline(1, 'default')
execute 'call setline(1, "execute-string")'
assert_equal('execute-string', getline(1))
+
+ execute "call setline(1, 'execute-string')"
+ assert_equal('execute-string', getline(1))
+
let cmd1 = 'call setline(1,'
let cmd2 = '"execute-var")'
- execute cmd1 cmd2
+ execute cmd1 cmd2 # comment
assert_equal('execute-var', getline(1))
+
execute cmd1 cmd2 '|call setline(1, "execute-var-string")'
assert_equal('execute-var-string', getline(1))
+
let cmd_first = 'call '
let cmd_last = 'setline(1, "execute-var-var")'
execute cmd_first .. cmd_last
@@ -950,17 +956,24 @@ def Test_execute_cmd()
bwipe!
call CheckDefFailure(['execute xxx'], 'E1001:')
+ call CheckDefFailure(['execute "cmd"# comment'], 'E488:')
enddef
def Test_echo_cmd()
- echo 'some'
+ echo 'some' # comment
echon 'thing'
assert_match('^something$', Screenline(&lines))
+ echo "some" # comment
+ echon "thing"
+ assert_match('^something$', Screenline(&lines))
+
let str1 = 'some'
let str2 = 'more'
echo str1 str2
assert_match('^some more$', Screenline(&lines))
+
+ call CheckDefFailure(['echo "xxx"# comment'], 'E488:')
enddef
def Test_for_outside_of_function()
@@ -1164,6 +1177,18 @@ def Test_vim9_comment()
], 'E488:')
CheckDefFailure([
'try',
+ ' throw#comment',
+ 'catch',
+ 'endtry',
+ ], 'E1015:')
+ CheckDefFailure([
+ 'try',
+ ' throw "yes"#comment',
+ 'catch',
+ 'endtry',
+ ], 'E488:')
+ CheckDefFailure([
+ 'try',
' echo "yes"',
'catch# comment',
'endtry',
@@ -1380,6 +1405,65 @@ def Test_vim9_comment()
'vim9script',
'syntax cluster Some contains=Word# comment',
], 'E475:')
+
+ CheckScriptSuccess([
+ 'vim9script',
+ 'command Echo echo # comment',
+ 'command Echo # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'command Echo echo# comment',
+ 'Echo',
+ ], 'E121:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'command Echo# comment',
+ ], 'E182:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'command Echo echo',
+ 'command Echo# comment',
+ ], 'E182:')
+
+ CheckScriptSuccess([
+ 'vim9script',
+ 'function # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'function# comment',
+ ], 'E129:')
+ CheckScriptSuccess([
+ 'vim9script',
+ 'function CheckScriptSuccess # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'function CheckScriptSuccess# comment',
+ ], 'E488:')
+
+ CheckScriptSuccess([
+ 'vim9script',
+ 'func DeleteMe()',
+ 'endfunc',
+ 'delfunction DeleteMe # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'func DeleteMe()',
+ 'endfunc',
+ 'delfunction DeleteMe# comment',
+ ], 'E488:')
+
+ CheckScriptSuccess([
+ 'vim9script',
+ 'call execute("ls") # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'call execute("ls")# comment',
+ ], 'E488:')
enddef
def Test_vim9_comment_gui()
diff --git a/src/usercmd.c b/src/usercmd.c
index fc14430b64..cdc46a10b9 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -1007,7 +1007,7 @@ ex_command(exarg_T *eap)
if (ASCII_ISALPHA(*p))
while (ASCII_ISALNUM(*p))
++p;
- if (!ends_excmd(*p) && !VIM_ISWHITE(*p))
+ if (!ends_excmd2(eap->arg, p) && !VIM_ISWHITE(*p))
{
emsg(_("E182: Invalid command name"));
return;
@@ -1018,7 +1018,7 @@ ex_command(exarg_T *eap)
// If there is nothing after the name, and no attributes were specified,
// we are listing commands
p = skipwhite(end);
- if (!has_attr && ends_excmd(*p))
+ if (!has_attr && ends_excmd2(eap->arg, p))
{
uc_list(name, end - name);
}
diff --git a/src/userfunc.c b/src/userfunc.c
index dfda733a1c..698c1b1e3d 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2373,7 +2373,7 @@ ex_function(exarg_T *eap)
/*
* ":function" without argument: list functions.
*/
- if (ends_excmd(*eap->arg))
+ if (ends_excmd2(eap->cmd, eap->arg))
{
if (!eap->skip)
{
@@ -3711,7 +3711,7 @@ ex_call(exarg_T *eap)
if (!failed || eap->cstack->cs_trylevel > 0)
{
// Check for trailing illegal characters and a following command.
- if (!ends_excmd(*arg))
+ if (!ends_excmd2(eap->arg, arg))
{
if (!failed)
{
diff --git a/src/version.c b/src/version.c
index b2268736f1..86cfce0957 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 624,
+/**/
623,
/**/
622,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index daa1cbea41..393d2b824c 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -5752,11 +5752,6 @@ compile_throw(char_u *arg, cctx_T *cctx UNUSED)
{
char_u *p = skipwhite(arg);
- if (ends_excmd(*p))
- {
- emsg(_(e_argreq));
- return NULL;
- }
if (compile_expr1(&p, cctx) == FAIL)
return NULL;
if (may_generate_2STRING(-1, cctx) == FAIL)