To: vim_dev@googlegroups.com Subject: Patch 9.0.1447 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1447 Problem: Condition is always true. Solution: Remove the useless condition. (closes #12253) Files: src/evalvars.c *** ../vim-9.0.1446/src/evalvars.c 2023-03-07 17:13:47.309107774 +0000 --- src/evalvars.c 2023-04-12 21:32:17.133942782 +0100 *************** *** 989,995 **** 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]; --- 989,994 ---- *************** *** 1067,1074 **** list_vim_vars(&first); } set_nextcmd(eap, arg); } ! else if (expr[0] == '=' && expr[1] == '<' && expr[2] == '<') { list_T *l = NULL; long cur_lnum = SOURCING_LNUM; --- 1066,1075 ---- list_vim_vars(&first); } set_nextcmd(eap, arg); + return; } ! ! if (expr[0] == '=' && expr[1] == '<' && expr[2] == '<') { list_T *l = NULL; long cur_lnum = SOURCING_LNUM; *************** *** 1096,1172 **** } clear_tv(&rettv); } } - else - { - 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); } } } /* --- 1097,1163 ---- } 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))) + { + 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); } /* *** ../vim-9.0.1446/src/version.c 2023-04-12 20:48:09.335718024 +0100 --- src/version.c 2023-04-12 21:33:19.161982874 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1447, /**/ -- ARTHUR: Charge! [They all charge with swords drawn towards the RABBIT. A tremendous twenty second fight with Peckinpahish shots and borrowing heavily also on the Kung Fu and karate-type films ensues, in which some four KNIGHTS are comprehensively killed.] ARTHUR: Run away! Run away! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///