refactor(map): remove extra-allocating map_new/map_free functions

Note: the reason for removing them is not that there after this refactor
is no use of them, but rather that having them available is an
anti-pattern: they manange an _extra_ heap allocation which has
nothing to do with the functionality of the map itself (khash
manages the real buffers internally). In case there happens to
be a reason to allocate the map structure itself later, this
should be made explicit using xcalloc/xfree calls.
This commit is contained in:
Björn Linse
2021-08-22 16:03:21 +02:00
parent db1b0ee3b3
commit de21e6ef3d
16 changed files with 69 additions and 99 deletions

View File

@@ -21,12 +21,12 @@
#include "nvim/api/window.h"
#include "nvim/api/deprecated.h"
static Map(String, MsgpackRpcRequestHandler) *methods = NULL;
static Map(String, MsgpackRpcRequestHandler) methods = MAP_INIT;
static void msgpack_rpc_add_method_handler(String method,
MsgpackRpcRequestHandler handler)
{
map_put(String, MsgpackRpcRequestHandler)(methods, method, handler);
map_put(String, MsgpackRpcRequestHandler)(&methods, method, handler);
}
/// @param name API method name
@@ -37,7 +37,7 @@ MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name,
{
String m = { .data = (char *)name, .size = name_len };
MsgpackRpcRequestHandler rv =
map_get(String, MsgpackRpcRequestHandler)(methods, m);
map_get(String, MsgpackRpcRequestHandler)(&methods, m);
if (!rv.fn) {
api_set_error(error, kErrorTypeException, "Invalid method: %.*s",

View File

@@ -1724,7 +1724,7 @@ const char *describe_ns(NS ns_id)
{
String name;
handle_T id;
map_foreach((&namespace_ids), name, id, {
map_foreach(&namespace_ids, name, id, {
if ((NS)id == ns_id && name.size) {
return name.data;
}

View File

@@ -63,7 +63,7 @@ void api_vim_free_all_mem(void)
{
String name;
handle_T id;
map_foreach((&namespace_ids), name, id, {
map_foreach(&namespace_ids, name, id, {
(void)id;
xfree(name.data);
})
@@ -1584,7 +1584,7 @@ Dictionary nvim_get_namespaces(void)
String name;
handle_T id;
map_foreach((&namespace_ids), name, id, {
map_foreach(&namespace_ids, name, id, {
PUT(retval, name.data, INTEGER_OBJ(id));
})