mirror of
https://github.com/neovim/neovim.git
synced 2025-10-02 07:58:35 +00:00
eval: Also make clear_tv non-recursive
This commit is contained in:
@@ -104,7 +104,7 @@
|
||||
/// @brief Macros used to check special dictionary key
|
||||
///
|
||||
/// @param label Label for goto in case check was not successfull.
|
||||
/// @param kv_pair List with two elements: key and value.
|
||||
/// @param key typval_T key to check.
|
||||
|
||||
/// @def TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
|
||||
/// @brief Macros used after finishing converting dictionary key
|
||||
@@ -154,6 +154,7 @@ typedef enum {
|
||||
/// Structure representing current VimL to messagepack conversion state
|
||||
typedef struct {
|
||||
MPConvStackValType type; ///< Type of the stack entry.
|
||||
typval_T *tv; ///< Currently converted typval_T.
|
||||
union {
|
||||
struct {
|
||||
dict_T *dict; ///< Currently converted dictionary.
|
||||
@@ -217,10 +218,10 @@ static inline size_t tv_strlen(const typval_T *const tv)
|
||||
/// tv)` which returns OK or FAIL and helper functions.
|
||||
///
|
||||
/// @param scope Scope of the main function: either nothing or `static`.
|
||||
/// @param name Name of the target converter.
|
||||
/// @param firstargtype Type of the first argument. It will be used to return
|
||||
/// the results.
|
||||
/// @param firstargname Name of the first argument.
|
||||
/// @param name Name of the target converter.
|
||||
#define TYPVAL_ENCODE_DEFINE_CONV_FUNCTIONS(scope, name, firstargtype, \
|
||||
firstargname) \
|
||||
static int name##_convert_one_value(firstargtype firstargname, \
|
||||
@@ -257,6 +258,7 @@ static int name##_convert_one_value(firstargtype firstargname, \
|
||||
TYPVAL_ENCODE_CONV_LIST_START(tv->vval.v_list->lv_len); \
|
||||
_mp_push(*mpstack, ((MPConvStackVal) { \
|
||||
.type = kMPConvList, \
|
||||
.tv = tv, \
|
||||
.data = { \
|
||||
.l = { \
|
||||
.list = tv->vval.v_list, \
|
||||
@@ -387,6 +389,7 @@ static int name##_convert_one_value(firstargtype firstargname, \
|
||||
lv_copyID, kMPConvList); \
|
||||
TYPVAL_ENCODE_CONV_LIST_START(val_di->di_tv.vval.v_list->lv_len); \
|
||||
_mp_push(*mpstack, ((MPConvStackVal) { \
|
||||
.tv = tv, \
|
||||
.type = kMPConvList, \
|
||||
.data = { \
|
||||
.l = { \
|
||||
@@ -417,6 +420,7 @@ static int name##_convert_one_value(firstargtype firstargname, \
|
||||
kMPConvPairs); \
|
||||
TYPVAL_ENCODE_CONV_DICT_START(val_list->lv_len); \
|
||||
_mp_push(*mpstack, ((MPConvStackVal) { \
|
||||
.tv = tv, \
|
||||
.type = kMPConvPairs, \
|
||||
.data = { \
|
||||
.l = { \
|
||||
@@ -457,6 +461,7 @@ name##_convert_one_value_regular_dict: \
|
||||
kMPConvDict); \
|
||||
TYPVAL_ENCODE_CONV_DICT_START(tv->vval.v_dict->dv_hashtab.ht_used); \
|
||||
_mp_push(*mpstack, ((MPConvStackVal) { \
|
||||
.tv = tv, \
|
||||
.type = kMPConvDict, \
|
||||
.data = { \
|
||||
.d = { \
|
||||
@@ -537,7 +542,7 @@ scope int encode_vim_to_##name(firstargtype firstargname, typval_T *const tv, \
|
||||
} \
|
||||
const list_T *const kv_pair = cur_mpsv->data.l.li->li_tv.vval.v_list; \
|
||||
TYPVAL_ENCODE_CONV_SPECIAL_DICT_KEY_CHECK( \
|
||||
encode_vim_to_##name##_error_ret, kv_pair); \
|
||||
encode_vim_to_##name##_error_ret, kv_pair->lv_first->li_tv); \
|
||||
if (name##_convert_one_value(firstargname, &mpstack, \
|
||||
&kv_pair->lv_first->li_tv, copyID, \
|
||||
objname) == FAIL) { \
|
||||
|
Reference in New Issue
Block a user