vim-patch:8.2.1203: unused assignments in expression evaluation

Problem:    Unused assignments in expression evaluation.
Solution:   Move declarations and assignments to inner blocks where possible.

3ac9c4701a

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq 2023-04-14 14:50:17 +08:00
parent c804c7df0c
commit 56cfecdd59

View File

@ -2679,8 +2679,6 @@ static int eval_addlist(typval_T *tv1, typval_T *tv2)
/// @return OK or FAIL. /// @return OK or FAIL.
static int eval5(char **arg, typval_T *rettv, evalarg_T *const evalarg) static int eval5(char **arg, typval_T *rettv, evalarg_T *const evalarg)
{ {
const bool evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
// Get the first variable. // Get the first variable.
if (eval6(arg, rettv, evalarg, false) == FAIL) { if (eval6(arg, rettv, evalarg, false) == FAIL) {
return FAIL; return FAIL;
@ -2694,6 +2692,7 @@ static int eval5(char **arg, typval_T *rettv, evalarg_T *const evalarg)
break; break;
} }
const bool evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
if ((op != '+' || (rettv->v_type != VAR_LIST && rettv->v_type != VAR_BLOB)) if ((op != '+' || (rettv->v_type != VAR_LIST && rettv->v_type != VAR_BLOB))
&& (op == '.' || rettv->v_type != VAR_FLOAT) && evaluate) { && (op == '.' || rettv->v_type != VAR_FLOAT) && evaluate) {
// For "list + ...", an illegal use of the first operand as // For "list + ...", an illegal use of the first operand as
@ -2822,12 +2821,7 @@ static int eval5(char **arg, typval_T *rettv, evalarg_T *const evalarg)
static int eval6(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool want_string) static int eval6(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool want_string)
FUNC_ATTR_NO_SANITIZE_UNDEFINED FUNC_ATTR_NO_SANITIZE_UNDEFINED
{ {
typval_T var2;
int op;
varnumber_T n1, n2;
bool use_float = false; bool use_float = false;
float_T f1 = 0, f2 = 0;
bool error = false;
// Get the first variable. // Get the first variable.
if (eval7(arg, rettv, evalarg, want_string) == FAIL) { if (eval7(arg, rettv, evalarg, want_string) == FAIL) {
@ -2836,12 +2830,15 @@ static int eval6(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan
// Repeat computing, until no '*', '/' or '%' is following. // Repeat computing, until no '*', '/' or '%' is following.
for (;;) { for (;;) {
const bool evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE); int op = (uint8_t)(**arg);
op = (uint8_t)(**arg);
if (op != '*' && op != '/' && op != '%') { if (op != '*' && op != '/' && op != '%') {
break; break;
} }
varnumber_T n1, n2;
float_T f1 = 0, f2 = 0;
bool error = false;
const bool evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
if (evaluate) { if (evaluate) {
if (rettv->v_type == VAR_FLOAT) { if (rettv->v_type == VAR_FLOAT) {
f1 = rettv->vval.v_float; f1 = rettv->vval.v_float;
@ -2860,6 +2857,7 @@ static int eval6(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan
// Get the second variable. // Get the second variable.
*arg = skipwhite(*arg + 1); *arg = skipwhite(*arg + 1);
typval_T var2;
if (eval7(arg, &var2, evalarg, false) == FAIL) { if (eval7(arg, &var2, evalarg, false) == FAIL) {
return FAIL; return FAIL;
} }
@ -2953,7 +2951,6 @@ static int eval6(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan
/// @return OK or FAIL. /// @return OK or FAIL.
static int eval7(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool want_string) static int eval7(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool want_string)
{ {
const int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
const bool evaluate = evalarg != NULL && (evalarg->eval_flags & EVAL_EVALUATE); const bool evaluate = evalarg != NULL && (evalarg->eval_flags & EVAL_EVALUATE);
int ret = OK; int ret = OK;
static int recurse = 0; static int recurse = 0;
@ -3091,6 +3088,7 @@ static int eval7(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan
if (len <= 0) { if (len <= 0) {
ret = FAIL; ret = FAIL;
} else { } else {
const int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
if (**arg == '(') { // recursive! if (**arg == '(') { // recursive!
ret = eval_func(arg, evalarg, s, len, rettv, flags, NULL); ret = eval_func(arg, evalarg, s, len, rettv, flags, NULL);
} else if (evaluate) { } else if (evaluate) {