1
0
forked from aniani/vim

patch 9.0.1447: condition is always true

Problem:    Condition is always true.
Solution:   Remove the useless condition. (closes #12253)
This commit is contained in:
zeertzjq
2023-04-12 21:36:03 +01:00
committed by Bram Moolenaar
parent 5299c0933f
commit 474891bc89
2 changed files with 62 additions and 69 deletions

View File

@@ -989,7 +989,6 @@ ex_let(exarg_T *eap)
char_u *arg = eap->arg;
char_u *expr = NULL;
typval_T rettv;
int i;
int var_count = 0;
int semicolon = 0;
char_u op[4];
@@ -1067,8 +1066,10 @@ ex_let(exarg_T *eap)
list_vim_vars(&first);
}
set_nextcmd(eap, arg);
return;
}
else if (expr[0] == '=' && expr[1] == '<' && expr[2] == '<')
if (expr[0] == '=' && expr[1] == '<' && expr[2] == '<')
{
list_T *l = NULL;
long cur_lnum = SOURCING_LNUM;
@@ -1096,77 +1097,67 @@ ex_let(exarg_T *eap)
}
clear_tv(&rettv);
}
return;
}
evalarg_T evalarg;
int len = 1;
CLEAR_FIELD(rettv);
int cur_lnum;
op[0] = '=';
op[1] = NUL;
if (*expr != '=')
{
if (vim9script && (flags & ASSIGN_NO_DECL) == 0)
{
// +=, /=, etc. require an existing variable
semsg(_(e_cannot_use_operator_on_new_variable_str), eap->arg);
}
else if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
{
op[0] = *expr; // +=, -=, *=, /=, %= or .=
++len;
if (expr[0] == '.' && expr[1] == '.') // ..=
{
++expr;
++len;
}
}
expr += 2;
}
else
++expr;
if (vim9script && !eap->skip && (!VIM_ISWHITE(*argend)
|| !IS_WHITE_OR_NUL(*expr)))
{
evalarg_T evalarg;
int len = 1;
CLEAR_FIELD(rettv);
i = FAIL;
if (has_assign || concat)
{
int cur_lnum;
op[0] = '=';
op[1] = NUL;
if (*expr != '=')
{
if (vim9script && (flags & ASSIGN_NO_DECL) == 0)
{
// +=, /=, etc. require an existing variable
semsg(_(e_cannot_use_operator_on_new_variable_str),
eap->arg);
}
else if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
{
op[0] = *expr; // +=, -=, *=, /=, %= or .=
++len;
if (expr[0] == '.' && expr[1] == '.') // ..=
{
++expr;
++len;
}
}
expr += 2;
}
else
++expr;
if (vim9script && !eap->skip && (!VIM_ISWHITE(*argend)
|| !IS_WHITE_OR_NUL(*expr)))
{
vim_strncpy(op, expr - len, len);
semsg(_(e_white_space_required_before_and_after_str_at_str),
op, argend);
}
if (eap->skip)
++emsg_skip;
fill_evalarg_from_eap(&evalarg, eap, eap->skip);
expr = skipwhite_and_linebreak(expr, &evalarg);
cur_lnum = SOURCING_LNUM;
i = eval0(expr, &rettv, eap, &evalarg);
if (eap->skip)
--emsg_skip;
clear_evalarg(&evalarg, eap);
// Restore the line number so that any type error is given for the
// declaration, not the expression.
SOURCING_LNUM = cur_lnum;
}
if (eap->skip)
{
if (i != FAIL)
clear_tv(&rettv);
}
else if (i != FAIL)
{
(void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
flags, op);
clear_tv(&rettv);
}
vim_strncpy(op, expr - len, len);
semsg(_(e_white_space_required_before_and_after_str_at_str),
op, argend);
}
if (eap->skip)
++emsg_skip;
fill_evalarg_from_eap(&evalarg, eap, eap->skip);
expr = skipwhite_and_linebreak(expr, &evalarg);
cur_lnum = SOURCING_LNUM;
int eval_res = eval0(expr, &rettv, eap, &evalarg);
if (eap->skip)
--emsg_skip;
clear_evalarg(&evalarg, eap);
// Restore the line number so that any type error is given for the
// declaration, not the expression.
SOURCING_LNUM = cur_lnum;
if (!eap->skip && eval_res != FAIL)
(void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
flags, op);
if (eval_res != FAIL)
clear_tv(&rettv);
}
/*