diff options
author | ZyX <kp-pav@yandex.ru> | 2017-01-06 23:32:04 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-01-06 23:32:04 +0300 |
commit | 1052009b3733fb7c4f2fa03faea8fb177f596dd6 (patch) | |
tree | e8ea85ea8ca45ba571487b2cfd60b230f33126ae /src/nvim/eval/typval_encode.c.h | |
parent | 10c6e68db6a96efd5ed4d06a48f029c18880a3c1 (diff) | |
download | rneovim-1052009b3733fb7c4f2fa03faea8fb177f596dd6.tar.gz rneovim-1052009b3733fb7c4f2fa03faea8fb177f596dd6.tar.bz2 rneovim-1052009b3733fb7c4f2fa03faea8fb177f596dd6.zip |
eval/typval_encode: Dump empty dictionary before checking for refcycle
Otherwise copyID will stay forever on empty dictionaries.
Diffstat (limited to 'src/nvim/eval/typval_encode.c.h')
-rw-r--r-- | src/nvim/eval/typval_encode.c.h | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/nvim/eval/typval_encode.c.h b/src/nvim/eval/typval_encode.c.h index 668bdfb26a..3e1170b8fa 100644 --- a/src/nvim/eval/typval_encode.c.h +++ b/src/nvim/eval/typval_encode.c.h @@ -703,6 +703,10 @@ typval_encode_stop_converting_one_item: dict_T *const dict = pt == NULL ? NULL : pt->pt_dict; if (dict != NULL) { TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, dict->dv_hashtab.ht_used); + if (dict->dv_hashtab.ht_used == 0) { + TYPVAL_ENCODE_CONV_EMPTY_DICT(NULL, pt->pt_dict); + continue; + } const int te_csr_ret = _TYPVAL_ENCODE_CHECK_SELF_REFERENCE( TYPVAL_ENCODE_FIRST_ARG_NAME, dict, &dict->dv_copyID, &mpstack, copyID, kMPConvDict, @@ -714,24 +718,20 @@ typval_encode_stop_converting_one_item: continue; } } - if (dict->dv_hashtab.ht_used == 0) { - TYPVAL_ENCODE_CONV_EMPTY_DICT(NULL, pt->pt_dict); - } else { - TYPVAL_ENCODE_CONV_DICT_START(NULL, pt->pt_dict, - dict->dv_hashtab.ht_used); - _mp_push(mpstack, ((MPConvStackVal) { - .type = kMPConvDict, - .tv = NULL, - .data = { - .d = { - .dict = dict, - .dictp = &pt->pt_dict, - .hi = dict->dv_hashtab.ht_array, - .todo = dict->dv_hashtab.ht_used, - }, + TYPVAL_ENCODE_CONV_DICT_START(NULL, pt->pt_dict, + dict->dv_hashtab.ht_used); + _mp_push(mpstack, ((MPConvStackVal) { + .type = kMPConvDict, + .tv = NULL, + .data = { + .d = { + .dict = dict, + .dictp = &pt->pt_dict, + .hi = dict->dv_hashtab.ht_array, + .todo = dict->dv_hashtab.ht_used, }, - })); - } + }, + })); } else { TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, -1); } |