CHECK_MARKER (marker, 0);
if (XMARKER (marker)->buffer)
{
- XSET (buf, Lisp_Buffer, XMARKER (marker)->buffer);
+ XSETBUFFER (buf, XMARKER (marker)->buffer);
/* Return marker's buffer only if it is not dead. */
if (!NILP (XBUFFER (buf)->name))
return buf;
if (i < BUF_BEG (buf) || i > BUF_Z (buf))
abort ();
- XFASTINT (pos) = i;
+ XSETFASTINT (pos, i);
return pos;
}
return Qnil;
/* If position is nil or a marker that points nowhere,
make this marker point nowhere. */
if (NILP (pos)
- || (XTYPE (pos) == Lisp_Marker && !XMARKER (pos)->buffer))
+ || (MARKERP (pos) && !XMARKER (pos)->buffer))
{
unchain_marker (marker);
return marker;
if (m->buffer != b)
{
unchain_marker (marker);
- m->chain = b->markers;
- b->markers = marker;
m->buffer = b;
+ m->chain = BUF_MARKERS (b);
+ BUF_MARKERS (b) = marker;
}
return marker;
/* If position is nil or a marker that points nowhere,
make this marker point nowhere. */
if (NILP (pos) ||
- (XTYPE (pos) == Lisp_Marker && !XMARKER (pos)->buffer))
+ (MARKERP (pos) && !XMARKER (pos)->buffer))
{
unchain_marker (marker);
return marker;
if (m->buffer != b)
{
unchain_marker (marker);
- m->chain = b->markers;
- b->markers = marker;
m->buffer = b;
+ m->chain = BUF_MARKERS (b);
+ BUF_MARKERS (b) = marker;
}
return marker;
if (EQ (b->name, Qnil))
abort ();
- tail = b->markers;
+ tail = BUF_MARKERS (b);
prev = Qnil;
while (XSYMBOL (tail) != XSYMBOL (Qnil))
{
{
if (NILP (prev))
{
- b->markers = next;
- /* Deleting first marker from the buffer's chain.
- Crash if new first marker in chain does not say
- it belongs to this buffer. */
- if (!EQ (next, Qnil) && b != XMARKER (next)->buffer)
+ BUF_MARKERS (b) = next;
+ /* Deleting first marker from the buffer's chain. Crash
+ if new first marker in chain does not say it belongs
+ to the same buffer (or one of its indirect buffers). */
+ if (!NILP (next) && b != XMARKER (next)->buffer)
abort ();
}
else
XMARKER (marker)->buffer = 0;
}
+/* Return the buffer position of marker MARKER, as a C integer. */
+
+int
marker_position (marker)
Lisp_Object marker;
{
while (1)
{
- if (XTYPE (marker) == Lisp_Int
- || XTYPE (marker) == Lisp_Marker)
+ if (INTEGERP (marker) || MARKERP (marker))
{
new = Fmake_marker ();
Fset_marker (new, marker,
- ((XTYPE (marker) == Lisp_Marker)
- ? Fmarker_buffer (marker)
- : Qnil));
+ (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil));
return new;
}
else