patch 8.2.2602: Vim9: continue doesn't work if :while is very first command
Problem: Vim9: continue doesn't work if :while is very first command.
(Yegappan Lakshmanan)
Solution: Add one to the continue instruction index.
diff --git a/src/vim9execute.c b/src/vim9execute.c
index f8470f5..b2c28a3 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -30,7 +30,7 @@
int tcd_finally_idx; // instruction of the :finally block or zero
int tcd_endtry_idx; // instruction of the :endtry
int tcd_caught; // catch block entered
- int tcd_cont; // :continue encountered, jump here
+ int tcd_cont; // :continue encountered, jump here (minus one)
int tcd_return; // when TRUE return from end of :finally
} trycmd_T;
@@ -2757,7 +2757,9 @@
{
trycmd = ((trycmd_T *)trystack->ga_data)
+ trystack->ga_len - i;
- trycmd->tcd_cont = iidx;
+ // Add one to tcd_cont to be able to jump to
+ // instruction with index zero.
+ trycmd->tcd_cont = iidx + 1;
iidx = trycmd->tcd_finally_idx == 0
? trycmd->tcd_endtry_idx : trycmd->tcd_finally_idx;
}
@@ -2811,7 +2813,7 @@
if (trycmd->tcd_cont != 0)
// handling :continue: jump to outer try block or
// start of the loop
- ectx.ec_iidx = trycmd->tcd_cont;
+ ectx.ec_iidx = trycmd->tcd_cont - 1;
}
}
break;