From 4a6d1b660fcea67931202527ad2852da55d26d49 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 8 Aug 2020 17:55:49 +0200 Subject: patch 8.2.1397: Vim9: return type of maparg() not adjusted for fourth arg Problem: Vim9: return type of maparg() not adjusted for fourth argument. Solution: Check if fourth argument is present. (closes #6645) --- src/evalfunc.c | 11 ++++++++++- src/testdir/test_maparg.vim | 13 +++++++++++++ src/version.c | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/evalfunc.c b/src/evalfunc.c index a421690e4..5607ef9e5 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -402,6 +402,15 @@ ret_getreg(int argcount, type_T **argtypes UNUSED) return &t_string; } + static type_T * +ret_maparg(int argcount, type_T **argtypes UNUSED) +{ + // Assume that if the fourth argument is passed it's non-zero + if (argcount == 4) + return &t_dict_any; + return &t_string; +} + static type_T *ret_f_function(int argcount, type_T **argtypes); /* @@ -729,7 +738,7 @@ static funcentry_T global_functions[] = #endif }, {"map", 2, 2, FEARG_1, ret_any, f_map}, - {"maparg", 1, 4, FEARG_1, ret_string, f_maparg}, + {"maparg", 1, 4, FEARG_1, ret_maparg, f_maparg}, {"mapcheck", 1, 3, FEARG_1, ret_string, f_mapcheck}, {"mapset", 3, 3, FEARG_1, ret_void, f_mapset}, {"match", 2, 4, FEARG_1, ret_any, f_match}, diff --git a/src/testdir/test_maparg.vim b/src/testdir/test_maparg.vim index 81e057adc..3b61ff6cf 100644 --- a/src/testdir/test_maparg.vim +++ b/src/testdir/test_maparg.vim @@ -81,6 +81,19 @@ func Test_maparg() abclear endfunc +def Test_vim9_maparg() + nmap { w + let one: string = maparg('{') + assert_equal('w', one) + let two: string = maparg('{', 'n') + assert_equal('w', two) + let three: string = maparg('{', 'n', 0) + assert_equal('w', three) + let four: dict = maparg('{', 'n', 0, 1) + call assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode]) + nunmap { +enddef + func Test_mapcheck() call assert_equal('', mapcheck('a')) call assert_equal('', mapcheck('abc')) diff --git a/src/version.c b/src/version.c index 8649ca896..b67d3c3da 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1397, /**/ 1396, /**/ -- cgit v1.2.1