To: vim_dev@googlegroups.com Subject: Patch 8.2.3261 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3261 Problem: Vim9: when compiling repeat(123, N) return type is number. Solution: Make return type a string. (closes #8664) Files: src/evalfunc.c, src/testdir/test_vim9_builtin.vim *** ../vim-8.2.3260/src/evalfunc.c 2021-07-30 21:32:41.444722506 +0200 --- src/evalfunc.c 2021-07-31 22:02:29.732345656 +0200 *************** *** 931,936 **** --- 931,943 ---- return argtypes[0]; return &t_void; } + static type_T * + ret_repeat(int argcount UNUSED, type_T **argtypes) + { + if (argtypes[0] == &t_number) + return &t_string; + return argtypes[0]; + } // for map(): returns first argument but item type may differ static type_T * ret_first_cont(int argcount UNUSED, type_T **argtypes) *************** *** 1813,1819 **** {"rename", 2, 2, FEARG_1, arg2_string, ret_number_bool, f_rename}, {"repeat", 2, 2, FEARG_1, arg2_repeat, ! ret_first_arg, f_repeat}, {"resolve", 1, 1, FEARG_1, arg1_string, ret_string, f_resolve}, {"reverse", 1, 1, FEARG_1, arg1_list_or_blob, --- 1820,1826 ---- {"rename", 2, 2, FEARG_1, arg2_string, ret_number_bool, f_rename}, {"repeat", 2, 2, FEARG_1, arg2_repeat, ! ret_repeat, f_repeat}, {"resolve", 1, 1, FEARG_1, arg1_string, ret_string, f_resolve}, {"reverse", 1, 1, FEARG_1, arg1_list_or_blob, *** ../vim-8.2.3260/src/testdir/test_vim9_builtin.vim 2021-07-31 19:12:54.100411000 +0200 --- src/testdir/test_vim9_builtin.vim 2021-07-31 22:02:10.868399546 +0200 *************** *** 2558,2566 **** def Test_repeat() CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1') CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1') ! assert_equal('aaa', repeat('a', 3)) ! assert_equal('111', repeat(1, 3)) ! assert_equal([1, 1, 1], repeat([1], 3)) enddef def Test_resolve() --- 2558,2572 ---- def Test_repeat() CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String, Number or List required for argument 1') CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String, Number or List required for argument 1') ! var lines =<< trim END ! assert_equal('aaa', repeat('a', 3)) ! assert_equal('111', repeat(1, 3)) ! assert_equal([1, 1, 1], repeat([1], 3)) ! var s = '-' ! s ..= repeat(5, 3) ! assert_equal('-555', s) ! END ! CheckDefAndScriptSuccess(lines) enddef def Test_resolve() *** ../vim-8.2.3260/src/version.c 2021-07-31 21:44:31.747825431 +0200 --- src/version.c 2021-07-31 22:03:31.644169572 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3261, /**/ -- GALAHAD: No. Look, I can tackle this lot single-handed! GIRLS: Yes, yes, let him Tackle us single-handed! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///