changeset 20138:d0a9766167ab v8.2.0624

patch 8.2.0624: Vim9: no check for space before #comment Commit: https://github.com/vim/vim/commit/a72cfb80cd7aa589ad2a4fb8766ed6d30ea8ae33 Author: Bram Moolenaar <Bram@vim.org> 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.
author Bram Moolenaar <Bram@vim.org>
date Thu, 23 Apr 2020 17:15:04 +0200
parents d7adfac8fc5b
children 92f2b807c515
files src/testdir/test_vim9_script.vim src/usercmd.c src/userfunc.c src/version.c src/vim9compile.c
diffstat 5 files changed, 94 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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()
--- 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);
     }
--- 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)
 	    {
--- 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,
--- 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)