Philipp Stephani
schrieb am So., 23. Apr. 2017 um
19:14 Uhr:
>
> In *scratch*, evaluate:
>
> (defvar foo-test-var nil)
> (with-temp-buffer
> (list (list (buffer-local-value 'foo-test-var (current-buffer))
> (local-variable-p 'foo-test-var)
> (local-variable-if-set-p 'foo-test-var))
> (cl-letf (((buffer-local-value 'foo-test-var (current-buffer))
> 123))
> (list (buffer-local-value 'foo-test-var (current-buffer))
> (local-variable-p 'foo-test-var)
> (local-variable-if-set-p 'foo-test-var)))
> (list (buffer-local-value 'foo-test-var (current-buffer))
> (local-variable-p 'foo-test-var)
> (local-variable-if-set-p 'foo-test-var))))
>
> The result is:
>
> ((nil nil nil) (123 t t) (nil t t))
>
> But expected is:
>
> ((nil nil nil) (123 t t) (nil nil nil))
>
> i.e. the local flag of the variable should be reset.
>
>
It's possible to fix this (see attached patch), but at the expense of
breaking other valid use cases such as (cl-incf (buffer-local-value ...)).
Not sure whether the bug can be fixed at all without breaking other stuff.