]> granicus.if.org Git - vim/commitdiff
patch 8.1.1583: set_ref_in_list() only sets ref in items v8.1.1583
authorBram Moolenaar <Bram@vim.org>
Sat, 22 Jun 2019 23:46:15 +0000 (01:46 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Jun 2019 23:46:15 +0000 (01:46 +0200)
Problem:    Set_ref_in_list() only sets ref in items.
Solution:   Rename to set_ref_in_list_items() to avoid confusion.

src/eval.c
src/if_lua.c
src/if_py_both.h
src/popupwin.c
src/proto/eval.pro
src/userfunc.c
src/version.c

index 085e7d7e9a9984c178f8c38279f74e4bfa4d84fb..3cfa4b7a554675d576147eba16670280ac71af18 100644 (file)
@@ -5840,6 +5840,36 @@ set_ref_in_ht(hashtab_T *ht, int copyID, list_stack_T **list_stack)
     return abort;
 }
 
+/*
+ * Mark a dict and its items with "copyID".
+ * Returns TRUE if setting references failed somehow.
+ */
+    int
+set_ref_in_dict(dict_T *d, int copyID)
+{
+    if (d != NULL && d->dv_copyID != copyID)
+    {
+       d->dv_copyID = copyID;
+       return set_ref_in_ht(&d->dv_hashtab, copyID, NULL);
+    }
+    return FALSE;
+}
+
+/*
+ * Mark a list and its items with "copyID".
+ * Returns TRUE if setting references failed somehow.
+ */
+    int
+set_ref_in_list(list_T *ll, int copyID)
+{
+    if (ll != NULL && ll->lv_copyID != copyID)
+    {
+       ll->lv_copyID = copyID;
+       return set_ref_in_list_items(ll, copyID, NULL);
+    }
+    return FALSE;
+}
+
 /*
  * Mark all lists and dicts referenced through list "l" with "copyID".
  * "ht_stack" is used to add hashtabs to be marked.  Can be NULL.
@@ -5847,7 +5877,7 @@ set_ref_in_ht(hashtab_T *ht, int copyID, list_stack_T **list_stack)
  * Returns TRUE if setting references failed somehow.
  */
     int
-set_ref_in_list(list_T *l, int copyID, ht_stack_T **ht_stack)
+set_ref_in_list_items(list_T *l, int copyID, ht_stack_T **ht_stack)
 {
     listitem_T  *li;
     int                 abort = FALSE;
@@ -5930,7 +5960,7 @@ set_ref_in_item(
            ll->lv_copyID = copyID;
            if (list_stack == NULL)
            {
-               abort = set_ref_in_list(ll, copyID, ht_stack);
+               abort = set_ref_in_list_items(ll, copyID, ht_stack);
            }
            else
            {
index cfb28852270bf9dc7921cd652c9f988930109add..4c0eb42a49b43f02f136aa4156a283e926565e51 100644 (file)
@@ -1980,31 +1980,19 @@ luaV_setref(lua_State *L)
        {
            list_T *l = (list_T *)lua_touserdata(L, 5); // key
 
-           if (l->lv_copyID != copyID)
-           {
-               l->lv_copyID = copyID;
-               abort = set_ref_in_list(l, copyID, NULL);
-           }
+           abort = set_ref_in_list(l, copyID);
        }
        else if (lua_rawequal(L, -1, 3)) // dict?
        {
            dict_T *d = (dict_T *)lua_touserdata(L, 5); // key
 
-           if (d->dv_copyID != copyID)
-           {
-               d->dv_copyID = copyID;
-               abort = set_ref_in_ht(&d->dv_hashtab, copyID, NULL);
-           }
+           abort = set_ref_in_dict(d, copyID);
        }
        else if (lua_rawequal(L, -1, 4)) // funcref?
        {
            luaV_Funcref *f = (luaV_Funcref *)lua_touserdata(L, 5); // key
 
-           if (f->self != NULL && f->self->dv_copyID != copyID)
-           {
-               f->self->dv_copyID = copyID;
-               abort = set_ref_in_ht(&f->self->dv_hashtab, copyID, NULL);
-           }
+           abort = set_ref_in_dict(f->self, copyID);
        }
        lua_pop(L, 2); // metatable and value
     }
index 5362d456366ffc2e4adbb06afe40bacce5fdbc9c..d836c7c91b882abe01ece312850e49fc54fe120f 100644 (file)
@@ -5832,23 +5832,16 @@ run_eval(const char *cmd, typval_T *rettv
 set_ref_in_py(const int copyID)
 {
     pylinkedlist_T     *cur;
-    dict_T     *dd;
-    list_T     *ll;
-    int                i;
-    int                abort = FALSE;
+    list_T             *ll;
+    int                        i;
+    int                        abort = FALSE;
     FunctionObject     *func;
 
     if (lastdict != NULL)
     {
        for (cur = lastdict ; !abort && cur != NULL ; cur = cur->pll_prev)
-       {
-           dd = ((DictionaryObject *) (cur->pll_obj))->dict;
-           if (dd->dv_copyID != copyID)
-           {
-               dd->dv_copyID = copyID;
-               abort = abort || set_ref_in_ht(&dd->dv_hashtab, copyID, NULL);
-           }
-       }
+           abort = set_ref_in_dict(((DictionaryObject *)(cur->pll_obj))->dict,
+                                                                      copyID);
     }
 
     if (lastlist != NULL)
@@ -5856,11 +5849,7 @@ set_ref_in_py(const int copyID)
        for (cur = lastlist ; !abort && cur != NULL ; cur = cur->pll_prev)
        {
            ll = ((ListObject *) (cur->pll_obj))->list;
-           if (ll->lv_copyID != copyID)
-           {
-               ll->lv_copyID = copyID;
-               abort = abort || set_ref_in_list(ll, copyID, NULL);
-           }
+           abort = set_ref_in_list(ll, copyID);
        }
     }
 
@@ -5869,12 +5858,7 @@ set_ref_in_py(const int copyID)
        for (cur = lastfunc ; !abort && cur != NULL ; cur = cur->pll_prev)
        {
            func = (FunctionObject *) cur->pll_obj;
-           if (func->self != NULL && func->self->dv_copyID != copyID)
-           {
-               func->self->dv_copyID = copyID;
-               abort = abort || set_ref_in_ht(
-                       &func->self->dv_hashtab, copyID, NULL);
-           }
+           abort = set_ref_in_dict(func->self, copyID);
            if (func->argc)
                for (i = 0; !abort && i < func->argc; ++i)
                    abort = abort
index d675a4484a5378039798548c1b0d9bff26af6c8a..f6da71da82ba14ea78e027f2feadbc80d77a1613 100644 (file)
@@ -2297,11 +2297,7 @@ set_ref_in_one_popup(win_T *wp, int copyID)
        tv.vval.v_partial = wp->w_filter_cb.cb_partial;
        abort = abort || set_ref_in_item(&tv, copyID, NULL, NULL);
     }
-    if (wp->w_popup_mask != NULL && wp->w_popup_mask->lv_copyID != copyID)
-    {
-       wp->w_popup_mask->lv_copyID = copyID;
-       abort = abort || set_ref_in_list(wp->w_popup_mask, copyID, NULL);
-    }
+    abort = abort || set_ref_in_list(wp->w_popup_mask, copyID);
     return abort;
 }
 
index 5e800adc891cb20f53c2bfd32216287f1e57284b..7831eb5960a6ffa600cc871709e8e28cba3186f5 100644 (file)
@@ -50,7 +50,9 @@ int tv_equal(typval_T *tv1, typval_T *tv2, int ic, int recursive);
 int get_copyID(void);
 int garbage_collect(int testing);
 int set_ref_in_ht(hashtab_T *ht, int copyID, list_stack_T **list_stack);
-int set_ref_in_list(list_T *l, int copyID, ht_stack_T **ht_stack);
+int set_ref_in_dict(dict_T *d, int copyID);
+int set_ref_in_list(list_T *ll, int copyID);
+int set_ref_in_list_items(list_T *l, int copyID, ht_stack_T **ht_stack);
 int set_ref_in_item(typval_T *tv, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack);
 char_u *echo_string_core(typval_T *tv, char_u **tofree, char_u *numbuf, int copyID, int echo_style, int restore_copyID, int composite_val);
 char_u *echo_string(typval_T *tv, char_u **tofree, char_u *numbuf, int copyID);
index 8d1df0ca8b25f5a6dbaec0ce0df0abca64033833..be993130d1a247b86b860a34a41344e23a23241f 100644 (file)
@@ -4000,7 +4000,7 @@ set_ref_in_previous_funccal(int copyID)
        abort = abort
            || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL)
            || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL)
-           || set_ref_in_list(&fc->l_varlist, copyID + 1, NULL);
+           || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL);
     }
     return abort;
 }
@@ -4016,7 +4016,7 @@ set_ref_in_funccal(funccall_T *fc, int copyID)
        abort = abort
            || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL)
            || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL)
-           || set_ref_in_list(&fc->l_varlist, copyID, NULL)
+           || set_ref_in_list_items(&fc->l_varlist, copyID, NULL)
            || set_ref_in_func(NULL, fc->func, copyID);
     }
     return abort;
index 2af29122c2cdfc132cced47476b7809566074680..9fec3b8836ffdd7dc76dd01122e3c4666d5dbc01 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1583,
 /**/
     1582,
 /**/