0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.2.1826: Vim9: cannot use a {} block at script level

Problem:    Vim9: cannot use a {} block at script level.
Solution:   Recognize a {} block.
This commit is contained in:
Bram Moolenaar
2020-10-10 21:33:48 +02:00
parent d747548c66
commit 9becdf2b98
9 changed files with 76 additions and 5 deletions

View File

@@ -1002,7 +1002,7 @@ ex_endif(exarg_T *eap)
did_endif = TRUE;
if (cstack->cs_idx < 0
|| (cstack->cs_flags[cstack->cs_idx]
& (CSF_WHILE | CSF_FOR | CSF_TRY)))
& (CSF_WHILE | CSF_FOR | CSF_TRY | CSF_BLOCK)))
eap->errmsg = _(e_endif_without_if);
else
{
@@ -1043,7 +1043,7 @@ ex_else(exarg_T *eap)
if (cstack->cs_idx < 0
|| (cstack->cs_flags[cstack->cs_idx]
& (CSF_WHILE | CSF_FOR | CSF_TRY)))
& (CSF_WHILE | CSF_FOR | CSF_TRY | CSF_BLOCK)))
{
if (eap->cmdidx == CMD_else)
{
@@ -1375,6 +1375,37 @@ ex_endwhile(exarg_T *eap)
}
}
/*
* "{" start of a block in Vim9 script
*/
void
ex_block(exarg_T *eap)
{
cstack_T *cstack = eap->cstack;
if (cstack->cs_idx == CSTACK_LEN - 1)
eap->errmsg = _("E579: block nesting too deep");
else
{
enter_block(cstack);
cstack->cs_flags[cstack->cs_idx] = CSF_BLOCK | CSF_ACTIVE | CSF_TRUE;
}
}
/*
* "}" end of a block in Vim9 script
*/
void
ex_endblock(exarg_T *eap)
{
cstack_T *cstack = eap->cstack;
if (cstack->cs_idx < 0
|| (cstack->cs_flags[cstack->cs_idx] & CSF_BLOCK) == 0)
eap->errmsg = _(e_endblock_without_block);
else
leave_block(cstack);
}
/*
* ":throw expr"