patch 7.4.2024
Problem: More buf_valid() calls can be optimized.
Solution: Use bufref_valid() instead.
diff --git a/src/window.c b/src/window.c
index c3cd7a2..b9e75d6 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2340,6 +2340,9 @@
*/
if (win->w_buffer != NULL)
{
+ bufref_T bufref;
+
+ set_bufref(&bufref, curbuf);
#ifdef FEAT_AUTOCMD
win->w_closing = TRUE;
#endif
@@ -2350,7 +2353,7 @@
#endif
/* Make sure curbuf is valid. It can become invalid if 'bufhidden' is
* "wipe". */
- if (!buf_valid(curbuf))
+ if (!bufref_valid(&bufref))
curbuf = firstbuf;
}
@@ -6632,12 +6635,12 @@
* No autocommands will be executed. Use aucmd_prepbuf() if there are any.
*/
void
-switch_buffer(buf_T **save_curbuf, buf_T *buf)
+switch_buffer(bufref_T *save_curbuf, buf_T *buf)
{
# ifdef FEAT_AUTOCMD
block_autocmds();
# endif
- *save_curbuf = curbuf;
+ set_bufref(save_curbuf, curbuf);
--curbuf->b_nwindows;
curbuf = buf;
curwin->w_buffer = buf;
@@ -6648,17 +6651,17 @@
* Restore the current buffer after using switch_buffer().
*/
void
-restore_buffer(buf_T *save_curbuf)
+restore_buffer(bufref_T *save_curbuf)
{
# ifdef FEAT_AUTOCMD
unblock_autocmds();
# endif
/* Check for valid buffer, just in case. */
- if (buf_valid(save_curbuf))
+ if (bufref_valid(save_curbuf))
{
--curbuf->b_nwindows;
- curwin->w_buffer = save_curbuf;
- curbuf = save_curbuf;
+ curwin->w_buffer = save_curbuf->br_buf;
+ curbuf = save_curbuf->br_buf;
++curbuf->b_nwindows;
}
}