mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 13:38:34 +00:00
refactor(lua): use Arena when converting from lua stack to API args
and for return value of nlua_exec/nlua_call_ref, as this uses the same family of functions. NB: the handling of luaref:s is a bit of a mess. add api_luarefs_free_XX functions as a stop-gap as refactoring luarefs is a can of worms for another PR:s. as a minor feature/bug-fix, nvim_buf_call and nvim_win_call now preserves arbitrary return values.
This commit is contained in:
@@ -592,13 +592,13 @@ Array runtime_inspect(void)
|
||||
return rv;
|
||||
}
|
||||
|
||||
ArrayOf(String) runtime_get_named(bool lua, Array pat, bool all)
|
||||
ArrayOf(String) runtime_get_named(bool lua, Array pat, bool all, Arena *arena)
|
||||
{
|
||||
int ref;
|
||||
RuntimeSearchPath path = runtime_search_path_get_cached(&ref);
|
||||
static char buf[MAXPATHL];
|
||||
|
||||
ArrayOf(String) rv = runtime_get_named_common(lua, pat, all, path, buf, sizeof buf);
|
||||
ArrayOf(String) rv = runtime_get_named_common(lua, pat, all, path, buf, sizeof buf, arena);
|
||||
|
||||
runtime_search_path_unref(path, &ref);
|
||||
return rv;
|
||||
@@ -610,15 +610,16 @@ ArrayOf(String) runtime_get_named_thread(bool lua, Array pat, bool all)
|
||||
uv_mutex_lock(&runtime_search_path_mutex);
|
||||
static char buf[MAXPATHL];
|
||||
ArrayOf(String) rv = runtime_get_named_common(lua, pat, all, runtime_search_path_thread,
|
||||
buf, sizeof buf);
|
||||
buf, sizeof buf, NULL);
|
||||
uv_mutex_unlock(&runtime_search_path_mutex);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static ArrayOf(String) runtime_get_named_common(bool lua, Array pat, bool all,
|
||||
RuntimeSearchPath path, char *buf, size_t buf_len)
|
||||
RuntimeSearchPath path, char *buf, size_t buf_len,
|
||||
Arena *arena)
|
||||
{
|
||||
ArrayOf(String) rv = ARRAY_DICT_INIT;
|
||||
ArrayOf(String) rv = arena_array(arena, kv_size(path) * pat.size);
|
||||
for (size_t i = 0; i < kv_size(path); i++) {
|
||||
SearchPathItem *item = &kv_A(path, i);
|
||||
if (lua) {
|
||||
@@ -638,7 +639,7 @@ static ArrayOf(String) runtime_get_named_common(bool lua, Array pat, bool all,
|
||||
item->path, pat_item.data.string.data);
|
||||
if (size < buf_len) {
|
||||
if (os_file_is_readable(buf)) {
|
||||
ADD(rv, CSTR_TO_OBJ(buf));
|
||||
ADD_C(rv, CSTR_TO_ARENA_OBJ(arena, buf));
|
||||
if (!all) {
|
||||
goto done;
|
||||
}
|
||||
|
Reference in New Issue
Block a user