summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_script.vim7
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c6
-rw-r--r--src/vim9execute.c8
4 files changed, 14 insertions, 9 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index fd1dbc8c2..4284aada2 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -14,6 +14,8 @@ let s:addToMe = 111
let g:existing = 'yes'
let g:inc_counter = 1
let $SOME_ENV_VAR = 'some'
+let g:alist = [7]
+let g:astring = 'text'
def Test_assignment()
let bool1: bool = true
@@ -95,7 +97,12 @@ def Test_assignment()
assert_equal(2, &ts)
call CheckDefFailure(['&notex += 3'], 'E113:')
call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
+ call CheckDefFailure(['&ts = [7]'], 'E1013:')
+ call CheckDefExecFailure(['&ts = g:alist'], 'E1029: Expected number but got list')
+ call CheckDefFailure(['&ts = "xx"'], 'E1013:')
+ call CheckDefExecFailure(['&ts = g:astring'], 'E1029: Expected number but got string')
call CheckDefFailure(['&path += 3'], 'E1013:')
+ call CheckDefExecFailure(['&bs = "asdf"'], 'E474:')
# test freeing ISN_STOREOPT
call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
&ts = 8
diff --git a/src/version.c b/src/version.c
index 94db9b888..b361dedf0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 764,
+/**/
763,
/**/
762,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 4b294df29..416198a0c 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3490,7 +3490,7 @@ compile_subscript(
type_T **typep;
// list index: list[123]
- // list member: dict[key]
+ // dict member: dict[key]
// TODO: blob index
// TODO: more arguments
// TODO: recognize list or dict at runtime
@@ -4999,8 +4999,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
goto theend;
}
}
- else if (*p != '=' && check_type(member_type, stacktype, TRUE)
- == FAIL)
+ else if (*p != '=' && need_type(stacktype, member_type, -1,
+ cctx) == FAIL)
goto theend;
}
}
diff --git a/src/vim9execute.c b/src/vim9execute.c
index f50f8c6e1..398c94c42 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1164,13 +1164,9 @@ call_def_function(
if (s == NULL)
s = (char_u *)"";
}
- else if (tv->v_type == VAR_NUMBER)
- n = tv->vval.v_number;
else
- {
- emsg(_("E1051: Expected string or number"));
- goto failed;
- }
+ // must be VAR_NUMBER, CHECKTYPE makes sure
+ n = tv->vval.v_number;
msg = set_option_value(iptr->isn_arg.storeopt.so_name,
n, s, iptr->isn_arg.storeopt.so_flags);
if (msg != NULL)