aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorStefan Monnier2018-03-23 11:29:06 -0400
committerStefan Monnier2018-03-23 11:29:06 -0400
commit3ddff080341580eb6fc18d907181e9cc2301f62d (patch)
tree935d45325c27bea24ea660b83b50fa308bc6421a /src/lisp.h
parentcf3164523b32f01dbaad2c1364ecf2dcf8f22aa5 (diff)
downloademacs-3ddff080341580eb6fc18d907181e9cc2301f62d.tar.gz
emacs-3ddff080341580eb6fc18d907181e9cc2301f62d.zip
Fix bug#30846, along with misc cleanups found along the way
* test/src/data-tests.el (data-tests-kill-all-local-variables): New test. * src/buffer.c (swap_out_buffer_local_variables): Remove. Fuse the body of its loop into that of reset_buffer_local_variables. (Fkill_buffer, Fkill_all_local_variables): Don't call it any more. (reset_buffer_local_variables): Make sure the buffer's local binding is swapped out before removing it from the alist (bug#30846). Call watchers before actually killing the var. * src/data.c (Fmake_local_variable): Simplify. Use swap_in_global_binding to swap out any local binding, instead of a mix of find_symbol_value followed by messing with where&found. Don't call swap_in_symval_forwarding since the currently swapped binding is never one we've modified. (Fkill_local_variable): Use swap_in_global_binding rather than messing with where&found to try and trick find_symbol_value into doing the same. * src/alloc.c (mark_localized_symbol): 'where' can't be a frame any more.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/lisp.h b/src/lisp.h
index aefdaeaf12f..f0c0c5a14a5 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2679,18 +2679,15 @@ struct Lisp_Buffer_Objfwd
2679 in the buffer structure itself. They are handled differently, 2679 in the buffer structure itself. They are handled differently,
2680 using struct Lisp_Buffer_Objfwd.) 2680 using struct Lisp_Buffer_Objfwd.)
2681 2681
2682 The `realvalue' slot holds the variable's current value, or a 2682 The `valcell' slot holds the variable's current value (unless `fwd'
2683 forwarding pointer to where that value is kept. This value is the 2683 is set). This value is the one that corresponds to the loaded binding.
2684 one that corresponds to the loaded binding. To read or set the 2684 To read or set the variable, you must first make sure the right binding
2685 variable, you must first make sure the right binding is loaded; 2685 is loaded; then you can access the value in (or through) `valcell'.
2686 then you can access the value in (or through) `realvalue'. 2686
2687 2687 `where' is the buffer for which the loaded binding was found.
2688 `where' is the buffer for which the loaded binding was found. If 2688 If it has changed, to make sure the right binding is loaded it is
2689 it has changed, to make sure the right binding is loaded it is
2690 necessary to find which binding goes with the current buffer, then 2689 necessary to find which binding goes with the current buffer, then
2691 load it. To load it, first unload the previous binding, then copy 2690 load it. To load it, first unload the previous binding.
2692 the value of the new binding into `realvalue' (or through it).
2693 Also update LOADED-BINDING to point to the newly loaded binding.
2694 2691
2695 `local_if_set' indicates that merely setting the variable creates a 2692 `local_if_set' indicates that merely setting the variable creates a
2696 local binding for the current buffer. Otherwise the latter, setting 2693 local binding for the current buffer. Otherwise the latter, setting