• Alan Mackenzie's avatar
    New debugging facility: backtraces from errors in Lisp called from redisplay · 48215c41
    Alan Mackenzie authored
    Setting backtrace-on-redisplay-error to non-nil enables the generation of a
    Lisp backtrace in buffer *Redisplay-trace* following an error in Lisp called
    from redisplay.
    
    * doc/lispref/debugging.texi (Debugging Redisplay): New subsection.
    (Error Debugging): Reference to the new subsection.
    
    * etc/NEWS: New entry for the new facility.
    
    * src/eval.c (redisplay_deep_handler): New variable.
    (init_eval): Initialize redisplay_deep_handler.
    (call_debugger): Don't throw to top-level after calling debug-early
    (internal_condition_case_n): "Bind" redisplay_deep_handler to the current
    handler.
    (backtrace_yet): New boolean variable.
    (signal_or_quit): New code section to handle Lisp errors occurring in
    redisplay.
    (syms_of_eval): New DEFVAR_BOOL backtrace-on-redisplay-error.
    
    * src/keyboard.c (command_loop_1): Set backtrace_yet to false each time around
    the loop.
    (safe_run_hooks_error): Allow args to be up to four Lisp_Objects long.
    (safe_run_hooks_2): New function.
    
    * src/lisp.h (top level): declare as externs backtrace_yet and
    safe_run_hooks_2.
    
    * src/xdisp.c (run_window_scroll_functions): Replace a call to
    run_hook_with_args_2 with one to safe_run_hooks_2.
    48215c41
lisp.h 175 KB