diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-07-08 16:50:37 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-07-08 16:50:37 +0200 |
commit | e0be167a805fd547c25ec1ec97fd4c7f13046236 (patch) | |
tree | 423fb96f7b30329ef0b7ccf3d4b2a02620e7929c /src/dict.c | |
parent | 4cde86c2ef885e82fff3d925dee9fb5671c025cf (diff) |
patch 8.1.0166: using dict_add_nr_str() is clumsyv8.1.0166
Problem: Using dict_add_nr_str() is clumsy.
Solution: Split into two functions. (Ozaki Kiichi, closes #3154)
Diffstat (limited to 'src/dict.c')
-rw-r--r-- | src/dict.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/dict.c b/src/dict.c index 55069783f2..e1f7fa23e8 100644 --- a/src/dict.c +++ b/src/dict.c @@ -327,16 +327,11 @@ dict_add(dict_T *d, dictitem_T *item) } /* - * Add a number or string entry to dictionary "d". - * When "str" is NULL use number "nr", otherwise use "str". + * Add a number entry to dictionary "d". * Returns FAIL when out of memory and when key already exists. */ int -dict_add_nr_str( - dict_T *d, - char *key, - varnumber_T nr, - char_u *str) +dict_add_number(dict_T *d, char *key, varnumber_T nr) { dictitem_T *item; @@ -344,16 +339,31 @@ dict_add_nr_str( if (item == NULL) return FAIL; item->di_tv.v_lock = 0; - if (str == NULL) - { - item->di_tv.v_type = VAR_NUMBER; - item->di_tv.vval.v_number = nr; - } - else + item->di_tv.v_type = VAR_NUMBER; + item->di_tv.vval.v_number = nr; + if (dict_add(d, item) == FAIL) { - item->di_tv.v_type = VAR_STRING; - item->di_tv.vval.v_string = vim_strsave(str); + dictitem_free(item); + return FAIL; } + return OK; +} + +/* + * Add a string entry to dictionary "d". + * Returns FAIL when out of memory and when key already exists. + */ + int +dict_add_string(dict_T *d, char *key, char_u *str) +{ + dictitem_T *item; + + 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) { dictitem_free(item); |