Speed up 'replace-buffer-contents' some more
* src/editfns.c (EXTRA_CONTEXT_FIELDS): New members beg_a and beg_b. (Freplace_buffer_contents): Set up ctx.beg_a and ctx.beg_b. (buffer_chars_equal): Use ctx->beg_a and ctx->beg_b instead of calling BUF_BEGV, which is expensive. This speeds up the recipe in bug#31888 by 30%.
This commit is contained in:
parent
00fdce071c
commit
0dce5e5920
1 changed files with 7 additions and 2 deletions
|
@ -3127,6 +3127,9 @@ static unsigned short rbc_quitcounter;
|
||||||
/* Buffers to compare. */ \
|
/* Buffers to compare. */ \
|
||||||
struct buffer *buffer_a; \
|
struct buffer *buffer_a; \
|
||||||
struct buffer *buffer_b; \
|
struct buffer *buffer_b; \
|
||||||
|
/* BEGV of each buffer */ \
|
||||||
|
ptrdiff_t beg_a; \
|
||||||
|
ptrdiff_t beg_b; \
|
||||||
/* Whether each buffer is unibyte/plain-ASCII or not. */ \
|
/* Whether each buffer is unibyte/plain-ASCII or not. */ \
|
||||||
bool a_unibyte; \
|
bool a_unibyte; \
|
||||||
bool b_unibyte; \
|
bool b_unibyte; \
|
||||||
|
@ -3208,6 +3211,8 @@ differences between the two buffers. */)
|
||||||
struct context ctx = {
|
struct context ctx = {
|
||||||
.buffer_a = a,
|
.buffer_a = a,
|
||||||
.buffer_b = b,
|
.buffer_b = b,
|
||||||
|
.beg_a = min_a,
|
||||||
|
.beg_b = min_b,
|
||||||
.a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
|
.a_unibyte = BUF_ZV (a) == BUF_ZV_BYTE (a),
|
||||||
.b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
|
.b_unibyte = BUF_ZV (b) == BUF_ZV_BYTE (b),
|
||||||
.deletions = SAFE_ALLOCA (del_bytes),
|
.deletions = SAFE_ALLOCA (del_bytes),
|
||||||
|
@ -3349,8 +3354,8 @@ static bool
|
||||||
buffer_chars_equal (struct context *ctx,
|
buffer_chars_equal (struct context *ctx,
|
||||||
ptrdiff_t pos_a, ptrdiff_t pos_b)
|
ptrdiff_t pos_a, ptrdiff_t pos_b)
|
||||||
{
|
{
|
||||||
pos_a += BUF_BEGV (ctx->buffer_a);
|
pos_a += ctx->beg_a;
|
||||||
pos_b += BUF_BEGV (ctx->buffer_b);
|
pos_b += ctx->beg_b;
|
||||||
|
|
||||||
/* Allow the user to escape out of a slow compareseq call. */
|
/* Allow the user to escape out of a slow compareseq call. */
|
||||||
rarely_quit (++rbc_quitcounter);
|
rarely_quit (++rbc_quitcounter);
|
||||||
|
|
Loading…
Add table
Reference in a new issue