]> granicus.if.org Git - vim/commitdiff
patch 8.2.1480: Vim9: skip expression in search() gives error v8.2.1480
authorBram Moolenaar <Bram@vim.org>
Tue, 18 Aug 2020 17:11:38 +0000 (19:11 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 18 Aug 2020 17:11:38 +0000 (19:11 +0200)
Problem:    Vim9: skip expression in search() gives error.
Solution:   use tv_get_bool() eval_expr_to_bool(). (closes #6729)

src/eval.c
src/proto/typval.pro
src/testdir/test_vim9_func.vim
src/typval.c
src/version.c

index c80013960a30ff7819996d53576d43dd2ed3cda6..585975a80892ad7228060b0e8f0989697a9039d8 100644 (file)
@@ -326,7 +326,7 @@ eval_expr_to_bool(typval_T *expr, int *error)
        *error = TRUE;
        return FALSE;
     }
-    res = (tv_get_number_chk(&rettv, error) != 0);
+    res = (tv_get_bool_chk(&rettv, error) != 0);
     clear_tv(&rettv);
     return res;
 }
index 15f93459128f90bf654f53f99a17b2c9a4376dfe..25ad3e6737612e758ae63ad504c56892683e2410 100644 (file)
@@ -7,6 +7,7 @@ void init_tv(typval_T *varp);
 varnumber_T tv_get_number(typval_T *varp);
 varnumber_T tv_get_number_chk(typval_T *varp, int *denote);
 varnumber_T tv_get_bool(typval_T *varp);
+varnumber_T tv_get_bool_chk(typval_T *varp, int *denote);
 float_T tv_get_float(typval_T *varp);
 char_u *tv_get_string(typval_T *varp);
 char_u *tv_get_string_buf(typval_T *varp, char_u *buf);
index 446ee4d03da8c35537ca9692b6d29de2e7c5400c..79fd80ae1863e85db271ef951ed22eb729b2aeee 100644 (file)
@@ -1379,6 +1379,13 @@ func Test_silent_echo()
   call delete('XTest_silent_echo')
 endfunc
 
+def Test_search()
+  new
+  setline(1, ['foo', 'bar'])
+  let val = 0
+  assert_equal(2, search('bar', 'W', 0, 0, {-> val == 1}))
+enddef
+
 def Fibonacci(n: number): number
   if n < 2
     return n
index 053f30077e1d0745151b2f1af997af04b8017fab..2203bc6fac36ec515801400f63c7d89542591655 100644 (file)
@@ -270,6 +270,17 @@ tv_get_bool(typval_T *varp)
 
 }
 
+/*
+ * Get the boolean value of "varp".  This is like tv_get_number_chk(),
+ * but in Vim9 script accepts Number and Bool.
+ */
+    varnumber_T
+tv_get_bool_chk(typval_T *varp, int *denote)
+{
+    return tv_get_bool_or_number_chk(varp, denote, TRUE);
+
+}
+
 #ifdef FEAT_FLOAT
     float_T
 tv_get_float(typval_T *varp)
index e8eb8521d2bcb1a819da1166325fdca51d054237..fc6884c1ebe11dcfc6ac97d23a496d4a1b66cab5 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1480,
 /**/
     1479,
 /**/