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)
This commit is contained in:
		| @ -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)}, | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -750,6 +750,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     1858, | ||||
| /**/ | ||||
|     1857, | ||||
| /**/ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user