0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.0583: Vim9: # comment not recognized in :def function

Problem:    Vim9: # comment not recognized in :def function.
Solution:   Recognize and skip # comment.
This commit is contained in:
Bram Moolenaar
2020-04-16 13:00:29 +02:00
parent b4a549fb16
commit cb711abf0f
3 changed files with 51 additions and 30 deletions

View File

@@ -5772,7 +5772,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
*/
for (;;)
{
int is_ex_command;
int is_ex_command = FALSE;
// Bail out on the first error to avoid a flood of errors and report
// the right line number when inside try/catch.
@@ -5791,6 +5791,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
{
line = next_line_from_context(&cctx);
if (cctx.ctx_lnum >= ufunc->uf_lines.ga_len)
// beyond the last line
break;
}
emsg_before = called_emsg;
@@ -5800,35 +5801,53 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
ea.cmdlinep = &line;
ea.cmd = skipwhite(line);
// "}" ends a block scope
if (*ea.cmd == '}')
// Some things can be recognized by the first character.
switch (*ea.cmd)
{
scopetype_T stype = cctx.ctx_scope == NULL
? NO_SCOPE : cctx.ctx_scope->se_type;
case '#':
// "#" starts a comment, but not "#{".
if (ea.cmd[1] != '{')
{
line = (char_u *)"";
continue;
}
break;
if (stype == BLOCK_SCOPE)
{
compile_endblock(&cctx);
line = ea.cmd;
}
else
{
emsg(_("E1025: using } outside of a block scope"));
goto erret;
}
if (line != NULL)
line = skipwhite(ea.cmd + 1);
continue;
}
case '}':
{
// "}" ends a block scope
scopetype_T stype = cctx.ctx_scope == NULL
? NO_SCOPE : cctx.ctx_scope->se_type;
// "{" starts a block scope
// "{'a': 1}->func() is something else
if (*ea.cmd == '{' && ends_excmd(*skipwhite(ea.cmd + 1)))
{
line = compile_block(ea.cmd, &cctx);
continue;
if (stype == BLOCK_SCOPE)
{
compile_endblock(&cctx);
line = ea.cmd;
}
else
{
emsg(_("E1025: using } outside of a block scope"));
goto erret;
}
if (line != NULL)
line = skipwhite(ea.cmd + 1);
continue;
}
case '{':
// "{" starts a block scope
// "{'a': 1}->func() is something else
if (ends_excmd(*skipwhite(ea.cmd + 1)))
{
line = compile_block(ea.cmd, &cctx);
continue;
}
break;
case ':':
is_ex_command = TRUE;
break;
}
is_ex_command = *ea.cmd == ':';
/*
* COMMAND MODIFIERS