X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5842a27bbfb7efa6872824e501bc7ec98b631553..f0ecbca80a004824d74ca9bc8b77cc94b2489b34:/src/insdel.c diff --git a/src/insdel.c b/src/insdel.c index 8c6e8f6364..0a9777ad95 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -1,6 +1,5 @@ /* Buffer insertion/deletion and gap motion for GNU Emacs. - Copyright (C) 1985, 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 1985-1986, 1993-1995, 1997-2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -21,6 +20,9 @@ along with GNU Emacs. If not, see . */ #include #include + +#include + #include "lisp.h" #include "intervals.h" #include "buffer.h" @@ -34,28 +36,16 @@ along with GNU Emacs. If not, see . */ #endif static void insert_from_string_1 (Lisp_Object string, - EMACS_INT pos, EMACS_INT pos_byte, - EMACS_INT nchars, EMACS_INT nbytes, + ptrdiff_t pos, ptrdiff_t pos_byte, + ptrdiff_t nchars, ptrdiff_t nbytes, int inherit, int before_markers); static void insert_from_buffer_1 (struct buffer *buf, - EMACS_INT from, EMACS_INT nchars, + ptrdiff_t from, ptrdiff_t nchars, int inherit); -static void gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap); -static void gap_right (EMACS_INT charpos, EMACS_INT bytepos); -static void adjust_markers_gap_motion (EMACS_INT from, EMACS_INT to, - EMACS_INT amount); -static void adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, - int before_markers); -static void adjust_markers_for_replace (EMACS_INT, EMACS_INT, EMACS_INT, - EMACS_INT, EMACS_INT, EMACS_INT); -static void adjust_point (EMACS_INT nchars, EMACS_INT nbytes); - -Lisp_Object Fcombine_after_change_execute (void); - -/* Non-nil means don't call the after-change-functions right away, - just record an element in combine_after_change_list. */ -Lisp_Object Vcombine_after_change_calls; +static void gap_left (ptrdiff_t charpos, ptrdiff_t bytepos, int newgap); +static void gap_right (ptrdiff_t charpos, ptrdiff_t bytepos); + +static Lisp_Object Fcombine_after_change_execute (void); /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT) describing changes which happened while combine_after_change_calls @@ -67,28 +57,28 @@ Lisp_Object Vcombine_after_change_calls; END-UNCHANGED is the number of chars after the changed range, and CHANGE-AMOUNT is the number of characters inserted by the change (negative for a deletion). */ -Lisp_Object combine_after_change_list; +static Lisp_Object combine_after_change_list; /* Buffer which combine_after_change_list is about. */ -Lisp_Object combine_after_change_buffer; +static Lisp_Object combine_after_change_buffer; Lisp_Object Qinhibit_modification_hooks; +static void signal_before_change (ptrdiff_t, ptrdiff_t, ptrdiff_t *); -/* Check all markers in the current buffer, looking for something invalid. */ - -static int check_markers_debug_flag; - #define CHECK_MARKERS() \ - if (check_markers_debug_flag) \ - check_markers (); \ - else + do \ + { \ + if (check_markers_debug_flag) \ + check_markers (); \ + } \ + while (0) -void +static void check_markers (void) { register struct Lisp_Marker *tail; - int multibyte = ! NILP (current_buffer->enable_multibyte_characters); + int multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next) { @@ -107,7 +97,7 @@ check_markers (void) Note that this can quit! */ void -move_gap (EMACS_INT charpos) +move_gap (ptrdiff_t charpos) { move_gap_both (charpos, charpos_to_bytepos (charpos)); } @@ -116,7 +106,7 @@ move_gap (EMACS_INT charpos) Note that this can quit! */ void -move_gap_both (EMACS_INT charpos, EMACS_INT bytepos) +move_gap_both (ptrdiff_t charpos, ptrdiff_t bytepos) { if (bytepos < GPT_BYTE) gap_left (charpos, bytepos, 0); @@ -130,11 +120,11 @@ move_gap_both (EMACS_INT charpos, EMACS_INT bytepos) If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */ static void -gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap) +gap_left (ptrdiff_t charpos, ptrdiff_t bytepos, int newgap) { register unsigned char *to, *from; - register EMACS_INT i; - EMACS_INT new_s1; + register ptrdiff_t i; + ptrdiff_t new_s1; if (!newgap) BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT); @@ -169,10 +159,9 @@ gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap) memmove (to, from, i); } - /* Adjust markers, and buffer data structure, to put the gap at BYTEPOS. - BYTEPOS is where the loop above stopped, which may be what was specified - or may be where a quit was detected. */ - adjust_markers_gap_motion (bytepos, GPT_BYTE, GAP_SIZE); + /* Adjust buffer data structure, to put the gap at BYTEPOS. + BYTEPOS is where the loop above stopped, which may be what + was specified or may be where a quit was detected. */ GPT_BYTE = bytepos; GPT = charpos; if (bytepos < charpos) @@ -186,11 +175,11 @@ gap_left (EMACS_INT charpos, EMACS_INT bytepos, int newgap) and CHARPOS is the corresponding char position. */ static void -gap_right (EMACS_INT charpos, EMACS_INT bytepos) +gap_right (ptrdiff_t charpos, ptrdiff_t bytepos) { register unsigned char *to, *from; - register EMACS_INT i; - EMACS_INT new_s1; + register ptrdiff_t i; + ptrdiff_t new_s1; BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT); @@ -224,8 +213,6 @@ gap_right (EMACS_INT charpos, EMACS_INT bytepos) from += i, to += i; } - adjust_markers_gap_motion (GPT_BYTE + GAP_SIZE, bytepos + GAP_SIZE, - - GAP_SIZE); GPT = charpos; GPT_BYTE = bytepos; if (bytepos < charpos) @@ -234,67 +221,6 @@ gap_right (EMACS_INT charpos, EMACS_INT bytepos) QUIT; } -/* Add AMOUNT to the byte position of every marker in the current buffer - whose current byte position is between FROM (exclusive) and TO (inclusive). - - Also, any markers past the outside of that interval, in the direction - of adjustment, are first moved back to the near end of the interval - and then adjusted by AMOUNT. - - When the latter adjustment is done, if AMOUNT is negative, - we record the adjustment for undo. (This case happens only for - deletion.) - - The markers' character positions are not altered, - because gap motion does not affect character positions. */ - -int adjust_markers_test; - -static void -adjust_markers_gap_motion (EMACS_INT from, EMACS_INT to, EMACS_INT amount) -{ - /* Now that a marker has a bytepos, not counting the gap, - nothing needs to be done here. */ -#if 0 - Lisp_Object marker; - register struct Lisp_Marker *m; - register EMACS_INT mpos; - - marker = BUF_MARKERS (current_buffer); - - while (!NILP (marker)) - { - m = XMARKER (marker); - mpos = m->bytepos; - if (amount > 0) - { - if (mpos > to && mpos < to + amount) - { - if (adjust_markers_test) - abort (); - mpos = to + amount; - } - } - else - { - /* Here's the case where a marker is inside text being deleted. - AMOUNT can be negative for gap motion, too, - but then this range contains no markers. */ - if (mpos > from + amount && mpos <= from) - { - if (adjust_markers_test) - abort (); - mpos = from + amount; - } - } - if (mpos > from && mpos <= to) - mpos += amount; - m->bufpos = mpos; - marker = m->chain; - } -#endif -} - /* Adjust all markers for a deletion whose range in bytes is FROM_BYTE to TO_BYTE. The range in charpos is FROM to TO. @@ -303,12 +229,12 @@ adjust_markers_gap_motion (EMACS_INT from, EMACS_INT to, EMACS_INT amount) or inside of the range being deleted. */ void -adjust_markers_for_delete (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte) +adjust_markers_for_delete (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte) { Lisp_Object marker; register struct Lisp_Marker *m; - register EMACS_INT charpos; + register ptrdiff_t charpos; for (m = BUF_MARKERS (current_buffer); m; m = m->next) { @@ -368,13 +294,13 @@ adjust_markers_for_delete (EMACS_INT from, EMACS_INT from_byte, or BEFORE_MARKERS is true. */ static void -adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, int before_markers) +adjust_markers_for_insert (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte, int before_markers) { struct Lisp_Marker *m; int adjusted = 0; - EMACS_INT nchars = to - from; - EMACS_INT nbytes = to_byte - from_byte; + ptrdiff_t nchars = to - from; + ptrdiff_t nbytes = to_byte - from_byte; for (m = BUF_MARKERS (current_buffer); m; m = m->next) { @@ -403,7 +329,7 @@ adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte, - disordered overlays in the slot `overlays_before' of current_buffer. */ if (adjusted) { - fix_start_end_in_overlays(from, to); + fix_start_end_in_overlays (from, to); fix_overlays_before (current_buffer, from, to); } } @@ -419,11 +345,9 @@ adjust_markers_for_insert (EMACS_INT from, EMACS_INT from_byte, intervals. */ static void -adjust_point (EMACS_INT nchars, EMACS_INT nbytes) +adjust_point (ptrdiff_t nchars, ptrdiff_t nbytes) { - BUF_PT (current_buffer) += nchars; - BUF_PT_BYTE (current_buffer) += nbytes; - + SET_BUF_PT_BOTH (current_buffer, PT + nchars, PT_BYTE + nbytes); /* In a single-byte buffer, the two positions must be equal. */ eassert (PT_BYTE >= PT && PT_BYTE - PT <= ZV_BYTE - ZV); } @@ -434,14 +358,14 @@ adjust_point (EMACS_INT nchars, EMACS_INT nbytes) an insertion. */ static void -adjust_markers_for_replace (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT old_chars, EMACS_INT old_bytes, - EMACS_INT new_chars, EMACS_INT new_bytes) +adjust_markers_for_replace (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t old_chars, ptrdiff_t old_bytes, + ptrdiff_t new_chars, ptrdiff_t new_bytes) { register struct Lisp_Marker *m; - EMACS_INT prev_to_byte = from_byte + old_bytes; - EMACS_INT diff_chars = new_chars - old_chars; - EMACS_INT diff_bytes = new_bytes - old_bytes; + ptrdiff_t prev_to_byte = from_byte + old_bytes; + ptrdiff_t diff_chars = new_chars - old_chars; + ptrdiff_t diff_bytes = new_bytes - old_bytes; for (m = BUF_MARKERS (current_buffer); m; m = m->next) { @@ -461,29 +385,31 @@ adjust_markers_for_replace (EMACS_INT from, EMACS_INT from_byte, } +void +buffer_overflow (void) +{ + error ("Maximum buffer size exceeded"); +} + /* Make the gap NBYTES_ADDED bytes longer. */ -void -make_gap_larger (EMACS_INT nbytes_added) +static void +make_gap_larger (ptrdiff_t nbytes_added) { Lisp_Object tem; - EMACS_INT real_gap_loc; - EMACS_INT real_gap_loc_byte; - EMACS_INT old_gap_size; - - /* If we have to get more space, get enough to last a while. */ - nbytes_added += 2000; - - { EMACS_INT total_size = Z_BYTE - BEG_BYTE + GAP_SIZE + nbytes_added; - if (total_size < 0 - /* Don't allow a buffer size that won't fit in a Lisp integer. */ - || total_size != XINT (make_number (total_size)) - /* Don't allow a buffer size that won't fit in an int - even if it will fit in a Lisp integer. - That won't work because so many places still use `int'. */ - || total_size != (EMACS_INT) (int) total_size) - error ("Buffer exceeds maximum size"); - } + ptrdiff_t real_gap_loc; + ptrdiff_t real_gap_loc_byte; + ptrdiff_t old_gap_size; + ptrdiff_t current_size = Z_BYTE - BEG_BYTE + GAP_SIZE; + enum { enough_for_a_while = 2000 }; + + if (BUF_BYTES_MAX - current_size < nbytes_added) + buffer_overflow (); + + /* If we have to get more space, get enough to last a while; + but do not exceed the maximum buffer size. */ + nbytes_added = min (nbytes_added + enough_for_a_while, + BUF_BYTES_MAX - current_size); enlarge_buffer_text (current_buffer, nbytes_added); @@ -515,19 +441,20 @@ make_gap_larger (EMACS_INT nbytes_added) Vinhibit_quit = tem; } +#if defined USE_MMAP_FOR_BUFFERS || defined REL_ALLOC || defined DOUG_LEA_MALLOC /* Make the gap NBYTES_REMOVED bytes shorter. */ -void -make_gap_smaller (EMACS_INT nbytes_removed) +static void +make_gap_smaller (ptrdiff_t nbytes_removed) { Lisp_Object tem; - EMACS_INT real_gap_loc; - EMACS_INT real_gap_loc_byte; - EMACS_INT real_Z; - EMACS_INT real_Z_byte; - EMACS_INT real_beg_unchanged; - EMACS_INT new_gap_size; + ptrdiff_t real_gap_loc; + ptrdiff_t real_gap_loc_byte; + ptrdiff_t real_Z; + ptrdiff_t real_Z_byte; + ptrdiff_t real_beg_unchanged; + ptrdiff_t new_gap_size; /* Make sure the gap is at least 20 bytes. */ if (GAP_SIZE - nbytes_removed < 20) @@ -574,8 +501,10 @@ make_gap_smaller (EMACS_INT nbytes_removed) Vinhibit_quit = tem; } +#endif /* USE_MMAP_FOR_BUFFERS || REL_ALLOC || DOUG_LEA_MALLOC */ + void -make_gap (EMACS_INT nbytes_added) +make_gap (ptrdiff_t nbytes_added) { if (nbytes_added >= 0) make_gap_larger (nbytes_added); @@ -592,9 +521,9 @@ make_gap (EMACS_INT nbytes_added) Return the number of bytes stored at TO_ADDR. */ -EMACS_INT +ptrdiff_t copy_text (const unsigned char *from_addr, unsigned char *to_addr, - EMACS_INT nbytes, int from_multibyte, int to_multibyte) + ptrdiff_t nbytes, int from_multibyte, int to_multibyte) { if (from_multibyte == to_multibyte) { @@ -603,9 +532,8 @@ copy_text (const unsigned char *from_addr, unsigned char *to_addr, } else if (from_multibyte) { - EMACS_INT nchars = 0; - EMACS_INT bytes_left = nbytes; - Lisp_Object tbl = Qnil; + ptrdiff_t nchars = 0; + ptrdiff_t bytes_left = nbytes; while (bytes_left > 0) { @@ -642,32 +570,6 @@ copy_text (const unsigned char *from_addr, unsigned char *to_addr, return to_addr - initial_to_addr; } } - -/* Return the number of bytes it would take - to convert some single-byte text to multibyte. - The single-byte text consists of NBYTES bytes at PTR. */ - -EMACS_INT -count_size_as_multibyte (const unsigned char *ptr, EMACS_INT nbytes) -{ - EMACS_INT i; - EMACS_INT outgoing_nbytes = 0; - - for (i = 0; i < nbytes; i++) - { - unsigned int c = *ptr++; - - if (ASCII_CHAR_P (c)) - outgoing_nbytes++; - else - { - c = BYTE8_TO_CHAR (c); - outgoing_nbytes += CHAR_BYTES (c); - } - } - - return outgoing_nbytes; -} /* Insert a string of specified length before point. This function judges multibyteness based on @@ -678,11 +580,11 @@ count_size_as_multibyte (const unsigned char *ptr, EMACS_INT nbytes) prepare_to_modify_buffer could relocate the text. */ void -insert (const unsigned char *string, EMACS_INT nbytes) +insert (const char *string, ptrdiff_t nbytes) { if (nbytes > 0) { - EMACS_INT len = chars_in_text (string, nbytes), opoint; + ptrdiff_t len = chars_in_text ((unsigned char *) string, nbytes), opoint; insert_1_both (string, len, nbytes, 0, 1, 0); opoint = PT - len; signal_after_change (opoint, 0, len); @@ -693,11 +595,11 @@ insert (const unsigned char *string, EMACS_INT nbytes) /* Likewise, but inherit text properties from neighboring characters. */ void -insert_and_inherit (const unsigned char *string, EMACS_INT nbytes) +insert_and_inherit (const char *string, ptrdiff_t nbytes) { if (nbytes > 0) { - EMACS_INT len = chars_in_text (string, nbytes), opoint; + ptrdiff_t len = chars_in_text ((unsigned char *) string, nbytes), opoint; insert_1_both (string, len, nbytes, 1, 1, 0); opoint = PT - len; signal_after_change (opoint, 0, len); @@ -713,7 +615,7 @@ insert_char (int c) unsigned char str[MAX_MULTIBYTE_LENGTH]; int len; - if (! NILP (current_buffer->enable_multibyte_characters)) + if (! NILP (BVAR (current_buffer, enable_multibyte_characters))) len = CHAR_STRING (c, str); else { @@ -721,7 +623,7 @@ insert_char (int c) str[0] = c; } - insert (str, len); + insert ((char *) str, len); } /* Insert the null-terminated string S before point. */ @@ -738,11 +640,11 @@ insert_string (const char *s) since gc could happen and relocate it. */ void -insert_before_markers (const unsigned char *string, EMACS_INT nbytes) +insert_before_markers (const char *string, ptrdiff_t nbytes) { if (nbytes > 0) { - EMACS_INT len = chars_in_text (string, nbytes), opoint; + ptrdiff_t len = chars_in_text ((unsigned char *) string, nbytes), opoint; insert_1_both (string, len, nbytes, 0, 1, 1); opoint = PT - len; signal_after_change (opoint, 0, len); @@ -753,12 +655,12 @@ insert_before_markers (const unsigned char *string, EMACS_INT nbytes) /* Likewise, but inherit text properties from neighboring characters. */ void -insert_before_markers_and_inherit (const unsigned char *string, - EMACS_INT nbytes) +insert_before_markers_and_inherit (const char *string, + ptrdiff_t nbytes) { if (nbytes > 0) { - EMACS_INT len = chars_in_text (string, nbytes), opoint; + ptrdiff_t len = chars_in_text ((unsigned char *) string, nbytes), opoint; insert_1_both (string, len, nbytes, 1, 1, 1); opoint = PT - len; signal_after_change (opoint, 0, len); @@ -769,11 +671,11 @@ insert_before_markers_and_inherit (const unsigned char *string, /* Subroutine used by the insert functions above. */ void -insert_1 (const unsigned char *string, EMACS_INT nbytes, +insert_1 (const char *string, ptrdiff_t nbytes, int inherit, int prepare, int before_markers) { - insert_1_both (string, chars_in_text (string, nbytes), nbytes, - inherit, prepare, before_markers); + insert_1_both (string, chars_in_text ((unsigned char *) string, nbytes), + nbytes, inherit, prepare, before_markers); } @@ -785,8 +687,8 @@ insert_1 (const unsigned char *string, EMACS_INT nbytes, which combine in this way. Otherwise, return 0. */ int -count_combining_before (const unsigned char *string, EMACS_INT length, - EMACS_INT pos, EMACS_INT pos_byte) +count_combining_before (const unsigned char *string, ptrdiff_t length, + ptrdiff_t pos, ptrdiff_t pos_byte) { int len, combining_bytes; const unsigned char *p; @@ -831,11 +733,11 @@ count_combining_before (const unsigned char *string, EMACS_INT length, int count_combining_after (const unsigned char *string, - EMACS_INT length, EMACS_INT pos, EMACS_INT pos_byte) + ptrdiff_t length, ptrdiff_t pos, ptrdiff_t pos_byte) { - EMACS_INT opos_byte = pos_byte; - EMACS_INT i; - EMACS_INT bytes; + ptrdiff_t opos_byte = pos_byte; + ptrdiff_t i; + ptrdiff_t bytes; unsigned char *bufp; if (NILP (current_buffer->enable_multibyte_characters)) @@ -894,14 +796,14 @@ count_combining_after (const unsigned char *string, are the same as in insert_1. */ void -insert_1_both (const unsigned char *string, - EMACS_INT nchars, EMACS_INT nbytes, +insert_1_both (const char *string, + ptrdiff_t nchars, ptrdiff_t nbytes, int inherit, int prepare, int before_markers) { if (nchars == 0) return; - if (NILP (current_buffer->enable_multibyte_characters)) + if (NILP (BVAR (current_buffer, enable_multibyte_characters))) nchars = nbytes; if (prepare) @@ -973,10 +875,10 @@ insert_1_both (const unsigned char *string, without insert noticing. */ void -insert_from_string (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, - EMACS_INT length, EMACS_INT length_byte, int inherit) +insert_from_string (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte, + ptrdiff_t length, ptrdiff_t length_byte, int inherit) { - EMACS_INT opoint = PT; + ptrdiff_t opoint = PT; if (SCHARS (string) == 0) return; @@ -992,11 +894,11 @@ insert_from_string (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, void insert_from_string_before_markers (Lisp_Object string, - EMACS_INT pos, EMACS_INT pos_byte, - EMACS_INT length, EMACS_INT length_byte, + ptrdiff_t pos, ptrdiff_t pos_byte, + ptrdiff_t length, ptrdiff_t length_byte, int inherit) { - EMACS_INT opoint = PT; + ptrdiff_t opoint = PT; if (SCHARS (string) == 0) return; @@ -1010,18 +912,18 @@ insert_from_string_before_markers (Lisp_Object string, /* Subroutine of the insertion functions above. */ static void -insert_from_string_1 (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, - EMACS_INT nchars, EMACS_INT nbytes, +insert_from_string_1 (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte, + ptrdiff_t nchars, ptrdiff_t nbytes, int inherit, int before_markers) { struct gcpro gcpro1; - EMACS_INT outgoing_nbytes = nbytes; + ptrdiff_t outgoing_nbytes = nbytes; INTERVAL intervals; /* Make OUTGOING_NBYTES describe the text as it will be inserted in this buffer. */ - if (NILP (current_buffer->enable_multibyte_characters)) + if (NILP (BVAR (current_buffer, enable_multibyte_characters))) outgoing_nbytes = nchars; else if (! STRING_MULTIBYTE (string)) outgoing_nbytes @@ -1044,7 +946,7 @@ insert_from_string_1 (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, between single-byte and multibyte. */ copy_text (SDATA (string) + pos_byte, GPT_ADDR, nbytes, STRING_MULTIBYTE (string), - ! NILP (current_buffer->enable_multibyte_characters)); + ! NILP (BVAR (current_buffer, enable_multibyte_characters))); #ifdef BYTE_COMBINING_DEBUG /* We have copied text into the gap, but we have not altered @@ -1102,9 +1004,9 @@ insert_from_string_1 (Lisp_Object string, EMACS_INT pos, EMACS_INT pos_byte, starting at GPT_ADDR. */ void -insert_from_gap (EMACS_INT nchars, EMACS_INT nbytes) +insert_from_gap (ptrdiff_t nchars, ptrdiff_t nbytes) { - if (NILP (current_buffer->enable_multibyte_characters)) + if (NILP (BVAR (current_buffer, enable_multibyte_characters))) nchars = nbytes; record_insert (GPT, nchars); @@ -1148,9 +1050,9 @@ insert_from_gap (EMACS_INT nchars, EMACS_INT nbytes) void insert_from_buffer (struct buffer *buf, - EMACS_INT charpos, EMACS_INT nchars, int inherit) + ptrdiff_t charpos, ptrdiff_t nchars, int inherit) { - EMACS_INT opoint = PT; + ptrdiff_t opoint = PT; insert_from_buffer_1 (buf, charpos, nchars, inherit); signal_after_change (opoint, 0, PT - opoint); @@ -1159,25 +1061,24 @@ insert_from_buffer (struct buffer *buf, static void insert_from_buffer_1 (struct buffer *buf, - EMACS_INT from, EMACS_INT nchars, int inherit) + ptrdiff_t from, ptrdiff_t nchars, int inherit) { - register Lisp_Object temp; - EMACS_INT chunk, chunk_expanded; - EMACS_INT from_byte = buf_charpos_to_bytepos (buf, from); - EMACS_INT to_byte = buf_charpos_to_bytepos (buf, from + nchars); - EMACS_INT incoming_nbytes = to_byte - from_byte; - EMACS_INT outgoing_nbytes = incoming_nbytes; + ptrdiff_t chunk, chunk_expanded; + ptrdiff_t from_byte = buf_charpos_to_bytepos (buf, from); + ptrdiff_t to_byte = buf_charpos_to_bytepos (buf, from + nchars); + ptrdiff_t incoming_nbytes = to_byte - from_byte; + ptrdiff_t outgoing_nbytes = incoming_nbytes; INTERVAL intervals; /* Make OUTGOING_NBYTES describe the text as it will be inserted in this buffer. */ - if (NILP (current_buffer->enable_multibyte_characters)) + if (NILP (BVAR (current_buffer, enable_multibyte_characters))) outgoing_nbytes = nchars; - else if (NILP (buf->enable_multibyte_characters)) + else if (NILP (BVAR (buf, enable_multibyte_characters))) { - EMACS_INT outgoing_before_gap = 0; - EMACS_INT outgoing_after_gap = 0; + ptrdiff_t outgoing_before_gap = 0; + ptrdiff_t outgoing_after_gap = 0; if (from < BUF_GPT (buf)) { @@ -1200,11 +1101,6 @@ insert_from_buffer_1 (struct buffer *buf, outgoing_nbytes = outgoing_before_gap + outgoing_after_gap; } - /* Make sure point-max won't overflow after this insertion. */ - XSETINT (temp, outgoing_nbytes + Z); - if (outgoing_nbytes + Z != XINT (temp)) - error ("Maximum buffer size exceeded"); - /* Do this before moving and increasing the gap, because the before-change hooks might move the gap or make it smaller. */ @@ -1225,8 +1121,8 @@ insert_from_buffer_1 (struct buffer *buf, chunk_expanded = copy_text (BUF_BYTE_ADDRESS (buf, from_byte), GPT_ADDR, chunk, - ! NILP (buf->enable_multibyte_characters), - ! NILP (current_buffer->enable_multibyte_characters)); + ! NILP (BVAR (buf, enable_multibyte_characters)), + ! NILP (BVAR (current_buffer, enable_multibyte_characters))); } else chunk_expanded = chunk = 0; @@ -1234,8 +1130,8 @@ insert_from_buffer_1 (struct buffer *buf, if (chunk < incoming_nbytes) copy_text (BUF_BYTE_ADDRESS (buf, from_byte + chunk), GPT_ADDR + chunk_expanded, incoming_nbytes - chunk, - ! NILP (buf->enable_multibyte_characters), - ! NILP (current_buffer->enable_multibyte_characters)); + ! NILP (BVAR (buf, enable_multibyte_characters)), + ! NILP (BVAR (current_buffer, enable_multibyte_characters))); #ifdef BYTE_COMBINING_DEBUG /* We have copied text into the gap, but we have not altered @@ -1298,11 +1194,11 @@ insert_from_buffer_1 (struct buffer *buf, PREV_TEXT nil means the new text was just inserted. */ -void -adjust_after_replace (EMACS_INT from, EMACS_INT from_byte, - Lisp_Object prev_text, EMACS_INT len, EMACS_INT len_byte) +static void +adjust_after_replace (ptrdiff_t from, ptrdiff_t from_byte, + Lisp_Object prev_text, ptrdiff_t len, ptrdiff_t len_byte) { - EMACS_INT nchars_del = 0, nbytes_del = 0; + ptrdiff_t nchars_del = 0, nbytes_del = 0; #ifdef BYTE_COMBINING_DEBUG if (count_combining_before (GPT_ADDR, len_byte, from, from_byte) @@ -1330,7 +1226,7 @@ adjust_after_replace (EMACS_INT from, EMACS_INT from_byte, adjust_markers_for_insert (from, from_byte, from + len, from_byte + len_byte, 0); - if (! EQ (current_buffer->undo_list, Qt)) + if (! EQ (BVAR (current_buffer, undo_list), Qt)) { if (nchars_del > 0) record_delete (from, prev_text); @@ -1361,68 +1257,16 @@ adjust_after_replace (EMACS_INT from, EMACS_INT from_byte, CHARS_MODIFF = MODIFF; } -/* Like adjust_after_replace, but doesn't require PREV_TEXT. - This is for use when undo is not enabled in the current buffer. */ - -void -adjust_after_replace_noundo (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT nchars_del, EMACS_INT nbytes_del, - EMACS_INT len, EMACS_INT len_byte) -{ -#ifdef BYTE_COMBINING_DEBUG - if (count_combining_before (GPT_ADDR, len_byte, from, from_byte) - || count_combining_after (GPT_ADDR, len_byte, from, from_byte)) - abort (); -#endif - - /* Update various buffer positions for the new text. */ - GAP_SIZE -= len_byte; - ZV += len; Z+= len; - ZV_BYTE += len_byte; Z_BYTE += len_byte; - GPT += len; GPT_BYTE += len_byte; - if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ - - if (nchars_del > 0) - adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del, - len, len_byte); - else - adjust_markers_for_insert (from, from_byte, - from + len, from_byte + len_byte, 0); - - if (len > nchars_del) - adjust_overlays_for_insert (from, len - nchars_del); - else if (len < nchars_del) - adjust_overlays_for_delete (from, nchars_del - len); - if (BUF_INTERVALS (current_buffer) != 0) - { - offset_intervals (current_buffer, from, len - nchars_del); - } - - if (from < PT) - adjust_point (len - nchars_del, len_byte - nbytes_del); - - /* As byte combining will decrease Z, we must check this again. */ - if (Z - GPT < END_UNCHANGED) - END_UNCHANGED = Z - GPT; - - CHECK_MARKERS (); - - if (len == 0) - evaporate_overlays (from); - MODIFF++; - CHARS_MODIFF = MODIFF; -} - /* Record undo information, adjust markers and position keepers for an insertion of a text from FROM (FROM_BYTE) to TO (TO_BYTE). The text already exists in the current buffer but character length (TO - FROM) may be incorrect, the correct length is NEWLEN. */ void -adjust_after_insert (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, EMACS_INT newlen) +adjust_after_insert (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte, ptrdiff_t newlen) { - EMACS_INT len = to - from, len_byte = to_byte - from_byte; + ptrdiff_t len = to - from, len_byte = to_byte - from_byte; if (GPT != to) move_gap_both (to, to_byte); @@ -1446,17 +1290,16 @@ adjust_after_insert (EMACS_INT from, EMACS_INT from_byte, But if MARKERS is 0, don't relocate markers. */ void -replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, +replace_range (ptrdiff_t from, ptrdiff_t to, Lisp_Object new, int prepare, int inherit, int markers) { - EMACS_INT inschars = SCHARS (new); - EMACS_INT insbytes = SBYTES (new); - EMACS_INT from_byte, to_byte; - EMACS_INT nbytes_del, nchars_del; - register Lisp_Object temp; + ptrdiff_t inschars = SCHARS (new); + ptrdiff_t insbytes = SBYTES (new); + ptrdiff_t from_byte, to_byte; + ptrdiff_t nbytes_del, nchars_del; struct gcpro gcpro1; INTERVAL intervals; - EMACS_INT outgoing_insbytes = insbytes; + ptrdiff_t outgoing_insbytes = insbytes; Lisp_Object deletion; CHECK_MARKERS (); @@ -1466,7 +1309,7 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, if (prepare) { - EMACS_INT range_length = to - from; + ptrdiff_t range_length = to - from; prepare_to_modify_buffer (from, to, &from); to = from + range_length; } @@ -1491,17 +1334,12 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, /* Make OUTGOING_INSBYTES describe the text as it will be inserted in this buffer. */ - if (NILP (current_buffer->enable_multibyte_characters)) + if (NILP (BVAR (current_buffer, enable_multibyte_characters))) outgoing_insbytes = inschars; else if (! STRING_MULTIBYTE (new)) outgoing_insbytes = count_size_as_multibyte (SDATA (new), insbytes); - /* Make sure point-max won't overflow after this insertion. */ - XSETINT (temp, Z_BYTE - nbytes_del + insbytes); - if (Z_BYTE - nbytes_del + insbytes != XINT (temp)) - error ("Maximum buffer size exceeded"); - GCPRO1 (new); /* Make sure the gap is somewhere in or next to what we are deleting. */ @@ -1513,7 +1351,7 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, /* Even if we don't record for undo, we must keep the original text because we may have to recover it because of inappropriate byte combining. */ - if (! EQ (current_buffer->undo_list, Qt)) + if (! EQ (BVAR (current_buffer, undo_list), Qt)) deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); GAP_SIZE += nbytes_del; @@ -1533,14 +1371,14 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, if (Z - GPT < END_UNCHANGED) END_UNCHANGED = Z - GPT; - if (GAP_SIZE < insbytes) - make_gap (insbytes - GAP_SIZE); + if (GAP_SIZE < outgoing_insbytes) + make_gap (outgoing_insbytes - GAP_SIZE); /* Copy the string text into the buffer, perhaps converting between single-byte and multibyte. */ copy_text (SDATA (new), GPT_ADDR, insbytes, STRING_MULTIBYTE (new), - ! NILP (current_buffer->enable_multibyte_characters)); + ! NILP (BVAR (current_buffer, enable_multibyte_characters))); #ifdef BYTE_COMBINING_DEBUG /* We have copied text into the gap, but we have not marked @@ -1553,7 +1391,7 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, abort (); #endif - if (! EQ (current_buffer->undo_list, Qt)) + if (! EQ (BVAR (current_buffer, undo_list), Qt)) { /* Record the insertion first, so that when we undo, the deletion will be undone first. Thus, undo @@ -1626,13 +1464,12 @@ replace_range (EMACS_INT from, EMACS_INT to, Lisp_Object new, prepare_to_modify_buffer and never call signal_after_change. */ void -replace_range_2 (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, - char *ins, EMACS_INT inschars, EMACS_INT insbytes, +replace_range_2 (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte, + const char *ins, ptrdiff_t inschars, ptrdiff_t insbytes, int markers) { - EMACS_INT nbytes_del, nchars_del; - Lisp_Object temp; + ptrdiff_t nbytes_del, nchars_del; CHECK_MARKERS (); @@ -1642,11 +1479,6 @@ replace_range_2 (EMACS_INT from, EMACS_INT from_byte, if (nbytes_del <= 0 && insbytes == 0) return; - /* Make sure point-max won't overflow after this insertion. */ - XSETINT (temp, Z_BYTE - nbytes_del + insbytes); - if (Z_BYTE - nbytes_del + insbytes != XINT (temp)) - error ("Maximum buffer size exceeded"); - /* Make sure the gap is somewhere in or next to what we are deleting. */ if (from > GPT) gap_right (from, from_byte); @@ -1739,7 +1571,7 @@ replace_range_2 (EMACS_INT from, EMACS_INT from_byte, If TO comes before FROM, we delete nothing. */ void -del_range (EMACS_INT from, EMACS_INT to) +del_range (ptrdiff_t from, ptrdiff_t to) { del_range_1 (from, to, 1, 0); } @@ -1748,9 +1580,9 @@ del_range (EMACS_INT from, EMACS_INT to) RET_STRING says to return the deleted text. */ Lisp_Object -del_range_1 (EMACS_INT from, EMACS_INT to, int prepare, int ret_string) +del_range_1 (ptrdiff_t from, ptrdiff_t to, int prepare, int ret_string) { - EMACS_INT from_byte, to_byte; + ptrdiff_t from_byte, to_byte; Lisp_Object deletion; struct gcpro gcpro1; @@ -1765,7 +1597,7 @@ del_range_1 (EMACS_INT from, EMACS_INT to, int prepare, int ret_string) if (prepare) { - EMACS_INT range_length = to - from; + ptrdiff_t range_length = to - from; prepare_to_modify_buffer (from, to, &from); to = min (ZV, from + range_length); } @@ -1774,7 +1606,7 @@ del_range_1 (EMACS_INT from, EMACS_INT to, int prepare, int ret_string) to_byte = CHAR_TO_BYTE (to); deletion = del_range_2 (from, from_byte, to, to_byte, ret_string); - GCPRO1(deletion); + GCPRO1 (deletion); signal_after_change (from, to - from, 0); update_compositions (from, from, CHECK_HEAD); UNGCPRO; @@ -1784,9 +1616,9 @@ del_range_1 (EMACS_INT from, EMACS_INT to, int prepare, int ret_string) /* Like del_range_1 but args are byte positions, not char positions. */ void -del_range_byte (EMACS_INT from_byte, EMACS_INT to_byte, int prepare) +del_range_byte (ptrdiff_t from_byte, ptrdiff_t to_byte, int prepare) { - EMACS_INT from, to; + ptrdiff_t from, to; /* Make args be valid */ if (from_byte < BEGV_BYTE) @@ -1802,8 +1634,8 @@ del_range_byte (EMACS_INT from_byte, EMACS_INT to_byte, int prepare) if (prepare) { - EMACS_INT old_from = from, old_to = Z - to; - EMACS_INT range_length = to - from; + ptrdiff_t old_from = from, old_to = Z - to; + ptrdiff_t range_length = to - from; prepare_to_modify_buffer (from, to, &from); to = from + range_length; @@ -1827,8 +1659,8 @@ del_range_byte (EMACS_INT from_byte, EMACS_INT to_byte, int prepare) and bytepos. */ void -del_range_both (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, int prepare) +del_range_both (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte, int prepare) { /* Make args be valid */ if (from_byte < BEGV_BYTE) @@ -1846,8 +1678,8 @@ del_range_both (EMACS_INT from, EMACS_INT from_byte, if (prepare) { - EMACS_INT old_from = from, old_to = Z - to; - EMACS_INT range_length = to - from; + ptrdiff_t old_from = from, old_to = Z - to; + ptrdiff_t range_length = to - from; prepare_to_modify_buffer (from, to, &from); to = from + range_length; @@ -1873,10 +1705,10 @@ del_range_both (EMACS_INT from, EMACS_INT from_byte, If RET_STRING is true, the deleted area is returned as a string. */ Lisp_Object -del_range_2 (EMACS_INT from, EMACS_INT from_byte, - EMACS_INT to, EMACS_INT to_byte, int ret_string) +del_range_2 (ptrdiff_t from, ptrdiff_t from_byte, + ptrdiff_t to, ptrdiff_t to_byte, int ret_string) { - register EMACS_INT nbytes_del, nchars_del; + register ptrdiff_t nbytes_del, nchars_del; Lisp_Object deletion; CHECK_MARKERS (); @@ -1896,7 +1728,7 @@ del_range_2 (EMACS_INT from, EMACS_INT from_byte, abort (); #endif - if (ret_string || ! EQ (current_buffer->undo_list, Qt)) + if (ret_string || ! EQ (BVAR (current_buffer, undo_list), Qt)) deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); else deletion = Qnil; @@ -1907,7 +1739,7 @@ del_range_2 (EMACS_INT from, EMACS_INT from_byte, so that undo handles this after reinserting the text. */ adjust_markers_for_delete (from, from_byte, to, to_byte); - if (! EQ (current_buffer->undo_list, Qt)) + if (! EQ (BVAR (current_buffer, undo_list), Qt)) record_delete (from, deletion); MODIFF++; CHARS_MODIFF = MODIFF; @@ -1960,7 +1792,7 @@ del_range_2 (EMACS_INT from, EMACS_INT from_byte, Otherwise set CHARS_MODIFF to the new value of MODIFF. */ void -modify_region (struct buffer *buffer, EMACS_INT start, EMACS_INT end, +modify_region (struct buffer *buffer, ptrdiff_t start, ptrdiff_t end, int preserve_chars_modiff) { struct buffer *old_buffer = current_buffer; @@ -1978,7 +1810,7 @@ modify_region (struct buffer *buffer, EMACS_INT start, EMACS_INT end, if (! preserve_chars_modiff) CHARS_MODIFF = MODIFF; - buffer->point_before_scroll = Qnil; + BVAR (buffer, point_before_scroll) = Qnil; if (buffer != old_buffer) set_buffer_internal (old_buffer); @@ -1995,12 +1827,12 @@ modify_region (struct buffer *buffer, EMACS_INT start, EMACS_INT end, by holding its value temporarily in a marker. */ void -prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end, - EMACS_INT *preserve_ptr) +prepare_to_modify_buffer (ptrdiff_t start, ptrdiff_t end, + ptrdiff_t *preserve_ptr) { struct buffer *base_buffer; - if (!NILP (current_buffer->read_only)) + if (!NILP (BVAR (current_buffer, read_only))) Fbarf_if_buffer_read_only (); /* Let redisplay consider other windows than selected_window @@ -2032,21 +1864,39 @@ prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end, base_buffer = current_buffer; #ifdef CLASH_DETECTION - if (!NILP (base_buffer->file_truename) + if (!NILP (BVAR (base_buffer, file_truename)) /* Make binding buffer-file-name to nil effective. */ - && !NILP (base_buffer->filename) + && !NILP (BVAR (base_buffer, filename)) && SAVE_MODIFF >= MODIFF) - lock_file (base_buffer->file_truename); + lock_file (BVAR (base_buffer, file_truename)); #else /* At least warn if this file has changed on disk since it was visited. */ - if (!NILP (base_buffer->filename) + if (!NILP (BVAR (base_buffer, filename)) && SAVE_MODIFF >= MODIFF && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) - && !NILP (Ffile_exists_p (base_buffer->filename))) + && !NILP (Ffile_exists_p (BVAR (base_buffer, filename)))) call1 (intern ("ask-user-about-supersession-threat"), - base_buffer->filename); + BVAR (base_buffer,filename)); #endif /* not CLASH_DETECTION */ + /* If `select-active-regions' is non-nil, save the region text. */ + if (!NILP (BVAR (current_buffer, mark_active)) + && !inhibit_modification_hooks + && XMARKER (BVAR (current_buffer, mark))->buffer + && NILP (Vsaved_region_selection) + && (EQ (Vselect_active_regions, Qonly) + ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly) + : (!NILP (Vselect_active_regions) + && !NILP (Vtransient_mark_mode)))) + { + ptrdiff_t b = XMARKER (BVAR (current_buffer, mark))->charpos; + ptrdiff_t e = PT; + if (b < e) + Vsaved_region_selection = make_buffer_string (b, e, 0); + else if (b > e) + Vsaved_region_selection = make_buffer_string (e, b, 0); + } + signal_before_change (start, end, preserve_ptr); if (current_buffer->newline_cache) @@ -2093,7 +1943,7 @@ prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end, VARIABLE is the variable to maybe set to nil. NO-ERROR-FLAG is nil if there was an error, anything else meaning no error (so this function does nothing). */ -Lisp_Object +static Lisp_Object reset_var_on_error (Lisp_Object val) { if (NILP (XCDR (val))) @@ -2107,15 +1957,15 @@ reset_var_on_error (Lisp_Object val) If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR by holding its value temporarily in a marker. */ -void -signal_before_change (EMACS_INT start_int, EMACS_INT end_int, - EMACS_INT *preserve_ptr) +static void +signal_before_change (ptrdiff_t start_int, ptrdiff_t end_int, + ptrdiff_t *preserve_ptr) { Lisp_Object start, end; Lisp_Object start_marker, end_marker; Lisp_Object preserve_marker; struct gcpro gcpro1, gcpro2, gcpro3; - int count = SPECPDL_INDEX (); + ptrdiff_t count = SPECPDL_INDEX (); if (inhibit_modification_hooks) return; @@ -2129,14 +1979,14 @@ signal_before_change (EMACS_INT start_int, EMACS_INT end_int, specbind (Qinhibit_modification_hooks, Qt); - /* If buffer is unmodified, run a special hook for that case. */ + /* If buffer is unmodified, run a special hook for that case. The + check for Vfirst_change_hook is just a minor optimization. */ if (SAVE_MODIFF >= MODIFF - && !NILP (Vfirst_change_hook) - && !NILP (Vrun_hooks)) + && !NILP (Vfirst_change_hook)) { PRESERVE_VALUE; PRESERVE_START_END; - call1 (Vrun_hooks, Qfirst_change_hook); + Frun_hooks (1, &Qfirst_change_hook); } /* Now run the before-change-functions if any. */ @@ -2186,9 +2036,9 @@ signal_before_change (EMACS_INT start_int, EMACS_INT end_int, after the change. */ void -signal_after_change (EMACS_INT charpos, EMACS_INT lendel, EMACS_INT lenins) +signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins) { - int count = SPECPDL_INDEX (); + ptrdiff_t count = SPECPDL_INDEX (); if (inhibit_modification_hooks) return; @@ -2257,7 +2107,7 @@ signal_after_change (EMACS_INT charpos, EMACS_INT lendel, EMACS_INT lenins) unbind_to (count, Qnil); } -Lisp_Object +static Lisp_Object Fcombine_after_change_execute_1 (Lisp_Object val) { Vcombine_after_change_calls = val; @@ -2269,9 +2119,9 @@ DEFUN ("combine-after-change-execute", Fcombine_after_change_execute, doc: /* This function is for use internally in `combine-after-change-calls'. */) (void) { - int count = SPECPDL_INDEX (); - EMACS_INT beg, end, change; - EMACS_INT begpos, endpos; + ptrdiff_t count = SPECPDL_INDEX (); + ptrdiff_t beg, end, change; + ptrdiff_t begpos, endpos; Lisp_Object tail; if (NILP (combine_after_change_list)) @@ -2282,7 +2132,7 @@ DEFUN ("combine-after-change-execute", Fcombine_after_change_execute, non-nil, and insertion calls a file handler (e.g. through lock_file) which scribbles into a temp file -- cyd */ if (!BUFFERP (combine_after_change_buffer) - || NILP (XBUFFER (combine_after_change_buffer)->name)) + || NILP (BVAR (XBUFFER (combine_after_change_buffer), name))) { combine_after_change_list = Qnil; return Qnil; @@ -2305,7 +2155,7 @@ DEFUN ("combine-after-change-execute", Fcombine_after_change_execute, tail = XCDR (tail)) { Lisp_Object elt; - EMACS_INT thisbeg, thisend, thischange; + ptrdiff_t thisbeg, thisend, thischange; /* Extract the info from the next element. */ elt = XCAR (tail); @@ -2357,23 +2207,19 @@ syms_of_insdel (void) combine_after_change_list = Qnil; combine_after_change_buffer = Qnil; - DEFVAR_BOOL ("check-markers-debug-flag", &check_markers_debug_flag, + DEFVAR_BOOL ("check-markers-debug-flag", check_markers_debug_flag, doc: /* Non-nil means enable debugging checks for invalid marker positions. */); check_markers_debug_flag = 0; - DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls, + DEFVAR_LISP ("combine-after-change-calls", Vcombine_after_change_calls, doc: /* Used internally by the `combine-after-change-calls' macro. */); Vcombine_after_change_calls = Qnil; - DEFVAR_BOOL ("inhibit-modification-hooks", &inhibit_modification_hooks, + DEFVAR_BOOL ("inhibit-modification-hooks", inhibit_modification_hooks, doc: /* Non-nil means don't run any of the hooks that respond to buffer changes. This affects `before-change-functions' and `after-change-functions', as well as hooks attached to text properties and overlays. */); inhibit_modification_hooks = 0; - Qinhibit_modification_hooks = intern_c_string ("inhibit-modification-hooks"); - staticpro (&Qinhibit_modification_hooks); + DEFSYM (Qinhibit_modification_hooks, "inhibit-modification-hooks"); defsubr (&Scombine_after_change_execute); } - -/* arch-tag: 9b34b886-47d7-465e-a234-299af411b23d - (do not change this comment) */