Skip to content

Commit

Permalink
patch 8.1.1437: code to handle callbacks is duplicated
Browse files Browse the repository at this point in the history
Problem:    Code to handle callbacks is duplicated.
Solution:   Add callback_T and functions to deal with it.
  • Loading branch information
brammool committed Jun 1, 2019
1 parent 7dd64a3 commit 3a97bb3
Show file tree
Hide file tree
Showing 13 changed files with 314 additions and 297 deletions.
2 changes: 1 addition & 1 deletion src/buffer.c
Expand Up @@ -862,7 +862,7 @@ free_buffer(buf_T *buf)
#endif
#ifdef FEAT_JOB_CHANNEL
vim_free(buf->b_prompt_text);
free_callback(buf->b_prompt_callback, buf->b_prompt_partial);
free_callback(&buf->b_prompt_callback);
#endif

buf_hashtab_remove(buf);
Expand Down
24 changes: 11 additions & 13 deletions src/change.c
Expand Up @@ -270,36 +270,34 @@ may_record_change(
void
f_listener_add(typval_T *argvars, typval_T *rettv)
{
char_u *callback;
partial_T *partial;
callback_T callback;
listener_T *lnr;
buf_T *buf = curbuf;

callback = get_callback(&argvars[0], &partial);
if (callback == NULL)
callback = get_callback(&argvars[0]);
if (callback.cb_name == NULL)
return;

if (argvars[1].v_type != VAR_UNKNOWN)
{
buf = get_buf_arg(&argvars[1]);
if (buf == NULL)
{
free_callback(&callback);
return;
}
}

lnr = ALLOC_CLEAR_ONE(listener_T);
if (lnr == NULL)
{
free_callback(callback, partial);
free_callback(&callback);
return;
}
lnr->lr_next = buf->b_listener;
buf->b_listener = lnr;

if (partial == NULL)
lnr->lr_callback = vim_strsave(callback);
else
lnr->lr_callback = callback; // pointer into the partial
lnr->lr_partial = partial;
set_callback(&lnr->lr_callback, &callback);

lnr->lr_id = ++next_listener_id;
rettv->vval.v_number = lnr->lr_id;
Expand Down Expand Up @@ -344,7 +342,7 @@ f_listener_remove(typval_T *argvars, typval_T *rettv UNUSED)
prev->lr_next = lnr->lr_next;
else
buf->b_listener = lnr->lr_next;
free_callback(lnr->lr_callback, lnr->lr_partial);
free_callback(&lnr->lr_callback);
vim_free(lnr);
}
prev = lnr;
Expand Down Expand Up @@ -418,8 +416,8 @@ invoke_listeners(buf_T *buf)

for (lnr = buf->b_listener; lnr != NULL; lnr = lnr->lr_next)
{
call_func(lnr->lr_callback, -1, &rettv,
5, argv, NULL, 0L, 0L, &dummy, TRUE, lnr->lr_partial, NULL);
call_callback(&lnr->lr_callback, -1, &rettv,
5, argv, NULL, 0L, 0L, &dummy, TRUE, NULL);
clear_tv(&rettv);
}

Expand Down

0 comments on commit 3a97bb3

Please sign in to comment.