diff options
author | ZyX <kp-pav@yandex.ru> | 2017-01-03 07:41:05 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-01-03 07:41:05 +0300 |
commit | 9c84f3ba3e517b6c6b196387ac50d40daeacf165 (patch) | |
tree | 71bb4fffb771376ed141453ac5fcb906655a4697 | |
parent | a5bdd64a5e2b2e5f21ecdf9a04bbf6fdd787f8a9 (diff) | |
download | rneovim-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.h | 8 | ||||
-rw-r--r-- | src/nvim/eval/typval_encode.h | 3 |
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. |