From: Bram Moolenaar Date: Sat, 27 Aug 2016 18:34:01 +0000 (+0200) Subject: patch 7.4.2272 X-Git-Tag: v7.4.2272 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f8187c335b4fb07be9095dfdd0fc52670ba3c3f;p=vim 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 88392305e..1a2ea8621 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -3922,7 +3922,6 @@ get_buffer_info(buf_T *buf) { dict_T *dict; dict_T *opts; - dict_T *vars; tabpage_T *tp; win_T *wp; list_T *windows; @@ -3943,10 +3942,8 @@ get_buffer_info(buf_T *buf) 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 @@ get_tabpage_info(tabpage_T *tp, int tp_idx) { win_T *wp; dict_T *dict; - dict_T *vars; list_T *l; dict = dict_alloc(); @@ -5012,10 +5008,8 @@ get_tabpage_info(tabpage_T *tp, int tp_idx) 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 @@ f_gettabwinvar(typval_T *argvars, typval_T *rettv) 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 @@ get_win_info(win_T *wp, short tpnr, short winnr) (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 2384d4d42..8f435dba3 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2272, /**/ 2271, /**/