summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-05-07 19:44:21 +0200
committerBram Moolenaar <Bram@vim.org>2021-05-07 19:44:21 +0200
commitf06ab6ba388c1ac907adbbde95b63769f67bc59b (patch)
tree087376a950cb6e74a92a35112583a6f60240517e
parentf18332fb9e2e4208a97d800f096b02c6681780e7 (diff)
patch 8.2.2843: Vim9: skip argument to searchpairpos() is not compiledv8.2.2843
Problem: Vim9: skip argument to searchpairpos() is not compiled. Solution: Handle like searchpair(). Also for search() and searchpos().
-rw-r--r--src/testdir/test_vim9_builtin.vim21
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c8
3 files changed, 29 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 3232d9b3b7..41063c5444 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -958,6 +958,20 @@ def Test_search()
search('bar', 'W', 0, 0, () => 1)->assert_equal(0)
assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
assert_fails("search('bar', '', 0, 0, () => -1)", 'E1023:')
+
+ setline(1, "find this word")
+ normal gg
+ var col = 7
+ assert_equal(1, search('this', '', 0, 0, 'col(".") > col'))
+ normal 0
+ assert_equal([1, 6], searchpos('this', '', 0, 0, 'col(".") > col'))
+
+ col = 5
+ normal 0
+ assert_equal(0, search('this', '', 0, 0, 'col(".") > col'))
+ normal 0
+ assert_equal([0, 0], searchpos('this', '', 0, 0, 'col(".") > col'))
+ bwipe!
enddef
def Test_searchcount()
@@ -977,14 +991,21 @@ enddef
def Test_searchpair()
new
setline(1, "here { and } there")
+
normal f{
var col = 15
assert_equal(1, searchpair('{', '', '}', '', 'col(".") > col'))
assert_equal(12, col('.'))
+ normal 0f{
+ assert_equal([1, 12], searchpairpos('{', '', '}', '', 'col(".") > col'))
+
col = 8
normal 0f{
assert_equal(0, searchpair('{', '', '}', '', 'col(".") > col'))
assert_equal(6, col('.'))
+ normal 0f{
+ assert_equal([0, 0], searchpairpos('{', '', '}', '', 'col(".") > col'))
+
bwipe!
enddef
diff --git a/src/version.c b/src/version.c
index 12aace894d..01c77921cf 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2843,
+/**/
2842,
/**/
2841,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 03aca55b8c..fd32660e07 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3285,8 +3285,12 @@ compile_call(
vim_strncpy(namebuf, *arg, varlen);
name = fname_trans_sid(namebuf, fname_buf, &tofree, &error);
- // we handle the "skip" argument of searchpair() differently
- is_searchpair = (varlen == 10 && STRNCMP(*arg, "searchpair", 10) == 0);
+ // We handle the "skip" argument of searchpair() and searchpairpos()
+ // differently.
+ is_searchpair = (varlen == 6 && STRNCMP(*arg, "search", 6) == 0)
+ || (varlen == 9 && STRNCMP(*arg, "searchpos", 9) == 0)
+ || (varlen == 10 && STRNCMP(*arg, "searchpair", 10) == 0)
+ || (varlen == 13 && STRNCMP(*arg, "searchpairpos", 13) == 0);
*arg = skipwhite(*arg + varlen + 1);
if (compile_arguments(arg, cctx, &argcount, is_searchpair) == FAIL)