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.
diff --git a/src/ex_eval.c b/src/ex_eval.c
index d205caf..57c6178 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -1002,7 +1002,7 @@
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 @@
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 @@
}
}
+/*
+ * "{" 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"