Mercurial > vim
diff src/ex_eval.c @ 22555:7d25264c246c v8.2.1826
patch 8.2.1826: Vim9: cannot use a {} block at script level
Commit: https://github.com/vim/vim/commit/9becdf2b98e56d5eb193f3413d706ea433269216
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Oct 10 21:33:48 2020 +0200
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 10 Oct 2020 21:45:06 +0200 |
parents | 3ed3bed38e0f |
children | 209c7aa56325 |
line wrap: on
line diff
--- a/src/ex_eval.c +++ b/src/ex_eval.c @@ -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"