diff options
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 187 |
1 files changed, 94 insertions, 93 deletions
diff --git a/src/eval.c b/src/eval.c index 94bb4e3770..9ffd506a4b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -128,14 +128,15 @@ fill_evalarg_from_eap(evalarg_T *evalarg, exarg_T *eap, int skip) { init_evalarg(evalarg); evalarg->eval_flags = skip ? 0 : EVAL_EVALUATE; - if (eap != NULL) + + if (eap == NULL) + return; + + evalarg->eval_cstack = eap->cstack; + if (sourcing_a_script(eap) || eap->getline == get_list_line) { - evalarg->eval_cstack = eap->cstack; - if (sourcing_a_script(eap) || eap->getline == get_list_line) - { - evalarg->eval_getline = eap->getline; - evalarg->eval_cookie = eap->cookie; - } + evalarg->eval_getline = eap->getline; + evalarg->eval_cookie = eap->cookie; } } @@ -404,15 +405,15 @@ init_evalarg(evalarg_T *evalarg) static void free_eval_tofree_later(evalarg_T *evalarg) { - if (evalarg->eval_tofree != NULL) - { - if (ga_grow(&evalarg->eval_tofree_ga, 1) == OK) - ((char_u **)evalarg->eval_tofree_ga.ga_data) - [evalarg->eval_tofree_ga.ga_len++] - = evalarg->eval_tofree; - else - vim_free(evalarg->eval_tofree); - } + if (evalarg->eval_tofree == NULL) + return; + + if (ga_grow(&evalarg->eval_tofree_ga, 1) == OK) + ((char_u **)evalarg->eval_tofree_ga.ga_data) + [evalarg->eval_tofree_ga.ga_len++] + = evalarg->eval_tofree; + else + vim_free(evalarg->eval_tofree); } /* @@ -421,39 +422,39 @@ free_eval_tofree_later(evalarg_T *evalarg) void clear_evalarg(evalarg_T *evalarg, exarg_T *eap) { - if (evalarg != NULL) - { - garray_T *etga = &evalarg->eval_tofree_ga; + if (evalarg == NULL) + return; - if (evalarg->eval_tofree != NULL || evalarg->eval_using_cmdline) + garray_T *etga = &evalarg->eval_tofree_ga; + + if (evalarg->eval_tofree != NULL || evalarg->eval_using_cmdline) + { + if (eap != NULL) { - if (eap != NULL) - { - // We may need to keep the original command line, e.g. for - // ":let" it has the variable names. But we may also need - // the new one, "nextcmd" points into it. Keep both. - vim_free(eap->cmdline_tofree); - eap->cmdline_tofree = *eap->cmdlinep; + // We may need to keep the original command line, e.g. for + // ":let" it has the variable names. But we may also need + // the new one, "nextcmd" points into it. Keep both. + vim_free(eap->cmdline_tofree); + eap->cmdline_tofree = *eap->cmdlinep; - if (evalarg->eval_using_cmdline && etga->ga_len > 0) - { - // "nextcmd" points into the last line in eval_tofree_ga, - // need to keep it around. - --etga->ga_len; - *eap->cmdlinep = ((char_u **)etga->ga_data)[etga->ga_len]; - vim_free(evalarg->eval_tofree); - } - else - *eap->cmdlinep = evalarg->eval_tofree; + if (evalarg->eval_using_cmdline && etga->ga_len > 0) + { + // "nextcmd" points into the last line in eval_tofree_ga, + // need to keep it around. + --etga->ga_len; + *eap->cmdlinep = ((char_u **)etga->ga_data)[etga->ga_len]; + vim_free(evalarg->eval_tofree); } else - vim_free(evalarg->eval_tofree); - evalarg->eval_tofree = NULL; + *eap->cmdlinep = evalarg->eval_tofree; } - - ga_clear_strings(etga); - VIM_CLEAR(evalarg->eval_tofree_lambda); + else + vim_free(evalarg->eval_tofree); + evalarg->eval_tofree = NULL; } + + ga_clear_strings(etga); + VIM_CLEAR(evalarg->eval_tofree_lambda); } /* @@ -3219,16 +3220,16 @@ eval_addblob(typval_T *tv1, typval_T *tv2) blob_T *b = blob_alloc(); int i; - if (b != NULL) - { - for (i = 0; i < blob_len(b1); i++) - ga_append(&b->bv_ga, blob_get(b1, i)); - for (i = 0; i < blob_len(b2); i++) - ga_append(&b->bv_ga, blob_get(b2, i)); + if (b == NULL) + return; - clear_tv(tv1); - rettv_blob_set(tv1, b); - } + for (i = 0; i < blob_len(b1); i++) + ga_append(&b->bv_ga, blob_get(b1, i)); + for (i = 0; i < blob_len(b2); i++) + ga_append(&b->bv_ga, blob_get(b2, i)); + + clear_tv(tv1); + rettv_blob_set(tv1, b); } /* @@ -4818,13 +4819,13 @@ f_slice(typval_T *argvars, typval_T *rettv) || check_for_opt_number_arg(argvars, 2) == FAIL)) return; - if (check_can_index(argvars, TRUE, FALSE) == OK) - { - copy_tv(argvars, rettv); - eval_index_inner(rettv, TRUE, argvars + 1, - argvars[2].v_type == VAR_UNKNOWN ? NULL : argvars + 2, - TRUE, NULL, 0, FALSE); - } + if (check_can_index(argvars, TRUE, FALSE) != OK) + return; + + copy_tv(argvars, rettv); + eval_index_inner(rettv, TRUE, argvars + 1, + argvars[2].v_type == VAR_UNKNOWN ? NULL : argvars + 2, + TRUE, NULL, 0, FALSE); } /* @@ -5045,31 +5046,31 @@ partial_free(partial_T *pt) void partial_unref(partial_T *pt) { - if (pt != NULL) - { - int done = FALSE; + if (pt == NULL) + return; - if (--pt->pt_refcount <= 0) - partial_free(pt); + int done = FALSE; - // If the reference count goes down to one, the funcstack may be the - // only reference and can be freed if no other partials reference it. - else if (pt->pt_refcount == 1) - { - // careful: if the funcstack is freed it may contain this partial - // and it gets freed as well - if (pt->pt_funcstack != NULL) - done = funcstack_check_refcount(pt->pt_funcstack); + if (--pt->pt_refcount <= 0) + partial_free(pt); - if (!done) - { - int depth; + // If the reference count goes down to one, the funcstack may be the + // only reference and can be freed if no other partials reference it. + else if (pt->pt_refcount == 1) + { + // careful: if the funcstack is freed it may contain this partial + // and it gets freed as well + if (pt->pt_funcstack != NULL) + done = funcstack_check_refcount(pt->pt_funcstack); - for (depth = 0; depth < MAX_LOOP_DEPTH; ++depth) - if (pt->pt_loopvars[depth] != NULL - && loopvars_check_refcount(pt->pt_loopvars[depth])) + if (!done) + { + int depth; + + for (depth = 0; depth < MAX_LOOP_DEPTH; ++depth) + if (pt->pt_loopvars[depth] != NULL + && loopvars_check_refcount(pt->pt_loopvars[depth])) break; - } } } } @@ -7225,23 +7226,23 @@ last_set_msg(sctx_T script_ctx) { char_u *p; - if (script_ctx.sc_sid != 0) + if (script_ctx.sc_sid == 0) + return; + + p = home_replace_save(NULL, get_scriptname(script_ctx.sc_sid)); + if (p == NULL) + return; + + verbose_enter(); + msg_puts(_("\n\tLast set from ")); + msg_puts((char *)p); + if (script_ctx.sc_lnum > 0) { - p = home_replace_save(NULL, get_scriptname(script_ctx.sc_sid)); - if (p != NULL) - { - verbose_enter(); - msg_puts(_("\n\tLast set from ")); - msg_puts((char *)p); - if (script_ctx.sc_lnum > 0) - { - msg_puts(_(line_msg)); - msg_outnum((long)script_ctx.sc_lnum); - } - verbose_leave(); - vim_free(p); - } + msg_puts(_(line_msg)); + msg_outnum((long)script_ctx.sc_lnum); } + verbose_leave(); + vim_free(p); } #endif // FEAT_EVAL |