Mercurial > vim
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 { |