0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.3701: Vim9: invalid LHS is not possible

Problem:    Vim9: invalid LHS is not possible.
Solution:   Remove unreachable error message.
This commit is contained in:
Bram Moolenaar
2021-11-29 22:02:12 +00:00
parent 6b839ac775
commit c750d91a07
2 changed files with 27 additions and 34 deletions

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3701,
/**/
3700,
/**/

View File

@@ -6503,52 +6503,43 @@ compile_lhs(
lhs->lhs_member_type = lhs->lhs_type;
if (lhs->lhs_has_index)
{
char_u *after = var_start + lhs->lhs_varlen;
char_u *p;
// Something follows after the variable: "var[idx]" or "var.key".
// TODO: should we also handle "->func()" here?
if (is_decl)
{
emsg(_(e_cannot_use_index_when_declaring_variable));
return FAIL;
}
if (var_start[lhs->lhs_varlen] == '['
|| var_start[lhs->lhs_varlen] == '.')
// Now: var_start[lhs->lhs_varlen] is '[' or '.'
// Only the last index is used below, if there are others
// before it generate code for the expression. Thus for
// "ll[1][2]" the expression is "ll[1]" and "[2]" is the index.
for (;;)
{
char_u *after = var_start + lhs->lhs_varlen;
char_u *p;
// Only the last index is used below, if there are others
// before it generate code for the expression. Thus for
// "ll[1][2]" the expression is "ll[1]" and "[2]" is the index.
for (;;)
p = skip_index(after);
if (*p != '[' && *p != '.')
{
p = skip_index(after);
if (*p != '[' && *p != '.')
{
lhs->lhs_varlen_total = p - var_start;
break;
}
after = p;
lhs->lhs_varlen_total = p - var_start;
break;
}
if (after > var_start + lhs->lhs_varlen)
{
lhs->lhs_varlen = after - var_start;
lhs->lhs_dest = dest_expr;
// We don't know the type before evaluating the expression,
// use "any" until then.
lhs->lhs_type = &t_any;
}
if (lhs->lhs_type->tt_member == NULL)
lhs->lhs_member_type = &t_any;
else
lhs->lhs_member_type = lhs->lhs_type->tt_member;
after = p;
}
if (after > var_start + lhs->lhs_varlen)
{
lhs->lhs_varlen = after - var_start;
lhs->lhs_dest = dest_expr;
// We don't know the type before evaluating the expression,
// use "any" until then.
lhs->lhs_type = &t_any;
}
if (lhs->lhs_type->tt_member == NULL)
lhs->lhs_member_type = &t_any;
else
{
semsg("Not supported yet: %s", var_start);
return FAIL;
}
lhs->lhs_member_type = lhs->lhs_type->tt_member;
}
return OK;
}