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;