Mercurial > vim
comparison src/eval.c @ 51:8c25f10d49e7 v7.0028
updated for version 7.0028
author | vimboss |
---|---|
date | Sun, 02 Jan 2005 11:43:19 +0000 |
parents | f55897d6921d |
children | dbf53ece2e23 |
comparison
equal
deleted
inserted
replaced
50:90188be4861f | 51:8c25f10d49e7 |
---|---|
416 static garray_T *find_var_ga __ARGS((char_u *name, char_u **varname)); | 416 static garray_T *find_var_ga __ARGS((char_u *name, char_u **varname)); |
417 static void var_free_one __ARGS((VAR v)); | 417 static void var_free_one __ARGS((VAR v)); |
418 static void list_one_var __ARGS((VAR v, char_u *prefix)); | 418 static void list_one_var __ARGS((VAR v, char_u *prefix)); |
419 static void list_vim_var __ARGS((int i)); | 419 static void list_vim_var __ARGS((int i)); |
420 static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string)); | 420 static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string)); |
421 static void set_var __ARGS((char_u *name, VAR varp)); | 421 static void set_var __ARGS((char_u *name, VAR varp, int copy)); |
422 static void copy_var __ARGS((VAR from, VAR to)); | 422 static void copy_var __ARGS((VAR from, VAR to)); |
423 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags)); | 423 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags)); |
424 static char_u *trans_function_name __ARGS((char_u **pp, int skip, int internal)); | 424 static char_u *trans_function_name __ARGS((char_u **pp, int skip, int internal)); |
425 static int eval_fname_script __ARGS((char_u *p)); | 425 static int eval_fname_script __ARGS((char_u *p)); |
426 static int eval_fname_sid __ARGS((char_u *p)); | 426 static int eval_fname_sid __ARGS((char_u *p)); |
453 if (val != NULL) | 453 if (val != NULL) |
454 { | 454 { |
455 varp = alloc_string_var(val); | 455 varp = alloc_string_var(val); |
456 if (varp != NULL) | 456 if (varp != NULL) |
457 { | 457 { |
458 set_var(name, varp); | 458 set_var(name, varp, FALSE); |
459 free_var(varp); | 459 free_var(varp); |
460 } | 460 } |
461 } | 461 } |
462 } | 462 } |
463 | 463 |
1212 if (!aborting()) | 1212 if (!aborting()) |
1213 EMSG2(_(e_invarg2), arg); | 1213 EMSG2(_(e_invarg2), arg); |
1214 } | 1214 } |
1215 else | 1215 else |
1216 { | 1216 { |
1217 set_var(temp_string, &retvar); | 1217 set_var(temp_string, &retvar, TRUE); |
1218 vim_free(temp_string); | 1218 vim_free(temp_string); |
1219 } | 1219 } |
1220 } | 1220 } |
1221 #endif | 1221 #endif |
1222 else | 1222 else |
1223 { | 1223 { |
1224 c1 = *p; | 1224 c1 = *p; |
1225 *p = NUL; | 1225 *p = NUL; |
1226 set_var(arg, &retvar); | 1226 set_var(arg, &retvar, TRUE); |
1227 *p = c1; /* put char back for error messages */ | 1227 *p = c1; /* put char back for error messages */ |
1228 } | 1228 } |
1229 } | 1229 } |
1230 | 1230 |
1231 else | 1231 else |
6877 bufvarname = alloc((unsigned)STRLEN(varname) + 3); | 6877 bufvarname = alloc((unsigned)STRLEN(varname) + 3); |
6878 if (bufvarname != NULL) | 6878 if (bufvarname != NULL) |
6879 { | 6879 { |
6880 STRCPY(bufvarname, "b:"); | 6880 STRCPY(bufvarname, "b:"); |
6881 STRCPY(bufvarname + 2, varname); | 6881 STRCPY(bufvarname + 2, varname); |
6882 set_var(bufvarname, varp); | 6882 set_var(bufvarname, varp, TRUE); |
6883 vim_free(bufvarname); | 6883 vim_free(bufvarname); |
6884 } | 6884 } |
6885 } | 6885 } |
6886 | 6886 |
6887 /* reset notion of buffer */ | 6887 /* reset notion of buffer */ |
7038 winvarname = alloc((unsigned)STRLEN(varname) + 3); | 7038 winvarname = alloc((unsigned)STRLEN(varname) + 3); |
7039 if (winvarname != NULL) | 7039 if (winvarname != NULL) |
7040 { | 7040 { |
7041 STRCPY(winvarname, "w:"); | 7041 STRCPY(winvarname, "w:"); |
7042 STRCPY(winvarname + 2, varname); | 7042 STRCPY(winvarname + 2, varname); |
7043 set_var(winvarname, varp); | 7043 set_var(winvarname, varp, TRUE); |
7044 vim_free(winvarname); | 7044 vim_free(winvarname); |
7045 } | 7045 } |
7046 } | 7046 } |
7047 | 7047 |
7048 #ifdef FEAT_WINDOWS | 7048 #ifdef FEAT_WINDOWS |
7191 | 7191 |
7192 if (argvars[1].var_type != VAR_UNKNOWN && retvar->var_val.var_number > 0) | 7192 if (argvars[1].var_type != VAR_UNKNOWN && retvar->var_val.var_number > 0) |
7193 { | 7193 { |
7194 v.var_type = VAR_STRING; | 7194 v.var_type = VAR_STRING; |
7195 v.var_val.var_string = vim_strsave(s); | 7195 v.var_val.var_string = vim_strsave(s); |
7196 set_var(get_var_string(&argvars[1]), &v); | 7196 set_var(get_var_string(&argvars[1]), &v, FALSE); |
7197 vim_free(v.var_val.var_string); | |
7197 } | 7198 } |
7198 #else | 7199 #else |
7199 retvar->var_val.var_number = -1; | 7200 retvar->var_val.var_number = -1; |
7200 #endif | 7201 #endif |
7201 } | 7202 } |
7311 char_u str[30]; | 7312 char_u str[30]; |
7312 | 7313 |
7313 sprintf((char *)str, "0x%x", (unsigned int)w); | 7314 sprintf((char *)str, "0x%x", (unsigned int)w); |
7314 v.var_type = VAR_STRING; | 7315 v.var_type = VAR_STRING; |
7315 v.var_val.var_string = vim_strsave(str); | 7316 v.var_val.var_string = vim_strsave(str); |
7316 set_var(get_var_string(&argvars[2]), &v); | 7317 set_var(get_var_string(&argvars[2]), &v, FALSE); |
7318 vim_free(v.var_val.var_string); | |
7317 } | 7319 } |
7318 } | 7320 } |
7319 #endif | 7321 #endif |
7320 | 7322 |
7321 /* | 7323 /* |
9189 * Set variable "name" to value in "varp". | 9191 * Set variable "name" to value in "varp". |
9190 * If the variable already exists, the value is updated. | 9192 * If the variable already exists, the value is updated. |
9191 * Otherwise the variable is created. | 9193 * Otherwise the variable is created. |
9192 */ | 9194 */ |
9193 static void | 9195 static void |
9194 set_var(name, varp) | 9196 set_var(name, varp, copy) |
9195 char_u *name; | 9197 char_u *name; |
9196 VAR varp; | 9198 VAR varp; |
9199 int copy; /* make copy of value in "varp" */ | |
9197 { | 9200 { |
9198 int i; | 9201 int i; |
9199 VAR v; | 9202 VAR v; |
9200 char_u *varname; | 9203 char_u *varname; |
9201 garray_T *gap; | 9204 garray_T *gap; |
9213 else | 9216 else |
9214 { | 9217 { |
9215 if (vimvars[i].type == VAR_STRING) | 9218 if (vimvars[i].type == VAR_STRING) |
9216 { | 9219 { |
9217 vim_free(vimvars[i].val); | 9220 vim_free(vimvars[i].val); |
9218 vimvars[i].val = vim_strsave(get_var_string(varp)); | 9221 if (copy || varp->var_type != VAR_STRING) |
9222 vimvars[i].val = vim_strsave(get_var_string(varp)); | |
9223 else | |
9224 { | |
9225 /* Take over the string to avoid an extra alloc/free. */ | |
9226 vimvars[i].val = varp->var_val.var_string; | |
9227 varp->var_val.var_string = NULL; | |
9228 } | |
9219 } | 9229 } |
9220 else | 9230 else |
9221 vimvars[i].val = (char_u *)(long)varp->var_val.var_number; | 9231 vimvars[i].val = (char_u *)get_var_number(varp); |
9222 } | 9232 } |
9223 return; | 9233 return; |
9224 } | 9234 } |
9225 | 9235 |
9226 v = find_var(name, TRUE); | 9236 v = find_var(name, TRUE); |
9252 if ((v->var_name = vim_strsave(varname)) == NULL) | 9262 if ((v->var_name = vim_strsave(varname)) == NULL) |
9253 return; | 9263 return; |
9254 if (i == gap->ga_len) | 9264 if (i == gap->ga_len) |
9255 ++gap->ga_len; | 9265 ++gap->ga_len; |
9256 } | 9266 } |
9257 copy_var(varp, v); | 9267 if (copy || varp->var_type != VAR_STRING) |
9268 copy_var(varp, v); | |
9269 else | |
9270 { | |
9271 v->var_type = varp->var_type; | |
9272 v->var_val.var_string = varp->var_val.var_string; | |
9273 } | |
9258 } | 9274 } |
9259 | 9275 |
9260 static void | 9276 static void |
9261 copy_var(from, to) | 9277 copy_var(from, to) |
9262 VAR from; | 9278 VAR from; |
10661 } | 10677 } |
10662 } | 10678 } |
10663 /* assign the value to the variable */ | 10679 /* assign the value to the variable */ |
10664 if (varp != NULL) | 10680 if (varp != NULL) |
10665 { | 10681 { |
10666 set_var(virp->vir_line + 1, varp); | 10682 set_var(virp->vir_line + 1, varp, FALSE); |
10667 free_var(varp); | 10683 free_var(varp); |
10668 } | 10684 } |
10669 } | 10685 } |
10670 } | 10686 } |
10671 } | 10687 } |