Mercurial > emacs
diff src/xdisp.c @ 93369:ed10c3092847
* keyboard.c (pending_funcalls): New var.
(timer_check): Run it.
(syms_of_keyboard): Initialize it.
* terminal.c (Qrun_hook_with_args, Qdelete_terminal_functions)
(Vdelete_terminal_functions): New vars.
(syms_of_terminal): Initialize them.
(Fdelete_terminal): Run delete-terminal-functions.
* xdisp.c (safe_eval): Rewrite.
(safe_call2): New fun.
* frame.c (Qdelete_frame_functions): New var.
(syms_of_frame): Initialize it.
(Fdelete_frame): Use it and use safe_call2 and pending_funcalls.
* lisp.h (safe_call2, pending_funcalls): Declare.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sat, 29 Mar 2008 01:46:10 +0000 |
parents | 16142d1d9f33 |
children | 38ab23c0b8ad |
line wrap: on
line diff
--- a/src/xdisp.c Sat Mar 29 01:09:45 2008 +0000 +++ b/src/xdisp.c Sat Mar 29 01:46:10 2008 +0000 @@ -2316,33 +2316,6 @@ /* Evaluate SEXPR and return the result, or nil if something went wrong. Prevent redisplay during the evaluation. */ -Lisp_Object -safe_eval (sexpr) - Lisp_Object sexpr; -{ - Lisp_Object val; - - if (inhibit_eval_during_redisplay) - val = Qnil; - else - { - int count = SPECPDL_INDEX (); - struct gcpro gcpro1; - - GCPRO1 (sexpr); - specbind (Qinhibit_redisplay, Qt); - /* Use Qt to ensure debugger does not run, - so there is no possibility of wanting to redisplay. */ - val = internal_condition_case_1 (Feval, sexpr, Qt, - safe_eval_handler); - UNGCPRO; - val = unbind_to (count, val); - } - - return val; -} - - /* Call function ARGS[0] with arguments ARGS[1] to ARGS[NARGS - 1]. Return the result, or nil if something went wrong. Prevent redisplay during the evaluation. */ @@ -2389,6 +2362,27 @@ return safe_call (2, args); } +static Lisp_Object Qeval; + +Lisp_Object +safe_eval (Lisp_Object sexpr) +{ + return safe_call1 (Qeval, sexpr); +} + +/* Call function FN with one argument ARG. + Return the result, or nil if something went wrong. */ + +Lisp_Object +safe_call2 (Lisp_Object fn, Lisp_Object arg1, Lisp_Object arg2) +{ + Lisp_Object args[3]; + args[0] = fn; + args[1] = arg1; + args[2] = arg2; + return safe_call (3, args); +} + /*********************************************************************** @@ -8634,7 +8628,7 @@ { Lisp_Object msg; - if (NILP (echo_area_buffer[0])) + if (!BUFFERP (echo_area_buffer[0])) msg = Qnil; else { @@ -24359,6 +24353,9 @@ staticpro (&Qinhibit_point_motion_hooks); Qinhibit_point_motion_hooks = intern ("inhibit-point-motion-hooks"); + Qeval = intern ("eval"); + staticpro (&Qeval); + QCdata = intern (":data"); staticpro (&QCdata); Qdisplay = intern ("display");