comparison src/dict.c @ 14303:f761a55a8aed v8.1.0167

patch 8.1.0167: lock flag in new dictitem is reset in many places commit https://github.com/vim/vim/commit/c89d4b35300b98cf68b14c89c8e1add51bd857e3 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 8 17:19:02 2018 +0200 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.
author Christian Brabandt <cb@256bit.org>
date Sun, 08 Jul 2018 17:30:06 +0200
parents 3c80092eb211
children c338c91086b9
comparison
equal deleted inserted replaced
14302:35465f8b5195 14303:f761a55a8aed
186 } 186 }
187 187
188 /* 188 /*
189 * Allocate a Dictionary item. 189 * Allocate a Dictionary item.
190 * The "key" is copied to the new item. 190 * The "key" is copied to the new item.
191 * Note that the value of the item "di_tv" still needs to be initialized! 191 * Note that the type and value of the item "di_tv" still needs to be
192 * initialized!
192 * Returns NULL when out of memory. 193 * Returns NULL when out of memory.
193 */ 194 */
194 dictitem_T * 195 dictitem_T *
195 dictitem_alloc(char_u *key) 196 dictitem_alloc(char_u *key)
196 { 197 {
199 di = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T) + STRLEN(key))); 200 di = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T) + STRLEN(key)));
200 if (di != NULL) 201 if (di != NULL)
201 { 202 {
202 STRCPY(di->di_key, key); 203 STRCPY(di->di_key, key);
203 di->di_flags = DI_FLAGS_ALLOC; 204 di->di_flags = DI_FLAGS_ALLOC;
205 di->di_tv.v_lock = 0;
204 } 206 }
205 return di; 207 return di;
206 } 208 }
207 209
208 /* 210 /*
336 dictitem_T *item; 338 dictitem_T *item;
337 339
338 item = dictitem_alloc((char_u *)key); 340 item = dictitem_alloc((char_u *)key);
339 if (item == NULL) 341 if (item == NULL)
340 return FAIL; 342 return FAIL;
341 item->di_tv.v_lock = 0;
342 item->di_tv.v_type = VAR_NUMBER; 343 item->di_tv.v_type = VAR_NUMBER;
343 item->di_tv.vval.v_number = nr; 344 item->di_tv.vval.v_number = nr;
344 if (dict_add(d, item) == FAIL) 345 if (dict_add(d, item) == FAIL)
345 { 346 {
346 dictitem_free(item); 347 dictitem_free(item);
359 dictitem_T *item; 360 dictitem_T *item;
360 361
361 item = dictitem_alloc((char_u *)key); 362 item = dictitem_alloc((char_u *)key);
362 if (item == NULL) 363 if (item == NULL)
363 return FAIL; 364 return FAIL;
364 item->di_tv.v_lock = 0;
365 item->di_tv.v_type = VAR_STRING; 365 item->di_tv.v_type = VAR_STRING;
366 item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL; 366 item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL;
367 if (dict_add(d, item) == FAIL) 367 if (dict_add(d, item) == FAIL)
368 { 368 {
369 dictitem_free(item); 369 dictitem_free(item);
382 dictitem_T *item; 382 dictitem_T *item;
383 383
384 item = dictitem_alloc((char_u *)key); 384 item = dictitem_alloc((char_u *)key);
385 if (item == NULL) 385 if (item == NULL)
386 return FAIL; 386 return FAIL;
387 item->di_tv.v_lock = 0;
388 item->di_tv.v_type = VAR_LIST; 387 item->di_tv.v_type = VAR_LIST;
389 item->di_tv.vval.v_list = list; 388 item->di_tv.vval.v_list = list;
390 ++list->lv_refcount; 389 ++list->lv_refcount;
391 if (dict_add(d, item) == FAIL) 390 if (dict_add(d, item) == FAIL)
392 { 391 {
406 dictitem_T *item; 405 dictitem_T *item;
407 406
408 item = dictitem_alloc((char_u *)key); 407 item = dictitem_alloc((char_u *)key);
409 if (item == NULL) 408 if (item == NULL)
410 return FAIL; 409 return FAIL;
411 item->di_tv.v_lock = 0;
412 item->di_tv.v_type = VAR_DICT; 410 item->di_tv.v_type = VAR_DICT;
413 item->di_tv.vval.v_dict = dict; 411 item->di_tv.vval.v_dict = dict;
414 ++dict->dv_refcount; 412 ++dict->dv_refcount;
415 if (dict_add(d, item) == FAIL) 413 if (dict_add(d, item) == FAIL)
416 { 414 {