From c89d4b35300b98cf68b14c89c8e1add51bd857e3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 8 Jul 2018 17:19:02 +0200 Subject: patch 8.1.0167: lock flag in new dictitem is reset in many places Problem: Lock flag in new dictitem is reset in many places. Solution: Always reset the lock flag. --- src/channel.c | 1 - src/dict.c | 8 +++----- src/ex_cmds2.c | 1 - src/if_perl.xs | 6 ++---- src/if_py_both.h | 4 ---- src/userfunc.c | 1 - src/version.c | 2 ++ 7 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/channel.c b/src/channel.c index c62da8bd31..de2f50de2b 100644 --- a/src/channel.c +++ b/src/channel.c @@ -5742,7 +5742,6 @@ job_info(job_T *job, dict_T *dict) item = dictitem_alloc((char_u *)"channel"); if (item == NULL) return; - item->di_tv.v_lock = 0; item->di_tv.v_type = VAR_CHANNEL; item->di_tv.vval.v_channel = job->jv_channel; if (job->jv_channel != NULL) diff --git a/src/dict.c b/src/dict.c index e1f7fa23e8..c359e6f0f6 100644 --- a/src/dict.c +++ b/src/dict.c @@ -188,7 +188,8 @@ dict_free_items(int copyID) /* * Allocate a Dictionary item. * The "key" is copied to the new item. - * Note that the value of the item "di_tv" still needs to be initialized! + * Note that the type and value of the item "di_tv" still needs to be + * initialized! * Returns NULL when out of memory. */ dictitem_T * @@ -201,6 +202,7 @@ dictitem_alloc(char_u *key) { STRCPY(di->di_key, key); di->di_flags = DI_FLAGS_ALLOC; + di->di_tv.v_lock = 0; } return di; } @@ -338,7 +340,6 @@ dict_add_number(dict_T *d, char *key, varnumber_T nr) item = dictitem_alloc((char_u *)key); if (item == NULL) return FAIL; - item->di_tv.v_lock = 0; item->di_tv.v_type = VAR_NUMBER; item->di_tv.vval.v_number = nr; if (dict_add(d, item) == FAIL) @@ -361,7 +362,6 @@ dict_add_string(dict_T *d, char *key, char_u *str) item = dictitem_alloc((char_u *)key); if (item == NULL) return FAIL; - item->di_tv.v_lock = 0; item->di_tv.v_type = VAR_STRING; item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL; if (dict_add(d, item) == FAIL) @@ -384,7 +384,6 @@ dict_add_list(dict_T *d, char *key, list_T *list) item = dictitem_alloc((char_u *)key); if (item == NULL) return FAIL; - item->di_tv.v_lock = 0; item->di_tv.v_type = VAR_LIST; item->di_tv.vval.v_list = list; ++list->lv_refcount; @@ -408,7 +407,6 @@ dict_add_dict(dict_T *d, char *key, dict_T *dict) item = dictitem_alloc((char_u *)key); if (item == NULL) return FAIL; - item->di_tv.v_lock = 0; item->di_tv.v_type = VAR_DICT; item->di_tv.vval.v_dict = dict; ++dict->dv_refcount; diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index 6887ca1358..cb046357db 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -1524,7 +1524,6 @@ add_timer_info(typval_T *rettv, timer_T *timer) di->di_tv.v_type = VAR_FUNC; di->di_tv.vval.v_string = vim_strsave(timer->tr_callback); } - di->di_tv.v_lock = 0; } } diff --git a/src/if_perl.xs b/src/if_perl.xs index 7b45033fff..40955ebf0e 100644 --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -1200,10 +1200,8 @@ perl_to_vim(SV *sv, typval_T *rettv) if ((item = dictitem_alloc((char_u *)key)) == NULL) break; - - item->di_tv.v_type = VAR_NUMBER; - item->di_tv.v_lock = 0; - item->di_tv.vval.v_number = 0; + item->di_tv.v_type = VAR_NUMBER; + item->di_tv.vval.v_number = 0; if (dict_add(dict, item) == FAIL) { dictitem_free(item); diff --git a/src/if_py_both.h b/src/if_py_both.h index 526cbd7848..417f86cbb9 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -1832,7 +1832,6 @@ DictionaryAssItem( PyErr_NoMemory(); return -1; } - di->di_tv.v_lock = 0; di->di_tv.v_type = VAR_UNKNOWN; if (dict_add(dict, di) == FAIL) @@ -2038,7 +2037,6 @@ DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs) PyErr_NoMemory(); return NULL; } - di->di_tv.v_lock = 0; di->di_tv.v_type = VAR_UNKNOWN; valObject = PySequence_Fast_GET_ITEM(fast, 1); @@ -5852,7 +5850,6 @@ pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict) dict_unref(dict); return -1; } - di->di_tv.v_lock = 0; if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1) { @@ -5950,7 +5947,6 @@ pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict) PyErr_NoMemory(); return -1; } - di->di_tv.v_lock = 0; if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1) { diff --git a/src/userfunc.c b/src/userfunc.c index 1c17737ac7..71acaecc3a 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -2390,7 +2390,6 @@ ex_function(exarg_T *eap) /* overwrite existing dict entry */ clear_tv(&fudi.fd_di->di_tv); fudi.fd_di->di_tv.v_type = VAR_FUNC; - fudi.fd_di->di_tv.v_lock = 0; fudi.fd_di->di_tv.vval.v_string = vim_strsave(name); /* behave like "dict" was used */ diff --git a/src/version.c b/src/version.c index dd3fb19f35..43d3616d5b 100644 --- a/src/version.c +++ b/src/version.c @@ -789,6 +789,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 167, /**/ 166, /**/ -- cgit v1.2.3