aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-01-03 07:41:05 +0300
committerZyX <kp-pav@yandex.ru>2017-01-03 07:41:05 +0300
commit9c84f3ba3e517b6c6b196387ac50d40daeacf165 (patch)
tree71bb4fffb771376ed141453ac5fcb906655a4697
parenta5bdd64a5e2b2e5f21ecdf9a04bbf6fdd787f8a9 (diff)
downloadrneovim-9c84f3ba3e517b6c6b196387ac50d40daeacf165.tar.gz
rneovim-9c84f3ba3e517b6c6b196387ac50d40daeacf165.tar.bz2
rneovim-9c84f3ba3e517b6c6b196387ac50d40daeacf165.zip
eval/typval_encode: Provide proper values as dict argument
-rw-r--r--src/nvim/eval/typval_encode.c.h8
-rw-r--r--src/nvim/eval/typval_encode.h3
2 files changed, 8 insertions, 3 deletions
diff --git a/src/nvim/eval/typval_encode.c.h b/src/nvim/eval/typval_encode.c.h
index 8caffaf7f5..74d0aac083 100644
--- a/src/nvim/eval/typval_encode.c.h
+++ b/src/nvim/eval/typval_encode.c.h
@@ -552,6 +552,7 @@ _convert_one_value_regular_dict:
.data = {
.d = {
.dict = tv->vval.v_dict,
+ .dictp = &tv->vval.v_dict,
.hi = tv->vval.v_dict->dv_hashtab.ht_array,
.todo = tv->vval.v_dict->dv_hashtab.ht_used,
},
@@ -602,12 +603,12 @@ TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
if (!cur_mpsv->data.d.todo) {
(void)_mp_pop(mpstack);
cur_mpsv->data.d.dict->dv_copyID = copyID - 1;
- TYPVAL_ENCODE_CONV_DICT_END(cur_mpsv->tv, cur_mpsv->tv->vval.v_dict);
+ TYPVAL_ENCODE_CONV_DICT_END(cur_mpsv->tv, *cur_mpsv->data.d.dictp);
continue;
} else if (cur_mpsv->data.d.todo
!= cur_mpsv->data.d.dict->dv_hashtab.ht_used) {
TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(cur_mpsv->tv,
- cur_mpsv->tv->vval.v_dict);
+ *cur_mpsv->data.d.dictp);
}
while (HASHITEM_EMPTY(cur_mpsv->data.d.hi)) {
cur_mpsv->data.d.hi++;
@@ -618,7 +619,7 @@ TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
TYPVAL_ENCODE_CONV_STR_STRING(NULL, &di->di_key[0],
strlen((char *)&di->di_key[0]));
TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(cur_mpsv->tv,
- cur_mpsv->tv->vval.v_dict);
+ *cur_mpsv->data.d.dictp);
tv = &di->di_tv;
break;
}
@@ -709,6 +710,7 @@ TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
.data = {
.d = {
.dict = dict,
+ .dictp = &pt->pt_dict,
.hi = dict->dv_hashtab.ht_array,
.todo = dict->dv_hashtab.ht_used,
},
diff --git a/src/nvim/eval/typval_encode.h b/src/nvim/eval/typval_encode.h
index 5813059cda..c2629caa39 100644
--- a/src/nvim/eval/typval_encode.h
+++ b/src/nvim/eval/typval_encode.h
@@ -192,6 +192,9 @@ typedef struct {
union {
struct {
dict_T *dict; ///< Currently converted dictionary.
+ dict_T **dictp; ///< Location where that dictionary is stored.
+ ///< Normally it is &.tv->vval.v_dict, but not when
+ ///< converting partials.
hashitem_T *hi; ///< Currently converted dictionary item.
size_t todo; ///< Amount of items left to process.
} d; ///< State of dictionary conversion.