comparison src/eval.c @ 13244:ac42c4b11dbc v8.0.1496

patch 8.0.1496: clearing a pointer takes two lines commit https://github.com/vim/vim/commit/d23a823669d93fb2a570a039173eefe4856ac806 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 10 18:45:26 2018 +0100 patch 8.0.1496: clearing a pointer takes two lines Problem: Clearing a pointer takes two lines. Solution: Add VIM_CLEAR() and replace vim_clear(). (Hirohito Higashi, closes #2629)
author Christian Brabandt <cb@256bit.org>
date Sat, 10 Feb 2018 19:00:07 +0100
parents 6e81a68d63a1
children 69278c25429d
comparison
equal deleted inserted replaced
13243:899b19739188 13244:ac42c4b11dbc
359 359
360 for (i = 0; i < VV_LEN; ++i) 360 for (i = 0; i < VV_LEN; ++i)
361 { 361 {
362 p = &vimvars[i]; 362 p = &vimvars[i];
363 if (p->vv_di.di_tv.v_type == VAR_STRING) 363 if (p->vv_di.di_tv.v_type == VAR_STRING)
364 { 364 VIM_CLEAR(p->vv_str);
365 vim_free(p->vv_str);
366 p->vv_str = NULL;
367 }
368 else if (p->vv_di.di_tv.v_type == VAR_LIST) 365 else if (p->vv_di.di_tv.v_type == VAR_LIST)
369 { 366 {
370 list_unref(p->vv_list); 367 list_unref(p->vv_list);
371 p->vv_list = NULL; 368 p->vv_list = NULL;
372 } 369 }
567 set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); 564 set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)".");
568 clear_lval(redir_lval); 565 clear_lval(redir_lval);
569 } 566 }
570 567
571 /* free the collected output */ 568 /* free the collected output */
572 vim_free(redir_ga.ga_data); 569 VIM_CLEAR(redir_ga.ga_data);
573 redir_ga.ga_data = NULL; 570
574 571 VIM_CLEAR(redir_lval);
575 vim_free(redir_lval); 572 }
576 redir_lval = NULL; 573 VIM_CLEAR(redir_varname);
577 }
578 vim_free(redir_varname);
579 redir_varname = NULL;
580 } 574 }
581 575
582 # if defined(FEAT_MBYTE) || defined(PROTO) 576 # if defined(FEAT_MBYTE) || defined(PROTO)
583 int 577 int
584 eval_charconvert( 578 eval_charconvert(
1007 { 1001 {
1008 typval_T *tv; 1002 typval_T *tv;
1009 1003
1010 tv = (typval_T *)alloc(sizeof(typval_T)); 1004 tv = (typval_T *)alloc(sizeof(typval_T));
1011 if (tv != NULL && eval0(arg, tv, nextcmd, TRUE) == FAIL) 1005 if (tv != NULL && eval0(arg, tv, nextcmd, TRUE) == FAIL)
1012 { 1006 VIM_CLEAR(tv);
1013 vim_free(tv);
1014 tv = NULL;
1015 }
1016 1007
1017 return tv; 1008 return tv;
1018 } 1009 }
1019 1010
1020 1011
3211 3202
3212 /* v: variables */ 3203 /* v: variables */
3213 if (vidx < VV_LEN) 3204 if (vidx < VV_LEN)
3214 return cat_prefix_varname('v', (char_u *)vimvars[vidx++].vv_name); 3205 return cat_prefix_varname('v', (char_u *)vimvars[vidx++].vv_name);
3215 3206
3216 vim_free(varnamebuf); 3207 VIM_CLEAR(varnamebuf);
3217 varnamebuf = NULL;
3218 varnamebuflen = 0; 3208 varnamebuflen = 0;
3219 return NULL; 3209 return NULL;
3220 } 3210 }
3221 3211
3222 #endif /* FEAT_CMDL_COMPL */ 3212 #endif /* FEAT_CMDL_COMPL */
6094 vim_free(string); 6084 vim_free(string);
6095 6085
6096 /* next try expanding things like $VIM and ${HOME} */ 6086 /* next try expanding things like $VIM and ${HOME} */
6097 string = expand_env_save(name - 1); 6087 string = expand_env_save(name - 1);
6098 if (string != NULL && *string == '$') 6088 if (string != NULL && *string == '$')
6099 { 6089 VIM_CLEAR(string);
6100 vim_free(string);
6101 string = NULL;
6102 }
6103 } 6090 }
6104 name[len] = cc; 6091 name[len] = cc;
6105 6092
6106 rettv->v_type = VAR_STRING; 6093 rettv->v_type = VAR_STRING;
6107 rettv->vval.v_string = string; 6094 rettv->vval.v_string = string;
7114 { 7101 {
7115 case VAR_FUNC: 7102 case VAR_FUNC:
7116 func_unref(varp->vval.v_string); 7103 func_unref(varp->vval.v_string);
7117 /* FALLTHROUGH */ 7104 /* FALLTHROUGH */
7118 case VAR_STRING: 7105 case VAR_STRING:
7119 vim_free(varp->vval.v_string); 7106 VIM_CLEAR(varp->vval.v_string);
7120 varp->vval.v_string = NULL;
7121 break; 7107 break;
7122 case VAR_PARTIAL: 7108 case VAR_PARTIAL:
7123 partial_unref(varp->vval.v_partial); 7109 partial_unref(varp->vval.v_partial);
7124 varp->vval.v_partial = NULL; 7110 varp->vval.v_partial = NULL;
7125 break; 7111 break;