diff options
author | Bram Moolenaar <Bram@vim.org> | 2005-01-06 23:19:09 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2005-01-06 23:19:09 +0000 |
commit | bb761a783f424c9ce9a6a104279e3081d2eea6f7 (patch) | |
tree | 12ab76d44cf158f46662abe0d713f92b9846fb1b | |
parent | 3d60ec2aafeebeb55638e8de2aaa6eca88e4e89a (diff) | |
download | vim-git-bb761a783f424c9ce9a6a104279e3081d2eea6f7.tar.gz |
updated for version 7.0032
-rw-r--r-- | src/ex_docmd.c | 17 |
1 files 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; } |