Created
May 28, 2020 11:21
-
-
Save erw7/08d219b51ee475e3fa20a71dd313330d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static int encode_vim_to_nothing( | |
const void *const ignored, | |
typval_T *const tv, const char *const objname) | |
__attribute__((nonnull(2, 3))) __attribute__((warn_unused_result)); | |
static int encode_vim_to_nothing( | |
const void *const ignored, | |
typval_T *const top_tv, const char *const objname) | |
{ | |
const int copyID = get_copyID(); | |
MPConvStack mpstack; | |
((mpstack).capacity = ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0]))))), (mpstack).size = 0, (mpstack).items = (mpstack).init_array); | |
if (_typval_encode_nothing_convert_one_value(ignored, &mpstack, ((void *)0), top_tv, copyID, objname) == 0) { | |
goto encode_vim_to__error_ret; | |
} | |
typval_encode_stop_converting_one_item: | |
while (((mpstack).size)) { | |
MPConvStackVal *cur_mpsv = &((mpstack).items[(((mpstack).size) - (0) - 1)]); | |
typval_T *tv = ((void *)0); | |
switch (cur_mpsv->type) { | |
case kMPConvDict: { | |
if (!cur_mpsv->data.d.todo) { | |
(void)((mpstack).items[--(mpstack).size]); | |
cur_mpsv->data.d.dict->dv_copyID = cur_mpsv->saved_copyID; | |
_nothing_conv_dict_end(cur_mpsv->tv, (dict_T **)&*cur_mpsv->data.d.dictp, (void *)&_typval_encode_nothing_nodict_var); | |
continue; | |
} else if (cur_mpsv->data.d.todo != cur_mpsv->data.d.dict->dv_hashtab.ht_used) { | |
; | |
} | |
while (((cur_mpsv->data.d.hi)->hi_key == ((void *)0) | |
|| (cur_mpsv->data.d.hi)->hi_key == (char_u *)&hash_removed)) { | |
cur_mpsv->data.d.hi++; | |
} | |
dictitem_T *const di = | |
((dictitem_T *)((cur_mpsv->data.d.hi)->hi_key - __builtin_offsetof (dictitem_T, di_key))); | |
cur_mpsv->data.d.todo--; | |
cur_mpsv->data.d.hi++; | |
tv = &di->di_tv; | |
break; | |
} | |
case kMPConvList: { | |
if (cur_mpsv->data.l.li == ((void *)0)) { | |
(void)((mpstack).items[--(mpstack).size]); | |
tv_list_set_copyid(cur_mpsv->data.l.list, cur_mpsv->saved_copyID); | |
_nothing_conv_list_end(cur_mpsv->tv); | |
continue; | |
} else if (cur_mpsv->data.l.li != tv_list_first(cur_mpsv->data.l.list)) { | |
; | |
} | |
tv = (&(cur_mpsv->data.l.li)->li_tv); | |
cur_mpsv->data.l.li = ((cur_mpsv->data.l.li)->li_next); | |
break; | |
} | |
case kMPConvPairs: { | |
if (cur_mpsv->data.l.li == ((void *)0)) { | |
(void)((mpstack).items[--(mpstack).size]); | |
tv_list_set_copyid(cur_mpsv->data.l.list, cur_mpsv->saved_copyID); | |
_nothing_conv_dict_end(cur_mpsv->tv, (dict_T **)&_typval_encode_nothing_nodict_var, (void *)&_typval_encode_nothing_nodict_var); | |
continue; | |
} else if (cur_mpsv->data.l.li != tv_list_first(cur_mpsv->data.l.list)) { | |
; | |
} | |
const list_T *const kv_pair = ((&(cur_mpsv->data.l.li)->li_tv)->vval.v_list); | |
if (_typval_encode_nothing_convert_one_value(ignored, &mpstack, cur_mpsv, (&(tv_list_first(kv_pair))->li_tv), copyID, objname) == 0) { | |
goto encode_vim_to__error_ret; | |
} | |
tv = (&(tv_list_last(kv_pair))->li_tv); | |
cur_mpsv->data.l.li = ((cur_mpsv->data.l.li)->li_next); | |
break; | |
} | |
case kMPConvPartial: { | |
partial_T *const pt = cur_mpsv->data.p.pt; | |
tv = cur_mpsv->tv; | |
(void)tv; | |
switch (cur_mpsv->data.p.stage) { | |
case kMPConvPartialArgs: { | |
cur_mpsv->data.p.stage = kMPConvPartialSelf; | |
if (pt != ((void *)0) && pt->pt_argc > 0) { | |
; | |
(*((((mpstack).size == (mpstack).capacity) ? (((mpstack).capacity = (((mpstack).capacity << 1) > ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0]))))) ? ((mpstack).capacity << 1) : ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0])))))), (mpstack).items = ((mpstack).capacity == ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0]))))) ? ((mpstack).items == (mpstack).init_array ? (mpstack).items : _memcpy_free((mpstack).init_array, (mpstack).items, (mpstack).size * sizeof((mpstack).items[0]))) : ((mpstack).items == (mpstack).init_array ? memcpy(xmalloc((mpstack).capacity * sizeof((mpstack).items[0])), (mpstack).items, (mpstack).size * sizeof((mpstack).items[0])) : xrealloc((mpstack).items, (mpstack).capacity * sizeof((mpstack).items[0]))))), 0) : 0), ((mpstack).items + ((mpstack).size++))) = (((MPConvStackVal) { | |
.type = kMPConvPartialList, .tv = ((void *)0), | |
.saved_copyID = copyID - 1, | |
.data = { | |
.a = { | |
.arg = pt->pt_argv, | |
.argv = pt->pt_argv, | |
.todo = (size_t)pt->pt_argc, | |
}, | |
}, | |
}))); | |
} | |
break; | |
} | |
case kMPConvPartialSelf: { | |
cur_mpsv->data.p.stage = kMPConvPartialEnd; | |
dict_T *const dict = pt == ((void *)0) ? ((void *)0) : pt->pt_dict; | |
if (dict != ((void *)0)) { | |
if (dict->dv_hashtab.ht_used == 0) { | |
do { | |
(void) ((!!((void *)&pt->pt_dict != (void *)&_typval_encode_nothing_nodict_var)) | |
|| (_assert("(void *)&pt->pt_dict != (void *)&TYPVAL_ENCODE_NODICT_VAR", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",773),0)); | |
_nothing_conv_empty_dict(((void *)0), ((dict_T **)&pt->pt_dict)); | |
} while (0); | |
continue; | |
} | |
const int saved_copyID = dict->dv_copyID; | |
const int te_csr_ret = _typval_encode_nothing_check_self_reference(ignored, dict, &dict->dv_copyID, &mpstack, copyID, kMPConvDict, objname); | |
if (te_csr_ret != 2) { | |
if (te_csr_ret == 0) { | |
goto encode_vim_to__error_ret; | |
} else { | |
continue; | |
} | |
} | |
(void) ((!!(saved_copyID != copyID && saved_copyID != copyID - 1)) | |
|| (_assert("saved_copyID != copyID && saved_copyID != copyID - 1", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",790),0)); | |
(*((((mpstack).size == (mpstack).capacity) ? (((mpstack).capacity = (((mpstack).capacity << 1) > ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0]))))) ? ((mpstack).capacity << 1) : ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0])))))), (mpstack).items = ((mpstack).capacity == ((sizeof((mpstack).init_array)/sizeof(((mpstack).init_array)[0])) / ((size_t)(!(sizeof((mpstack).init_array) % sizeof(((mpstack).init_array)[0]))))) ? ((mpstack).items == (mpstack).init_array ? (mpstack).items : _memcpy_free((mpstack).init_array, (mpstack).items, (mpstack).size * sizeof((mpstack).items[0]))) : ((mpstack).items == (mpstack).init_array ? memcpy(xmalloc((mpstack).capacity * sizeof((mpstack).items[0])), (mpstack).items, (mpstack).size * sizeof((mpstack).items[0])) : xrealloc((mpstack).items, (mpstack).capacity * sizeof((mpstack).items[0]))))), 0) : 0), ((mpstack).items + ((mpstack).size++))) = (((MPConvStackVal) { | |
.type = kMPConvDict, | |
.tv = ((void *)0), | |
.saved_copyID = saved_copyID, | |
.data = { | |
.d = { | |
.dict = dict, | |
.dictp = &pt->pt_dict, | |
.hi = dict->dv_hashtab.ht_array, | |
.todo = dict->dv_hashtab.ht_used, | |
}, | |
}, | |
}))); | |
do { | |
if (_nothing_conv_real_dict_after_start(((void *)0) , (dict_T **)&pt->pt_dict, (void *)&_typval_encode_nothing_nodict_var, &((mpstack).items[(((mpstack).size) - (0) - 1)])) != 2) { | |
goto typval_encode_stop_converting_one_item; | |
} | |
} while (0); | |
} else { | |
; | |
} | |
break; | |
} | |
case kMPConvPartialEnd: { | |
_nothing_conv_func_end(tv, copyID); | |
(void)((mpstack).items[--(mpstack).size]); | |
break; | |
} | |
} | |
continue; | |
} | |
case kMPConvPartialList: { | |
if (!cur_mpsv->data.a.todo) { | |
(void)((mpstack).items[--(mpstack).size]); | |
_nothing_conv_list_end( ((void *)0)); | |
continue; | |
} else if (cur_mpsv->data.a.argv != cur_mpsv->data.a.arg) { | |
; | |
} | |
tv = cur_mpsv->data.a.arg++; | |
cur_mpsv->data.a.todo--; | |
break; | |
} | |
} | |
(void) ((!!(tv != ((void *)0))) | |
|| (_assert("tv != NULL", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",832),0)); | |
if (_typval_encode_nothing_convert_one_value(ignored, &mpstack, cur_mpsv, tv, copyID, objname) == 0) { | |
goto encode_vim_to__error_ret; | |
} | |
} | |
do { | |
if ((mpstack).items != (mpstack).init_array) { | |
do { | |
void **ptr_ = (void **)&((mpstack).items); | |
xfree(*ptr_); | |
*ptr_ = ((void *)0); | |
(void)(*ptr_); | |
} while (0); | |
} | |
} while (0); | |
return 1; | |
encode_vim_to__error_ret: | |
do { | |
if ((mpstack).items != (mpstack).init_array) { | |
do { | |
void **ptr_ = (void **)&((mpstack).items); xfree(*ptr_); | |
*ptr_ = ((void *)0); | |
(void)(*ptr_); | |
} while (0); | |
} | |
} while (0); | |
return 0; | |
goto typval_encode_stop_converting_one_item; | |
} | |
static int _typval_encode_nothing_convert_one_value( | |
const void *const ignored, | |
MPConvStack *const mpstack, MPConvStackVal *const cur_mpsv, | |
typval_T *const tv, const int copyID, | |
const char *const objname) | |
__attribute__((nonnull(2, 4, 6))) __attribute__((warn_unused_result)); | |
static int _typval_encode_nothing_convert_one_value( | |
const void *const ignored, | |
MPConvStack *const mpstack, MPConvStackVal *const cur_mpsv, | |
typval_T *const tv, const int copyID, | |
const char *const objname) | |
{ | |
switch (tv->v_type) { | |
case VAR_STRING: { | |
do { xfree(tv->vval.v_string); | |
tv->vval.v_string = ((void *)0); | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case VAR_NUMBER: { | |
do { | |
(void)tv->vval.v_number; | |
tv->vval.v_number = 0; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case VAR_FLOAT: { | |
do { | |
tv->vval.v_float = 0; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case VAR_FUNC: { | |
do { | |
if (_nothing_conv_func_start(tv, tv->vval.v_string) != 2) { | |
return 1; | |
} | |
} while (0); | |
_nothing_conv_func_end(tv, copyID); | |
break; | |
} | |
case VAR_PARTIAL: { | |
partial_T *const pt = tv->vval.v_partial; | |
(void)pt; | |
do { | |
if (_nothing_conv_func_start(tv, (pt == ((void *)0) ? ((void *)0) : partial_name(pt))) != 2) { | |
return 1; | |
} | |
} while (0) | |
; | |
(*((((*mpstack).size == (*mpstack).capacity) ? (((*mpstack).capacity = (((*mpstack).capacity << 1) > ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).capacity << 1) : ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0])))))), (*mpstack).items = ((*mpstack).capacity == ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).items == (*mpstack).init_array ? (*mpstack).items : _memcpy_free((*mpstack).init_array, (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0]))) : ((*mpstack).items == (*mpstack).init_array ? memcpy(xmalloc((*mpstack).capacity * sizeof((*mpstack).items[0])), (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0])) : xrealloc((*mpstack).items, (*mpstack).capacity * sizeof((*mpstack).items[0]))))), 0) : 0), ((*mpstack).items + ((*mpstack).size++))) = (((MPConvStackVal) { .type = kMPConvPartial, .tv = tv, .saved_copyID = copyID - 1, .data = { .p = { .stage = kMPConvPartialArgs, .pt = tv->vval.v_partial, }, }, }))); | |
break; | |
} | |
case VAR_LIST: { | |
if (tv->vval.v_list == ((void *)0) || tv_list_len(tv->vval.v_list) == 0) { | |
do { | |
tv_list_unref(tv->vval.v_list); | |
tv->vval.v_list = ((void *)0); | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
const int saved_copyID = tv_list_copyid(tv->vval.v_list); | |
do { | |
const int te_csr_ret = _typval_encode_nothing_check_self_reference( ignored, (tv->vval.v_list), &(tv->vval.v_list)->lv_copyID, mpstack, copyID, kMPConvList, objname); | |
if (te_csr_ret != 2) { | |
return te_csr_ret; | |
} | |
} while (0); | |
(void) ((!!(saved_copyID != copyID && saved_copyID != copyID - 1)) | |
|| (_assert("saved_copyID != copyID && saved_copyID != copyID - 1", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",367),0)); | |
(*((((*mpstack).size == (*mpstack).capacity) ? (((*mpstack).capacity = (((*mpstack).capacity << 1) > ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).capacity << 1) : ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0])))))), (*mpstack).items = ((*mpstack).capacity == ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).items == (*mpstack).init_array ? (*mpstack).items : _memcpy_free((*mpstack).init_array, (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0]))) : ((*mpstack).items == (*mpstack).init_array ? memcpy(xmalloc((*mpstack).capacity * sizeof((*mpstack).items[0])), (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0])) : xrealloc((*mpstack).items, (*mpstack).capacity * sizeof((*mpstack).items[0]))))), 0) : 0), ((*mpstack).items + ((*mpstack).size++))) = (((MPConvStackVal) { .type = kMPConvList, .tv = tv, .saved_copyID = saved_copyID, .data = { .l = { .list = tv->vval.v_list, .li = tv_list_first(tv->vval.v_list), }, }, }))); | |
do { | |
if (_nothing_conv_real_list_after_start(tv, &((*mpstack).items[(((*mpstack).size) - (0) - 1)])) != 2) { | |
goto typval_encode_stop_converting_one_item; | |
} | |
} while (0); | |
break; | |
} | |
case VAR_SPECIAL: { | |
switch (tv->vval.v_special) { | |
case kSpecialVarNull: { | |
do { tv->vval.v_special = kSpecialVarFalse; tv->v_lock = VAR_UNLOCKED; } while (0); | |
break; | |
} | |
case kSpecialVarTrue: | |
case kSpecialVarFalse: { | |
do { tv->vval.v_special = kSpecialVarFalse; tv->v_lock = VAR_UNLOCKED; } while (0); | |
break; | |
} | |
} | |
break; | |
} | |
case VAR_DICT: { | |
if (tv->vval.v_dict == ((void *)0) | |
|| tv->vval.v_dict->dv_hashtab.ht_used == 0) { | |
do { | |
(void) ((!!((void *)&tv->vval.v_dict != (void *)&_typval_encode_nothing_nodict_var)) | |
|| (_assert("(void *)&tv->vval.v_dict != (void *)&TYPVAL_ENCODE_NODICT_VAR", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",399),0)); | |
_nothing_conv_empty_dict(tv, ((dict_T **)&tv->vval.v_dict)); | |
} while (0); | |
break; | |
} | |
const dictitem_T *type_di; | |
const dictitem_T *val_di; | |
if (0 && tv->vval.v_dict->dv_hashtab.ht_used == 2 | |
&& (type_di = tv_dict_find((dict_T *)tv->vval.v_dict, ("_TYPE"), (sizeof("_TYPE") - 1))) != ((void *)0) | |
&& type_di->di_tv.v_type == VAR_LIST | |
&& (val_di = tv_dict_find((dict_T *)tv->vval.v_dict, ("_VAL"), (sizeof("_VAL") - 1))) != ((void *)0)) { | |
size_t i; | |
for (i = 0; i < ((sizeof(eval_msgpack_type_lists)/sizeof((eval_msgpack_type_lists)[0])) / ((size_t)(!(sizeof(eval_msgpack_type_lists) % sizeof((eval_msgpack_type_lists)[0]))))); i++) { | |
if (type_di->di_tv.vval.v_list == eval_msgpack_type_lists[i]) { | |
break; | |
} | |
} | |
if (i == ((sizeof(eval_msgpack_type_lists)/sizeof((eval_msgpack_type_lists)[0])) / ((size_t)(!(sizeof(eval_msgpack_type_lists) % sizeof((eval_msgpack_type_lists)[0])))))) { | |
goto _convert_one_value_regular_dict; | |
} | |
switch ((MessagePackType)i) { | |
case kMPNil: { | |
do { | |
tv->vval.v_special = kSpecialVarFalse; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case kMPBoolean: { | |
if (val_di->di_tv.v_type != VAR_NUMBER) { | |
goto _convert_one_value_regular_dict; | |
} | |
do { | |
tv->vval.v_special = kSpecialVarFalse; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case kMPInteger: { | |
const list_T *val_list; | |
varnumber_T sign; | |
varnumber_T highest_bits; | |
varnumber_T high_bits; | |
varnumber_T low_bits; | |
if (val_di->di_tv.v_type != VAR_LIST | |
|| tv_list_len(val_list = val_di->di_tv.vval.v_list) != 4) { | |
goto _convert_one_value_regular_dict; | |
} | |
const listitem_T *const sign_li = tv_list_first(val_list); | |
if ((&(sign_li)->li_tv)->v_type != VAR_NUMBER | |
|| (sign = (&(sign_li)->li_tv)->vval.v_number) == 0) { | |
goto _convert_one_value_regular_dict; | |
} | |
const listitem_T *const highest_bits_li = ( | |
((sign_li)->li_next)); | |
if ((&(highest_bits_li)->li_tv)->v_type != VAR_NUMBER | |
|| ((highest_bits | |
= (&(highest_bits_li)->li_tv)->vval.v_number) < 0)) { | |
goto _convert_one_value_regular_dict; | |
} | |
const listitem_T *const high_bits_li = ( | |
((highest_bits_li)->li_next)); | |
if ((&(high_bits_li)->li_tv)->v_type != VAR_NUMBER | |
|| ((high_bits = (&(high_bits_li)->li_tv)->vval.v_number) < 0)) { | |
goto _convert_one_value_regular_dict; | |
} | |
const listitem_T *const low_bits_li = tv_list_last(val_list); | |
if ((&(low_bits_li)->li_tv)->v_type != VAR_NUMBER | |
|| ((low_bits = (&(low_bits_li)->li_tv)->vval.v_number) < 0)) { | |
goto _convert_one_value_regular_dict; | |
} | |
const uint64_t number = ((uint64_t)(((uint64_t)highest_bits) << 62) | |
| (uint64_t)(((uint64_t)high_bits) << 31) | |
| (uint64_t)low_bits); | |
if (sign > 0) { | |
; | |
} else { | |
do { | |
(void)-number; | |
tv->vval.v_number = 0; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
} | |
break; | |
} | |
case kMPFloat: { | |
if (val_di->di_tv.v_type != VAR_FLOAT) { | |
goto _convert_one_value_regular_dict; | |
} | |
do { | |
tv->vval.v_float = 0; | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
break; | |
} | |
case kMPString: | |
case kMPBinary: { | |
const _Bool is_string = ((MessagePackType)i == kMPString); | |
if (val_di->di_tv.v_type != VAR_LIST) { | |
goto _convert_one_value_regular_dict; | |
} | |
size_t len; | |
char *buf; | |
if (!encode_vim_list_to_buf(val_di->di_tv.vval.v_list, &len, &buf)) { | |
goto _convert_one_value_regular_dict; | |
} | |
if (is_string) { | |
; | |
} else { | |
do { | |
xfree(buf); | |
tv->vval.v_string = ((void *)0); | |
tv->v_lock = VAR_UNLOCKED; | |
} while (0); | |
} | |
xfree(buf); | |
break; | |
} | |
case kMPArray: { | |
if (val_di->di_tv.v_type != VAR_LIST) { | |
goto _convert_one_value_regular_dict; | |
} | |
const int saved_copyID = tv_list_copyid(val_di->di_tv.vval.v_list); | |
do { | |
const int te_csr_ret = | |
_typval_encode_nothing_check_self_reference( ignored, (val_di->di_tv.vval.v_list), &(val_di->di_tv.vval.v_list)->lv_copyID, mpstack, copyID, kMPConvList, objname); | |
if (te_csr_ret != 2) { | |
return te_csr_ret; | |
} | |
} while (0); | |
(void) ((!!(saved_copyID != copyID && saved_copyID != copyID - 1)) | |
|| (_assert("saved_copyID != copyID && saved_copyID != copyID - 1", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",525),0)); | |
(*((((*mpstack).size == (*mpstack).capacity) ? (((*mpstack).capacity = (((*mpstack).capacity << 1) > ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).capacity << 1) : ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0])))))), (*mpstack).items = ((*mpstack).capacity == ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).items == (*mpstack).init_array ? (*mpstack).items : _memcpy_free((*mpstack).init_array, (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0]))) : ((*mpstack).items == (*mpstack).init_array ? memcpy(xmalloc((*mpstack).capacity * sizeof((*mpstack).items[0])), (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0])) : xrealloc((*mpstack).items, (*mpstack).capacity * sizeof((*mpstack).items[0]))))), 0) : 0), ((*mpstack).items + ((*mpstack).size++))) = (((MPConvStackVal) { .tv = tv, .type = kMPConvList, .saved_copyID = saved_copyID, .data = { .l = { .list = val_di->di_tv.vval.v_list, .li = tv_list_first(val_di->di_tv.vval.v_list), }, }, }))); | |
break; | |
} | |
case kMPMap: { | |
if (val_di->di_tv.v_type != VAR_LIST) { | |
goto _convert_one_value_regular_dict; | |
} | |
list_T *const val_list = val_di->di_tv.vval.v_list; | |
if (val_list == ((void *)0) || tv_list_len(val_list) == 0) { | |
do { | |
(void) ((!!((void *)&_typval_encode_nothing_nodict_var != (void *)&_typval_encode_nothing_nodict_var)) | |
|| (_assert("(void *)&_typval_encode_nothing_nodict_var != (void *)&TYPVAL_ENCODE_NODICT_VAR", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",545),0)); | |
_nothing_conv_empty_dict(tv, ((dict_T **)&_typval_encode_nothing_nodict_var)); | |
} while (0); | |
break; | |
} | |
do { | |
const list_T *const l_ = (val_list); | |
if (l_ != ((void *)0)) { | |
for (const listitem_T *li = l_->lv_first; li != ((void *)0) ; li = li->li_next) { | |
{ | |
if ((&(li)->li_tv)->v_type != VAR_LIST || tv_list_len((&(li)->li_tv)->vval.v_list) != 2) { | |
goto _convert_one_value_regular_dict; | |
} | |
} | |
} | |
} | |
} while (0); | |
const int saved_copyID = tv_list_copyid(val_di->di_tv.vval.v_list); | |
do { | |
const int te_csr_ret = _typval_encode_nothing_check_self_reference(ignored, (val_list), &(val_list)->lv_copyID, mpstack, copyID, kMPConvPairs, objname); if (te_csr_ret != 2) { | |
return te_csr_ret; | |
} | |
} while (0); | |
(void) ((!!(saved_copyID != copyID && saved_copyID != copyID - 1)) | |
|| (_assert("saved_copyID != copyID && saved_copyID != copyID - 1", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",560),0)); | |
(*((((*mpstack).size == (*mpstack).capacity) ? (((*mpstack).capacity = (((*mpstack).capacity << 1) > ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).capacity << 1) : ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0])))))), (*mpstack).items = ((*mpstack).capacity == ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).items == (*mpstack).init_array ? (*mpstack).items : _memcpy_free((*mpstack).init_array, (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0]))) : ((*mpstack).items == (*mpstack).init_array ? memcpy(xmalloc((*mpstack).capacity * sizeof((*mpstack).items[0])), (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0])) : xrealloc((*mpstack).items, (*mpstack).capacity * sizeof((*mpstack).items[0]))))), 0) : 0), ((*mpstack).items + ((*mpstack).size++))) = (((MPConvStackVal) { .tv = tv, .type = kMPConvPairs, .saved_copyID = saved_copyID, .data = { .l = { .list = val_list, .li = tv_list_first(val_list), }, }, }))); | |
break; | |
} | |
case kMPExt: { | |
const list_T *val_list; | |
varnumber_T type; | |
if (val_di->di_tv.v_type != VAR_LIST | |
|| tv_list_len((val_list = val_di->di_tv.vval.v_list)) != 2 | |
|| ((&(tv_list_first(val_list))->li_tv)->v_type != VAR_NUMBER) | |
|| ((type = (&(tv_list_first(val_list))->li_tv)->vval.v_number) > 127) | |
|| type < (-128) | |
|| ((&(tv_list_last(val_list))->li_tv)->v_type != VAR_LIST)) { | |
goto _convert_one_value_regular_dict; | |
} | |
size_t len; | |
char *buf; | |
if (!(encode_vim_list_to_buf((&(tv_list_last(val_list))->li_tv)->vval.v_list, &len, &buf))) { | |
goto _convert_one_value_regular_dict; | |
}; | |
xfree(buf); | |
break; | |
} | |
} | |
break; | |
} | |
_convert_one_value_regular_dict: {} | |
const int saved_copyID = tv->vval.v_dict->dv_copyID; | |
do { | |
const int te_csr_ret = | |
_typval_encode_nothing_check_self_reference(ignored, (tv->vval.v_dict), &(tv->vval.v_dict)->dv_copyID, mpstack, copyID, kMPConvDict, objname); | |
if (te_csr_ret != 2) { | |
return te_csr_ret; | |
} | |
} while (0); | |
(void) ((!!(saved_copyID != copyID)) | |
|| (_assert("saved_copyID != copyID", | |
"C:/src/neovim/src/nvim/eval/typval_encode.c.h",610),0)); | |
(*((((*mpstack).size == (*mpstack).capacity) ? (((*mpstack).capacity = (((*mpstack).capacity << 1) > ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).capacity << 1) : ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0])))))), (*mpstack).items = ((*mpstack).capacity == ((sizeof((*mpstack).init_array)/sizeof(((*mpstack).init_array)[0])) / ((size_t)(!(sizeof((*mpstack).init_array) % sizeof(((*mpstack).init_array)[0]))))) ? ((*mpstack).items == (*mpstack).init_array ? (*mpstack).items : _memcpy_free((*mpstack).init_array, (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0]))) : ((*mpstack).items == (*mpstack).init_array ? memcpy(xmalloc((*mpstack).capacity * sizeof((*mpstack).items[0])), (*mpstack).items, (*mpstack).size * sizeof((*mpstack).items[0])) : xrealloc((*mpstack).items, (*mpstack).capacity * sizeof((*mpstack).items[0]))))), 0) : 0), ((*mpstack).items + ((*mpstack).size++))) = (((MPConvStackVal) { .tv = tv, .type = kMPConvDict, .saved_copyID = saved_copyID, .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, }, }, }))); | |
do { | |
if (_nothing_conv_real_dict_after_start(tv, (dict_T **)&tv->vval.v_dict, (void *)&_typval_encode_nothing_nodict_var, &((*mpstack).items[(((*mpstack).size) - (0) - 1)])) != 2) | |
{ | |
goto typval_encode_stop_converting_one_item; | |
} | |
} while (0); | |
break; | |
} | |
case VAR_UNKNOWN: { | |
internal_error("_typval_encode_nothing_convert_one_value" "()"); | |
return 0; | |
} | |
} | |
typval_encode_stop_converting_one_item: | |
return 1; | |
goto typval_encode_stop_converting_one_item; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment