diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 9 | ||||
-rw-r--r-- | src/nvim/eval/typval.c | 15 | ||||
-rw-r--r-- | src/nvim/event/multiqueue.c | 6 | ||||
-rw-r--r-- | src/nvim/event/multiqueue.h | 2 |
4 files changed, 20 insertions, 12 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index a3fa9c986f..7e462e568b 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -7324,14 +7324,7 @@ void add_timer_info(typval_T *rettv, timer_T *timer) return; } - if (timer->callback.type == kCallbackPartial) { - di->di_tv.v_type = VAR_PARTIAL; - di->di_tv.vval.v_partial = timer->callback.data.partial; - timer->callback.data.partial->pt_refcount++; - } else if (timer->callback.type == kCallbackFuncref) { - di->di_tv.v_type = VAR_FUNC; - di->di_tv.vval.v_string = vim_strsave(timer->callback.data.funcref); - } + callback_put(&timer->callback, &di->di_tv); } void add_timer_info_all(typval_T *rettv) diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 61de83fc21..4118ec407c 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -1164,6 +1164,21 @@ void callback_free(Callback *callback) callback->type = kCallbackNone; } +/// Copy a callback into a typval_T. +void callback_put(Callback *cb, typval_T *tv) + FUNC_ATTR_NONNULL_ALL +{ + if (cb->type == kCallbackPartial) { + tv->v_type = VAR_PARTIAL; + tv->vval.v_partial = cb->data.partial; + cb->data.partial->pt_refcount++; + } else if (cb->type == kCallbackFuncref) { + tv->v_type = VAR_FUNC; + tv->vval.v_string = vim_strsave(cb->data.funcref); + func_ref(cb->data.funcref); + } +} + /// Remove watcher from a dictionary /// /// @param dict Dictionary to remove watcher from. diff --git a/src/nvim/event/multiqueue.c b/src/nvim/event/multiqueue.c index 1e6d62135c..f534fc483f 100644 --- a/src/nvim/event/multiqueue.c +++ b/src/nvim/event/multiqueue.c @@ -73,7 +73,7 @@ struct multiqueue_item { struct multiqueue { MultiQueue *parent; QUEUE headtail; // circularly-linked - put_callback put_cb; + PutCallback put_cb; void *data; size_t size; }; @@ -91,7 +91,7 @@ typedef struct { static Event NILEVENT = { .handler = NULL, .argv = {NULL} }; -MultiQueue *multiqueue_new_parent(put_callback put_cb, void *data) +MultiQueue *multiqueue_new_parent(PutCallback put_cb, void *data) { return multiqueue_new(NULL, put_cb, data); } @@ -104,7 +104,7 @@ MultiQueue *multiqueue_new_child(MultiQueue *parent) return multiqueue_new(parent, NULL, NULL); } -static MultiQueue *multiqueue_new(MultiQueue *parent, put_callback put_cb, +static MultiQueue *multiqueue_new(MultiQueue *parent, PutCallback put_cb, void *data) { MultiQueue *rv = xmalloc(sizeof(MultiQueue)); diff --git a/src/nvim/event/multiqueue.h b/src/nvim/event/multiqueue.h index a688107665..dc60fbb4c7 100644 --- a/src/nvim/event/multiqueue.h +++ b/src/nvim/event/multiqueue.h @@ -7,7 +7,7 @@ #include "nvim/lib/queue.h" typedef struct multiqueue MultiQueue; -typedef void (*put_callback)(MultiQueue *multiq, void *data); +typedef void (*PutCallback)(MultiQueue *multiq, void *data); #define multiqueue_put(q, h, ...) \ multiqueue_put_event(q, event_create(h, __VA_ARGS__)); |