From bb761a783f424c9ce9a6a104279e3081d2eea6f7 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 6 Jan 2005 23:19:09 +0000 Subject: [PATCH] updated for version 7.0032 --- src/ex_docmd.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 1173e92cf..fcc24d26b 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1114,9 +1114,9 @@ do_cmdline(cmdline, getline, cookie, flags) else { /* can only get here with ":endwhile" or ":endfor" */ - --cstack.cs_looplevel; if (cstack.cs_idx >= 0) - --cstack.cs_idx; + rewind_conditionals(&cstack, cstack.cs_idx - 1, + CSF_WHILE | CSF_FOR, &cstack.cs_looplevel); } } @@ -1239,11 +1239,18 @@ do_cmdline(cmdline, getline, cookie, flags) * ":endtry" in a sourced file or executed function. If the try * conditional is in its finally clause, ignore anything pending. * If it is in a catch clause, finish the caught exception. + * Also cleanup any "cs_forinfo" structures. */ do - cstack.cs_idx = cleanup_conditionals(&cstack, 0, TRUE); - while (--cstack.cs_idx >= 0) - ; + { + int idx = cleanup_conditionals(&cstack, 0, TRUE); + + if (idx == cstack.cs_idx) + --idx; /* remove at least one */ + rewind_conditionals(&cstack, idx, CSF_WHILE | CSF_FOR, + &cstack.cs_looplevel); + } + while (cstack.cs_idx >= 0); trylevel = initial_trylevel; } -- 2.50.1