# HG changeset patch # User Bram Moolenaar # Date 1651761003 -7200 # Node ID 7f12fe85ed8b1a58257d96657a39774faf1fa2da # Parent 615339bbac54244d35983a0fa37b8e93c284cd66 patch 8.2.4871: Vim9: in :def function no error for misplaced range Commit: https://github.com/vim/vim/commit/09d9421b673366e5f6e56fbf74204a1c316fdea2 Author: Bram Moolenaar Date: Thu May 5 15:20:03 2022 +0100 patch 8.2.4871: Vim9: in :def function no error for misplaced range 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) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- 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 --- 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 --- 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)