diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-05-05 15:20:03 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-05-05 15:20:03 +0100 |
commit | 09d9421b673366e5f6e56fbf74204a1c316fdea2 (patch) | |
tree | d91eaa357364eae3ba7321ca34b4ea257f0142c3 | |
parent | f3b4895f2727e3849ca10030b251cccd9d1383f3 (diff) | |
download | vim-git-09d9421b673366e5f6e56fbf74204a1c316fdea2.tar.gz |
patch 8.2.4871: Vim9: in :def function no error for misplaced rangev8.2.4871
Problem: Vim9: in :def function no error for using a range with a command
that does not accept one.
Solution: Check for the command to accept a range. (closes #10330)
-rw-r--r-- | src/testdir/test_vim9_script.vim | 23 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 5 |
3 files changed, 30 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index dd33a923a..4fa690450 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -67,6 +67,29 @@ def Test_range_only() endif enddef +def Test_invalid_range() + var lines =<< trim END + :123 eval 1 + 2 + END + v9.CheckDefAndScriptFailure(lines, 'E481:', 1) + + lines =<< trim END + :123 if true + endif + END + v9.CheckDefAndScriptFailure(lines, 'E481:', 1) + + lines =<< trim END + :123 echo 'yes' + END + v9.CheckDefAndScriptFailure(lines, 'E481:', 1) + + lines =<< trim END + :123 cd there + END + v9.CheckDefAndScriptFailure(lines, 'E481:', 1) +enddef + let g:alist = [7] let g:astring = 'text' let g:anumber = 123 diff --git a/src/version.c b/src/version.c index 3f7825eee..f0269e44d 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 */ /**/ + 4871, +/**/ 4870, /**/ 4869, diff --git a/src/vim9compile.c b/src/vim9compile.c index 8b22a8db2..b0cf6a787 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -3080,6 +3080,11 @@ compile_def_function( ea.forceit = TRUE; p = skipwhite(p + 1); } + if ((ea.argt & EX_RANGE) == 0 && ea.addr_count > 0) + { + emsg(_(e_no_range_allowed)); + goto erret; + } } switch (ea.cmdidx) |