# HG changeset patch # User Bram Moolenaar # Date 1587654904 -7200 # Node ID d0a9766167ab7cee110026a8cfed35ca559ca2a0 # Parent d7adfac8fc5b389f7121595e21d39c6aa3c39022 patch 8.2.0624: Vim9: no check for space before #comment Commit: https://github.com/vim/vim/commit/a72cfb80cd7aa589ad2a4fb8766ed6d30ea8ae33 Author: Bram Moolenaar Date: Thu Apr 23 17:07:30 2020 +0200 patch 8.2.0624: Vim9: no check for space before #comment Problem: Vim9: no check for space before #comment. Solution: Add space checks. Fix :throw with double quoted string. diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- 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 --- 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 --- 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 --- 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 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5752,11 +5752,6 @@ compile_throw(char_u *arg, cctx_T *cctx { 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)