mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
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 #8664)
This commit is contained in:
@@ -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'
|
||||
|
@@ -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*' ..
|
||||
|
@@ -755,6 +755,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3263,
|
||||
/**/
|
||||
3262,
|
||||
/**/
|
||||
|
@@ -7086,8 +7086,12 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
||||
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 (
|
||||
@@ -7098,6 +7102,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
||||
need_type(stacktype, expected, -1, 0, cctx,
|
||||
FALSE, FALSE) == FAIL)
|
||||
goto theend;
|
||||
}
|
||||
|
||||
if (*op == '.')
|
||||
{
|
||||
|
Reference in New Issue
Block a user