comparison src/eval.c @ 21305:91d4af3309e7 v8.2.1203

patch 8.2.1203: unused assignments in expression evaluation Commit: https://github.com/vim/vim/commit/3ac9c4701a5f1e39303ca2885956db92215966db Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jul 13 21:28:03 2020 +0200 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.
author Bram Moolenaar <Bram@vim.org>
date Mon, 13 Jul 2020 21:30:04 +0200
parents 8d1d11afd8c8
children b991565745fb
comparison
equal deleted inserted replaced
21304:6816e7e6663b 21305:91d4af3309e7
2536 * Return OK or FAIL. 2536 * Return OK or FAIL.
2537 */ 2537 */
2538 static int 2538 static int
2539 eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg) 2539 eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
2540 { 2540 {
2541 int evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
2542
2543 /* 2541 /*
2544 * Get the first variable. 2542 * Get the first variable.
2545 */ 2543 */
2546 if (eval6(arg, rettv, evalarg, FALSE) == FAIL) 2544 if (eval6(arg, rettv, evalarg, FALSE) == FAIL)
2547 return FAIL; 2545 return FAIL;
2549 /* 2547 /*
2550 * Repeat computing, until no '+', '-' or '.' is following. 2548 * Repeat computing, until no '+', '-' or '.' is following.
2551 */ 2549 */
2552 for (;;) 2550 for (;;)
2553 { 2551 {
2552 int evaluate;
2554 int getnext; 2553 int getnext;
2555 char_u *p; 2554 char_u *p;
2556 int op; 2555 int op;
2557 int concat; 2556 int concat;
2558 typval_T var2; 2557 typval_T var2;
2561 p = eval_next_non_blank(*arg, evalarg, &getnext); 2560 p = eval_next_non_blank(*arg, evalarg, &getnext);
2562 op = *p; 2561 op = *p;
2563 concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2); 2562 concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2);
2564 if (op != '+' && op != '-' && !concat) 2563 if (op != '+' && op != '-' && !concat)
2565 break; 2564 break;
2565
2566 if (getnext) 2566 if (getnext)
2567 *arg = eval_next_line(evalarg); 2567 *arg = eval_next_line(evalarg);
2568 2568 evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
2569 if ((op != '+' || (rettv->v_type != VAR_LIST 2569 if ((op != '+' || (rettv->v_type != VAR_LIST
2570 && rettv->v_type != VAR_BLOB)) 2570 && rettv->v_type != VAR_BLOB))
2571 #ifdef FEAT_FLOAT 2571 #ifdef FEAT_FLOAT
2572 && (op == '.' || rettv->v_type != VAR_FLOAT) 2572 && (op == '.' || rettv->v_type != VAR_FLOAT)
2573 #endif 2573 #endif
2726 char_u **arg, 2726 char_u **arg,
2727 typval_T *rettv, 2727 typval_T *rettv,
2728 evalarg_T *evalarg, 2728 evalarg_T *evalarg,
2729 int want_string) // after "." operator 2729 int want_string) // after "." operator
2730 { 2730 {
2731 typval_T var2;
2732 int op;
2733 varnumber_T n1, n2;
2734 #ifdef FEAT_FLOAT 2731 #ifdef FEAT_FLOAT
2735 int use_float = FALSE; 2732 int use_float = FALSE;
2736 float_T f1 = 0, f2 = 0;
2737 #endif 2733 #endif
2738 int error = FALSE;
2739 2734
2740 /* 2735 /*
2741 * Get the first variable. 2736 * Get the first variable.
2742 */ 2737 */
2743 if (eval7(arg, rettv, evalarg, want_string) == FAIL) 2738 if (eval7(arg, rettv, evalarg, want_string) == FAIL)
2746 /* 2741 /*
2747 * Repeat computing, until no '*', '/' or '%' is following. 2742 * Repeat computing, until no '*', '/' or '%' is following.
2748 */ 2743 */
2749 for (;;) 2744 for (;;)
2750 { 2745 {
2751 int evaluate = evalarg == NULL ? 0 2746 int evaluate;
2752 : (evalarg->eval_flags & EVAL_EVALUATE); 2747 int getnext;
2753 int getnext; 2748 typval_T var2;
2749 int op;
2750 varnumber_T n1, n2;
2751 #ifdef FEAT_FLOAT
2752 float_T f1, f2;
2753 #endif
2754 int error;
2754 2755
2755 op = *eval_next_non_blank(*arg, evalarg, &getnext); 2756 op = *eval_next_non_blank(*arg, evalarg, &getnext);
2756 if (op != '*' && op != '/' && op != '%') 2757 if (op != '*' && op != '/' && op != '%')
2757 break; 2758 break;
2759
2758 if (getnext) 2760 if (getnext)
2759 *arg = eval_next_line(evalarg); 2761 *arg = eval_next_line(evalarg);
2760 2762
2763 #ifdef FEAT_FLOAT
2764 f1 = 0;
2765 f2 = 0;
2766 #endif
2767 error = FALSE;
2768 evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
2761 if (evaluate) 2769 if (evaluate)
2762 { 2770 {
2763 #ifdef FEAT_FLOAT 2771 #ifdef FEAT_FLOAT
2764 if (rettv->v_type == VAR_FLOAT) 2772 if (rettv->v_type == VAR_FLOAT)
2765 { 2773 {
2902 char_u **arg, 2910 char_u **arg,
2903 typval_T *rettv, 2911 typval_T *rettv,
2904 evalarg_T *evalarg, 2912 evalarg_T *evalarg,
2905 int want_string) // after "." operator 2913 int want_string) // after "." operator
2906 { 2914 {
2907 int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
2908 int evaluate = evalarg != NULL 2915 int evaluate = evalarg != NULL
2909 && (evalarg->eval_flags & EVAL_EVALUATE); 2916 && (evalarg->eval_flags & EVAL_EVALUATE);
2910 int len; 2917 int len;
2911 char_u *s; 2918 char_u *s;
2912 char_u *start_leader, *end_leader; 2919 char_u *start_leader, *end_leader;
3062 3069
3063 if (len <= 0) 3070 if (len <= 0)
3064 ret = FAIL; 3071 ret = FAIL;
3065 else 3072 else
3066 { 3073 {
3074 int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
3075
3067 if (**arg == '(') 3076 if (**arg == '(')
3068 // "name(..." recursive! 3077 // "name(..." recursive!
3069 ret = eval_func(arg, evalarg, s, len, rettv, flags, NULL); 3078 ret = eval_func(arg, evalarg, s, len, rettv, flags, NULL);
3070 else if (flags & EVAL_CONSTANT) 3079 else if (flags & EVAL_CONSTANT)
3071 ret = FAIL; 3080 ret = FAIL;