summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-10 21:20:29 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-10 21:20:29 +0200
commit7e5bd91dc99e1ecb38c4220eaab1a906a69815c2 (patch)
tree72af03ba723dacc3f1a3e2cce4da83ed5ef852b4
parent1cc2a94f80ba982f83d1e2d37c4726867e36bd9f (diff)
downloadvim-git-7e5bd91dc99e1ecb38c4220eaab1a906a69815c2.tar.gz
patch 8.2.0731: Vim9: parsing declarations continues after :finishv8.2.0731
Problem: Vim9: parsing declarations continues after :finish. Solution: Bail out when encountering :finish.
-rw-r--r--src/testdir/test_vim9_script.vim17
-rw-r--r--src/version.c2
-rw-r--r--src/vim9script.c6
3 files changed, 25 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 0b99eec5d..e85da5a80 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1705,6 +1705,23 @@ def Test_vim9_comment_not_compiled()
], 'E488:')
enddef
+def Test_finish()
+ let lines =<< trim END
+ vim9script
+ let g:res = 'one'
+ if v:false | finish | endif
+ let g:res = 'two'
+ finish
+ let g:res = 'three'
+ END
+ writefile(lines, 'Xfinished')
+ source Xfinished
+ assert_equal('two', g:res)
+
+ unlet g:res
+ delete('Xfinished')
+enddef
+
" Keep this last, it messes up highlighting.
def Test_substitute_cmd()
new
diff --git a/src/version.c b/src/version.c
index d89763bfc..efb3c3187 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 731,
+/**/
730,
/**/
729,
diff --git a/src/vim9script.c b/src/vim9script.c
index 8bc1962bf..4d7e8ee46 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -130,6 +130,12 @@ ex_vim9script(exarg_T *eap)
vim_free(((char_u **)(gap->ga_data))[--gap->ga_len]);
((char_u **)(gap->ga_data))[gap->ga_len++] = NULL;
}
+ else if (checkforcmd(&p, "finish", 4))
+ {
+ // TODO: this should not happen below "if false".
+ // Use "if cond | finish | endif as a workaround.
+ break;
+ }
}
// Compile the :def functions.