summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-15 19:48:20 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-15 19:48:20 +0200
commite30f64b4b551bb00318dc09c2f13ecd3d711119a (patch)
treefa813a172dc7303e8f421b347b9717895b4ae845 /src
parent657a826c07b4ea3f8846b6acb2c50b82c2d81e50 (diff)
patch 8.2.1223: Vim9: invalid type error for function default valuev8.2.1223
Problem: Vim9: invalid type error for function default value. Solution: Use right argument index. (closes #6458)
Diffstat (limited to 'src')
-rw-r--r--src/testdir/test_vim9_func.vim8
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c2
3 files changed, 11 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index f9c5a2af2d..3e90a02b80 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -104,11 +104,19 @@ def MyDefaultArgs(name = 'string'): string
return name
enddef
+def MyDefaultSecond(name: string, second: bool = true): string
+ return second ? name : 'none'
+enddef
+
def Test_call_default_args()
assert_equal('string', MyDefaultArgs())
assert_equal('one', MyDefaultArgs('one'))
assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
+ assert_equal('test', MyDefaultSecond('test'))
+ assert_equal('test', MyDefaultSecond('test', true))
+ assert_equal('none', MyDefaultSecond('test', false))
+
CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef', 'defcompile'], 'E1001:')
CheckScriptFailure(['def Func(arg: number = "text")', 'enddef', 'defcompile'], 'E1013: argument 1: type mismatch, expected number but got string')
enddef
diff --git a/src/version.c b/src/version.c
index 558a73e848..92cbe501d3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1223,
+/**/
1222,
/**/
1221,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 39190c9725..ec940df73a 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -6865,7 +6865,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
val_type = ((type_T **)stack->ga_data)[stack->ga_len - 1];
if (ufunc->uf_arg_types[arg_idx] == &t_unknown)
ufunc->uf_arg_types[arg_idx] = val_type;
- else if (check_type(ufunc->uf_arg_types[i], val_type, FALSE)
+ else if (check_type(ufunc->uf_arg_types[arg_idx], val_type, FALSE)
== FAIL)
{
arg_type_mismatch(ufunc->uf_arg_types[arg_idx], val_type,