Mercurial > vim
changeset 25453:21b70bab366c v8.2.3263
patch 8.2.3263: Vim9: "..=" does not accept same types as the ".." operator
Commit: https://github.com/vim/vim/commit/f5d52c90e0f2f51622a911b646024b2ad1225ed4
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jul 31 22:51:10 2021 +0200
patch 8.2.3263: Vim9: "..=" does not accept same types as the ".." operator
Problem: Vim9: "..=" does not accept same types as the ".." operator.
Solution: Convert value to string like ".." does. (issue https://github.com/vim/vim/issues/8664)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 31 Jul 2021 23:00:04 +0200 |
parents | d0975ae1f208 |
children | e547441b00e4 |
files | src/testdir/test_vim9_assign.vim src/testdir/test_vim9_disassemble.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 40 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -239,6 +239,32 @@ def Test_assignment() END enddef +let g:someNumber = 43 + +def Test_assign_concat() + var lines =<< trim END + var s = '-' + s ..= 99 + s ..= true + s ..= '-' + s ..= v:null + s ..= g:someNumber + assert_equal('-99true-null43', s) + END + CheckDefAndScriptSuccess(lines) + + lines =<< trim END + var s = '-' + s ..= [1, 2] + END + CheckDefAndScriptFailure2(lines, 'E1105: Cannot convert list to string', 'E734: Wrong variable type for .=', 2) + lines =<< trim END + var s = '-' + s ..= {a: 2} + END + CheckDefAndScriptFailure2(lines, 'E1105: Cannot convert dict to string', 'E734: Wrong variable type for .=', 2) +enddef + def Test_assign_register() var lines =<< trim END @c = 'areg'
--- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -1254,7 +1254,7 @@ def Test_disassemble_for_loop_eval() 'res ..= str\_s*' .. '\d\+ LOAD $0\_s*' .. '\d\+ LOAD $2\_s*' .. - '\d\+ CHECKTYPE string stack\[-1\]\_s*' .. + '\d 2STRING_ANY stack\[-1\]\_s*' .. '\d\+ CONCAT\_s*' .. '\d\+ STORE $0\_s*' .. 'endfor\_s*' ..
--- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3263, +/**/ 3262, /**/ 3261,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -7086,18 +7086,23 @@ compile_assignment(char_u *arg, exarg_T type_T *stacktype; if (*op == '.') - expected = &t_string; + { + if (may_generate_2STRING(-1, FALSE, cctx) == FAIL) + goto theend; + } else + { expected = lhs.lhs_member_type; - stacktype = ((type_T **)stack->ga_data)[stack->ga_len - 1]; - if ( + stacktype = ((type_T **)stack->ga_data)[stack->ga_len - 1]; + if ( #ifdef FEAT_FLOAT - // If variable is float operation with number is OK. - !(expected == &t_float && stacktype == &t_number) && + // If variable is float operation with number is OK. + !(expected == &t_float && stacktype == &t_number) && #endif need_type(stacktype, expected, -1, 0, cctx, FALSE, FALSE) == FAIL) - goto theend; + goto theend; + } if (*op == '.') {