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 }