Problem: Lock flag in new dictitem is reset in many places.
Solution: Always reset the lock flag.
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)
/*
* 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 *
{
STRCPY(di->di_key, key);
di->di_flags = DI_FLAGS_ALLOC;
+ di->di_tv.v_lock = 0;
}
return di;
}
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)
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)
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;
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;
di->di_tv.v_type = VAR_FUNC;
di->di_tv.vval.v_string = vim_strsave(timer->tr_callback);
}
- di->di_tv.v_lock = 0;
}
}
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);
PyErr_NoMemory();
return -1;
}
- di->di_tv.v_lock = 0;
di->di_tv.v_type = VAR_UNKNOWN;
if (dict_add(dict, di) == FAIL)
PyErr_NoMemory();
return NULL;
}
- di->di_tv.v_lock = 0;
di->di_tv.v_type = VAR_UNKNOWN;
valObject = PySequence_Fast_GET_ITEM(fast, 1);
dict_unref(dict);
return -1;
}
- di->di_tv.v_lock = 0;
if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
{
PyErr_NoMemory();
return -1;
}
- di->di_tv.v_lock = 0;
if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
{
/* 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 */
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 167,
/**/
166,
/**/