Skip to content

Commit 599c89c

Browse files
committed
patch 8.2.0465: Vim9: dead code and wrong return type
Problem: Vim9: dead code and wrong return type. Solution: Remove dead code. Fix return type. Add more tests.
1 parent 495282b commit 599c89c

3 files changed

Lines changed: 54 additions & 6 deletions

File tree

src/testdir/test_vim9_script.vim

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ func Test_assignment_failure()
112112

113113
call CheckDefFailure(['let var: dict <number>'], 'E1007:')
114114
call CheckDefFailure(['let var: dict<number'], 'E1009:')
115+
endfunc
116+
117+
func Test_wrong_type()
118+
call CheckDefFailure(['let var: list<nothing>'], 'E1010:')
119+
call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
120+
call CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
121+
call CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
122+
123+
call CheckDefFailure(['let var: dict<number'], 'E1009:')
124+
call CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
115125

116126
call CheckDefFailure(['let var: ally'], 'E1010:')
117127
call CheckDefFailure(['let var: bram'], 'E1010:')
@@ -436,6 +446,37 @@ def Test_vim9_import_export()
436446
source Ximport.vim
437447
assert_equal(9883, g:imported)
438448

449+
let import_star_as_lines_no_dot =<< trim END
450+
vim9script
451+
import * as Export from './Xexport.vim'
452+
def Func()
453+
let dummy = 1
454+
let imported = Export + dummy
455+
enddef
456+
END
457+
writefile(import_star_as_lines_no_dot, 'Ximport.vim')
458+
assert_fails('source Ximport.vim', 'E1060:')
459+
460+
let import_star_as_lines_dot_space =<< trim END
461+
vim9script
462+
import * as Export from './Xexport.vim'
463+
def Func()
464+
let imported = Export . exported
465+
enddef
466+
END
467+
writefile(import_star_as_lines_dot_space, 'Ximport.vim')
468+
assert_fails('source Ximport.vim', 'E1074:')
469+
470+
let import_star_as_lines_missing_name =<< trim END
471+
vim9script
472+
import * as Export from './Xexport.vim'
473+
def Func()
474+
let imported = Export.
475+
enddef
476+
END
477+
writefile(import_star_as_lines_missing_name, 'Ximport.vim')
478+
assert_fails('source Ximport.vim', 'E1048:')
479+
439480
let import_star_lines =<< trim END
440481
vim9script
441482
import * from './Xexport.vim'

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,8 @@ static char *(features[]) =
738738

739739
static int included_patches[] =
740740
{ /* Add new patch number below this line */
741+
/**/
742+
465,
741743
/**/
742744
464,
743745
/**/

src/vim9compile.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ get_list_type(type_T *member_type, garray_T *type_list)
242242

243243
// Not a common type, create a new entry.
244244
if (ga_grow(type_list, 1) == FAIL)
245-
return FAIL;
245+
return &t_any;
246246
type = ((type_T *)type_list->ga_data) + type_list->ga_len;
247247
++type_list->ga_len;
248248
type->tt_type = VAR_LIST;
@@ -269,7 +269,7 @@ get_dict_type(type_T *member_type, garray_T *type_list)
269269

270270
// Not a common type, create a new entry.
271271
if (ga_grow(type_list, 1) == FAIL)
272-
return FAIL;
272+
return &t_any;
273273
type = ((type_T *)type_list->ga_data) + type_list->ga_len;
274274
++type_list->ga_len;
275275
type->tt_type = VAR_DICT;
@@ -1368,6 +1368,7 @@ skip_type(char_u *start)
13681368
parse_type_member(char_u **arg, type_T *type, garray_T *type_list)
13691369
{
13701370
type_T *member_type;
1371+
int prev_called_emsg = called_emsg;
13711372

13721373
if (**arg != '<')
13731374
{
@@ -1380,11 +1381,9 @@ parse_type_member(char_u **arg, type_T *type, garray_T *type_list)
13801381
*arg = skipwhite(*arg + 1);
13811382

13821383
member_type = parse_type(arg, type_list);
1383-
if (member_type == NULL)
1384-
return type;
13851384

13861385
*arg = skipwhite(*arg);
1387-
if (**arg != '>')
1386+
if (**arg != '>' && called_emsg == prev_called_emsg)
13881387
{
13891388
emsg(_("E1009: Missing > after type"));
13901389
return type;
@@ -1766,6 +1765,11 @@ compile_load_scriptvar(
17661765
return FAIL;
17671766
}
17681767
++p;
1768+
if (VIM_ISWHITE(*p))
1769+
{
1770+
emsg(_("E1074: no white space allowed after dot"));
1771+
return FAIL;
1772+
}
17691773

17701774
idx = find_exported(import->imp_sid, &p, &name_len, &ufunc, &type);
17711775
// TODO: what if it is a function?
@@ -1806,6 +1810,7 @@ compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int error)
18061810
char_u *name;
18071811
char_u *end = end_arg;
18081812
int res = FAIL;
1813+
int prev_called_emsg = called_emsg;
18091814

18101815
if (*(*arg + 1) == ':')
18111816
{
@@ -1892,7 +1897,7 @@ compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int error)
18921897
*arg = end;
18931898

18941899
theend:
1895-
if (res == FAIL && error)
1900+
if (res == FAIL && error && called_emsg == prev_called_emsg)
18961901
semsg(_(e_var_notfound), name);
18971902
vim_free(name);
18981903
return res;

0 commit comments

Comments
 (0)