aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval.c
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-08-28 09:15:28 +0300
committerZyX <kp-pav@yandex.ru>2017-03-29 10:08:05 +0300
commit50ebd1dff5c4e995c4f7e7980870e43d9defabc6 (patch)
tree391ae8a9e6980f990d15f3c77d582629b840a549 /src/nvim/eval/typval.c
parent233b0c93bba66492d7b8b61f8ac61082f03668a1 (diff)
downloadrneovim-50ebd1dff5c4e995c4f7e7980870e43d9defabc6.tar.gz
rneovim-50ebd1dff5c4e995c4f7e7980870e43d9defabc6.tar.bz2
rneovim-50ebd1dff5c4e995c4f7e7980870e43d9defabc6.zip
eval: Move free_tv to eval/typval.h, remove most of its usages
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r--src/nvim/eval/typval.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index 087e76de10..ca635dcae9 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -1742,6 +1742,46 @@ void tv_clear(typval_T *tv)
}
}
+//{{{3 Free
+
+/// Free allocated VimL object and value stored inside
+///
+/// @param tv Object to free.
+void tv_free(typval_T *tv)
+{
+ if (tv != NULL) {
+ switch (tv->v_type) {
+ case VAR_PARTIAL: {
+ partial_unref(tv->vval.v_partial);
+ break;
+ }
+ case VAR_FUNC: {
+ func_unref(tv->vval.v_string);
+ // FALLTHROUGH
+ }
+ case VAR_STRING: {
+ xfree(tv->vval.v_string);
+ break;
+ }
+ case VAR_LIST: {
+ tv_list_unref(tv->vval.v_list);
+ break;
+ }
+ case VAR_DICT: {
+ tv_dict_unref(tv->vval.v_dict);
+ break;
+ }
+ case VAR_SPECIAL:
+ case VAR_NUMBER:
+ case VAR_FLOAT:
+ case VAR_UNKNOWN: {
+ break;
+ }
+ }
+ xfree(tv);
+ }
+}
+
//{{{2 Locks
/// Lock or unlock an item