]> git.eshelyaron.com Git - emacs.git/commit
Add lisp watchpoints
authorNoam Postavsky <npostavs@gmail.com>
Fri, 20 Nov 2015 00:50:06 +0000 (19:50 -0500)
committerNoam Postavsky <npostavs@gmail.com>
Sat, 3 Dec 2016 01:25:14 +0000 (20:25 -0500)
commit227213164e06363f0a4fb2beeeb647c99749299e
tree8fda48112af0631ce9b6c595e33101a9b5961909
parent0fc4761ca88175c30da7209c9ab1cde788b66a76
Add lisp watchpoints

This allows calling a function whenever a symbol-value is changed.

* src/lisp.h (lisp_h_SYMBOL_TRAPPED_WRITE_P):
(SYMBOL_TRAPPED_WRITE_P): New function/macro.
(lisp_h_SYMBOL_CONSTANT_P): Check for SYMBOL_NOWRITE specifically.
(enum symbol_trapped_write): New enumeration.
(struct Lisp_Symbol): Rename field constant to trapped_write.
(make_symbol_constant): New function.

* src/data.c (Fadd_variable_watcher, Fremove_variable_watcher):
(set_symbol_trapped_write, restore_symbol_trapped_write):
(harmonize_variable_watchers, notify_variable_watchers): New functions.

* src/data.c (Fset_default): Call `notify_variable_watchers' for trapped
symbols.
(set_internal): Change bool argument BIND to 3-value enum and call
`notify_variable_watchers' for trapped symbols.

* src/data.c (syms_of_data):
* src/data.c (syms_of_data):
* src/font.c (syms_of_font):
* src/lread.c (intern_sym, init_obarray):
* src/buffer.c (syms_of_buffer): Use make_symbol_constant.

* src/alloc.c (init_symbol):
* src/bytecode.c (exec_byte_code): Use SYMBOL_TRAPPED_WRITE_P.
* src/data.c (Fmake_variable_buffer_local, Fmake_local_variable):
(Fmake_variable_frame_local):
* src/eval.c (Fdefvaralias, specbind): Refer to Lisp_Symbol's
trapped_write instead of constant.
(Ffuncall): Move subr calling code into separate function.
(funcall_subr): New function.
src/alloc.c
src/buffer.c
src/bytecode.c
src/data.c
src/eval.c
src/font.c
src/lisp.h
src/lread.c