aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/api')
-rw-r--r--src/nvim/api/autocmd.c2
-rw-r--r--src/nvim/api/buffer.c4
-rw-r--r--src/nvim/api/extmark.c2
-rw-r--r--src/nvim/api/private/helpers.c9
-rw-r--r--src/nvim/api/private/helpers.h2
-rw-r--r--src/nvim/api/vim.c4
-rw-r--r--src/nvim/api/window.c7
7 files changed, 21 insertions, 9 deletions
diff --git a/src/nvim/api/autocmd.c b/src/nvim/api/autocmd.c
index 90b7f3a5c6..1b5d1927ad 100644
--- a/src/nvim/api/autocmd.c
+++ b/src/nvim/api/autocmd.c
@@ -294,7 +294,7 @@ Array nvim_get_autocmds(Dict(get_autocmds) *opts, Error *err)
break;
case kCallbackFuncref:
case kCallbackPartial:
- PUT(autocmd_info, "callback", CSTR_AS_OBJ(callback_to_string(cb)));
+ PUT(autocmd_info, "callback", CSTR_AS_OBJ(callback_to_string(cb, NULL)));
break;
case kCallbackNone:
abort();
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 257e5e6b05..ddca85945a 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -905,7 +905,7 @@ Integer nvim_buf_get_changedtick(Buffer buffer, Error *err)
/// @param[out] err Error details, if any
/// @returns Array of |maparg()|-like dictionaries describing mappings.
/// The "buffer" key holds the associated buffer handle.
-ArrayOf(Dictionary) nvim_buf_get_keymap(Buffer buffer, String mode, Error *err)
+ArrayOf(Dictionary) nvim_buf_get_keymap(Buffer buffer, String mode, Arena *arena, Error *err)
FUNC_API_SINCE(3)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -914,7 +914,7 @@ ArrayOf(Dictionary) nvim_buf_get_keymap(Buffer buffer, String mode, Error *err)
return (Array)ARRAY_DICT_INIT;
}
- return keymap_array(mode, buf);
+ return keymap_array(mode, buf, arena);
}
/// Sets a buffer-local |mapping| for the given mode.
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c
index 94f6059014..f6f7d332ec 100644
--- a/src/nvim/api/extmark.c
+++ b/src/nvim/api/extmark.c
@@ -346,7 +346,7 @@ Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, Object start, Object e
rv = arena_array(arena, kv_size(marks));
for (size_t i = 0; i < kv_size(marks); i++) {
- ADD(rv, ARRAY_OBJ(extmark_to_array(kv_A(marks, i), true, details, hl_name, arena)));
+ ADD_C(rv, ARRAY_OBJ(extmark_to_array(kv_A(marks, i), true, details, hl_name, arena)));
}
kv_destroy(marks);
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index 1446683b0c..3cbf16fa72 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -581,6 +581,15 @@ String arena_string(Arena *arena, String str)
}
}
+Array arena_take_arraybuilder(Arena *arena, ArrayBuilder *arr)
+{
+ Array ret = arena_array(arena, kv_size(*arr));
+ ret.size = kv_size(*arr);
+ memcpy((ret).items, (*arr).items, sizeof((ret).items[0]) * (ret).size);
+ kvi_destroy(*arr);
+ return ret;
+}
+
void api_free_object(Object value)
{
switch (value.type) {
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index 395c5a9d1f..20bc889a0a 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -95,6 +95,8 @@
name.capacity = maxsize; \
name.items = name##__items; \
+typedef kvec_withinit_t(Object, 16) ArrayBuilder;
+
#define cbuf_as_string(d, s) ((String) { .data = d, .size = s })
#define STATIC_CSTR_AS_STRING(s) ((String) { .data = s, .size = sizeof("" s) - 1 })
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 1184eb7441..195da4366e 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -1456,10 +1456,10 @@ Dictionary nvim_get_mode(Arena *arena)
/// @param mode Mode short-name ("n", "i", "v", ...)
/// @returns Array of |maparg()|-like dictionaries describing mappings.
/// The "buffer" key is always zero.
-ArrayOf(Dictionary) nvim_get_keymap(String mode)
+ArrayOf(Dictionary) nvim_get_keymap(String mode, Arena *arena)
FUNC_API_SINCE(3)
{
- return keymap_array(mode, NULL);
+ return keymap_array(mode, NULL, arena);
}
/// Sets a global |mapping| for the given mode.
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index ed1ad5b583..c41c5d4b07 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -77,15 +77,16 @@ void nvim_win_set_buf(Window window, Buffer buffer, Error *err)
/// @param window Window handle, or 0 for current window
/// @param[out] err Error details, if any
/// @return (row, col) tuple
-ArrayOf(Integer, 2) nvim_win_get_cursor(Window window, Error *err)
+ArrayOf(Integer, 2) nvim_win_get_cursor(Window window, Arena *arena, Error *err)
FUNC_API_SINCE(1)
{
Array rv = ARRAY_DICT_INIT;
win_T *win = find_window_by_handle(window, err);
if (win) {
- ADD(rv, INTEGER_OBJ(win->w_cursor.lnum));
- ADD(rv, INTEGER_OBJ(win->w_cursor.col));
+ rv = arena_array(arena, 2);
+ ADD_C(rv, INTEGER_OBJ(win->w_cursor.lnum));
+ ADD_C(rv, INTEGER_OBJ(win->w_cursor.col));
}
return rv;