aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval_encode.c.h
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-01-06 23:32:04 +0300
committerZyX <kp-pav@yandex.ru>2017-01-06 23:32:04 +0300
commit1052009b3733fb7c4f2fa03faea8fb177f596dd6 (patch)
treee8ea85ea8ca45ba571487b2cfd60b230f33126ae /src/nvim/eval/typval_encode.c.h
parent10c6e68db6a96efd5ed4d06a48f029c18880a3c1 (diff)
downloadrneovim-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.h34
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);
}