Skip to content

Commit 3a97bb3

Browse files
committed
patch 8.1.1437: code to handle callbacks is duplicated
Problem: Code to handle callbacks is duplicated. Solution: Add callback_T and functions to deal with it.
1 parent 7dd64a3 commit 3a97bb3

13 files changed

Lines changed: 314 additions & 297 deletions

File tree

src/buffer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,7 @@ free_buffer(buf_T *buf)
862862
#endif
863863
#ifdef FEAT_JOB_CHANNEL
864864
vim_free(buf->b_prompt_text);
865-
free_callback(buf->b_prompt_callback, buf->b_prompt_partial);
865+
free_callback(&buf->b_prompt_callback);
866866
#endif
867867

868868
buf_hashtab_remove(buf);

src/change.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -270,36 +270,34 @@ may_record_change(
270270
void
271271
f_listener_add(typval_T *argvars, typval_T *rettv)
272272
{
273-
char_u *callback;
274-
partial_T *partial;
273+
callback_T callback;
275274
listener_T *lnr;
276275
buf_T *buf = curbuf;
277276

278-
callback = get_callback(&argvars[0], &partial);
279-
if (callback == NULL)
277+
callback = get_callback(&argvars[0]);
278+
if (callback.cb_name == NULL)
280279
return;
281280

282281
if (argvars[1].v_type != VAR_UNKNOWN)
283282
{
284283
buf = get_buf_arg(&argvars[1]);
285284
if (buf == NULL)
285+
{
286+
free_callback(&callback);
286287
return;
288+
}
287289
}
288290

289291
lnr = ALLOC_CLEAR_ONE(listener_T);
290292
if (lnr == NULL)
291293
{
292-
free_callback(callback, partial);
294+
free_callback(&callback);
293295
return;
294296
}
295297
lnr->lr_next = buf->b_listener;
296298
buf->b_listener = lnr;
297299

298-
if (partial == NULL)
299-
lnr->lr_callback = vim_strsave(callback);
300-
else
301-
lnr->lr_callback = callback; // pointer into the partial
302-
lnr->lr_partial = partial;
300+
set_callback(&lnr->lr_callback, &callback);
303301

304302
lnr->lr_id = ++next_listener_id;
305303
rettv->vval.v_number = lnr->lr_id;
@@ -344,7 +342,7 @@ f_listener_remove(typval_T *argvars, typval_T *rettv UNUSED)
344342
prev->lr_next = lnr->lr_next;
345343
else
346344
buf->b_listener = lnr->lr_next;
347-
free_callback(lnr->lr_callback, lnr->lr_partial);
345+
free_callback(&lnr->lr_callback);
348346
vim_free(lnr);
349347
}
350348
prev = lnr;
@@ -418,8 +416,8 @@ invoke_listeners(buf_T *buf)
418416

419417
for (lnr = buf->b_listener; lnr != NULL; lnr = lnr->lr_next)
420418
{
421-
call_func(lnr->lr_callback, -1, &rettv,
422-
5, argv, NULL, 0L, 0L, &dummy, TRUE, lnr->lr_partial, NULL);
419+
call_callback(&lnr->lr_callback, -1, &rettv,
420+
5, argv, NULL, 0L, 0L, &dummy, TRUE, NULL);
423421
clear_tv(&rettv);
424422
}
425423

0 commit comments

Comments
 (0)