Mercurial > vim
comparison src/evalfunc.c @ 17893:e4d3b6c466d4 v8.1.1943
patch 8.1.1943: more code can be moved to evalvars.c
Commit: https://github.com/vim/vim/commit/8d71b54409ca6cf989dfb7d7fe265768fb7fe062
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Aug 30 15:46:30 2019 +0200
patch 8.1.1943: more code can be moved to evalvars.c
Problem: More code can be moved to evalvars.c.
Solution: Move it, clean up comments. Also move some window related
functions to window.c. (Yegappan Lakshmanan, closes #4874)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 30 Aug 2019 16:00:04 +0200 |
parents | d50a5faa75bd |
children | 9fac6d0de69a |
comparison
equal
deleted
inserted
replaced
17892:849f210a78a4 | 17893:e4d3b6c466d4 |
---|---|
19 #ifdef VMS | 19 #ifdef VMS |
20 # include <float.h> | 20 # include <float.h> |
21 #endif | 21 #endif |
22 | 22 |
23 #ifdef MACOS_X | 23 #ifdef MACOS_X |
24 # include <time.h> /* for time_t */ | 24 # include <time.h> // for time_t |
25 #endif | 25 #endif |
26 | 26 |
27 static char *e_listblobarg = N_("E899: Argument of %s must be a List or Blob"); | 27 static char *e_listblobarg = N_("E899: Argument of %s must be a List or Blob"); |
28 static char *e_stringreq = N_("E928: String required"); | 28 static char *e_stringreq = N_("E928: String required"); |
29 | 29 |
127 static void f_function(typval_T *argvars, typval_T *rettv); | 127 static void f_function(typval_T *argvars, typval_T *rettv); |
128 static void f_garbagecollect(typval_T *argvars, typval_T *rettv); | 128 static void f_garbagecollect(typval_T *argvars, typval_T *rettv); |
129 static void f_get(typval_T *argvars, typval_T *rettv); | 129 static void f_get(typval_T *argvars, typval_T *rettv); |
130 static void f_getbufinfo(typval_T *argvars, typval_T *rettv); | 130 static void f_getbufinfo(typval_T *argvars, typval_T *rettv); |
131 static void f_getbufline(typval_T *argvars, typval_T *rettv); | 131 static void f_getbufline(typval_T *argvars, typval_T *rettv); |
132 static void f_getbufvar(typval_T *argvars, typval_T *rettv); | |
133 static void f_getchangelist(typval_T *argvars, typval_T *rettv); | 132 static void f_getchangelist(typval_T *argvars, typval_T *rettv); |
134 static void f_getchar(typval_T *argvars, typval_T *rettv); | 133 static void f_getchar(typval_T *argvars, typval_T *rettv); |
135 static void f_getcharmod(typval_T *argvars, typval_T *rettv); | 134 static void f_getcharmod(typval_T *argvars, typval_T *rettv); |
136 static void f_getcharsearch(typval_T *argvars, typval_T *rettv); | 135 static void f_getcharsearch(typval_T *argvars, typval_T *rettv); |
137 static void f_getcmdline(typval_T *argvars, typval_T *rettv); | 136 static void f_getcmdline(typval_T *argvars, typval_T *rettv); |
278 static void f_searchpairpos(typval_T *argvars, typval_T *rettv); | 277 static void f_searchpairpos(typval_T *argvars, typval_T *rettv); |
279 static void f_searchpos(typval_T *argvars, typval_T *rettv); | 278 static void f_searchpos(typval_T *argvars, typval_T *rettv); |
280 static void f_server2client(typval_T *argvars, typval_T *rettv); | 279 static void f_server2client(typval_T *argvars, typval_T *rettv); |
281 static void f_serverlist(typval_T *argvars, typval_T *rettv); | 280 static void f_serverlist(typval_T *argvars, typval_T *rettv); |
282 static void f_setbufline(typval_T *argvars, typval_T *rettv); | 281 static void f_setbufline(typval_T *argvars, typval_T *rettv); |
283 static void f_setbufvar(typval_T *argvars, typval_T *rettv); | |
284 static void f_setcharsearch(typval_T *argvars, typval_T *rettv); | 282 static void f_setcharsearch(typval_T *argvars, typval_T *rettv); |
285 static void f_setcmdpos(typval_T *argvars, typval_T *rettv); | 283 static void f_setcmdpos(typval_T *argvars, typval_T *rettv); |
286 static void f_setenv(typval_T *argvars, typval_T *rettv); | 284 static void f_setenv(typval_T *argvars, typval_T *rettv); |
287 static void f_setfperm(typval_T *argvars, typval_T *rettv); | 285 static void f_setfperm(typval_T *argvars, typval_T *rettv); |
288 static void f_setline(typval_T *argvars, typval_T *rettv); | 286 static void f_setline(typval_T *argvars, typval_T *rettv); |
4392 | 4390 |
4393 get_buffer_lines(buf, lnum, end, TRUE, rettv); | 4391 get_buffer_lines(buf, lnum, end, TRUE, rettv); |
4394 } | 4392 } |
4395 | 4393 |
4396 /* | 4394 /* |
4397 * "getbufvar()" function | |
4398 */ | |
4399 static void | |
4400 f_getbufvar(typval_T *argvars, typval_T *rettv) | |
4401 { | |
4402 buf_T *buf; | |
4403 buf_T *save_curbuf; | |
4404 char_u *varname; | |
4405 dictitem_T *v; | |
4406 int done = FALSE; | |
4407 | |
4408 (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ | |
4409 varname = tv_get_string_chk(&argvars[1]); | |
4410 ++emsg_off; | |
4411 buf = tv_get_buf(&argvars[0], FALSE); | |
4412 | |
4413 rettv->v_type = VAR_STRING; | |
4414 rettv->vval.v_string = NULL; | |
4415 | |
4416 if (buf != NULL && varname != NULL) | |
4417 { | |
4418 /* set curbuf to be our buf, temporarily */ | |
4419 save_curbuf = curbuf; | |
4420 curbuf = buf; | |
4421 | |
4422 if (*varname == '&') | |
4423 { | |
4424 if (varname[1] == NUL) | |
4425 { | |
4426 /* get all buffer-local options in a dict */ | |
4427 dict_T *opts = get_winbuf_options(TRUE); | |
4428 | |
4429 if (opts != NULL) | |
4430 { | |
4431 rettv_dict_set(rettv, opts); | |
4432 done = TRUE; | |
4433 } | |
4434 } | |
4435 else if (get_option_tv(&varname, rettv, TRUE) == OK) | |
4436 /* buffer-local-option */ | |
4437 done = TRUE; | |
4438 } | |
4439 else | |
4440 { | |
4441 /* Look up the variable. */ | |
4442 /* Let getbufvar({nr}, "") return the "b:" dictionary. */ | |
4443 v = find_var_in_ht(&curbuf->b_vars->dv_hashtab, | |
4444 'b', varname, FALSE); | |
4445 if (v != NULL) | |
4446 { | |
4447 copy_tv(&v->di_tv, rettv); | |
4448 done = TRUE; | |
4449 } | |
4450 } | |
4451 | |
4452 /* restore previous notion of curbuf */ | |
4453 curbuf = save_curbuf; | |
4454 } | |
4455 | |
4456 if (!done && argvars[2].v_type != VAR_UNKNOWN) | |
4457 /* use the default value */ | |
4458 copy_tv(&argvars[2], rettv); | |
4459 | |
4460 --emsg_off; | |
4461 } | |
4462 | |
4463 /* | |
4464 * "getchangelist()" function | 4395 * "getchangelist()" function |
4465 */ | 4396 */ |
4466 static void | 4397 static void |
4467 f_getchangelist(typval_T *argvars, typval_T *rettv) | 4398 f_getchangelist(typval_T *argvars, typval_T *rettv) |
4468 { | 4399 { |
9747 lnum = tv_get_lnum_buf(&argvars[1], buf); | 9678 lnum = tv_get_lnum_buf(&argvars[1], buf); |
9748 set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); | 9679 set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); |
9749 } | 9680 } |
9750 } | 9681 } |
9751 | 9682 |
9752 /* | |
9753 * "setbufvar()" function | |
9754 */ | |
9755 static void | |
9756 f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED) | |
9757 { | |
9758 buf_T *buf; | |
9759 char_u *varname, *bufvarname; | |
9760 typval_T *varp; | |
9761 char_u nbuf[NUMBUFLEN]; | |
9762 | |
9763 if (check_secure()) | |
9764 return; | |
9765 (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ | |
9766 varname = tv_get_string_chk(&argvars[1]); | |
9767 buf = tv_get_buf(&argvars[0], FALSE); | |
9768 varp = &argvars[2]; | |
9769 | |
9770 if (buf != NULL && varname != NULL && varp != NULL) | |
9771 { | |
9772 if (*varname == '&') | |
9773 { | |
9774 long numval; | |
9775 char_u *strval; | |
9776 int error = FALSE; | |
9777 aco_save_T aco; | |
9778 | |
9779 /* set curbuf to be our buf, temporarily */ | |
9780 aucmd_prepbuf(&aco, buf); | |
9781 | |
9782 ++varname; | |
9783 numval = (long)tv_get_number_chk(varp, &error); | |
9784 strval = tv_get_string_buf_chk(varp, nbuf); | |
9785 if (!error && strval != NULL) | |
9786 set_option_value(varname, numval, strval, OPT_LOCAL); | |
9787 | |
9788 /* reset notion of buffer */ | |
9789 aucmd_restbuf(&aco); | |
9790 } | |
9791 else | |
9792 { | |
9793 buf_T *save_curbuf = curbuf; | |
9794 | |
9795 bufvarname = alloc(STRLEN(varname) + 3); | |
9796 if (bufvarname != NULL) | |
9797 { | |
9798 curbuf = buf; | |
9799 STRCPY(bufvarname, "b:"); | |
9800 STRCPY(bufvarname + 2, varname); | |
9801 set_var(bufvarname, varp, TRUE); | |
9802 vim_free(bufvarname); | |
9803 curbuf = save_curbuf; | |
9804 } | |
9805 } | |
9806 } | |
9807 } | |
9808 | |
9809 static void | 9683 static void |
9810 f_setcharsearch(typval_T *argvars, typval_T *rettv UNUSED) | 9684 f_setcharsearch(typval_T *argvars, typval_T *rettv UNUSED) |
9811 { | 9685 { |
9812 dict_T *d; | 9686 dict_T *d; |
9813 dictitem_T *di; | 9687 dictitem_T *di; |