]> granicus.if.org Git - vim/commitdiff
patch 8.2.0318: Vim9: types not sufficiently tested v8.2.0318
authorBram Moolenaar <Bram@vim.org>
Tue, 25 Feb 2020 21:58:29 +0000 (22:58 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 25 Feb 2020 21:58:29 +0000 (22:58 +0100)
Problem:    Vim9: types not sufficiently tested.
Solution:   Add tests with more types.

src/globals.h
src/testdir/test_vim9_expr.vim
src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c

index 785b69f6e7819974b29abc4a974140b13c9222c1..6f257484d34034f92a85d10b74a8ecdd9fa64c80 100644 (file)
@@ -403,10 +403,12 @@ EXTERN type_T t_dict_any INIT4(VAR_DICT, 0, &t_any, NULL);
 EXTERN type_T t_list_empty INIT4(VAR_LIST, 0, &t_void, NULL);
 EXTERN type_T t_dict_empty INIT4(VAR_DICT, 0, &t_void, NULL);
 
+EXTERN type_T t_list_bool INIT4(VAR_LIST, 0, &t_bool, NULL);
 EXTERN type_T t_list_number INIT4(VAR_LIST, 0, &t_number, NULL);
 EXTERN type_T t_list_string INIT4(VAR_LIST, 0, &t_string, NULL);
 EXTERN type_T t_list_dict_any INIT4(VAR_LIST, 0, &t_dict_any, NULL);
 
+EXTERN type_T t_dict_bool INIT4(VAR_DICT, 0, &t_bool, NULL);
 EXTERN type_T t_dict_number INIT4(VAR_DICT, 0, &t_number, NULL);
 EXTERN type_T t_dict_string INIT4(VAR_DICT, 0, &t_string, NULL);
 
index fb7d39f41e8c68be6ec28469983fb8f0f8fcaf04..5ece65274b8007a40b5a398ab31e082bf8718aae 100644 (file)
@@ -861,4 +861,8 @@ func Test_expr_fails()
   call CheckDefExecFailure("CallMe ('yes')", 'E492:')
   call CheckDefFailure("CallMe2('yes','no')", 'E1069:')
   call CheckDefFailure("CallMe2('yes' , 'no')", 'E1068:')
+
+  call CheckDefFailure("v:nosuch += 3", 'E1001:')
+  call CheckDefFailure("let v:version = 3", 'E1064:')
+  call CheckDefFailure("let asdf = v:nosuch", 'E1001:')
 endfunc
index c68d29f883e938a25afcfd257a0e573514b691d0..938dc634094ed95a08d771b4e16f199f678009d5 100644 (file)
@@ -37,14 +37,20 @@ def Test_assignment()
   let bool2: bool = false
   assert_equal(v:false, bool2)
 
-  let list1: list<string> = ['sdf', 'asdf']
+  let list1: list<bool> = [false, true, false]
   let list2: list<number> = [1, 2, 3]
+  let list3: list<string> = ['sdf', 'asdf']
+  let list4: list<any> = ['yes', true, 1234]
+  let list5: list<blob> = [0z01, 0z02]
 
   let listS: list<string> = []
   let listN: list<number> = []
 
-  let dict1: dict<string> = #{key: 'value'}
+  let dict1: dict<bool> = #{one: false, two: true}
   let dict2: dict<number> = #{one: 1, two: 2}
+  let dict3: dict<string> = #{key: 'value'}
+  let dict4: dict<any> = #{one: 1, two: '2'}
+  let dict5: dict<blob> = #{one: 0z01, tw: 0z02}
 
   g:newvar = 'new'
   assert_equal('new', g:newvar)
index 5d76c5ee820a48ec64702e0b2d56bbdd2e92ba4e..c5dccf4d4e6e80ecceb742664f09a1ad0faa08a1 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    318,
 /**/
     317,
 /**/
index e21f5cbe7d03ba1c0618e058f3bc9b268bdc0fbb..d62df6ed486c2c25a6230a57d15911d9eb2abf9e 100644 (file)
@@ -213,6 +213,8 @@ get_list_type(type_T *member_type, garray_T *type_list)
        return &t_list_any;
     if (member_type->tt_type == VAR_VOID)
        return &t_list_empty;
+    if (member_type->tt_type == VAR_BOOL)
+       return &t_list_bool;
     if (member_type->tt_type == VAR_NUMBER)
        return &t_list_number;
     if (member_type->tt_type == VAR_STRING)
@@ -238,6 +240,8 @@ get_dict_type(type_T *member_type, garray_T *type_list)
        return &t_dict_any;
     if (member_type->tt_type == VAR_VOID)
        return &t_dict_empty;
+    if (member_type->tt_type == VAR_BOOL)
+       return &t_dict_bool;
     if (member_type->tt_type == VAR_NUMBER)
        return &t_dict_number;
     if (member_type->tt_type == VAR_STRING)