From 403dc31f5a03b5858f62e72c3407ffaf827b3005 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 17 Oct 2020 19:29:51 +0200 Subject: 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 #7144) --- src/evalfunc.c | 9 +++++++-- src/popupwin.c | 6 ++++-- src/testdir/test_vim9_func.vim | 14 ++++++++++++++ src/version.c | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/evalfunc.c b/src/evalfunc.c index cf1e265330..7bc4f05f5f 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -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)}, diff --git a/src/popupwin.c b/src/popupwin.c index 777e7d84b1..2868a9da39 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -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; diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 6ff23e95a7..cc6af6a86a 100644 --- 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 index 6ea39c07ec..cdecc3ab4e 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1858, /**/ 1857, /**/ -- cgit v1.2.3