mirror of
https://github.com/vim/vim.git
synced 2025-10-05 05:34:07 -04:00
patch 8.2.1710: Vim9: list of list type can be wrong
Problem: Vim9: list of list type can be wrong. Solution: Use VAR_UNKNOWN for empty list. Recognize VAR_UNKNOWN when looking for a common type. (closes #6979)
This commit is contained in:
@@ -1513,6 +1513,10 @@ def Test_expr7_list()
|
|||||||
2] [3,
|
2] [3,
|
||||||
4]
|
4]
|
||||||
|
|
||||||
|
let llstring: list<list<string>> = [['text'], []]
|
||||||
|
llstring = [[], ['text']]
|
||||||
|
llstring = [[], []]
|
||||||
|
|
||||||
CheckDefFailure(["let x = 1234[3]"], 'E1107:', 1)
|
CheckDefFailure(["let x = 1234[3]"], 'E1107:', 1)
|
||||||
CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1)
|
CheckDefExecFailure(["let x = g:anint[3]"], 'E1062:', 1)
|
||||||
|
|
||||||
@@ -1718,6 +1722,14 @@ def Test_expr7_dict()
|
|||||||
mixed = #{a: 234}
|
mixed = #{a: 234}
|
||||||
mixed = #{}
|
mixed = #{}
|
||||||
|
|
||||||
|
let dictlist: dict<list<string>> = #{absent: [], present: ['hi']}
|
||||||
|
dictlist = #{absent: ['hi'], present: []}
|
||||||
|
dictlist = #{absent: [], present: []}
|
||||||
|
|
||||||
|
let dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}}
|
||||||
|
dictdict = #{one: #{}, two: #{a: 'text'}}
|
||||||
|
dictdict = #{one: #{}, two: #{}}
|
||||||
|
|
||||||
CheckDefFailure(["let x = #{a:8}"], 'E1069:', 1)
|
CheckDefFailure(["let x = #{a:8}"], 'E1069:', 1)
|
||||||
CheckDefFailure(["let x = #{a : 8}"], 'E1068:', 1)
|
CheckDefFailure(["let x = #{a : 8}"], 'E1068:', 1)
|
||||||
CheckDefFailure(["let x = #{a :8}"], 'E1068:', 1)
|
CheckDefFailure(["let x = #{a :8}"], 'E1068:', 1)
|
||||||
|
@@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
1710,
|
||||||
/**/
|
/**/
|
||||||
1709,
|
1709,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -869,6 +869,19 @@ common_type(type_T *type1, type_T *type2, type_T **dest, garray_T *type_gap)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If either is VAR_UNKNOWN use the other type. An empty list/dict has no
|
||||||
|
// specific type.
|
||||||
|
if (type1->tt_type == VAR_UNKNOWN)
|
||||||
|
{
|
||||||
|
*dest = type2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (type2->tt_type == VAR_UNKNOWN)
|
||||||
|
{
|
||||||
|
*dest = type1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (type1->tt_type == type2->tt_type)
|
if (type1->tt_type == type2->tt_type)
|
||||||
{
|
{
|
||||||
if (type1->tt_type == VAR_LIST || type2->tt_type == VAR_DICT)
|
if (type1->tt_type == VAR_LIST || type2->tt_type == VAR_DICT)
|
||||||
@@ -932,7 +945,7 @@ get_member_type_from_stack(
|
|||||||
|
|
||||||
// Use "any" for an empty list or dict.
|
// Use "any" for an empty list or dict.
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return &t_void;
|
return &t_unknown;
|
||||||
|
|
||||||
// Use the first value type for the list member type, then find the common
|
// Use the first value type for the list member type, then find the common
|
||||||
// type from following items.
|
// type from following items.
|
||||||
|
Reference in New Issue
Block a user