]> code.delx.au - gnu-emacs/blobdiff - src/eval.c
(Fmac_resume_apple_event): Set error number when
[gnu-emacs] / src / eval.c
index 0d7a6a310383de3b20f56a049952df2ab6fd51a5..7e9b4b55d09a8eb0c7d77dc2a8b0b5a4ebf7bd14 100644 (file)
@@ -28,6 +28,10 @@ Boston, MA 02110-1301, USA.  */
 #include "dispextern.h"
 #include <setjmp.h>
 
+#if HAVE_X_WINDOWS
+#include "xterm.h"
+#endif
+
 /* This definition is duplicated in alloc.c and keyboard.c */
 /* Putting it in lisp.h makes cc bomb out! */
 
@@ -199,6 +203,14 @@ extern Lisp_Object Qrisky_local_variable;
 
 static Lisp_Object funcall_lambda P_ ((Lisp_Object, int, Lisp_Object*));
 static void unwind_to_catch P_ ((struct catchtag *, Lisp_Object)) NO_RETURN;
+
+#if __GNUC__
+/* "gcc -O3" enables automatic function inlining, which optimizes out
+   the arguments for the invocations of these functions, whereas they
+   expect these values on the stack.  */
+Lisp_Object apply1 () __attribute__((noinline));
+Lisp_Object call2 () __attribute__((noinline));
+#endif
 \f
 void
 init_eval_once ()
@@ -1162,7 +1174,7 @@ DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
 TAG is evalled to get the tag to use; it must not be nil.
 
 Then the BODY is executed.
-Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
+Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
 If no throw happens, `catch' returns the value of the last BODY form.
 If a throw happens, it specifies the value to return from `catch'.
 usage: (catch TAG BODY...)  */)
@@ -1896,6 +1908,9 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
          max_specpdl_size--;
        }
       if (! no_debugger
+         /* Don't try to run the debugger with interrupts blocked.
+            The editing loop would return anyway.  */
+         && ! INPUT_BLOCKED_P
          && (EQ (sig_symbol, Qquit)
              ? debug_on_quit
              : wants_debugger (Vdebug_on_error, conditions))