aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-08-23 10:36:46 +0200
committerbfredl <bjorn.linse@gmail.com>2022-08-24 14:22:26 +0200
commitbcf5ee328e228d5a536b4de2069a79234f9f3e9e (patch)
treece25e8627bb00363deb6919561400fa1807ebf47 /src/nvim/eval/funcs.c
parentc0d60526541a3cf977ae623471ae4a347b492af1 (diff)
downloadrneovim-bcf5ee328e228d5a536b4de2069a79234f9f3e9e.tar.gz
rneovim-bcf5ee328e228d5a536b4de2069a79234f9f3e9e.tar.bz2
rneovim-bcf5ee328e228d5a536b4de2069a79234f9f3e9e.zip
refactor(arena): use a shared block freelist
This is both simpler in client code and more effective (always reuse block hottest in cache)
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r--src/nvim/eval/funcs.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 5db584f6a8..cacac91ee8 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -114,8 +114,6 @@ static char *e_listblobarg = N_("E899: Argument of %s must be a List or Blob");
static char *e_invalwindow = N_("E957: Invalid window number");
static char *e_reduceempty = N_("E998: Reduce of an empty %s with no initial value");
-static ArenaMem eval_reuse_blk = NULL;
-
/// Dummy va_list for passing to vim_snprintf
///
/// Used because:
@@ -281,10 +279,6 @@ static void api_wrapper(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
Error err = ERROR_INIT;
Arena res_arena = ARENA_EMPTY;
- if (handler.arena_return) {
- // TODO(bfredl): also use arena for vim_to_object
- arena_start(&res_arena, &eval_reuse_blk);
- }
Object result = handler.fn(VIML_INTERNAL_CALL, args, &res_arena, &err);
if (ERROR_SET(&err)) {
@@ -299,7 +293,7 @@ static void api_wrapper(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
end:
api_free_array(args);
if (handler.arena_return) {
- arena_mem_free(arena_finish(&res_arena), &eval_reuse_blk);
+ arena_mem_free(arena_finish(&res_arena));
} else {
api_free_object(result);
}
@@ -6885,7 +6879,6 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
uint64_t chan_id = (uint64_t)argvars[0].vval.v_number;
const char *method = tv_get_string(&argvars[1]);
- // TODO: putta in eval_reuse_blk
ArenaMem res_mem = NULL;
Object result = rpc_send_call(chan_id, method, args, &res_mem, &err);
@@ -6921,7 +6914,7 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
}
end:
- arena_mem_free(res_mem, &eval_reuse_blk);
+ arena_mem_free(res_mem);
api_clear_error(&err);
}