Subject: bug#5971: 23.1.95; `delete' modifies default value instead of buffer-local value

From: Kevin Rodgers <[email-masked]>
Date: Wed, 21 Apr 2010 01:29:33 -0600

Drew Adams wrote:
>>> If there is _no_ buffer-local value, then the default value 
>>> is returned for the var.
>> Exactly.
> 
> OK, I get it.
> 
> The problem was that the defvar defined a default value that was a particular
> cons cell. Then, I set the buffer-local value to (a modification of) that list
> structure, since the initial value returned by the variable was the default one.
> IOW, in the setq, it was the right-hand side, where the variable's value was
> used, that was the problem.
> 
> Before closing the bug, please consider adding something to the doc that might
> make this gotcha clearer. Perhaps something like this:
> 
> Although `make-variable-buffer-local' makes its argument variable become buffer
> local whenever it is set, any references to the variable before it is set return
> its default value. That includes any occurrences of the variable in an
> expression used to calculate the new, buffer-local value.

That is implied by the fact that make-variable-buffer-local is a function (vs.
macro vs. special form): its argument forms are evaluated before being passed
to the function by eval.

-- 
Kevin Rodgers
Denver, Colorado, USA