aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorStefan Monnier2018-03-23 11:29:06 -0400
committerNoam Postavsky2018-06-03 12:48:14 -0400
commited962f2b8a2f63c7dbf31ec5df3c915703dd571d (patch)
tree880aa4dab830e5e7699e6eace5c0a1097a091baa /src/lisp.h
parent3ba5fc2bbec3f0f64c7afc1b05c9016710805463 (diff)
downloademacs-ed962f2b8a2f63c7dbf31ec5df3c915703dd571d.tar.gz
emacs-ed962f2b8a2f63c7dbf31ec5df3c915703dd571d.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. (cherry picked from commit 3ddff080341580eb6fc18d907181e9cc2301f62d)
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 cd6d07288e0..56ad8b814b6 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2587,18 +2587,15 @@ struct Lisp_Buffer_Objfwd
2587 in the buffer structure itself. They are handled differently, 2587 in the buffer structure itself. They are handled differently,
2588 using struct Lisp_Buffer_Objfwd.) 2588 using struct Lisp_Buffer_Objfwd.)
2589 2589
2590 The `realvalue' slot holds the variable's current value, or a 2590 The `valcell' slot holds the variable's current value (unless `fwd'
2591 forwarding pointer to where that value is kept. This value is the 2591 is set). This value is the one that corresponds to the loaded binding.
2592 one that corresponds to the loaded binding. To read or set the 2592 To read or set the variable, you must first make sure the right binding
2593 variable, you must first make sure the right binding is loaded; 2593 is loaded; then you can access the value in (or through) `valcell'.
2594 then you can access the value in (or through) `realvalue'. 2594
2595 2595 `where' is the buffer for which the loaded binding was found.
2596 `where' is the buffer for which the loaded binding was found. If 2596 If it has changed, to make sure the right binding is loaded it is
2597 it has changed, to make sure the right binding is loaded it is
2598 necessary to find which binding goes with the current buffer, then 2597 necessary to find which binding goes with the current buffer, then
2599 load it. To load it, first unload the previous binding, then copy 2598 load it. To load it, first unload the previous binding.
2600 the value of the new binding into `realvalue' (or through it).
2601 Also update LOADED-BINDING to point to the newly loaded binding.
2602 2599
2603 `local_if_set' indicates that merely setting the variable creates a 2600 `local_if_set' indicates that merely setting the variable creates a
2604 local binding for the current buffer. Otherwise the latter, setting 2601 local binding for the current buffer. Otherwise the latter, setting