/* Record one cached position found recently by
buf_charpos_to_bytepos or buf_bytepos_to_charpos. */
-static EMACS_INT cached_charpos;
-static EMACS_INT cached_bytepos;
+static ptrdiff_t cached_charpos;
+static ptrdiff_t cached_bytepos;
static struct buffer *cached_buffer;
static int cached_modiff;
-static void byte_char_debug_check (struct buffer *, EMACS_INT, EMACS_INT);
+static void byte_char_debug_check (struct buffer *, ptrdiff_t, ptrdiff_t);
void
clear_charpos_cache (struct buffer *b)
#define CONSIDER(CHARPOS, BYTEPOS) \
{ \
- EMACS_INT this_charpos = (CHARPOS); \
+ ptrdiff_t this_charpos = (CHARPOS); \
int changed = 0; \
\
if (this_charpos == charpos) \
{ \
- EMACS_INT value = (BYTEPOS); \
+ ptrdiff_t value = (BYTEPOS); \
if (byte_debug_flag) \
byte_char_debug_check (b, charpos, value); \
return value; \
{ \
if (best_above - best_below == best_above_byte - best_below_byte) \
{ \
- EMACS_INT value = best_below_byte + (charpos - best_below); \
+ ptrdiff_t value = best_below_byte + (charpos - best_below); \
if (byte_debug_flag) \
byte_char_debug_check (b, charpos, value); \
return value; \
}
static void
-byte_char_debug_check (struct buffer *b, EMACS_INT charpos, EMACS_INT bytepos)
+byte_char_debug_check (struct buffer *b, ptrdiff_t charpos, ptrdiff_t bytepos)
{
- EMACS_INT nchars = 0;
+ ptrdiff_t nchars = 0;
if (bytepos > BUF_GPT_BYTE (b))
{
abort ();
}
-EMACS_INT
-charpos_to_bytepos (EMACS_INT charpos)
+ptrdiff_t
+charpos_to_bytepos (ptrdiff_t charpos)
{
return buf_charpos_to_bytepos (current_buffer, charpos);
}
-EMACS_INT
-buf_charpos_to_bytepos (struct buffer *b, EMACS_INT charpos)
+ptrdiff_t
+buf_charpos_to_bytepos (struct buffer *b, ptrdiff_t charpos)
{
struct Lisp_Marker *tail;
- EMACS_INT best_above, best_above_byte;
- EMACS_INT best_below, best_below_byte;
+ ptrdiff_t best_above, best_above_byte;
+ ptrdiff_t best_below, best_below_byte;
if (charpos < BUF_BEG (b) || charpos > BUF_Z (b))
abort ();
/* Used for debugging: recompute the bytepos corresponding to CHARPOS
in the simplest, most reliable way. */
-extern EMACS_INT verify_bytepos (EMACS_INT charpos) EXTERNALLY_VISIBLE;
-EMACS_INT
-verify_bytepos (EMACS_INT charpos)
+extern ptrdiff_t verify_bytepos (ptrdiff_t charpos) EXTERNALLY_VISIBLE;
+ptrdiff_t
+verify_bytepos (ptrdiff_t charpos)
{
- EMACS_INT below = 1;
- EMACS_INT below_byte = 1;
+ ptrdiff_t below = 1;
+ ptrdiff_t below_byte = 1;
while (below != charpos)
{
#define CONSIDER(BYTEPOS, CHARPOS) \
{ \
- EMACS_INT this_bytepos = (BYTEPOS); \
+ ptrdiff_t this_bytepos = (BYTEPOS); \
int changed = 0; \
\
if (this_bytepos == bytepos) \
{ \
- EMACS_INT value = (CHARPOS); \
+ ptrdiff_t value = (CHARPOS); \
if (byte_debug_flag) \
byte_char_debug_check (b, value, bytepos); \
return value; \
{ \
if (best_above - best_below == best_above_byte - best_below_byte) \
{ \
- EMACS_INT value = best_below + (bytepos - best_below_byte); \
+ ptrdiff_t value = best_below + (bytepos - best_below_byte); \
if (byte_debug_flag) \
byte_char_debug_check (b, value, bytepos); \
return value; \
} \
}
-EMACS_INT
-buf_bytepos_to_charpos (struct buffer *b, EMACS_INT bytepos)
+ptrdiff_t
+buf_bytepos_to_charpos (struct buffer *b, ptrdiff_t bytepos)
{
struct Lisp_Marker *tail;
- EMACS_INT best_above, best_above_byte;
- EMACS_INT best_below, best_below_byte;
+ ptrdiff_t best_above, best_above_byte;
+ ptrdiff_t best_below, best_below_byte;
if (bytepos < BUF_BEG_BYTE (b) || bytepos > BUF_Z_BYTE (b))
abort ();
Returns MARKER. */)
(Lisp_Object marker, Lisp_Object position, Lisp_Object buffer)
{
- register EMACS_INT charno, bytepos;
+ register ptrdiff_t charno;
+ register ptrdiff_t bytepos;
register struct buffer *b;
register struct Lisp_Marker *m;
}
CHECK_NUMBER_COERCE_MARKER (position);
-
- charno = XINT (position);
-
- if (charno < BUF_BEG (b))
- charno = BUF_BEG (b);
- if (charno > BUF_Z (b))
- charno = BUF_Z (b);
-
+ charno = clip_to_bounds (BUF_BEG (b), XINT (position), BUF_Z (b));
bytepos = buf_charpos_to_bytepos (b, charno);
/* Every character is at least one byte. */
Lisp_Object
set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer)
{
- register EMACS_INT charno, bytepos;
+ register ptrdiff_t charno;
+ register ptrdiff_t bytepos;
register struct buffer *b;
register struct Lisp_Marker *m;
}
CHECK_NUMBER_COERCE_MARKER (pos);
-
- charno = XINT (pos);
-
- if (charno < BUF_BEGV (b))
- charno = BUF_BEGV (b);
- if (charno > BUF_ZV (b))
- charno = BUF_ZV (b);
-
+ charno = clip_to_bounds (BUF_BEGV (b), XINT (pos), BUF_ZV (b));
bytepos = buf_charpos_to_bytepos (b, charno);
/* Every character is at least one byte. */
character position and the corresponding byte position. */
Lisp_Object
-set_marker_both (Lisp_Object marker, Lisp_Object buffer, EMACS_INT charpos, EMACS_INT bytepos)
+set_marker_both (Lisp_Object marker, Lisp_Object buffer, ptrdiff_t charpos, ptrdiff_t bytepos)
{
register struct buffer *b;
register struct Lisp_Marker *m;
be outside the visible part. */
Lisp_Object
-set_marker_restricted_both (Lisp_Object marker, Lisp_Object buffer, EMACS_INT charpos, EMACS_INT bytepos)
+set_marker_restricted_both (Lisp_Object marker, Lisp_Object buffer, ptrdiff_t charpos, ptrdiff_t bytepos)
{
register struct buffer *b;
register struct Lisp_Marker *m;
/* Return the char position of marker MARKER, as a C integer. */
-EMACS_INT
+ptrdiff_t
marker_position (Lisp_Object marker)
{
register struct Lisp_Marker *m = XMARKER (marker);
/* Return the byte position of marker MARKER, as a C integer. */
-EMACS_INT
+ptrdiff_t
marker_byte_position (Lisp_Object marker)
{
register struct Lisp_Marker *m = XMARKER (marker);
register struct buffer *buf = m->buffer;
- register EMACS_INT i = m->bytepos;
+ register ptrdiff_t i = m->bytepos;
if (!buf)
error ("Marker does not point anywhere");
(Lisp_Object position)
{
register struct Lisp_Marker *tail;
- register EMACS_INT charno;
-
- charno = XINT (position);
+ register ptrdiff_t charno;
- if (charno < BEG)
- charno = BEG;
- if (charno > Z)
- charno = Z;
+ charno = clip_to_bounds (BEG, XINT (position), Z);
for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
if (tail->charpos == charno)