]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1447: condition is always true v9.0.1447
authorzeertzjq <zeertzjq@outlook.com>
Wed, 12 Apr 2023 20:36:03 +0000 (21:36 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Apr 2023 20:36:03 +0000 (21:36 +0100)
Problem:    Condition is always true.
Solution:   Remove the useless condition. (closes #12253)

src/evalvars.c
src/version.c

index b1235428723c305480d7a9637370173b93ab0b64..b0df0a58b35947300d16c3c7e1390dcb216546a3 100644 (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;
     }
-    else
-    {
-       evalarg_T   evalarg;
-       int         len = 1;
 
-       CLEAR_FIELD(rettv);
-       i = FAIL;
-       if (has_assign || concat)
-       {
-           int cur_lnum;
+    evalarg_T   evalarg;
+    int            len = 1;
 
-           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;
+    CLEAR_FIELD(rettv);
 
-           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);
-           }
+    int cur_lnum;
 
-           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)
+    op[0] = '=';
+    op[1] = NUL;
+    if (*expr != '=')
+    {
+       if (vim9script && (flags & ASSIGN_NO_DECL) == 0)
        {
-           if (i != FAIL)
-               clear_tv(&rettv);
+           // +=, /=, etc. require an existing variable
+           semsg(_(e_cannot_use_operator_on_new_variable_str), eap->arg);
        }
-       else if (i != FAIL)
+       else if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
        {
-           (void)ex_let_vars(eap->arg, &rettv, FALSE, semicolon, var_count,
-                                                                   flags, op);
-           clear_tv(&rettv);
+           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;
+    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);
 }
 
 /*
index f1c3311c3ec26254e74d214da61474bf21151dbb..60de2bb455d67d4c53864a6c967e5d721b6e8340 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1447,
 /**/
     1446,
 /**/