# HG changeset patch # User Bram Moolenaar # Date 1595435406 -7200 # Node ID 8ec9e2b54ce75e5a8b949d118bc750a7f27c9e77 # Parent 67d5a0b55c5270ece542535e3c34e69d6e64f185 patch 8.2.1268: Vim9: no error for using double quote comment Commit: https://github.com/vim/vim/commit/e7e4838f25ac39177f3c3150ee53af8d6e8a0f28 Author: Bram Moolenaar Date: Wed Jul 22 18:17:08 2020 +0200 patch 8.2.1268: Vim9: no error for using double quote comment Problem: Vim9: no error for using double quote comment after :func or :def. Solution: Only accept double quote when not in Vim9 script and not after :def. (closes #6483) 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 @@ -2198,6 +2198,35 @@ def Test_vim9_comment() 'vim9script', 'call execute("ls")# comment', ], 'E488:') + + CheckScriptFailure([ + 'def Test() " comment', + 'enddef', + ], 'E488:') + CheckScriptFailure([ + 'vim9script', + 'def Test() " comment', + 'enddef', + ], 'E488:') + + CheckScriptSuccess([ + 'func Test() " comment', + 'endfunc', + ]) + CheckScriptFailure([ + 'vim9script', + 'func Test() " comment', + 'endfunc', + ], 'E488:') + + CheckScriptSuccess([ + 'def Test() # comment', + 'enddef', + ]) + CheckScriptFailure([ + 'func Test() # comment', + 'endfunc', + ], 'E488:') enddef def Test_vim9_comment_gui() diff --git a/src/userfunc.c b/src/userfunc.c --- a/src/userfunc.c +++ b/src/userfunc.c @@ -2555,8 +2555,9 @@ def_function(exarg_T *eap, char_u *name_ int is_heredoc = FALSE; char_u *skip_until = NULL; char_u *heredoc_trimmed = NULL; - - if (in_vim9script() && eap->forceit) + int vim9script = in_vim9script(); + + if (vim9script && eap->forceit) { emsg(_(e_nobang)); return NULL; @@ -2786,6 +2787,7 @@ def_function(exarg_T *eap, char_u *name_ ret_type = NULL; } } + p = skipwhite(p); } else // find extra arguments "range", "dict", "abort" and "closure" @@ -2826,8 +2828,11 @@ def_function(exarg_T *eap, char_u *name_ // Makes 'exe "func Test()\n...\nendfunc"' work. if (*p == '\n') line_arg = p + 1; - else if (*p != NUL && *p != '"' && !(eap->cmdidx == CMD_def && *p == '#') - && !eap->skip && !did_emsg) + else if (*p != NUL + && !(*p == '"' && !(vim9script || eap->cmdidx == CMD_def)) + && !(*p == '#' && (vim9script || eap->cmdidx == CMD_def)) + && !eap->skip + && !did_emsg) emsg(_(e_trailing)); /* @@ -3386,7 +3391,7 @@ def_function(exarg_T *eap, char_u *name_ fp->uf_varargs = varargs; if (sandbox) flags |= FC_SANDBOX; - if (in_vim9script() && !ASCII_ISUPPER(*fp->uf_name)) + if (vim9script && !ASCII_ISUPPER(*fp->uf_name)) flags |= FC_VIM9; fp->uf_flags = flags; fp->uf_calls = 0; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1268, +/**/ 1267, /**/ 1266,