# HG changeset patch # User Bram Moolenaar # Date 1602955805 -7200 # Node ID b5d68d8a51879c52a3101a48df495dd22fa610ba # Parent 398e92912dcb8841c19686cc25bb91ace37e64b5 patch 8.2.1858: Vim9: filter functions return number instead of bool Commit: https://github.com/vim/vim/commit/403dc31f5a03b5858f62e72c3407ffaf827b3005 Author: Bram Moolenaar Date: Sat Oct 17 19:29:51 2020 +0200 patch 8.2.1858: Vim9: filter functions return number instead of bool Problem: Vim9: filter functions return number instead of bool. Solution: Return v:true instead of one. (closes https://github.com/vim/vim/issues/7144) diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -270,6 +270,11 @@ ret_any(int argcount UNUSED, type_T **ar 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)}, diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2375,7 +2375,8 @@ f_popup_filter_menu(typval_T *argvars, t 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, 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; diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -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 diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 1858, +/**/ 1857, /**/ 1856,