reset_buffer_local_variables (b, 1);
b->mark = Fmake_marker ();
- BUF_MARKERS (b) = Qnil;
+ BUF_MARKERS (b) = NULL;
b->name = name;
/* Put this in the alist of all live buffers. */
XSETBUFFER (buf, b);
Vbuffer_alist = nconc2 (Vbuffer_alist, Fcons (Fcons (name, buf), Qnil));
- /* Fixme: Protect against errors, which would trigger infinite
- regress? */
+ /* An error in calling the function here (should someone redfine it)
+ can lead to infinite regress until you run out of stack. rms
+ says that's not worth protecting against. */
if (!NILP (Ffboundp (Qucs_set_table_for_input)))
- /* buff is on buffer-alist, so no gcpro */
+ /* buf is on buffer-alist, so no gcpro. */
call1 (Qucs_set_table_for_input, buf);
return buf;
/* Run hooks with the buffer to be killed the current buffer. */
{
int count = SPECPDL_INDEX ();
- Lisp_Object list;
Lisp_Object arglist[1];
record_unwind_protect (save_excursion_restore, save_excursion_save ());
/* Unchain all markers that belong to this indirect buffer.
Don't unchain the markers that belong to the base buffer
or its other indirect buffers. */
- for (tem = BUF_MARKERS (b); !NILP (tem); )
+ for (m = BUF_MARKERS (b); m; )
{
- Lisp_Object next;
- m = XMARKER (tem);
- next = m->chain;
+ struct Lisp_Marker *next = m->next;
if (m->buffer == b)
- unchain_marker (tem);
- tem = next;
+ unchain_marker (m);
+ m = next;
}
}
else
{
/* Unchain all markers of this buffer and its indirect buffers.
and leave them pointing nowhere. */
- for (tem = BUF_MARKERS (b); !NILP (tem); )
+ for (m = BUF_MARKERS (b); m; )
{
- m = XMARKER (tem);
+ struct Lisp_Marker *next = m->next;
m->buffer = 0;
- tem = m->chain;
- m->chain = Qnil;
+ m->next = NULL;
+ m = next;
}
- BUF_MARKERS (b) = Qnil;
+ BUF_MARKERS (b) = NULL;
BUF_INTERVALS (b) = NULL_INTERVAL;
/* Perhaps we should explicitly free the interval tree here... */
/* Look down buffer's list of local Lisp variables
to find and update any that forward into C variables. */
- for (tail = b->local_var_alist; !NILP (tail); tail = XCDR (tail))
+ for (tail = b->local_var_alist; CONSP (tail); tail = XCDR (tail))
{
valcontents = SYMBOL_VALUE (XCAR (XCAR (tail)));
if ((BUFFER_LOCAL_VALUEP (valcontents)
/* Do the same with any others that were local to the previous buffer */
if (old_buf)
- for (tail = old_buf->local_var_alist; !NILP (tail); tail = XCDR (tail))
+ for (tail = old_buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
{
valcontents = SYMBOL_VALUE (XCAR (XCAR (tail)));
if ((BUFFER_LOCAL_VALUEP (valcontents)
(flag)
Lisp_Object flag;
{
- Lisp_Object tail, markers;
+ struct Lisp_Marker *tail, *markers;
struct buffer *other;
int undo_enabled_p = !EQ (current_buffer->undo_list, Qt);
- int begv = BEGV, zv = ZV;
- int narrowed = (BEG != begv || Z != zv);
+ int begv, zv;
+ int narrowed = (BEG != BEGV || Z != ZV);
int modified_p = !NILP (Fbuffer_modified_p (Qnil));
if (current_buffer->base_buffer)
/* If the cached position is for this buffer, clear it out. */
clear_charpos_cache (current_buffer);
+ if (NILP (flag))
+ begv = BEGV_BYTE, zv = ZV_BYTE;
+ else
+ begv = BEGV, zv = ZV;
+
if (narrowed)
Fwiden ();
GPT = GPT_BYTE;
TEMP_SET_PT_BOTH (PT_BYTE, PT_BYTE);
- tail = BUF_MARKERS (current_buffer);
- while (! NILP (tail))
- {
- XMARKER (tail)->charpos = XMARKER (tail)->bytepos;
- tail = XMARKER (tail)->chain;
- }
+
+ for (tail = BUF_MARKERS (current_buffer); tail; tail = tail->next)
+ tail->charpos = tail->bytepos;
/* Convert multibyte form of 8-bit characters to unibyte. */
pos = BEG;
/* This prevents BYTE_TO_CHAR (that is, buf_bytepos_to_charpos) from
getting confused by the markers that have not yet been updated.
It is also a signal that it should never create a marker. */
- BUF_MARKERS (current_buffer) = Qnil;
+ BUF_MARKERS (current_buffer) = NULL;
- while (! NILP (tail))
+ for (; tail; tail = tail->next)
{
- XMARKER (tail)->bytepos
- = advance_to_char_boundary (XMARKER (tail)->bytepos);
- XMARKER (tail)->charpos = BYTE_TO_CHAR (XMARKER (tail)->bytepos);
-
- tail = XMARKER (tail)->chain;
+ tail->bytepos = advance_to_char_boundary (tail->bytepos);
+ tail->charpos = BYTE_TO_CHAR (tail->bytepos);
}
/* Make sure no markers were put on the chain
while the chain value was incorrect. */
- if (! EQ (BUF_MARKERS (current_buffer), Qnil))
+ if (BUF_MARKERS (current_buffer))
abort ();
BUF_MARKERS (current_buffer) = markers;
Qpermanent_local = intern ("permanent-local");
Qkill_buffer_hook = intern ("kill-buffer-hook");
+ Fput (Qkill_buffer_hook, Qpermanent_local, Qt);
Qucs_set_table_for_input = intern ("ucs-set-table-for-input");
DEFVAR_LISP_NOPRO ("default-direction-reversed",
&buffer_defaults.direction_reversed,
- doc: /* Default value of `direction_reversed' for buffers that do not override it.
+ doc: /* Default value of `direction-reversed' for buffers that do not override it.
This is the same as (default-value 'direction-reversed). */);
DEFVAR_LISP_NOPRO ("default-enable-multibyte-characters",