Problem: Vim9: no check for space before #comment.
Solution: Add space checks.
}
else if (!ASCII_ISALPHA(*p) && regmatch.regprog == NULL)
{
- s = skip_regexp(p + 1, *p, TRUE);
- if (*s != *p)
- {
- emsg(_(e_invalpat));
+ s = skip_regexp_err(p + 1, *p, TRUE);
+ if (s == NULL)
goto sortend;
- }
*s = NUL;
// Use last search pattern if sort pattern is empty.
if (s == p + 1)
if (eap->cmdidx == CMD_elseif)
{
result = eval_to_bool(eap->arg, &error, &eap->nextcmd, skip);
+
// When throwing error exceptions, we want to throw always the first
// of several errors in a row. This is what actually happens when
// a conditional error was detected above and there is another failure
// when parsing the expression. Since the skip flag is set in this
// case, the parsing error will be ignored by emsg().
-
if (!skip && !error)
{
if (result)
&cstack->cs_looplevel);
}
- if (ends_excmd(*eap->arg)) // no argument, catch all errors
+ if (ends_excmd2(eap->cmd, eap->arg)) // no argument, catch all errors
{
pat = (char_u *)".*";
end = NULL;
else
{
pat = eap->arg + 1;
- end = skip_regexp(pat, *eap->arg, TRUE);
+ end = skip_regexp_err(pat, *eap->arg, TRUE);
+ if (end == NULL)
+ give_up = TRUE;
}
if (!give_up)
if (!skip && (cstack->cs_flags[idx] & CSF_THROWN)
&& !(cstack->cs_flags[idx] & CSF_CAUGHT))
{
- if (end != NULL && *end != NUL && !ends_excmd(*skipwhite(end + 1)))
+ if (end != NULL && *end != NUL
+ && !ends_excmd2(end, skipwhite(end + 1)))
{
emsg(_(e_trailing));
return;
// of the argument ending up after the shell prompt.
msg_clr_eos_force();
#ifdef GUI_MAY_SPAWN
- if (!ends_excmd(*eap->arg))
+ if (!ends_excmd2(eap->cmd, eap->arg))
gui_start(eap->arg);
else
#endif
channel_gui_register_all();
#endif
}
- if (!ends_excmd(*eap->arg))
+ if (!ends_excmd2(eap->cmd, eap->arg))
ex_next(eap);
}
/*
* If no argument, list current highlighting.
*/
- if (ends_excmd(*line))
+ if (!init && ends_excmd2(line - 1, line))
{
for (i = 1; i <= highlight_ga.ga_len && !got_int; ++i)
// TODO: only call when the group has attributes set
/* regexp.c */
int re_multiline(regprog_T *prog);
-char_u *skip_regexp(char_u *startp, int dirc, int magic);
+char_u *skip_regexp(char_u *startp, int delim, int magic);
+char_u *skip_regexp_err(char_u *startp, int delim, int magic);
char_u *skip_regexp_ex(char_u *startp, int dirc, int magic, char_u **newp, int *dropped);
reg_extmatch_T *ref_extmatch(reg_extmatch_T *em);
void unref_extmatch(reg_extmatch_T *em);
/*
* Skip past regular expression.
- * Stop at end of "startp" or where "dirc" is found ('/', '?', etc).
+ * Stop at end of "startp" or where "delim" is found ('/', '?', etc).
* Take care of characters with a backslash in front of it.
* Skip strings inside [ and ].
*/
char_u *
skip_regexp(
char_u *startp,
- int dirc,
+ int delim,
+ int magic)
+{
+ return skip_regexp_ex(startp, delim, magic, NULL, NULL);
+}
+
+/*
+ * Call skip_regexp() and when the delimiter does not match give an error and
+ * return NULL.
+ */
+ char_u *
+skip_regexp_err(
+ char_u *startp,
+ int delim,
int magic)
{
- return skip_regexp_ex(startp, dirc, magic, NULL, NULL);
+ char_u *p = skip_regexp(startp, delim, magic);
+
+ if (*p != delim)
+ {
+ semsg(_("E654: missing delimiter after search pattern: %s"), startp);
+ return NULL;
+ }
+ return p;
}
/*
call setline(1, ['line1', 'line2'])
call assert_fails('sort no', 'E474:')
call assert_fails('sort c', 'E475:')
- call assert_fails('sort #pat%', 'E682:')
+ call assert_fails('sort #pat%', 'E654:')
enew!
endfunc
CheckDefFailure([
'try# comment',
- 'echo "yes"',
+ ' echo "yes"',
'catch',
'endtry',
], 'E488:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'try# comment',
+ 'echo "yes"',
+ ], 'E488:')
CheckDefFailure([
'try',
- 'echo "yes"',
+ ' echo "yes"',
'catch# comment',
'endtry',
], 'E488:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'try',
+ ' echo "yes"',
+ 'catch# comment',
+ 'endtry',
+ ], 'E654:')
+ CheckDefFailure([
+ 'try',
+ ' echo "yes"',
+ 'catch /pat/# comment',
+ 'endtry',
+ ], 'E488:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'try',
+ ' throw "pat"',
+ 'catch /pat/# comment',
+ 'endtry',
+ ], 'E605:')
CheckDefFailure([
'try',
'echo "yes"',
'catch',
'endtry# comment',
], 'E488:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'try',
+ ' echo "yes"',
+ 'catch',
+ 'endtry# comment',
+ ], 'E600:')
+
+ CheckScriptSuccess([
+ 'vim9script',
+ 'hi # comment',
+ ])
+ CheckScriptFailure([
+ 'vim9script',
+ 'hi# comment',
+ ], 'E416:')
+enddef
+
+def Test_vim9_comment_gui()
+ CheckCanRunGui
+
+ CheckScriptFailure([
+ 'vim9script',
+ 'gui#comment'
+ ], 'E499:')
+ CheckScriptFailure([
+ 'vim9script',
+ 'gui -f#comment'
+ ], 'E499:')
enddef
def Test_vim9_comment_not_compiled()
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 612,
/**/
611,
/**/