patch 7.4.2272
Problem: getbufinfo(), getwininfo() and gettabinfo() are inefficient.
Solution: Instead of making a copy of the variables dictionary, use a
reference.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 8839230..1a2ea86 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3922,7 +3922,6 @@
{
dict_T *dict;
dict_T *opts;
- dict_T *vars;
tabpage_T *tp;
win_T *wp;
list_T *windows;
@@ -3943,10 +3942,8 @@
buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0,
NULL);
- /* Copy buffer variables */
- vars = dict_copy(buf->b_vars, TRUE, 0);
- if (vars != NULL)
- dict_add_dict(dict, "variables", vars);
+ /* Get a reference to buffer variables */
+ dict_add_dict(dict, "variables", buf->b_vars);
/* Copy buffer options */
opts = get_winbuf_options(TRUE);
@@ -4994,7 +4991,6 @@
{
win_T *wp;
dict_T *dict;
- dict_T *vars;
list_T *l;
dict = dict_alloc();
@@ -5012,10 +5008,8 @@
dict_add_list(dict, "windows", l);
}
- /* Copy tabpage variables */
- vars = dict_copy(tp->tp_vars, TRUE, 0);
- if (vars != NULL)
- dict_add_dict(dict, "variables", vars);
+ /* Make a reference to tabpage variables */
+ dict_add_dict(dict, "variables", tp->tp_vars);
return dict;
}
@@ -5118,7 +5112,6 @@
get_win_info(win_T *wp, short tpnr, short winnr)
{
dict_T *dict;
- dict_T *vars;
dict_T *opts;
dict = dict_alloc();
@@ -5138,10 +5131,8 @@
(bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL), NULL);
#endif
- /* Copy window variables */
- vars = dict_copy(wp->w_vars, TRUE, 0);
- if (vars != NULL)
- dict_add_dict(dict, "variables", vars);
+ /* Make a reference to window variables */
+ dict_add_dict(dict, "variables", wp->w_vars);
/* Copy window options */
opts = get_winbuf_options(FALSE);
diff --git a/src/version.c b/src/version.c
index 2384d4d..8f435db 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2272,
+/**/
2271,
/**/
2270,