1
0
forked from aniani/vim

patch 8.2.4409: Vim9: some code not covered by tests

Problem:    Vim9: some code not covered by tests.
Solution:   Add a few more tests.  Fix reported line number.
This commit is contained in:
Bram Moolenaar
2022-02-17 16:30:11 +00:00
parent ea5c898b5f
commit 6296d1e60e
3 changed files with 17 additions and 4 deletions

View File

@@ -847,6 +847,9 @@ def Test_assignment_list()
assert_equal(['sdf', 'asdf', 'end'], list3) assert_equal(['sdf', 'asdf', 'end'], list3)
v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:') v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:')
v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[8 : 9]'], 'E684:')
v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[1 : -9]'], 'E684:')
v9.CheckDefExecFailure(['var ll = [1, 2, 3]', 'unlet ll[2 : 1]'], 'E684:')
# type becomes list<any> # type becomes list<any>
var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c'] var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
@@ -2193,6 +2196,10 @@ def Test_unlet()
'g:dd = {"a": 1, 2: 2}' 'g:dd = {"a": 1, 2: 2}'
'unlet g:dd[0z11]', 'unlet g:dd[0z11]',
], 'E1029:', 2) ], 'E1029:', 2)
v9.CheckDefExecFailure([
'g:str = "a string"'
'unlet g:str[0]',
], 'E1148: Cannot index a string', 2)
# can compile unlet before variable exists # can compile unlet before variable exists
g:someDict = {key: 'val'} g:someDict = {key: 'val'}

View File

@@ -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 */
/**/
4409,
/**/ /**/
4408, 4408,
/**/ /**/

View File

@@ -1998,12 +1998,12 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
// Stack contains: // Stack contains:
// -2 index // -2 index
// -1 dict or list // -1 dict or list
SOURCING_LNUM = iptr->isn_lnum;
if (tv_dest->v_type == VAR_DICT) if (tv_dest->v_type == VAR_DICT)
{ {
// unlet a dict item, index must be a string // unlet a dict item, index must be a string
if (tv_idx->v_type != VAR_STRING && tv_idx->v_type != VAR_NUMBER) if (tv_idx->v_type != VAR_STRING && tv_idx->v_type != VAR_NUMBER)
{ {
SOURCING_LNUM = iptr->isn_lnum;
semsg(_(e_expected_str_but_got_str), semsg(_(e_expected_str_but_got_str),
vartype_name(VAR_STRING), vartype_name(VAR_STRING),
vartype_name(tv_idx->v_type)); vartype_name(tv_idx->v_type));
@@ -2020,7 +2020,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
status = FAIL; status = FAIL;
else else
{ {
SOURCING_LNUM = iptr->isn_lnum;
if (tv_idx->v_type == VAR_STRING) if (tv_idx->v_type == VAR_STRING)
{ {
key = tv_idx->vval.v_string; key = tv_idx->vval.v_string;
@@ -2053,7 +2052,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
else if (tv_dest->v_type == VAR_LIST) else if (tv_dest->v_type == VAR_LIST)
{ {
// unlet a List item, index must be a number // unlet a List item, index must be a number
SOURCING_LNUM = iptr->isn_lnum;
if (check_for_number(tv_idx) == FAIL) if (check_for_number(tv_idx) == FAIL)
{ {
status = FAIL; status = FAIL;
@@ -2072,7 +2070,6 @@ execute_unletindex(isn_T *iptr, ectx_T *ectx)
if (li == NULL) if (li == NULL)
{ {
SOURCING_LNUM = iptr->isn_lnum;
semsg(_(e_list_index_out_of_range_nr), n); semsg(_(e_list_index_out_of_range_nr), n);
status = FAIL; status = FAIL;
} }
@@ -2133,7 +2130,11 @@ execute_unletrange(isn_T *iptr, ectx_T *ectx)
li = list_find_index(l, &n1); li = list_find_index(l, &n1);
if (li == NULL) if (li == NULL)
{
semsg(_(e_list_index_out_of_range_nr),
(long)tv_idx1->vval.v_number);
status = FAIL; status = FAIL;
}
else else
{ {
if (n1 < 0) if (n1 < 0)
@@ -2143,7 +2144,10 @@ execute_unletrange(isn_T *iptr, ectx_T *ectx)
listitem_T *li2 = list_find(l, n2); listitem_T *li2 = list_find(l, n2);
if (li2 == NULL) if (li2 == NULL)
{
semsg(_(e_list_index_out_of_range_nr), n2);
status = FAIL; status = FAIL;
}
else else
n2 = list_idx_of_item(l, li2); n2 = list_idx_of_item(l, li2);
} }