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:
@@ -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
|
||||
|
Reference in New Issue
Block a user