]> granicus.if.org Git - vim/commitdiff
patch 8.2.1858: Vim9: filter functions return number instead of bool v8.2.1858
authorBram Moolenaar <Bram@vim.org>
Sat, 17 Oct 2020 17:29:51 +0000 (19:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 17 Oct 2020 17:29:51 +0000 (19:29 +0200)
Problem:    Vim9: filter functions return number instead of bool.
Solution:   Return v:true instead of one. (closes #7144)

src/evalfunc.c
src/popupwin.c
src/testdir/test_vim9_func.vim
src/version.c

index cf1e26533045810e94d923e4b97a41c15e512654..7bc4f05f5f38750731ea5601e0e113a04ae63c75 100644 (file)
@@ -270,6 +270,11 @@ ret_any(int argcount UNUSED, type_T **argtypes UNUSED)
     return &t_any;
 }
     static type_T *
+ret_bool(int argcount UNUSED, type_T **argtypes UNUSED)
+{
+    return &t_bool;
+}
+    static type_T *
 ret_number(int argcount UNUSED, type_T **argtypes UNUSED)
 {
     return &t_number;
@@ -793,8 +798,8 @@ static funcentry_T global_functions[] =
     {"popup_close",    1, 2, FEARG_1,    ret_void,     PROP_FUNC(f_popup_close)},
     {"popup_create",   2, 2, FEARG_1,    ret_number,   PROP_FUNC(f_popup_create)},
     {"popup_dialog",   2, 2, FEARG_1,    ret_number,   PROP_FUNC(f_popup_dialog)},
-    {"popup_filter_menu", 2, 2, 0,       ret_number,   PROP_FUNC(f_popup_filter_menu)},
-    {"popup_filter_yesno", 2, 2, 0,      ret_number,   PROP_FUNC(f_popup_filter_yesno)},
+    {"popup_filter_menu", 2, 2, 0,       ret_bool,     PROP_FUNC(f_popup_filter_menu)},
+    {"popup_filter_yesno", 2, 2, 0,      ret_bool,     PROP_FUNC(f_popup_filter_yesno)},
     {"popup_findinfo", 0, 0, 0,          ret_number,   PROP_FUNC(f_popup_findinfo)},
     {"popup_findpreview", 0, 0, 0,       ret_number,   PROP_FUNC(f_popup_findpreview)},
     {"popup_getoptions", 1, 1, FEARG_1,          ret_dict_any, PROP_FUNC(f_popup_getoptions)},
index 777e7d84b18b1ac6df7a3673b4fc538046f6ce6a..2868a9da39d8642735da2d4ddc35676ce6b40014 100644 (file)
@@ -2375,7 +2375,8 @@ f_popup_filter_menu(typval_T *argvars, typval_T *rettv)
        c = TO_SPECIAL(key[1], key[2]);
 
     // consume all keys until done
-    rettv->vval.v_number = 1;
+    rettv->v_type = VAR_BOOL;
+    rettv->vval.v_number = VVAL_TRUE;
     res.v_type = VAR_NUMBER;
 
     old_lnum = wp->w_cursor.lnum;
@@ -2429,7 +2430,8 @@ f_popup_filter_yesno(typval_T *argvars, typval_T *rettv)
        c = TO_SPECIAL(key[1], key[2]);
 
     // consume all keys until done
-    rettv->vval.v_number = 1;
+    rettv->v_type = VAR_BOOL;
+    rettv->vval.v_number = VVAL_TRUE;
 
     if (c == 'y' || c == 'Y')
        res.vval.v_number = 1;
index 6ff23e95a73d9d0e16038ee6b511f8c88a0916d8..cc6af6a86a789c9ac7c242644566cd759f5b6d1e 100644 (file)
@@ -94,6 +94,20 @@ def Test_missing_return()
                    'enddef'], 'E1095:')
 enddef
 
+def Test_return_bool()
+  var lines =<< trim END
+      vim9script
+      def MenuFilter(id: number, key: string): bool
+        return popup_filter_menu(id, key)
+      enddef
+      def YesnoFilter(id: number, key: string): bool
+        return popup_filter_yesno(id, key)
+      enddef
+      defcompile
+  END
+  CheckScriptSuccess(lines)
+enddef
+
 let s:nothing = 0
 def ReturnNothing()
   s:nothing = 1
index 6ea39c07ecbbbe9a49c8fb7be880a5d36d362c1c..cdecc3ab4e22400c96bbcb836281390520c862cc 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1858,
 /**/
     1857,
 /**/