• Stefan Monnier's avatar
    Fix bug#30846, along with misc cleanups found along the way · 2305ee79
    Stefan Monnier authored
    * 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 3ddff080)
    2305ee79
data.c 108 KB