summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-25 22:58:29 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-25 22:58:29 +0100
commit0c2ca58ef06ac49d40330bbe1ee70c3d8af7a648 (patch)
tree1fb77e6745c3bbc846a36703651e10f3cbf80229
parent703ea9eaefd3628d75c8c2fa19f934f6832638f1 (diff)
downloadvim-git-0c2ca58ef06ac49d40330bbe1ee70c3d8af7a648.tar.gz
patch 8.2.0318: Vim9: types not sufficiently testedv8.2.0318
Problem: Vim9: types not sufficiently tested. Solution: Add tests with more types.
-rw-r--r--src/globals.h2
-rw-r--r--src/testdir/test_vim9_expr.vim4
-rw-r--r--src/testdir/test_vim9_script.vim10
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c4
5 files changed, 20 insertions, 2 deletions
diff --git a/src/globals.h b/src/globals.h
index 785b69f6e..6f257484d 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -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);
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index fb7d39f41..5ece65274 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -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
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index c68d29f88..938dc6340 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -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)
diff --git a/src/version.c b/src/version.c
index 5d76c5ee8..c5dccf4d4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 318,
+/**/
317,
/**/
316,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index e21f5cbe7..d62df6ed4 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -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)