changeset 32232:daef00e8d99f v9.0.1447

patch 9.0.1447: condition is always true Commit: https://github.com/vim/vim/commit/474891bc89e657100bd37c29129451a0e601879d Author: zeertzjq <zeertzjq@outlook.com> Date: Wed Apr 12 21:36:03 2023 +0100 patch 9.0.1447: condition is always true Problem: Condition is always true. Solution: Remove the useless condition. (closes https://github.com/vim/vim/issues/12253)
author Bram Moolenaar <Bram@vim.org>
date Wed, 12 Apr 2023 22:45:03 +0200
parents 28d5f8e20ba6
children 310757299e72
files src/evalvars.c src/version.c
diffstat 2 files changed, 62 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -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,
+	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);
-	    clear_tv(&rettv);
-	}
-    }
+    if (eval_res != FAIL)
+	clear_tv(&rettv);
 }
 
 /*
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1447,
+/**/
     1446,
 /**/
     1445,