Mercurial > vim
changeset 77:31e555c6c691
updated for version 7.0032
author | vimboss |
---|---|
date | Thu, 06 Jan 2005 23:19:09 +0000 |
parents | 0ef9cebc4f5d |
children | b00be47310ed |
files | src/ex_docmd.c |
diffstat | 1 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1114,9 +1114,9 @@ do_cmdline(cmdline, getline, cookie, fla 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, fla * ":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; }