summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-05-05 15:20:03 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-05 15:20:03 +0100
commit09d9421b673366e5f6e56fbf74204a1c316fdea2 (patch)
treed91eaa357364eae3ba7321ca34b4ea257f0142c3
parentf3b4895f2727e3849ca10030b251cccd9d1383f3 (diff)
downloadvim-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.vim23
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c5
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)