aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2007-11-19 07:44:30 +0000
committerStefan Monnier <[email protected]>2007-11-19 07:44:30 +0000
commite7c10f83b381cbc91742f2e2021d9a411bef24e2 (patch)
tree7bbcecba05cbe383396071339569e3f948f60e52
parent136eb6ed3f689a6348e5e1c23beef2563d70d6f1 (diff)
(Fbuffer_local_value): Remove redundant test.
(swap_out_buffer_local_variables): Swap out binding in `buffer' rather than in `current-buffer' to match the comment. Do the swap using swap_in_global_binding.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/buffer.c26
2 files changed, 10 insertions, 21 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index e38d997c40..4113948bc9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,10 @@
2007-11-19 Stefan Monnier <[email protected]>
+ * buffer.c (Fbuffer_local_value): Remove redundant test.
+ (swap_out_buffer_local_variables): Swap out binding in `buffer' rather
+ than in `current-buffer' to match the comment.
+ Do the swap using swap_in_global_binding.
+
* data.c (store_symval_forwarding, set_internal):
* eval.c (specbind): Remove dead code.
diff --git a/src/buffer.c b/src/buffer.c
index c53d427499..045a22c8e3 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -895,8 +895,7 @@ is the default binding of the variable. */)
CHECK_BUFFER (buffer);
buf = XBUFFER (buffer);
- if (SYMBOLP (variable))
- variable = indirect_variable (variable);
+ variable = indirect_variable (variable);
/* Look in local_var_list */
result = Fassoc (variable, buf->local_var_alist);
@@ -2518,26 +2517,11 @@ swap_out_buffer_local_variables (b)
/* Need not do anything if some other buffer's binding is now encached. */
tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer;
- if (BUFFERP (tem) && XBUFFER (tem) == current_buffer)
+ if (EQ (tem, buffer))
{
- /* Symbol is set up for this buffer's old local value.
- Set it up for the current buffer with the default value. */
-
- tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->cdr;
- /* Store the symbol's current value into the alist entry
- it is currently set up for. This is so that, if the
- local is marked permanent, and we make it local again
- later in Fkill_all_local_variables, we don't lose the value. */
- XSETCDR (XCAR (tem),
- do_symval_forwarding (XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->realvalue));
- /* Switch to the symbol's default-value alist entry. */
- XSETCAR (tem, tem);
- /* Mark it as current for buffer B. */
- XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer = buffer;
- /* Store the current value into any forwarding in the symbol. */
- store_symval_forwarding (sym,
- XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->realvalue,
- XCDR (tem), NULL);
+ /* Symbol is set up for this buffer's old local value:
+ swap it out! */
+ swap_in_global_binding (sym);
}
}
}