eval: Fix errorneous early exit when converting lists and dictionaries

This commit is contained in:
ZyX
2017-01-03 17:28:57 +03:00
parent f21725946c
commit efc624c2fe
2 changed files with 10 additions and 2 deletions

View File

@@ -19151,7 +19151,7 @@ static inline int _nothing_conv_list_start(typval_T *const tv)
#define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \ #define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \
do { \ do { \
if (_nothing_conv_list_start(tv) != NOTDONE) { \ if (_nothing_conv_list_start(tv) != NOTDONE) { \
return OK; \ goto typval_encode_stop_converting_one_item; \
} \ } \
} while (0) } while (0)
@@ -19190,7 +19190,7 @@ static inline int _nothing_conv_dict_start(typval_T *const tv,
if (_nothing_conv_dict_start(tv, (dict_T **)&dict, \ if (_nothing_conv_dict_start(tv, (dict_T **)&dict, \
(void *)&TYPVAL_ENCODE_NODICT_VAR) \ (void *)&TYPVAL_ENCODE_NODICT_VAR) \
!= NOTDONE) { \ != NOTDONE) { \
return OK; \ goto typval_encode_stop_converting_one_item; \
} \ } \
} while (0) } while (0)

View File

@@ -565,7 +565,10 @@ _convert_one_value_regular_dict:
return FAIL; return FAIL;
} }
} }
typval_encode_stop_converting_one_item:
return OK; return OK;
// Prevent “unused label” warnings.
goto typval_encode_stop_converting_one_item;
} }
TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE( TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
@@ -595,6 +598,9 @@ TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
== FAIL) { == FAIL) {
goto encode_vim_to__error_ret; goto encode_vim_to__error_ret;
} }
/// Label common for this and convert_one_value functions, used for escaping
/// from macros like TYPVAL_ENCODE_CONV_DICT_START.
typval_encode_stop_converting_one_item:
while (_mp_size(mpstack)) { while (_mp_size(mpstack)) {
MPConvStackVal *cur_mpsv = &_mp_last(mpstack); MPConvStackVal *cur_mpsv = &_mp_last(mpstack);
typval_T *tv = NULL; typval_T *tv = NULL;
@@ -754,5 +760,7 @@ TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
encode_vim_to__error_ret: encode_vim_to__error_ret:
_mp_destroy(mpstack); _mp_destroy(mpstack);
return FAIL; return FAIL;
// Prevent “unused label” warnings.
goto typval_encode_stop_converting_one_item;
} }
#endif // NVIM_EVAL_TYPVAL_ENCODE_C_H #endif // NVIM_EVAL_TYPVAL_ENCODE_C_H