aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval_encode.h
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-04-18 15:55:51 +0300
committerZyX <kp-pav@yandex.ru>2016-06-24 16:53:26 +0300
commitda15b5c1f3230b127ebdbe52d449d1ee8104b2ae (patch)
treec6b432e23f07e456826c9f7d99104fc1da2defcc /src/nvim/eval/typval_encode.h
parent47a15d0256170e9ce33cda23d8f0b39451fa7129 (diff)
downloadrneovim-da15b5c1f3230b127ebdbe52d449d1ee8104b2ae.tar.gz
rneovim-da15b5c1f3230b127ebdbe52d449d1ee8104b2ae.tar.bz2
rneovim-da15b5c1f3230b127ebdbe52d449d1ee8104b2ae.zip
api/helpers: Use typval_encode.h for vim_to_object
This ought to prevent stack overflow, but I do not see this actually working: *lua* code crashes with stack overflow when trying to deserialize msgpack from Neovim, Neovim is fine even if nesting level is increased 100x (though test becomes very slow); not sure how recursive function may survive this. So it looks like there are currently only two positive effects: 1. NULL lists are returned as empty (#4596). 2. Functional tests are slightly more fast. Very slightly. Checked for Release build for test/functional/eval tests because benchmarking of debug mode is not very useful.
Diffstat (limited to 'src/nvim/eval/typval_encode.h')
-rw-r--r--src/nvim/eval/typval_encode.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/nvim/eval/typval_encode.h b/src/nvim/eval/typval_encode.h
index f70a6c9e94..c2e8403475 100644
--- a/src/nvim/eval/typval_encode.h
+++ b/src/nvim/eval/typval_encode.h
@@ -184,10 +184,12 @@ typedef kvec_t(MPConvStackVal) MPConvStack;
/// @param copyID_attr Name of the container attribute that holds copyID.
/// After checking whether value of this attribute is
/// copyID (variable) it is set to copyID.
+/// @param conv_type Type of the conversion, @see MPConvStackValType.
#define _TYPVAL_ENCODE_CHECK_SELF_REFERENCE(val, copyID_attr, conv_type) \
do { \
if ((val)->copyID_attr == copyID) { \
TYPVAL_ENCODE_CONV_RECURSE((val), conv_type); \
+ return OK; \
} \
(val)->copyID_attr = copyID; \
} while (0)