• Noam Postavsky's avatar
    Add lisp watchpoints · 22721316
    Noam Postavsky authored
    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.
    22721316
buffer.c 200 KB