Mercurial > vim
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; |