mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.2798: Vim9: redir to variable with append does not accept an index
Problem: Vim9: redir to variable with append does not accept an index. Solution: Make the appending work.
This commit is contained in:
@@ -1230,6 +1230,11 @@ def Test_redir_to_var()
|
|||||||
redir END
|
redir END
|
||||||
assert_equal({l: ["\ndict-list"]}, dl)
|
assert_equal({l: ["\ndict-list"]}, dl)
|
||||||
|
|
||||||
|
redir =>> d.redir
|
||||||
|
echo 'more'
|
||||||
|
redir END
|
||||||
|
assert_equal({redir: "\ndict\nmore"}, d)
|
||||||
|
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
redir => notexist
|
redir => notexist
|
||||||
END
|
END
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2798,
|
||||||
/**/
|
/**/
|
||||||
2797,
|
2797,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -6249,6 +6249,37 @@ compile_load_lhs(
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Produce code for loading "lhs" and also take care of an index.
|
||||||
|
* Return OK/FAIL.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
compile_load_lhs_with_index(lhs_T *lhs, char_u *var_start, cctx_T *cctx)
|
||||||
|
{
|
||||||
|
compile_load_lhs(lhs, var_start, NULL, cctx);
|
||||||
|
|
||||||
|
if (lhs->lhs_has_index)
|
||||||
|
{
|
||||||
|
int range = FALSE;
|
||||||
|
|
||||||
|
// Get member from list or dict. First compile the
|
||||||
|
// index value.
|
||||||
|
if (compile_assign_index(var_start, lhs, &range, cctx) == FAIL)
|
||||||
|
return FAIL;
|
||||||
|
if (range)
|
||||||
|
{
|
||||||
|
semsg(_(e_cannot_use_range_with_assignment_operator_str),
|
||||||
|
var_start);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the member.
|
||||||
|
if (compile_member(FALSE, cctx) == FAIL)
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assignment to a list or dict member, or ":unlet" for the item, using the
|
* Assignment to a list or dict member, or ":unlet" for the item, using the
|
||||||
* information in "lhs".
|
* information in "lhs".
|
||||||
@@ -6535,28 +6566,9 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
// for "+=", "*=", "..=" etc. first load the current value
|
// for "+=", "*=", "..=" etc. first load the current value
|
||||||
if (*op != '=')
|
if (*op != '=')
|
||||||
{
|
{
|
||||||
compile_load_lhs(&lhs, var_start, NULL, cctx);
|
if (compile_load_lhs_with_index(&lhs, var_start,
|
||||||
|
cctx) == FAIL)
|
||||||
if (lhs.lhs_has_index)
|
|
||||||
{
|
|
||||||
int range = FALSE;
|
|
||||||
|
|
||||||
// Get member from list or dict. First compile the
|
|
||||||
// index value.
|
|
||||||
if (compile_assign_index(var_start, &lhs,
|
|
||||||
&range, cctx) == FAIL)
|
|
||||||
goto theend;
|
goto theend;
|
||||||
if (range)
|
|
||||||
{
|
|
||||||
semsg(_(e_cannot_use_range_with_assignment_operator_str),
|
|
||||||
var_start);
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the member.
|
|
||||||
if (compile_member(FALSE, cctx) == FAIL)
|
|
||||||
goto theend;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compile the expression. Temporarily hide the new local
|
// Compile the expression. Temporarily hide the new local
|
||||||
@@ -8608,10 +8620,10 @@ compile_redir(char_u *line, exarg_T *eap, cctx_T *cctx)
|
|||||||
{
|
{
|
||||||
if (lhs->lhs_append)
|
if (lhs->lhs_append)
|
||||||
{
|
{
|
||||||
if (compile_load_lhs(lhs, lhs->lhs_name, NULL, cctx) == FAIL)
|
// First load the current variable value.
|
||||||
|
if (compile_load_lhs_with_index(lhs, lhs->lhs_whole,
|
||||||
|
cctx) == FAIL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (lhs->lhs_has_index)
|
|
||||||
emsg("redir with index not implemented yet");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the redirected text and put it on the stack, then store it
|
// Gets the redirected text and put it on the stack, then store it
|
||||||
|
Reference in New Issue
Block a user