1
0
forked from aniani/vim

patch 8.2.3154: Vim9: some type checks for builtin functions fail

Problem:    Vim9: some type checks for builtin functions fail.
Solution:   Correct the type checks. (Yegappan Lakshmanan, closes #8551,
            closes #8550)
This commit is contained in:
Yegappan Lakshmanan
2021-07-11 22:04:25 +02:00
committed by Bram Moolenaar
parent 7b7a118e74
commit 841e498c5d
3 changed files with 21 additions and 3 deletions

View File

@@ -431,9 +431,10 @@ arg_item_of_prev(type_T *type, argcontext_T *context)
static int static int
arg_str_or_nr_or_list(type_T *type, argcontext_T *context) arg_str_or_nr_or_list(type_T *type, argcontext_T *context)
{ {
if (type->tt_type == VAR_STRING if (type->tt_type == VAR_ANY
|| type->tt_type == VAR_NUMBER || type->tt_type == VAR_STRING
|| type->tt_type == VAR_LIST) || type->tt_type == VAR_NUMBER
|| type->tt_type == VAR_LIST)
return OK; return OK;
arg_type_mismatch(&t_string, type, context->arg_idx + 1); arg_type_mismatch(&t_string, type, context->arg_idx + 1);
return FAIL; return FAIL;

View File

@@ -1523,6 +1523,12 @@ enddef
def Test_popup_atcursor() def Test_popup_atcursor()
CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
# Pass variable of type 'any' to popup_atcursor()
var what: any = 'Hello'
var popupID = what->popup_atcursor({moved: 'any'})
assert_equal(0, popupID->popup_getoptions().tabpage)
popupID->popup_close()
enddef enddef
def Test_popup_beval() def Test_popup_beval()
@@ -1530,6 +1536,14 @@ def Test_popup_beval()
CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
enddef enddef
def Test_popup_create()
# Pass variable of type 'any' to popup_create()
var what: any = 'Hello'
var popupID = what->popup_create({})
assert_equal(0, popupID->popup_getoptions().tabpage)
popupID->popup_close()
enddef
def Test_popup_dialog() def Test_popup_dialog()
CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required') CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E450: buffer number, text or a list required')
CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required') CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
@@ -2358,6 +2372,7 @@ def Test_virtcol()
setline(1, ['abcdefgh']) setline(1, ['abcdefgh'])
cursor(1, 4) cursor(1, 4)
assert_equal(4, virtcol('.')) assert_equal(4, virtcol('.'))
assert_equal(4, virtcol([1, 4]))
assert_equal(9, virtcol([1, '$'])) assert_equal(9, virtcol([1, '$']))
assert_equal(0, virtcol([10, '$'])) assert_equal(0, virtcol([10, '$']))
bw! bw!

View File

@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
3154,
/**/ /**/
3153, 3153,
/**/ /**/