diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-02-19 10:44:57 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-02-19 13:48:39 +0100 |
commit | d14eefaee9519dae76bfaf4dd42e3bd7a05c7a1e (patch) | |
tree | 3f7d3fd1ced368ec6a9e69fb2b6b0a680edde731 | |
parent | abb8dcd8898d0a30db6b503682e4cea337c942a6 (diff) | |
download | rneovim-d14eefaee9519dae76bfaf4dd42e3bd7a05c7a1e.tar.gz rneovim-d14eefaee9519dae76bfaf4dd42e3bd7a05c7a1e.tar.bz2 rneovim-d14eefaee9519dae76bfaf4dd42e3bd7a05c7a1e.zip |
refactor(api): use arena when listing objects
-rw-r--r-- | src/nvim/api/tabpage.c | 10 | ||||
-rw-r--r-- | src/nvim/api/vim.c | 33 |
2 files changed, 20 insertions, 23 deletions
diff --git a/src/nvim/api/tabpage.c b/src/nvim/api/tabpage.c index 109075df8e..040abb1e3f 100644 --- a/src/nvim/api/tabpage.c +++ b/src/nvim/api/tabpage.c @@ -19,7 +19,7 @@ /// @param tabpage Tabpage handle, or 0 for current tabpage /// @param[out] err Error details, if any /// @return List of windows in `tabpage` -ArrayOf(Window) nvim_tabpage_list_wins(Tabpage tabpage, Error *err) +ArrayOf(Window) nvim_tabpage_list_wins(Tabpage tabpage, Arena *arena, Error *err) FUNC_API_SINCE(1) { Array rv = ARRAY_DICT_INIT; @@ -29,15 +29,15 @@ ArrayOf(Window) nvim_tabpage_list_wins(Tabpage tabpage, Error *err) return rv; } + size_t n = 0; FOR_ALL_WINDOWS_IN_TAB(wp, tab) { - rv.size++; + n++; } - rv.items = xmalloc(sizeof(Object) * rv.size); - size_t i = 0; + rv = arena_array(arena, n); FOR_ALL_WINDOWS_IN_TAB(wp, tab) { - rv.items[i++] = WINDOW_OBJ(wp->handle); + ADD_C(rv, WINDOW_OBJ(wp->handle)); } return rv; diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 0da7cec4ab..073541d687 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -832,20 +832,19 @@ void nvim_err_writeln(String str) /// Use |nvim_buf_is_loaded()| to check if a buffer is loaded. /// /// @return List of buffer handles -ArrayOf(Buffer) nvim_list_bufs(void) +ArrayOf(Buffer) nvim_list_bufs(Arena *arena) FUNC_API_SINCE(1) { - Array rv = ARRAY_DICT_INIT; + size_t n = 0; FOR_ALL_BUFFERS(b) { - rv.size++; + n++; } - rv.items = xmalloc(sizeof(Object) * rv.size); - size_t i = 0; + Array rv = arena_array(arena, n); FOR_ALL_BUFFERS(b) { - rv.items[i++] = BUFFER_OBJ(b->handle); + ADD_C(rv, BUFFER_OBJ(b->handle)); } return rv; @@ -887,20 +886,19 @@ void nvim_set_current_buf(Buffer buffer, Error *err) /// Gets the current list of window handles. /// /// @return List of window handles -ArrayOf(Window) nvim_list_wins(void) +ArrayOf(Window) nvim_list_wins(Arena *arena) FUNC_API_SINCE(1) { - Array rv = ARRAY_DICT_INIT; + size_t n = 0; FOR_ALL_TAB_WINDOWS(tp, wp) { - rv.size++; + n++; } - rv.items = xmalloc(sizeof(Object) * rv.size); - size_t i = 0; + Array rv = arena_array(arena, n); FOR_ALL_TAB_WINDOWS(tp, wp) { - rv.items[i++] = WINDOW_OBJ(wp->handle); + ADD_C(rv, WINDOW_OBJ(wp->handle)); } return rv; @@ -1124,20 +1122,19 @@ void nvim_chan_send(Integer chan, String data, Error *err) /// Gets the current list of tabpage handles. /// /// @return List of tabpage handles -ArrayOf(Tabpage) nvim_list_tabpages(void) +ArrayOf(Tabpage) nvim_list_tabpages(Arena *arena) FUNC_API_SINCE(1) { - Array rv = ARRAY_DICT_INIT; + size_t n = 0; FOR_ALL_TABS(tp) { - rv.size++; + n++; } - rv.items = xmalloc(sizeof(Object) * rv.size); - size_t i = 0; + Array rv = arena_array(arena, n); FOR_ALL_TABS(tp) { - rv.items[i++] = TABPAGE_OBJ(tp->handle); + ADD_C(rv, TABPAGE_OBJ(tp->handle)); } return rv; |