aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/private
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-09-09 09:36:14 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-09-12 13:25:28 -0300
commitcac24cb06ddcad0cfb3a9379c3bdd0e8706602f9 (patch)
tree62893d01eccd43216001d1c1d481f018e42286bc /src/nvim/api/private
parent2792a0e33c0845fdd5b1b752d99ee573f6534256 (diff)
downloadrneovim-cac24cb06ddcad0cfb3a9379c3bdd0e8706602f9.tar.gz
rneovim-cac24cb06ddcad0cfb3a9379c3bdd0e8706602f9.tar.bz2
rneovim-cac24cb06ddcad0cfb3a9379c3bdd0e8706602f9.zip
api/msgpack-rpc: Refactor msgpack_rpc_helpers.{c,h}
- Move helpers that are specific to API types to api/private/helpers.{c,h} - Include headers with generated declarations - Delete unused macros
Diffstat (limited to 'src/nvim/api/private')
-rw-r--r--src/nvim/api/private/helpers.c58
-rw-r--r--src/nvim/api/private/helpers.h44
2 files changed, 77 insertions, 25 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index f6fb46e1d1..de23481813 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -449,6 +449,64 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
return true;
}
+void api_free_string(String value)
+{
+ if (!value.data) {
+ return;
+ }
+
+ free(value.data);
+}
+
+void api_free_object(Object value)
+{
+ switch (value.type) {
+ case kObjectTypeNil:
+ case kObjectTypeBoolean:
+ case kObjectTypeInteger:
+ case kObjectTypeFloat:
+ case kObjectTypeBuffer:
+ case kObjectTypeWindow:
+ case kObjectTypeTabpage:
+ break;
+
+ case kObjectTypeString:
+ api_free_string(value.data.string);
+ break;
+
+ case kObjectTypeArray:
+ api_free_array(value.data.array);
+ break;
+
+ case kObjectTypeDictionary:
+ api_free_dictionary(value.data.dictionary);
+ break;
+
+ default:
+ abort();
+ }
+}
+
+void api_free_array(Array value)
+{
+ for (size_t i = 0; i < value.size; i++) {
+ api_free_object(value.items[i]);
+ }
+
+ free(value.items);
+}
+
+void api_free_dictionary(Dictionary value)
+{
+ for (size_t i = 0; i < value.size; i++) {
+ api_free_string(value.items[i].key);
+ api_free_object(value.items[i].value);
+ }
+
+ free(value.items);
+}
+
+
/// Recursion helper for the `vim_to_object`. This uses a pointer table
/// to avoid infinite recursion due to cyclic references
///
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index f1b9dc3bc8..f3ecdaacc4 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -51,36 +51,11 @@
.data.array = a \
})
-#define STRINGARRAY_OBJ(a) ((Object) { \
- .type = kObjectTypeStringArray, \
- .data.stringarray = a \
- })
-
-#define BUFFERARRAY_OBJ(a) ((Object) { \
- .type = kObjectTypeBufferArray, \
- .data.bufferarray = a \
- })
-
-#define WINDOWARRAY_OBJ(a) ((Object) { \
- .type = kObjectTypeWindowArray, \
- .data.windowarray = a \
- })
-
-#define TABPAGEARRAY_OBJ(a) ((Object) { \
- .type = kObjectTypeTabpageArray, \
- .data.tabpagearray = a \
- })
-
#define DICTIONARY_OBJ(d) ((Object) { \
.type = kObjectTypeDictionary, \
.data.dictionary = d \
})
-#define POSITION_OBJ(p) ((Object) { \
- .type = kObjectTypePosition, \
- .data.position = p \
- })
-
#define NIL ((Object) {.type = kObjectTypeNil})
#define PUT(dict, k, v) \
@@ -91,6 +66,25 @@
#define ADD(array, item) \
kv_push(Object, array, item)
+// Helpers used by the generated msgpack-rpc api wrappers
+#define api_init_boolean
+#define api_init_integer
+#define api_init_float
+#define api_init_string = STRING_INIT
+#define api_init_buffer
+#define api_init_window
+#define api_init_tabpage
+#define api_init_object = NIL
+#define api_init_array = ARRAY_DICT_INIT
+#define api_init_dictionary = ARRAY_DICT_INIT
+
+#define api_free_boolean(value)
+#define api_free_integer(value)
+#define api_free_float(value)
+#define api_free_buffer(value)
+#define api_free_window(value)
+#define api_free_tabpage(value)
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "api/private/helpers.h.generated.h"
#endif