1 /* Evaluator for XEmacs Lisp interpreter.
2 Copyright (C) 1985-1987, 1992-1994 Free Software Foundation, Inc.
3 Copyright (C) 1995 Sun Microsystems, Inc.
4 Copyright (C) 2000 Ben Wing.
6 This file is part of XEmacs.
8 XEmacs is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with XEmacs; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* Synched up with: FSF 19.30 (except for Fsignal), Mule 2.0. */
29 #include "backtrace.h"
36 int always_gc; /* Debugging hack */
41 struct backtrace *backtrace_list;
43 /* Note: you must always fill in all of the fields in a backtrace structure
44 before pushing them on the backtrace_list. The profiling code depends
47 #define PUSH_BACKTRACE(bt) do { \
48 (bt).next = backtrace_list; \
49 backtrace_list = &(bt); \
52 #define POP_BACKTRACE(bt) do { \
53 backtrace_list = (bt).next; \
56 /* Macros for calling subrs with an argument list whose length is only
57 known at runtime. See EXFUN and DEFUN for similar hackery. */
60 #define AV_1(av) av[0]
61 #define AV_2(av) AV_1(av), av[1]
62 #define AV_3(av) AV_2(av), av[2]
63 #define AV_4(av) AV_3(av), av[3]
64 #define AV_5(av) AV_4(av), av[4]
65 #define AV_6(av) AV_5(av), av[5]
66 #define AV_7(av) AV_6(av), av[6]
67 #define AV_8(av) AV_7(av), av[7]
69 #define PRIMITIVE_FUNCALL_1(fn, av, ac) \
70 (((Lisp_Object (*)(EXFUN_##ac)) (fn)) (AV_##ac (av)))
72 /* If subrs take more than 8 arguments, more cases need to be added
73 to this switch. (But wait - don't do it - if you really need
74 a SUBR with more than 8 arguments, use max_args == MANY.
75 See the DEFUN macro in lisp.h) */
76 #define PRIMITIVE_FUNCALL(rv, fn, av, ac) do { \
77 void (*PF_fn)(void) = (void (*)(void)) fn; \
78 Lisp_Object *PF_av = (av); \
81 default:rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 0); break; \
82 case 1: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 1); break; \
83 case 2: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 2); break; \
84 case 3: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 3); break; \
85 case 4: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 4); break; \
86 case 5: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 5); break; \
87 case 6: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 6); break; \
88 case 7: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 7); break; \
89 case 8: rv = PRIMITIVE_FUNCALL_1(PF_fn, PF_av, 8); break; \
93 #define FUNCALL_SUBR(rv, subr, av, ac) \
94 PRIMITIVE_FUNCALL (rv, subr_function (subr), av, ac);
97 /* This is the list of current catches (and also condition-cases).
98 This is a stack: the most recent catch is at the head of the
99 list. Catches are created by declaring a 'struct catchtag'
100 locally, filling the .TAG field in with the tag, and doing
101 a setjmp() on .JMP. Fthrow() will store the value passed
102 to it in .VAL and longjmp() back to .JMP, back to the function
103 that established the catch. This will always be either
104 internal_catch() (catches established internally or through
105 `catch') or condition_case_1 (condition-cases established
106 internally or through `condition-case').
108 The catchtag also records the current position in the
109 call stack (stored in BACKTRACE_LIST), the current position
110 in the specpdl stack (used for variable bindings and
111 unwind-protects), the value of LISP_EVAL_DEPTH, and the
112 current position in the GCPRO stack. All of these are
113 restored by Fthrow().
116 struct catchtag *catchlist;
118 Lisp_Object Qautoload, Qmacro, Qexit;
119 Lisp_Object Qinteractive, Qcommandp, Qdefun, Qprogn, Qvalues;
120 Lisp_Object Vquit_flag, Vinhibit_quit;
121 Lisp_Object Qand_rest, Qand_optional;
122 Lisp_Object Qdebug_on_error, Qstack_trace_on_error;
123 Lisp_Object Qdebug_on_signal, Qstack_trace_on_signal;
124 Lisp_Object Qdebugger;
125 Lisp_Object Qinhibit_quit;
126 Lisp_Object Qrun_hooks;
128 Lisp_Object Qdisplay_warning;
129 Lisp_Object Vpending_warnings, Vpending_warnings_tail;
132 /* Records whether we want errors to occur. This will be a boolean,
133 nil (errors OK) or t (no errors). If t, an error will cause a
134 throw to Qunbound_suspended_errors_tag.
136 See call_with_suspended_errors(). */
137 Lisp_Object Vcurrent_error_state;
139 /* Current warning class when warnings occur, or nil for no warnings.
140 Only meaningful when Vcurrent_error_state is non-nil.
141 See call_with_suspended_errors(). */
142 Lisp_Object Vcurrent_warning_class;
144 /* Special catch tag used in call_with_suspended_errors(). */
145 Lisp_Object Qunbound_suspended_errors_tag;
147 /* Non-nil means record all fset's and provide's, to be undone
148 if the file being autoloaded is not fully loaded.
149 They are recorded by being consed onto the front of Vautoload_queue:
150 (FUN . ODEF) for a defun, (OFEATURES . nil) for a provide. */
151 Lisp_Object Vautoload_queue;
153 /* Current number of specbindings allocated in specpdl. */
156 /* Pointer to beginning of specpdl. */
157 struct specbinding *specpdl;
159 /* Pointer to first unused element in specpdl. */
160 struct specbinding *specpdl_ptr;
162 /* specpdl_ptr - specpdl */
163 int specpdl_depth_counter;
165 /* Maximum size allowed for specpdl allocation */
166 Fixnum max_specpdl_size;
168 /* Depth in Lisp evaluations and function calls. */
169 static int lisp_eval_depth;
171 /* Maximum allowed depth in Lisp evaluations and function calls. */
172 Fixnum max_lisp_eval_depth;
174 /* Nonzero means enter debugger before next function call */
175 static int debug_on_next_call;
177 /* List of conditions (non-nil atom means all) which cause a backtrace
178 if an error is handled by the command loop's error handler. */
179 Lisp_Object Vstack_trace_on_error;
181 /* List of conditions (non-nil atom means all) which enter the debugger
182 if an error is handled by the command loop's error handler. */
183 Lisp_Object Vdebug_on_error;
185 /* List of conditions and regexps specifying error messages which
186 do not enter the debugger even if Vdebug_on_error says they should. */
187 Lisp_Object Vdebug_ignored_errors;
189 /* List of conditions (non-nil atom means all) which cause a backtrace
190 if any error is signalled. */
191 Lisp_Object Vstack_trace_on_signal;
193 /* List of conditions (non-nil atom means all) which enter the debugger
194 if any error is signalled. */
195 Lisp_Object Vdebug_on_signal;
197 /* Nonzero means enter debugger if a quit signal
198 is handled by the command loop's error handler.
200 From lisp, this is a boolean variable and may have the values 0 and 1.
201 But, eval.c temporarily uses the second bit of this variable to indicate
202 that a critical_quit is in progress. The second bit is reset immediately
203 after it is processed in signal_call_debugger(). */
207 /* entering_debugger is basically equivalent */
208 /* The value of num_nonmacro_input_chars as of the last time we
209 started to enter the debugger. If we decide to enter the debugger
210 again when this is still equal to num_nonmacro_input_chars, then we
211 know that the debugger itself has an error, and we should just
212 signal the error instead of entering an infinite loop of debugger
214 int when_entered_debugger;
217 /* Nonzero means we are trying to enter the debugger.
218 This is to prevent recursive attempts.
219 Cleared by the debugger calling Fbacktrace */
220 static int entering_debugger;
222 /* Function to call to invoke the debugger */
223 Lisp_Object Vdebugger;
225 /* Chain of condition handlers currently in effect.
226 The elements of this chain are contained in the stack frames
227 of Fcondition_case and internal_condition_case.
228 When an error is signaled (by calling Fsignal, below),
229 this chain is searched for an element that applies.
231 Each element of this list is one of the following:
233 A list of a handler function and possibly args to pass to
234 the function. This is a handler established with
235 `call-with-condition-handler' (q.v.).
237 A list whose car is Qunbound and whose cdr is Qt.
238 This is a special condition-case handler established
239 by C code with condition_case_1(). All errors are
240 trapped; the debugger is not invoked even if
241 `debug-on-error' was set.
243 A list whose car is Qunbound and whose cdr is Qerror.
244 This is a special condition-case handler established
245 by C code with condition_case_1(). It is like Qt
246 except that the debugger is invoked normally if it is
249 A list whose car is Qunbound and whose cdr is a list
250 of lists (CONDITION-NAME BODY ...) exactly as in
251 `condition-case'. This is a normal `condition-case'
254 Note that in all cases *except* the first, there is a
255 corresponding catch, whose TAG is the value of
256 Vcondition_handlers just after the handler data just
257 described is pushed onto it. The reason is that
258 `condition-case' handlers need to throw back to the
259 place where the handler was installed before invoking
260 it, while `call-with-condition-handler' handlers are
261 invoked in the environment that `signal' was invoked
264 static Lisp_Object Vcondition_handlers;
267 #define DEFEND_AGAINST_THROW_RECURSION
269 #ifdef DEFEND_AGAINST_THROW_RECURSION
270 /* Used for error catching purposes by throw_or_bomb_out */
271 static int throw_level;
274 #ifdef ERROR_CHECK_TYPECHECK
275 void check_error_state_sanity (void);
279 /************************************************************************/
280 /* The subr object type */
281 /************************************************************************/
284 print_subr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
286 Lisp_Subr *subr = XSUBR (obj);
288 (subr->max_args == UNEVALLED) ? "#<special-form " : "#<subr ";
289 const char *name = subr_name (subr);
290 const char *trailer = subr->prompt ? " (interactive)>" : ">";
293 error ("printing unreadable object %s%s%s", header, name, trailer);
295 write_c_string (header, printcharfun);
296 write_c_string (name, printcharfun);
297 write_c_string (trailer, printcharfun);
300 static const struct lrecord_description subr_description[] = {
301 { XD_DOC_STRING, offsetof (Lisp_Subr, doc) },
305 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("subr", subr,
306 0, print_subr, 0, 0, 0,
310 /************************************************************************/
311 /* Entering the debugger */
312 /************************************************************************/
314 /* unwind-protect used by call_debugger() to restore the value of
315 entering_debugger. (We cannot use specbind() because the
316 variable is not Lisp-accessible.) */
319 restore_entering_debugger (Lisp_Object arg)
321 entering_debugger = ! NILP (arg);
325 /* Actually call the debugger. ARG is a list of args that will be
326 passed to the debugger function, as follows;
328 If due to frame exit, args are `exit' and the value being returned;
329 this function's value will be returned instead of that.
330 If due to error, args are `error' and a list of the args to `signal'.
331 If due to `apply' or `funcall' entry, one arg, `lambda'.
332 If due to `eval' entry, one arg, t.
337 call_debugger_259 (Lisp_Object arg)
339 return apply1 (Vdebugger, arg);
342 /* Call the debugger, doing some encapsulation. We make sure we have
343 some room on the eval and specpdl stacks, and bind entering_debugger
344 to 1 during this call. This is used to trap errors that may occur
345 when entering the debugger (e.g. the value of `debugger' is invalid),
346 so that the debugger will not be recursively entered if debug-on-error
347 is set. (Otherwise, XEmacs would infinitely recurse, attempting to
348 enter the debugger.) entering_debugger gets reset to 0 as soon
349 as a backtrace is displayed, so that further errors can indeed be
352 We also establish a catch for 'debugger. If the debugger function
353 throws to this instead of returning a value, it means that the user
354 pressed 'c' (pretend like the debugger was never entered). The
355 function then returns Qunbound. (If the user pressed 'r', for
356 return a value, then the debugger function returns normally with
359 The difference between 'c' and 'r' is as follows:
362 No difference. The call proceeds as normal.
364 With 'r', the specified value is returned as the function's
365 return value. With 'c', the value that would normally be
366 returned is returned.
368 With 'r', the specified value is returned as the return
369 value of `signal'. (This is the only time that `signal'
370 can return, instead of making a non-local exit.) With `c',
371 `signal' will continue looking for handlers as if the
372 debugger was never entered, and will probably end up
373 throwing to a handler or to top-level.
377 call_debugger (Lisp_Object arg)
383 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
384 max_lisp_eval_depth = lisp_eval_depth + 20;
385 if (specpdl_size + 40 > max_specpdl_size)
386 max_specpdl_size = specpdl_size + 40;
387 debug_on_next_call = 0;
389 speccount = specpdl_depth();
390 record_unwind_protect (restore_entering_debugger,
391 (entering_debugger ? Qt : Qnil));
392 entering_debugger = 1;
393 val = internal_catch (Qdebugger, call_debugger_259, arg, &threw);
395 return unbind_to (speccount, ((threw)
396 ? Qunbound /* Not returning a value */
400 /* Called when debug-on-exit behavior is called for. Enter the debugger
401 with the appropriate args for this. VAL is the exit value that is
402 about to be returned. */
405 do_debug_on_exit (Lisp_Object val)
407 /* This is falsified by call_debugger */
408 Lisp_Object v = call_debugger (list2 (Qexit, val));
410 return !UNBOUNDP (v) ? v : val;
413 /* Called when debug-on-call behavior is called for. Enter the debugger
414 with the appropriate args for this. VAL is either t for a call
415 through `eval' or 'lambda for a call through `funcall'.
417 #### The differentiation here between EVAL and FUNCALL is bogus.
418 FUNCALL can be defined as
420 (defmacro func (fun &rest args)
421 (cons (eval fun) args))
423 and should be treated as such.
427 do_debug_on_call (Lisp_Object code)
429 debug_on_next_call = 0;
430 backtrace_list->debug_on_exit = 1;
431 call_debugger (list1 (code));
434 /* LIST is the value of one of the variables `debug-on-error',
435 `debug-on-signal', `stack-trace-on-error', or `stack-trace-on-signal',
436 and CONDITIONS is the list of error conditions associated with
437 the error being signalled. This returns non-nil if LIST
438 matches CONDITIONS. (A nil value for LIST does not match
439 CONDITIONS. A non-list value for LIST does match CONDITIONS.
440 A list matches CONDITIONS when one of the symbols in LIST is the
441 same as one of the symbols in CONDITIONS.) */
444 wants_debugger (Lisp_Object list, Lisp_Object conditions)
451 while (CONSP (conditions))
453 Lisp_Object this, tail;
454 this = XCAR (conditions);
455 for (tail = list; CONSP (tail); tail = XCDR (tail))
456 if (EQ (XCAR (tail), this))
458 conditions = XCDR (conditions);
464 /* Return 1 if an error with condition-symbols CONDITIONS,
465 and described by SIGNAL-DATA, should skip the debugger
466 according to debugger-ignore-errors. */
469 skip_debugger (Lisp_Object conditions, Lisp_Object data)
471 /* This function can GC */
473 int first_string = 1;
474 Lisp_Object error_message = Qnil;
476 for (tail = Vdebug_ignored_errors; CONSP (tail); tail = XCDR (tail))
478 if (STRINGP (XCAR (tail)))
482 error_message = Ferror_message_string (data);
485 if (fast_lisp_string_match (XCAR (tail), error_message) >= 0)
492 for (contail = conditions; CONSP (contail); contail = XCDR (contail))
493 if (EQ (XCAR (tail), XCAR (contail)))
501 /* Actually generate a backtrace on STREAM. */
504 backtrace_259 (Lisp_Object stream)
506 return Fbacktrace (stream, Qt);
509 /* An error was signaled. Maybe call the debugger, if the `debug-on-error'
510 etc. variables call for this. CONDITIONS is the list of conditions
511 associated with the error being signalled. SIG is the actual error
512 being signalled, and DATA is the associated data (these are exactly
513 the same as the arguments to `signal'). ACTIVE_HANDLERS is the
514 list of error handlers that are to be put in place while the debugger
515 is called. This is generally the remaining handlers that are
516 outside of the innermost handler trapping this error. This way,
517 if the same error occurs inside of the debugger, you usually don't get
518 the debugger entered recursively.
520 This function returns Qunbound if it didn't call the debugger or if
521 the user asked (through 'c') that XEmacs should pretend like the
522 debugger was never entered. Otherwise, it returns the value
523 that the user specified with `r'. (Note that much of the time,
524 the user will abort with C-], and we will never have a chance to
525 return anything at all.)
527 SIGNAL_VARS_ONLY means we should only look at debug-on-signal
528 and stack-trace-on-signal to control whether we do anything.
529 This is so that debug-on-error doesn't make handled errors
530 cause the debugger to get invoked.
532 STACK_TRACE_DISPLAYED and DEBUGGER_ENTERED are used so that
533 those functions aren't done more than once in a single `signal'
537 signal_call_debugger (Lisp_Object conditions,
538 Lisp_Object sig, Lisp_Object data,
539 Lisp_Object active_handlers,
540 int signal_vars_only,
541 int *stack_trace_displayed,
542 int *debugger_entered)
544 /* This function can GC */
545 Lisp_Object val = Qunbound;
546 Lisp_Object all_handlers = Vcondition_handlers;
547 Lisp_Object temp_data = Qnil;
548 int speccount = specpdl_depth();
549 struct gcpro gcpro1, gcpro2;
550 GCPRO2 (all_handlers, temp_data);
552 Vcondition_handlers = active_handlers;
554 temp_data = Fcons (sig, data); /* needed for skip_debugger */
556 if (!entering_debugger && !*stack_trace_displayed && !signal_vars_only
557 && wants_debugger (Vstack_trace_on_error, conditions)
558 && !skip_debugger (conditions, temp_data))
560 specbind (Qdebug_on_error, Qnil);
561 specbind (Qstack_trace_on_error, Qnil);
562 specbind (Qdebug_on_signal, Qnil);
563 specbind (Qstack_trace_on_signal, Qnil);
566 internal_with_output_to_temp_buffer (build_string ("*Backtrace*"),
570 else /* in batch mode, we want this going to stderr. */
571 backtrace_259 (Qnil);
572 unbind_to (speccount, Qnil);
573 *stack_trace_displayed = 1;
576 if (!entering_debugger && !*debugger_entered && !signal_vars_only
579 : wants_debugger (Vdebug_on_error, conditions))
580 && !skip_debugger (conditions, temp_data))
582 debug_on_quit &= ~2; /* reset critical bit */
583 specbind (Qdebug_on_error, Qnil);
584 specbind (Qstack_trace_on_error, Qnil);
585 specbind (Qdebug_on_signal, Qnil);
586 specbind (Qstack_trace_on_signal, Qnil);
588 val = call_debugger (list2 (Qerror, (Fcons (sig, data))));
589 *debugger_entered = 1;
592 if (!entering_debugger && !*stack_trace_displayed
593 && wants_debugger (Vstack_trace_on_signal, conditions))
595 specbind (Qdebug_on_error, Qnil);
596 specbind (Qstack_trace_on_error, Qnil);
597 specbind (Qdebug_on_signal, Qnil);
598 specbind (Qstack_trace_on_signal, Qnil);
601 internal_with_output_to_temp_buffer (build_string ("*Backtrace*"),
605 else /* in batch mode, we want this going to stderr. */
606 backtrace_259 (Qnil);
607 unbind_to (speccount, Qnil);
608 *stack_trace_displayed = 1;
611 if (!entering_debugger && !*debugger_entered
614 : wants_debugger (Vdebug_on_signal, conditions)))
616 debug_on_quit &= ~2; /* reset critical bit */
617 specbind (Qdebug_on_error, Qnil);
618 specbind (Qstack_trace_on_error, Qnil);
619 specbind (Qdebug_on_signal, Qnil);
620 specbind (Qstack_trace_on_signal, Qnil);
622 val = call_debugger (list2 (Qerror, (Fcons (sig, data))));
623 *debugger_entered = 1;
627 Vcondition_handlers = all_handlers;
628 return unbind_to (speccount, val);
632 /************************************************************************/
633 /* The basic special forms */
634 /************************************************************************/
636 /* Except for Fprogn(), the basic special forms below are only called
637 from interpreted code. The byte compiler turns them into bytecodes. */
639 DEFUN ("or", For, 0, UNEVALLED, 0, /*
640 Eval args until one of them yields non-nil, then return that value.
641 The remaining args are not evalled at all.
642 If all args return nil, return nil.
646 /* This function can GC */
647 REGISTER Lisp_Object val;
649 LIST_LOOP_2 (arg, args)
651 if (!NILP (val = Feval (arg)))
658 DEFUN ("and", Fand, 0, UNEVALLED, 0, /*
659 Eval args until one of them yields nil, then return nil.
660 The remaining args are not evalled at all.
661 If no arg yields nil, return the last arg's value.
665 /* This function can GC */
666 REGISTER Lisp_Object val = Qt;
668 LIST_LOOP_2 (arg, args)
670 if (NILP (val = Feval (arg)))
677 DEFUN ("if", Fif, 2, UNEVALLED, 0, /*
678 \(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...
679 Returns the value of THEN or the value of the last of the ELSE's.
680 THEN must be one expression, but ELSE... can be zero or more expressions.
681 If COND yields nil, and there are no ELSE's, the value is nil.
685 /* This function can GC */
686 Lisp_Object condition = XCAR (args);
687 Lisp_Object then_form = XCAR (XCDR (args));
688 Lisp_Object else_forms = XCDR (XCDR (args));
690 if (!NILP (Feval (condition)))
691 return Feval (then_form);
693 return Fprogn (else_forms);
696 /* Macros `when' and `unless' are trivially defined in Lisp,
697 but it helps for bootstrapping to have them ALWAYS defined. */
699 DEFUN ("when", Fwhen, 1, MANY, 0, /*
700 \(when COND BODY...): if COND yields non-nil, do BODY, else return nil.
701 BODY can be zero or more expressions. If BODY is nil, return nil.
703 (int nargs, Lisp_Object *args))
705 Lisp_Object cond = args[0];
710 case 1: body = Qnil; break;
711 case 2: body = args[1]; break;
712 default: body = Fcons (Qprogn, Flist (nargs-1, args+1)); break;
715 return list3 (Qif, cond, body);
718 DEFUN ("unless", Funless, 1, MANY, 0, /*
719 \(unless COND BODY...): if COND yields nil, do BODY, else return nil.
720 BODY can be zero or more expressions. If BODY is nil, return nil.
722 (int nargs, Lisp_Object *args))
724 Lisp_Object cond = args[0];
725 Lisp_Object body = Flist (nargs-1, args+1);
726 return Fcons (Qif, Fcons (cond, Fcons (Qnil, body)));
729 DEFUN ("cond", Fcond, 0, UNEVALLED, 0, /*
730 \(cond CLAUSES...): try each clause until one succeeds.
731 Each clause looks like (CONDITION BODY...). CONDITION is evaluated
732 and, if the value is non-nil, this clause succeeds:
733 then the expressions in BODY are evaluated and the last one's
734 value is the value of the cond-form.
735 If no clause succeeds, cond returns nil.
736 If a clause has one element, as in (CONDITION),
737 CONDITION's value if non-nil is returned from the cond-form.
741 /* This function can GC */
742 REGISTER Lisp_Object val;
744 LIST_LOOP_2 (clause, args)
747 if (!NILP (val = Feval (XCAR (clause))))
749 if (!NILP (clause = XCDR (clause)))
751 CHECK_TRUE_LIST (clause);
752 val = Fprogn (clause);
761 DEFUN ("progn", Fprogn, 0, UNEVALLED, 0, /*
762 \(progn BODY...): eval BODY forms sequentially and return value of last one.
766 /* This function can GC */
767 /* Caller must provide a true list in ARGS */
768 REGISTER Lisp_Object val = Qnil;
774 LIST_LOOP_2 (form, args)
782 /* Fprog1() is the canonical example of a function that must GCPRO a
783 Lisp_Object across calls to Feval(). */
785 DEFUN ("prog1", Fprog1, 1, UNEVALLED, 0, /*
786 Similar to `progn', but the value of the first form is returned.
787 \(prog1 FIRST BODY...): All the arguments are evaluated sequentially.
788 The value of FIRST is saved during evaluation of the remaining args,
789 whose values are discarded.
793 /* This function can GC */
794 REGISTER Lisp_Object val;
797 val = Feval (XCAR (args));
802 LIST_LOOP_2 (form, XCDR (args))
810 DEFUN ("prog2", Fprog2, 2, UNEVALLED, 0, /*
811 Similar to `progn', but the value of the second form is returned.
812 \(prog2 FIRST SECOND BODY...): All the arguments are evaluated sequentially.
813 The value of SECOND is saved during evaluation of the remaining args,
814 whose values are discarded.
818 /* This function can GC */
819 REGISTER Lisp_Object val;
824 val = Feval (XCAR (args));
830 LIST_LOOP_2 (form, args)
838 DEFUN ("let*", FletX, 1, UNEVALLED, 0, /*
839 \(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.
840 The value of the last form in BODY is returned.
841 Each element of VARLIST is a symbol (which is bound to nil)
842 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
843 Each VALUEFORM can refer to the symbols already bound by this VARLIST.
847 /* This function can GC */
848 Lisp_Object varlist = XCAR (args);
849 Lisp_Object body = XCDR (args);
850 int speccount = specpdl_depth();
852 EXTERNAL_LIST_LOOP_3 (var, varlist, tail)
854 Lisp_Object symbol, value, tem;
856 symbol = var, value = Qnil;
867 value = Feval (XCAR (tem));
868 if (!NILP (XCDR (tem)))
870 ("`let' bindings can have only one value-form", var);
873 specbind (symbol, value);
875 return unbind_to (speccount, Fprogn (body));
878 DEFUN ("let", Flet, 1, UNEVALLED, 0, /*
879 \(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.
880 The value of the last form in BODY is returned.
881 Each element of VARLIST is a symbol (which is bound to nil)
882 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
883 All the VALUEFORMs are evalled before any symbols are bound.
887 /* This function can GC */
888 Lisp_Object varlist = XCAR (args);
889 Lisp_Object body = XCDR (args);
890 int speccount = specpdl_depth();
895 /* Make space to hold the values to give the bound variables. */
898 GET_EXTERNAL_LIST_LENGTH (varlist, varcount);
899 temps = alloca_array (Lisp_Object, varcount);
902 /* Compute the values and store them in `temps' */
908 LIST_LOOP_2 (var, varlist)
910 Lisp_Object *value = &temps[idx++];
923 *value = Feval (XCAR (tem));
926 if (!NILP (XCDR (tem)))
928 ("`let' bindings can have only one value-form", var);
936 LIST_LOOP_2 (var, varlist)
938 specbind (SYMBOLP (var) ? var : XCAR (var), temps[idx++]);
944 return unbind_to (speccount, Fprogn (body));
947 DEFUN ("while", Fwhile, 1, UNEVALLED, 0, /*
948 \(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.
949 The order of execution is thus TEST, BODY, TEST, BODY and so on
950 until TEST returns nil.
954 /* This function can GC */
955 Lisp_Object test = XCAR (args);
956 Lisp_Object body = XCDR (args);
958 while (!NILP (Feval (test)))
967 DEFUN ("setq", Fsetq, 0, UNEVALLED, 0, /*
968 \(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.
969 The symbols SYM are variables; they are literal (not evaluated).
970 The values VAL are expressions; they are evaluated.
971 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
972 The second VAL is not computed until after the first SYM is set, and so on;
973 each VAL can use the new value of variables set earlier in the `setq'.
974 The return value of the `setq' form is the value of the last VAL.
978 /* This function can GC */
979 Lisp_Object symbol, tail, val = Qnil;
983 GET_LIST_LENGTH (args, nargs);
985 if (nargs & 1) /* Odd number of arguments? */
986 Fsignal (Qwrong_number_of_arguments, list2 (Qsetq, make_int (nargs)));
990 PROPERTY_LIST_LOOP (tail, symbol, val, args)
1000 DEFUN ("quote", Fquote, 1, UNEVALLED, 0, /*
1001 Return the argument, without evaluating it. `(quote x)' yields `x'.
1008 DEFUN ("function", Ffunction, 1, UNEVALLED, 0, /*
1009 Like `quote', but preferred for objects which are functions.
1010 In byte compilation, `function' causes its argument to be compiled.
1011 `quote' cannot do that.
1019 /************************************************************************/
1020 /* Defining functions/variables */
1021 /************************************************************************/
1023 define_function (Lisp_Object name, Lisp_Object defn)
1026 LOADHIST_ATTACH (name);
1030 DEFUN ("defun", Fdefun, 2, UNEVALLED, 0, /*
1031 \(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.
1032 The definition is (lambda ARGLIST [DOCSTRING] BODY...).
1033 See also the function `interactive'.
1037 /* This function can GC */
1038 return define_function (XCAR (args),
1039 Fcons (Qlambda, XCDR (args)));
1042 DEFUN ("defmacro", Fdefmacro, 2, UNEVALLED, 0, /*
1043 \(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.
1044 The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).
1045 When the macro is called, as in (NAME ARGS...),
1046 the function (lambda ARGLIST BODY...) is applied to
1047 the list ARGS... as it appears in the expression,
1048 and the result should be a form to be evaluated instead of the original.
1052 /* This function can GC */
1053 return define_function (XCAR (args),
1054 Fcons (Qmacro, Fcons (Qlambda, XCDR (args))));
1057 DEFUN ("defvar", Fdefvar, 1, UNEVALLED, 0, /*
1058 \(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.
1059 You are not required to define a variable in order to use it,
1060 but the definition can supply documentation and an initial value
1061 in a way that tags can recognize.
1063 INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is
1064 void. (However, when you evaluate a defvar interactively, it acts like a
1065 defconst: SYMBOL's value is always set regardless of whether it's currently
1067 If SYMBOL is buffer-local, its default value is what is set;
1068 buffer-local values are not affected.
1069 INITVALUE and DOCSTRING are optional.
1070 If DOCSTRING starts with *, this variable is identified as a user option.
1071 This means that M-x set-variable recognizes it.
1072 If INITVALUE is missing, SYMBOL's value is not set.
1074 In lisp-interaction-mode defvar is treated as defconst.
1078 /* This function can GC */
1079 Lisp_Object sym = XCAR (args);
1081 if (!NILP (args = XCDR (args)))
1083 Lisp_Object val = XCAR (args);
1085 if (NILP (Fdefault_boundp (sym)))
1087 struct gcpro gcpro1;
1090 Fset_default (sym, val);
1094 if (!NILP (args = XCDR (args)))
1096 Lisp_Object doc = XCAR (args);
1097 Fput (sym, Qvariable_documentation, doc);
1098 if (!NILP (args = XCDR (args)))
1099 error ("too many arguments");
1104 if (!NILP (Vfile_domain))
1105 Fput (sym, Qvariable_domain, Vfile_domain);
1108 LOADHIST_ATTACH (sym);
1112 DEFUN ("defconst", Fdefconst, 2, UNEVALLED, 0, /*
1113 \(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant
1115 The intent is that programs do not change this value, but users may.
1116 Always sets the value of SYMBOL to the result of evalling INITVALUE.
1117 If SYMBOL is buffer-local, its default value is what is set;
1118 buffer-local values are not affected.
1119 DOCSTRING is optional.
1120 If DOCSTRING starts with *, this variable is identified as a user option.
1121 This means that M-x set-variable recognizes it.
1123 Note: do not use `defconst' for user options in libraries that are not
1124 normally loaded, since it is useful for users to be able to specify
1125 their own values for such variables before loading the library.
1126 Since `defconst' unconditionally assigns the variable,
1127 it would override the user's choice.
1131 /* This function can GC */
1132 Lisp_Object sym = XCAR (args);
1133 Lisp_Object val = Feval (XCAR (args = XCDR (args)));
1134 struct gcpro gcpro1;
1138 Fset_default (sym, val);
1142 if (!NILP (args = XCDR (args)))
1144 Lisp_Object doc = XCAR (args);
1145 Fput (sym, Qvariable_documentation, doc);
1146 if (!NILP (args = XCDR (args)))
1147 error ("too many arguments");
1151 if (!NILP (Vfile_domain))
1152 Fput (sym, Qvariable_domain, Vfile_domain);
1155 LOADHIST_ATTACH (sym);
1159 DEFUN ("user-variable-p", Fuser_variable_p, 1, 1, 0, /*
1160 Return t if VARIABLE is intended to be set and modified by users.
1161 \(The alternative is a variable used internally in a Lisp program.)
1162 Determined by whether the first character of the documentation
1163 for the variable is `*'.
1167 Lisp_Object documentation = Fget (variable, Qvariable_documentation, Qnil);
1170 ((INTP (documentation) && XINT (documentation) < 0) ||
1172 (STRINGP (documentation) &&
1173 (string_byte (XSTRING (documentation), 0) == '*')) ||
1175 /* If (STRING . INTEGER), a negative integer means a user variable. */
1176 (CONSP (documentation)
1177 && STRINGP (XCAR (documentation))
1178 && INTP (XCDR (documentation))
1179 && XINT (XCDR (documentation)) < 0)) ?
1183 DEFUN ("macroexpand-internal", Fmacroexpand_internal, 1, 2, 0, /*
1184 Return result of expanding macros at top level of FORM.
1185 If FORM is not a macro call, it is returned unchanged.
1186 Otherwise, the macro is expanded and the expansion is considered
1187 in place of FORM. When a non-macro-call results, it is returned.
1189 The second optional arg ENVIRONMENT specifies an environment of macro
1190 definitions to shadow the loaded ones for use in file byte-compilation.
1192 (form, environment))
1194 /* This function can GC */
1195 /* With cleanups from Hallvard Furuseth. */
1196 REGISTER Lisp_Object expander, sym, def, tem;
1200 /* Come back here each time we expand a macro call,
1201 in case it expands into another macro call. */
1204 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
1205 def = sym = XCAR (form);
1207 /* Trace symbols aliases to other symbols
1208 until we get a symbol that is not an alias. */
1209 while (SYMBOLP (def))
1213 tem = Fassq (sym, environment);
1216 def = XSYMBOL (sym)->function;
1217 if (!UNBOUNDP (def))
1222 /* Right now TEM is the result from SYM in ENVIRONMENT,
1223 and if TEM is nil then DEF is SYM's function definition. */
1226 /* SYM is not mentioned in ENVIRONMENT.
1227 Look at its function definition. */
1230 /* Not defined or definition not suitable */
1232 if (EQ (XCAR (def), Qautoload))
1234 /* Autoloading function: will it be a macro when loaded? */
1235 tem = Felt (def, make_int (4));
1236 if (EQ (tem, Qt) || EQ (tem, Qmacro))
1238 /* Yes, load it and try again. */
1239 /* do_autoload GCPROs both arguments */
1240 do_autoload (def, sym);
1246 else if (!EQ (XCAR (def), Qmacro))
1248 else expander = XCDR (def);
1252 expander = XCDR (tem);
1253 if (NILP (expander))
1256 form = apply1 (expander, XCDR (form));
1262 /************************************************************************/
1263 /* Non-local exits */
1264 /************************************************************************/
1266 DEFUN ("catch", Fcatch, 1, UNEVALLED, 0, /*
1267 \(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.
1268 TAG is evalled to get the tag to use. Then the BODY is executed.
1269 Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.
1270 If no throw happens, `catch' returns the value of the last BODY form.
1271 If a throw happens, it specifies the value to return from `catch'.
1275 /* This function can GC */
1276 Lisp_Object tag = Feval (XCAR (args));
1277 Lisp_Object body = XCDR (args);
1278 return internal_catch (tag, Fprogn, body, 0);
1281 /* Set up a catch, then call C function FUNC on argument ARG.
1282 FUNC should return a Lisp_Object.
1283 This is how catches are done from within C code. */
1286 internal_catch (Lisp_Object tag,
1287 Lisp_Object (*func) (Lisp_Object arg),
1289 int * volatile threw)
1291 /* This structure is made part of the chain `catchlist'. */
1294 /* Fill in the components of c, and put it on the list. */
1298 c.backlist = backtrace_list;
1301 c.handlerlist = handlerlist;
1303 c.lisp_eval_depth = lisp_eval_depth;
1304 c.pdlcount = specpdl_depth();
1306 c.poll_suppress_count = async_timer_suppress_count;
1308 c.gcpro = gcprolist;
1314 /* Throw works by a longjmp that comes right here. */
1315 if (threw) *threw = 1;
1318 c.val = (*func) (arg);
1319 if (threw) *threw = 0;
1321 #ifdef ERROR_CHECK_TYPECHECK
1322 check_error_state_sanity ();
1328 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
1329 jump to that CATCH, returning VALUE as the value of that catch.
1331 This is the guts Fthrow and Fsignal; they differ only in the way
1332 they choose the catch tag to throw to. A catch tag for a
1333 condition-case form has a TAG of Qnil.
1335 Before each catch is discarded, unbind all special bindings and
1336 execute all unwind-protect clauses made above that catch. Unwind
1337 the handler stack as we go, so that the proper handlers are in
1338 effect for each unwind-protect clause we run. At the end, restore
1339 some static info saved in CATCH, and longjmp to the location
1342 This is used for correct unwinding in Fthrow and Fsignal. */
1345 unwind_to_catch (struct catchtag *c, Lisp_Object val)
1349 REGISTER int last_time;
1352 /* Unwind the specbind, catch, and handler stacks back to CATCH
1353 Before each catch is discarded, unbind all special bindings
1354 and execute all unwind-protect clauses made above that catch.
1355 At the end, restore some static info saved in CATCH,
1356 and longjmp to the location specified.
1359 /* Save the value somewhere it will be GC'ed.
1360 (Can't overwrite tag slot because an unwind-protect may
1361 want to throw to this same tag, which isn't yet invalid.) */
1365 /* Restore the polling-suppression count. */
1366 set_poll_suppress_count (catch->poll_suppress_count);
1370 /* #### FSFmacs has the following loop. Is it more correct? */
1373 last_time = catchlist == c;
1375 /* Unwind the specpdl stack, and then restore the proper set of
1377 unbind_to (catchlist->pdlcount, Qnil);
1378 handlerlist = catchlist->handlerlist;
1379 catchlist = catchlist->next;
1380 #ifdef ERROR_CHECK_TYPECHECK
1381 check_error_state_sanity ();
1384 while (! last_time);
1385 #else /* Actual XEmacs code */
1386 /* Unwind the specpdl stack */
1387 unbind_to (c->pdlcount, Qnil);
1388 catchlist = c->next;
1389 #ifdef ERROR_CHECK_TYPECHECK
1390 check_error_state_sanity ();
1394 gcprolist = c->gcpro;
1395 backtrace_list = c->backlist;
1396 lisp_eval_depth = c->lisp_eval_depth;
1398 #ifdef DEFEND_AGAINST_THROW_RECURSION
1401 LONGJMP (c->jmp, 1);
1404 static DOESNT_RETURN
1405 throw_or_bomb_out (Lisp_Object tag, Lisp_Object val, int bomb_out_p,
1406 Lisp_Object sig, Lisp_Object data)
1408 #ifdef DEFEND_AGAINST_THROW_RECURSION
1409 /* die if we recurse more than is reasonable */
1410 if (++throw_level > 20)
1414 /* If bomb_out_p is t, this is being called from Fsignal as a
1415 "last resort" when there is no handler for this error and
1416 the debugger couldn't be invoked, so we are throwing to
1417 'top-level. If this tag doesn't exist (happens during the
1418 initialization stages) we would get in an infinite recursive
1419 Fsignal/Fthrow loop, so instead we bomb out to the
1420 really-early-error-handler.
1422 Note that in fact the only time that the "last resort"
1423 occurs is when there's no catch for 'top-level -- the
1424 'top-level catch and the catch-all error handler are
1425 established at the same time, in initial_command_loop/
1428 #### Fix this horrifitude!
1433 REGISTER struct catchtag *c;
1436 if (!NILP (tag)) /* #### */
1438 for (c = catchlist; c; c = c->next)
1440 if (EQ (c->tag, tag))
1441 unwind_to_catch (c, val);
1444 tag = Fsignal (Qno_catch, list2 (tag, val));
1446 call1 (Qreally_early_error_handler, Fcons (sig, data));
1449 /* can't happen. who cares? - (Sun's compiler does) */
1450 /* throw_level--; */
1451 /* getting tired of compilation warnings */
1455 /* See above, where CATCHLIST is defined, for a description of how
1458 Fthrow() is also called by Fsignal(), to do a non-local jump
1459 back to the appropriate condition-case handler after (maybe)
1460 the debugger is entered. In that case, TAG is the value
1461 of Vcondition_handlers that was in place just after the
1462 condition-case handler was set up. The car of this will be
1463 some data referring to the handler: Its car will be Qunbound
1464 (thus, this tag can never be generated by Lisp code), and
1465 its CDR will be the HANDLERS argument to condition_case_1()
1466 (either Qerror, Qt, or a list of handlers as in `condition-case').
1467 This works fine because Fthrow() does not care what TAG was
1468 passed to it: it just looks up the catch list for something
1469 that is EQ() to TAG. When it finds it, it will longjmp()
1470 back to the place that established the catch (in this case,
1471 condition_case_1). See below for more info.
1474 DEFUN ("throw", Fthrow, 2, 2, 0, /*
1475 Throw to the catch for TAG and return VALUE from it.
1476 Both TAG and VALUE are evalled.
1480 throw_or_bomb_out (tag, value, 0, Qnil, Qnil); /* Doesn't return */
1484 DEFUN ("unwind-protect", Funwind_protect, 1, UNEVALLED, 0, /*
1485 Do BODYFORM, protecting with UNWINDFORMS.
1486 Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).
1487 If BODYFORM completes normally, its value is returned
1488 after executing the UNWINDFORMS.
1489 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.
1493 /* This function can GC */
1494 int speccount = specpdl_depth();
1496 record_unwind_protect (Fprogn, XCDR (args));
1497 return unbind_to (speccount, Feval (XCAR (args)));
1501 /************************************************************************/
1502 /* Signalling and trapping errors */
1503 /************************************************************************/
1506 condition_bind_unwind (Lisp_Object loser)
1509 /* ((handler-fun . handler-args) ... other handlers) */
1510 Lisp_Object tem = XCAR (loser);
1514 victim = XCONS (tem);
1518 victim = XCONS (loser);
1520 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */
1521 Vcondition_handlers = victim->cdr;
1528 condition_case_unwind (Lisp_Object loser)
1532 /* ((<unbound> . clauses) ... other handlers */
1533 victim = XCONS (XCAR (loser));
1536 victim = XCONS (loser);
1537 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */
1538 Vcondition_handlers = victim->cdr;
1544 /* Split out from condition_case_3 so that primitive C callers
1545 don't have to cons up a lisp handler form to be evaluated. */
1547 /* Call a function BFUN of one argument BARG, trapping errors as
1548 specified by HANDLERS. If no error occurs that is indicated by
1549 HANDLERS as something to be caught, the return value of this
1550 function is the return value from BFUN. If such an error does
1551 occur, HFUN is called, and its return value becomes the
1552 return value of condition_case_1(). The second argument passed
1553 to HFUN will always be HARG. The first argument depends on
1556 If HANDLERS is Qt, all errors (this includes QUIT, but not
1557 non-local exits with `throw') cause HFUN to be invoked, and VAL
1558 (the first argument to HFUN) is a cons (SIG . DATA) of the
1559 arguments passed to `signal'. The debugger is not invoked even if
1560 `debug-on-error' was set.
1562 A HANDLERS value of Qerror is the same as Qt except that the
1563 debugger is invoked if `debug-on-error' was set.
1565 Otherwise, HANDLERS should be a list of lists (CONDITION-NAME BODY ...)
1566 exactly as in `condition-case', and errors will be trapped
1567 as indicated in HANDLERS. VAL (the first argument to HFUN) will
1568 be a cons whose car is the cons (SIG . DATA) and whose CDR is the
1569 list (BODY ...) from the appropriate slot in HANDLERS.
1571 This function pushes HANDLERS onto the front of Vcondition_handlers
1572 (actually with a Qunbound marker as well -- see Fthrow() above
1573 for why), establishes a catch whose tag is this new value of
1574 Vcondition_handlers, and calls BFUN. When Fsignal() is called,
1575 it calls Fthrow(), setting TAG to this same new value of
1576 Vcondition_handlers and setting VAL to the same thing that will
1577 be passed to HFUN, as above. Fthrow() longjmp()s back to the
1578 jump point we just established, and we in turn just call the
1579 HFUN and return its value.
1581 For a real condition-case, HFUN will always be
1582 run_condition_case_handlers() and HARG is the argument VAR
1583 to condition-case. That function just binds VAR to the cons
1584 (SIG . DATA) that is the CAR of VAL, and calls the handler
1585 (BODY ...) that is the CDR of VAL. Note that before calling
1586 Fthrow(), Fsignal() restored Vcondition_handlers to the value
1587 it had *before* condition_case_1() was called. This maintains
1588 consistency (so that the state of things at exit of
1589 condition_case_1() is the same as at entry), and implies
1590 that the handler can signal the same error again (possibly
1591 after processing of its own), without getting in an infinite
1595 condition_case_1 (Lisp_Object handlers,
1596 Lisp_Object (*bfun) (Lisp_Object barg),
1598 Lisp_Object (*hfun) (Lisp_Object val, Lisp_Object harg),
1601 int speccount = specpdl_depth();
1603 struct gcpro gcpro1;
1608 /* Do consing now so out-of-memory error happens up front */
1609 /* (unbound . stuff) is a special condition-case kludge marker
1610 which is known specially by Fsignal.
1611 This is an abomination, but to fix it would require either
1612 making condition_case cons (a union of the conditions of the clauses)
1613 or changing the byte-compiler output (no thanks). */
1614 c.tag = noseeum_cons (noseeum_cons (Qunbound, handlers),
1615 Vcondition_handlers);
1618 c.backlist = backtrace_list;
1621 c.handlerlist = handlerlist;
1623 c.lisp_eval_depth = lisp_eval_depth;
1624 c.pdlcount = specpdl_depth();
1626 c.poll_suppress_count = async_timer_suppress_count;
1628 c.gcpro = gcprolist;
1629 /* #### FSFmacs does the following statement *after* the setjmp(). */
1634 /* throw does ungcpro, etc */
1635 return (*hfun) (c.val, harg);
1638 record_unwind_protect (condition_case_unwind, c.tag);
1642 h.handler = handlers;
1644 h.next = handlerlist;
1648 Vcondition_handlers = c.tag;
1650 GCPRO1 (harg); /* Somebody has to gc-protect */
1652 c.val = ((*bfun) (barg));
1654 /* The following is *not* true: (ben)
1656 ungcpro, restoring catchlist and condition_handlers are actually
1657 redundant since unbind_to now restores them. But it looks funny not to
1658 have this code here, and it doesn't cost anything, so I'm leaving it.*/
1661 #ifdef ERROR_CHECK_TYPECHECK
1662 check_error_state_sanity ();
1664 Vcondition_handlers = XCDR (c.tag);
1666 return unbind_to (speccount, c.val);
1670 run_condition_case_handlers (Lisp_Object val, Lisp_Object var)
1672 /* This function can GC */
1675 specbind (h.var, c.val);
1676 val = Fprogn (Fcdr (h.chosen_clause));
1678 /* Note that this just undoes the binding of h.var; whoever
1679 longjmp()ed to us unwound the stack to c.pdlcount before
1681 unbind_to (c.pdlcount, Qnil);
1686 CHECK_TRUE_LIST (val);
1688 return Fprogn (Fcdr (val)); /* tail call */
1690 speccount = specpdl_depth();
1691 specbind (var, Fcar (val));
1692 val = Fprogn (Fcdr (val));
1693 return unbind_to (speccount, val);
1697 /* Here for bytecode to call non-consfully. This is exactly like
1698 condition-case except that it takes three arguments rather
1699 than a single list of arguments. */
1701 condition_case_3 (Lisp_Object bodyform, Lisp_Object var, Lisp_Object handlers)
1703 /* This function can GC */
1704 EXTERNAL_LIST_LOOP_2 (handler, handlers)
1708 else if (CONSP (handler))
1710 Lisp_Object conditions = XCAR (handler);
1711 /* CONDITIONS must a condition name or a list of condition names */
1712 if (SYMBOLP (conditions))
1716 EXTERNAL_LIST_LOOP_2 (condition, conditions)
1717 if (!SYMBOLP (condition))
1718 goto invalid_condition_handler;
1723 invalid_condition_handler:
1724 signal_simple_error ("Invalid condition handler", handler);
1730 return condition_case_1 (handlers,
1732 run_condition_case_handlers,
1736 DEFUN ("condition-case", Fcondition_case, 2, UNEVALLED, 0, /*
1737 Regain control when an error is signalled.
1738 Usage looks like (condition-case VAR BODYFORM HANDLERS...).
1739 Executes BODYFORM and returns its value if no error happens.
1740 Each element of HANDLERS looks like (CONDITION-NAME BODY...)
1741 where the BODY is made of Lisp expressions.
1743 A handler is applicable to an error if CONDITION-NAME is one of the
1744 error's condition names. If an error happens, the first applicable
1745 handler is run. As a special case, a CONDITION-NAME of t matches
1746 all errors, even those without the `error' condition name on them
1749 The car of a handler may be a list of condition names
1750 instead of a single condition name.
1752 When a handler handles an error,
1753 control returns to the condition-case and the handler BODY... is executed
1754 with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
1755 VAR may be nil; then you do not get access to the signal information.
1757 The value of the last BODY form is returned from the condition-case.
1758 See also the function `signal' for more info.
1760 Note that at the time the condition handler is invoked, the Lisp stack
1761 and the current catches, condition-cases, and bindings have all been
1762 popped back to the state they were in just before the call to
1763 `condition-case'. This means that resignalling the error from
1764 within the handler will not result in an infinite loop.
1766 If you want to establish an error handler that is called with the
1767 Lisp stack, bindings, etc. as they were when `signal' was called,
1768 rather than when the handler was set, use `call-with-condition-handler'.
1772 /* This function can GC */
1773 Lisp_Object var = XCAR (args);
1774 Lisp_Object bodyform = XCAR (XCDR (args));
1775 Lisp_Object handlers = XCDR (XCDR (args));
1776 return condition_case_3 (bodyform, var, handlers);
1779 DEFUN ("call-with-condition-handler", Fcall_with_condition_handler, 2, MANY, 0, /*
1780 Regain control when an error is signalled, without popping the stack.
1781 Usage looks like (call-with-condition-handler HANDLER FUNCTION &rest ARGS).
1782 This function is similar to `condition-case', but the handler is invoked
1783 with the same environment (Lisp stack, bindings, catches, condition-cases)
1784 that was current when `signal' was called, rather than when the handler
1787 HANDLER should be a function of one argument, which is a cons of the args
1788 \(SIG . DATA) that were passed to `signal'. It is invoked whenever
1789 `signal' is called (this differs from `condition-case', which allows
1790 you to specify which errors are trapped). If the handler function
1791 returns, `signal' continues as if the handler were never invoked.
1792 \(It continues to look for handlers established earlier than this one,
1793 and invokes the standard error-handler if none is found.)
1795 (int nargs, Lisp_Object *args)) /* Note! Args side-effected! */
1797 /* This function can GC */
1798 int speccount = specpdl_depth();
1801 /* #### If there were a way to check that args[0] were a function
1802 which accepted one arg, that should be done here ... */
1804 /* (handler-fun . handler-args) */
1805 tem = noseeum_cons (list1 (args[0]), Vcondition_handlers);
1806 record_unwind_protect (condition_bind_unwind, tem);
1807 Vcondition_handlers = tem;
1809 /* Caller should have GC-protected args */
1810 return unbind_to (speccount, Ffuncall (nargs - 1, args + 1));
1814 condition_type_p (Lisp_Object type, Lisp_Object conditions)
1817 /* (condition-case c # (t c)) catches -all- signals
1818 * Use with caution! */
1822 return !NILP (Fmemq (type, conditions));
1824 for (; CONSP (type); type = XCDR (type))
1825 if (!NILP (Fmemq (XCAR (type), conditions)))
1832 return_from_signal (Lisp_Object value)
1835 /* Most callers are not prepared to handle gc if this
1836 returns. So, since this feature is not very useful,
1838 /* Have called debugger; return value to signaller */
1840 #else /* But the reality is that that stinks, because: */
1841 /* GACK!!! Really want some way for debug-on-quit errors
1842 to be continuable!! */
1843 error ("Returning a value from an error is no longer supported");
1847 extern int in_display;
1850 /************************************************************************/
1851 /* the workhorse error-signaling function */
1852 /************************************************************************/
1854 /* #### This function has not been synched with FSF. It diverges
1858 signal_1 (Lisp_Object sig, Lisp_Object data)
1860 /* This function can GC */
1861 struct gcpro gcpro1, gcpro2;
1862 Lisp_Object conditions;
1863 Lisp_Object handlers;
1864 /* signal_call_debugger() could get called more than once
1865 (once when a call-with-condition-handler is about to
1866 be dealt with, and another when a condition-case handler
1867 is about to be invoked). So make sure the debugger and/or
1868 stack trace aren't done more than once. */
1869 int stack_trace_displayed = 0;
1870 int debugger_entered = 0;
1871 GCPRO2 (conditions, handlers);
1875 /* who knows how much has been initialized? Safest bet is
1876 just to bomb out immediately. */
1877 /* let's not use stderr_out() here, because that does a bunch of
1878 things that might not be safe yet. */
1879 fprintf (stderr, "Error before initialization is complete!\n");
1883 if (gc_in_progress || in_display)
1884 /* This is one of many reasons why you can't run lisp code from redisplay.
1885 There is no sensible way to handle errors there. */
1888 conditions = Fget (sig, Qerror_conditions, Qnil);
1890 for (handlers = Vcondition_handlers;
1892 handlers = XCDR (handlers))
1894 Lisp_Object handler_fun = XCAR (XCAR (handlers));
1895 Lisp_Object handler_data = XCDR (XCAR (handlers));
1896 Lisp_Object outer_handlers = XCDR (handlers);
1898 if (!UNBOUNDP (handler_fun))
1900 /* call-with-condition-handler */
1902 Lisp_Object all_handlers = Vcondition_handlers;
1903 struct gcpro ngcpro1;
1904 NGCPRO1 (all_handlers);
1905 Vcondition_handlers = outer_handlers;
1907 tem = signal_call_debugger (conditions, sig, data,
1909 &stack_trace_displayed,
1911 if (!UNBOUNDP (tem))
1912 RETURN_NUNGCPRO (return_from_signal (tem));
1914 tem = Fcons (sig, data);
1915 if (NILP (handler_data))
1916 tem = call1 (handler_fun, tem);
1919 /* (This code won't be used (for now?).) */
1920 struct gcpro nngcpro1;
1921 Lisp_Object args[3];
1924 args[0] = handler_fun;
1926 args[2] = handler_data;
1927 nngcpro1.var = args;
1928 tem = Fapply (3, args);
1933 if (!EQ (tem, Qsignal))
1934 return return_from_signal (tem);
1936 /* If handler didn't throw, try another handler */
1937 Vcondition_handlers = all_handlers;
1940 /* It's a condition-case handler */
1942 /* t is used by handlers for all conditions, set up by C code.
1943 * debugger is not called even if debug_on_error */
1944 else if (EQ (handler_data, Qt))
1947 return Fthrow (handlers, Fcons (sig, data));
1949 /* `error' is used similarly to the way `t' is used, but in
1950 addition it invokes the debugger if debug_on_error.
1951 This is normally used for the outer command-loop error
1953 else if (EQ (handler_data, Qerror))
1955 Lisp_Object tem = signal_call_debugger (conditions, sig, data,
1957 &stack_trace_displayed,
1961 if (!UNBOUNDP (tem))
1962 return return_from_signal (tem);
1964 tem = Fcons (sig, data);
1965 return Fthrow (handlers, tem);
1969 /* handler established by real (Lisp) condition-case */
1972 for (h = handler_data; CONSP (h); h = Fcdr (h))
1974 Lisp_Object clause = Fcar (h);
1975 Lisp_Object tem = Fcar (clause);
1977 if (condition_type_p (tem, conditions))
1979 tem = signal_call_debugger (conditions, sig, data,
1981 &stack_trace_displayed,
1984 if (!UNBOUNDP (tem))
1985 return return_from_signal (tem);
1987 /* Doesn't return */
1988 tem = Fcons (Fcons (sig, data), Fcdr (clause));
1989 return Fthrow (handlers, tem);
1995 /* If no handler is present now, try to run the debugger,
1996 and if that fails, throw to top level.
1998 #### The only time that no handler is present is during
1999 temacs or perhaps very early in XEmacs. In both cases,
2000 there is no 'top-level catch. (That's why the
2001 "bomb-out" hack was added.)
2003 #### Fix this horrifitude!
2005 signal_call_debugger (conditions, sig, data, Qnil, 0,
2006 &stack_trace_displayed,
2009 throw_or_bomb_out (Qtop_level, Qt, 1, sig, data); /* Doesn't return */
2014 /****************** Error functions class 1 ******************/
2016 /* Class 1: General functions that signal an error.
2017 These functions take an error type and a list of associated error
2020 /* The simplest external error function: it would be called
2021 signal_continuable_error() in the terminology below, but it's
2024 DEFUN ("signal", Fsignal, 2, 2, 0, /*
2025 Signal a continuable error. Args are ERROR-SYMBOL, and associated DATA.
2026 An error symbol is a symbol defined using `define-error'.
2027 DATA should be a list. Its elements are printed as part of the error message.
2028 If the signal is handled, DATA is made available to the handler.
2029 See also the function `signal-error', and the functions to handle errors:
2030 `condition-case' and `call-with-condition-handler'.
2032 Note that this function can return, if the debugger is invoked and the
2033 user invokes the "return from signal" option.
2035 (error_symbol, data))
2037 /* Fsignal() is one of these functions that's called all the time
2038 with newly-created Lisp objects. We allow this; but we must GC-
2039 protect the objects because all sorts of weird stuff could
2042 struct gcpro gcpro1;
2045 if (!NILP (Vcurrent_error_state))
2047 if (!NILP (Vcurrent_warning_class))
2048 warn_when_safe_lispobj (Vcurrent_warning_class, Qwarning,
2049 Fcons (error_symbol, data));
2050 Fthrow (Qunbound_suspended_errors_tag, Qnil);
2051 abort (); /* Better not get here! */
2053 RETURN_UNGCPRO (signal_1 (error_symbol, data));
2056 /* Signal a non-continuable error. */
2059 signal_error (Lisp_Object sig, Lisp_Object data)
2062 Fsignal (sig, data);
2064 #ifdef ERROR_CHECK_TYPECHECK
2066 check_error_state_sanity (void)
2069 int found_error_tag = 0;
2071 for (c = catchlist; c; c = c->next)
2073 if (EQ (c->tag, Qunbound_suspended_errors_tag))
2075 found_error_tag = 1;
2080 assert (found_error_tag || NILP (Vcurrent_error_state));
2085 restore_current_warning_class (Lisp_Object warning_class)
2087 Vcurrent_warning_class = warning_class;
2092 restore_current_error_state (Lisp_Object error_state)
2094 Vcurrent_error_state = error_state;
2099 call_with_suspended_errors_1 (Lisp_Object opaque_arg)
2102 Lisp_Object *kludgy_args = (Lisp_Object *) get_opaque_ptr (opaque_arg);
2103 Lisp_Object no_error = kludgy_args[2];
2104 int speccount = specpdl_depth ();
2106 if (!EQ (Vcurrent_error_state, no_error))
2108 record_unwind_protect (restore_current_error_state,
2109 Vcurrent_error_state);
2110 Vcurrent_error_state = no_error;
2112 PRIMITIVE_FUNCALL (val, get_opaque_ptr (kludgy_args[0]),
2113 kludgy_args + 3, XINT (kludgy_args[1]));
2114 return unbind_to (speccount, val);
2117 /* Many functions would like to do one of three things if an error
2120 (1) signal the error, as usual.
2121 (2) silently fail and return some error value.
2122 (3) do as (2) but issue a warning in the process.
2124 Currently there's lots of stuff that passes an Error_behavior
2125 value and calls maybe_signal_error() and other such functions.
2126 This approach is inherently error-prone and broken. A much
2127 more robust and easier approach is to use call_with_suspended_errors().
2128 Wrap this around any function in which you might want errors
2133 call_with_suspended_errors (lisp_fn_t fun, volatile Lisp_Object retval,
2134 Lisp_Object class, Error_behavior errb,
2139 Lisp_Object kludgy_args[23];
2140 Lisp_Object *args = kludgy_args + 3;
2142 Lisp_Object no_error;
2144 assert (SYMBOLP (class)); /* sanity-check */
2145 assert (!NILP (class));
2146 assert (nargs >= 0 && nargs < 20);
2148 /* ERROR_ME means don't trap errors. (However, if errors are
2149 already trapped, we leave them trapped.)
2151 Otherwise, we trap errors, and trap warnings if ERROR_ME_WARN.
2153 If ERROR_ME_NOT, it causes no warnings even if warnings
2154 were previously enabled. However, we never change the
2155 warning class from one to another. */
2156 if (!ERRB_EQ (errb, ERROR_ME))
2158 if (ERRB_EQ (errb, ERROR_ME_NOT)) /* person wants no warnings */
2160 errb = ERROR_ME_NOT;
2166 va_start (vargs, nargs);
2167 for (i = 0; i < nargs; i++)
2168 args[i] = va_arg (vargs, Lisp_Object);
2171 /* If error-checking is not disabled, just call the function.
2172 It's important not to override disabled error-checking with
2173 enabled error-checking. */
2175 if (ERRB_EQ (errb, ERROR_ME))
2178 PRIMITIVE_FUNCALL (val, fun, args, nargs);
2182 speccount = specpdl_depth ();
2183 if (NILP (class) || NILP (Vcurrent_warning_class))
2185 /* If we're currently calling for no warnings, then make it so.
2186 If we're currently calling for warnings and we weren't
2187 previously, then set our warning class; otherwise, leave
2188 the existing one alone. */
2189 record_unwind_protect (restore_current_warning_class,
2190 Vcurrent_warning_class);
2191 Vcurrent_warning_class = class;
2196 Lisp_Object the_retval;
2197 Lisp_Object opaque1 = make_opaque_ptr (kludgy_args);
2198 Lisp_Object opaque2 = make_opaque_ptr ((void *) fun);
2199 struct gcpro gcpro1, gcpro2;
2201 GCPRO2 (opaque1, opaque2);
2202 kludgy_args[0] = opaque2;
2203 kludgy_args[1] = make_int (nargs);
2204 kludgy_args[2] = no_error;
2205 the_retval = internal_catch (Qunbound_suspended_errors_tag,
2206 call_with_suspended_errors_1,
2208 free_opaque_ptr (opaque1);
2209 free_opaque_ptr (opaque2);
2211 /* Use the returned value except in non-local exit, when
2213 /* Some perverse compilers require the perverse cast below. */
2214 return unbind_to (speccount,
2215 threw ? *((Lisp_Object*) &(retval)) : the_retval);
2219 /* Signal a non-continuable error or display a warning or do nothing,
2220 according to ERRB. CLASS is the class of warning and should
2221 refer to what sort of operation is being done (e.g. Qtoolbar,
2222 Qresource, etc.). */
2225 maybe_signal_error (Lisp_Object sig, Lisp_Object data, Lisp_Object class,
2226 Error_behavior errb)
2228 if (ERRB_EQ (errb, ERROR_ME_NOT))
2230 else if (ERRB_EQ (errb, ERROR_ME_WARN))
2231 warn_when_safe_lispobj (class, Qwarning, Fcons (sig, data));
2234 Fsignal (sig, data);
2237 /* Signal a continuable error or display a warning or do nothing,
2238 according to ERRB. */
2241 maybe_signal_continuable_error (Lisp_Object sig, Lisp_Object data,
2242 Lisp_Object class, Error_behavior errb)
2244 if (ERRB_EQ (errb, ERROR_ME_NOT))
2246 else if (ERRB_EQ (errb, ERROR_ME_WARN))
2248 warn_when_safe_lispobj (class, Qwarning, Fcons (sig, data));
2252 return Fsignal (sig, data);
2256 /****************** Error functions class 2 ******************/
2258 /* Class 2: Printf-like functions that signal an error.
2259 These functions signal an error of a specified type, whose data
2260 is a single string, created using the arguments. */
2262 /* dump an error message; called like printf */
2265 type_error (Lisp_Object type, const char *fmt, ...)
2270 va_start (args, fmt);
2271 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2275 /* Fsignal GC-protects its args */
2276 signal_error (type, list1 (obj));
2280 maybe_type_error (Lisp_Object type, Lisp_Object class, Error_behavior errb,
2281 const char *fmt, ...)
2287 if (ERRB_EQ (errb, ERROR_ME_NOT))
2290 va_start (args, fmt);
2291 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2295 /* Fsignal GC-protects its args */
2296 maybe_signal_error (type, list1 (obj), class, errb);
2300 continuable_type_error (Lisp_Object type, const char *fmt, ...)
2305 va_start (args, fmt);
2306 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2310 /* Fsignal GC-protects its args */
2311 return Fsignal (type, list1 (obj));
2315 maybe_continuable_type_error (Lisp_Object type, Lisp_Object class,
2316 Error_behavior errb, const char *fmt, ...)
2322 if (ERRB_EQ (errb, ERROR_ME_NOT))
2325 va_start (args, fmt);
2326 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2330 /* Fsignal GC-protects its args */
2331 return maybe_signal_continuable_error (type, list1 (obj), class, errb);
2335 /****************** Error functions class 3 ******************/
2337 /* Class 3: Signal an error with a string and an associated object.
2338 These functions signal an error of a specified type, whose data
2339 is two objects, a string and a related Lisp object (usually the object
2340 where the error is occurring). */
2343 signal_type_error (Lisp_Object type, const char *reason, Lisp_Object frob)
2345 if (UNBOUNDP (frob))
2346 signal_error (type, list1 (build_translated_string (reason)));
2348 signal_error (type, list2 (build_translated_string (reason), frob));
2352 maybe_signal_type_error (Lisp_Object type, const char *reason,
2353 Lisp_Object frob, Lisp_Object class,
2354 Error_behavior errb)
2357 if (ERRB_EQ (errb, ERROR_ME_NOT))
2359 maybe_signal_error (type, list2 (build_translated_string (reason), frob),
2364 signal_type_continuable_error (Lisp_Object type, const char *reason,
2367 return Fsignal (type, list2 (build_translated_string (reason), frob));
2371 maybe_signal_type_continuable_error (Lisp_Object type, const char *reason,
2372 Lisp_Object frob, Lisp_Object class,
2373 Error_behavior errb)
2376 if (ERRB_EQ (errb, ERROR_ME_NOT))
2378 return maybe_signal_continuable_error
2379 (type, list2 (build_translated_string (reason),
2380 frob), class, errb);
2384 /****************** Error functions class 4 ******************/
2386 /* Class 4: Printf-like functions that signal an error.
2387 These functions signal an error of a specified type, whose data
2388 is a two objects, a string (created using the arguments) and a
2393 type_error_with_frob (Lisp_Object type, Lisp_Object frob, const char *fmt, ...)
2398 va_start (args, fmt);
2399 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2403 /* Fsignal GC-protects its args */
2404 signal_error (type, list2 (obj, frob));
2408 maybe_type_error_with_frob (Lisp_Object type, Lisp_Object frob,
2409 Lisp_Object class, Error_behavior errb,
2410 const char *fmt, ...)
2416 if (ERRB_EQ (errb, ERROR_ME_NOT))
2419 va_start (args, fmt);
2420 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2424 /* Fsignal GC-protects its args */
2425 maybe_signal_error (type, list2 (obj, frob), class, errb);
2429 continuable_type_error_with_frob (Lisp_Object type, Lisp_Object frob,
2430 const char *fmt, ...)
2435 va_start (args, fmt);
2436 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2440 /* Fsignal GC-protects its args */
2441 return Fsignal (type, list2 (obj, frob));
2445 maybe_continuable_type_error_with_frob (Lisp_Object type, Lisp_Object frob,
2446 Lisp_Object class, Error_behavior errb,
2447 const char *fmt, ...)
2453 if (ERRB_EQ (errb, ERROR_ME_NOT))
2456 va_start (args, fmt);
2457 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2461 /* Fsignal GC-protects its args */
2462 return maybe_signal_continuable_error (type, list2 (obj, frob),
2467 /****************** Error functions class 5 ******************/
2469 /* Class 5: Signal an error with a string and two associated objects.
2470 These functions signal an error of a specified type, whose data
2471 is three objects, a string and two related Lisp objects. */
2474 signal_type_error_2 (Lisp_Object type, const char *reason,
2475 Lisp_Object frob0, Lisp_Object frob1)
2477 signal_error (type, list3 (build_translated_string (reason), frob0,
2482 maybe_signal_type_error_2 (Lisp_Object type, const char *reason,
2483 Lisp_Object frob0, Lisp_Object frob1,
2484 Lisp_Object class, Error_behavior errb)
2487 if (ERRB_EQ (errb, ERROR_ME_NOT))
2489 maybe_signal_error (type, list3 (build_translated_string (reason), frob0,
2490 frob1), class, errb);
2495 signal_type_continuable_error_2 (Lisp_Object type, const char *reason,
2496 Lisp_Object frob0, Lisp_Object frob1)
2498 return Fsignal (type, list3 (build_translated_string (reason), frob0,
2503 maybe_signal_type_continuable_error_2 (Lisp_Object type, const char *reason,
2504 Lisp_Object frob0, Lisp_Object frob1,
2505 Lisp_Object class, Error_behavior errb)
2508 if (ERRB_EQ (errb, ERROR_ME_NOT))
2510 return maybe_signal_continuable_error
2511 (type, list3 (build_translated_string (reason), frob0,
2517 /****************** Simple error functions class 2 ******************/
2519 /* Simple class 2: Printf-like functions that signal an error.
2520 These functions signal an error of type Qerror, whose data
2521 is a single string, created using the arguments. */
2523 /* dump an error message; called like printf */
2526 error (const char *fmt, ...)
2531 va_start (args, fmt);
2532 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2536 /* Fsignal GC-protects its args */
2537 signal_error (Qerror, list1 (obj));
2541 maybe_error (Lisp_Object class, Error_behavior errb, const char *fmt, ...)
2547 if (ERRB_EQ (errb, ERROR_ME_NOT))
2550 va_start (args, fmt);
2551 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2555 /* Fsignal GC-protects its args */
2556 maybe_signal_error (Qerror, list1 (obj), class, errb);
2560 continuable_error (const char *fmt, ...)
2565 va_start (args, fmt);
2566 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2570 /* Fsignal GC-protects its args */
2571 return Fsignal (Qerror, list1 (obj));
2575 maybe_continuable_error (Lisp_Object class, Error_behavior errb,
2576 const char *fmt, ...)
2582 if (ERRB_EQ (errb, ERROR_ME_NOT))
2585 va_start (args, fmt);
2586 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2590 /* Fsignal GC-protects its args */
2591 return maybe_signal_continuable_error (Qerror, list1 (obj), class, errb);
2595 /****************** Simple error functions class 3 ******************/
2597 /* Simple class 3: Signal an error with a string and an associated object.
2598 These functions signal an error of type Qerror, whose data
2599 is two objects, a string and a related Lisp object (usually the object
2600 where the error is occurring). */
2603 signal_simple_error (const char *reason, Lisp_Object frob)
2605 signal_error (Qerror, list2 (build_translated_string (reason), frob));
2609 maybe_signal_simple_error (const char *reason, Lisp_Object frob,
2610 Lisp_Object class, Error_behavior errb)
2613 if (ERRB_EQ (errb, ERROR_ME_NOT))
2615 maybe_signal_error (Qerror, list2 (build_translated_string (reason), frob),
2620 signal_simple_continuable_error (const char *reason, Lisp_Object frob)
2622 return Fsignal (Qerror, list2 (build_translated_string (reason), frob));
2626 maybe_signal_simple_continuable_error (const char *reason, Lisp_Object frob,
2627 Lisp_Object class, Error_behavior errb)
2630 if (ERRB_EQ (errb, ERROR_ME_NOT))
2632 return maybe_signal_continuable_error
2633 (Qerror, list2 (build_translated_string (reason),
2634 frob), class, errb);
2638 /****************** Simple error functions class 4 ******************/
2640 /* Simple class 4: Printf-like functions that signal an error.
2641 These functions signal an error of type Qerror, whose data
2642 is a two objects, a string (created using the arguments) and a
2647 error_with_frob (Lisp_Object frob, const char *fmt, ...)
2652 va_start (args, fmt);
2653 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2657 /* Fsignal GC-protects its args */
2658 signal_error (Qerror, list2 (obj, frob));
2662 maybe_error_with_frob (Lisp_Object frob, Lisp_Object class,
2663 Error_behavior errb, const char *fmt, ...)
2669 if (ERRB_EQ (errb, ERROR_ME_NOT))
2672 va_start (args, fmt);
2673 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2677 /* Fsignal GC-protects its args */
2678 maybe_signal_error (Qerror, list2 (obj, frob), class, errb);
2682 continuable_error_with_frob (Lisp_Object frob, const char *fmt, ...)
2687 va_start (args, fmt);
2688 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2692 /* Fsignal GC-protects its args */
2693 return Fsignal (Qerror, list2 (obj, frob));
2697 maybe_continuable_error_with_frob (Lisp_Object frob, Lisp_Object class,
2698 Error_behavior errb, const char *fmt, ...)
2704 if (ERRB_EQ (errb, ERROR_ME_NOT))
2707 va_start (args, fmt);
2708 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt), Qnil, -1,
2712 /* Fsignal GC-protects its args */
2713 return maybe_signal_continuable_error (Qerror, list2 (obj, frob),
2718 /****************** Simple error functions class 5 ******************/
2720 /* Simple class 5: Signal an error with a string and two associated objects.
2721 These functions signal an error of type Qerror, whose data
2722 is three objects, a string and two related Lisp objects. */
2725 signal_simple_error_2 (const char *reason,
2726 Lisp_Object frob0, Lisp_Object frob1)
2728 signal_error (Qerror, list3 (build_translated_string (reason), frob0,
2733 maybe_signal_simple_error_2 (const char *reason, Lisp_Object frob0,
2734 Lisp_Object frob1, Lisp_Object class,
2735 Error_behavior errb)
2738 if (ERRB_EQ (errb, ERROR_ME_NOT))
2740 maybe_signal_error (Qerror, list3 (build_translated_string (reason), frob0,
2741 frob1), class, errb);
2746 signal_simple_continuable_error_2 (const char *reason, Lisp_Object frob0,
2749 return Fsignal (Qerror, list3 (build_translated_string (reason), frob0,
2754 maybe_signal_simple_continuable_error_2 (const char *reason, Lisp_Object frob0,
2755 Lisp_Object frob1, Lisp_Object class,
2756 Error_behavior errb)
2759 if (ERRB_EQ (errb, ERROR_ME_NOT))
2761 return maybe_signal_continuable_error
2762 (Qerror, list3 (build_translated_string (reason), frob0,
2768 /* This is what the QUIT macro calls to signal a quit */
2772 /* This function can GC */
2773 if (EQ (Vquit_flag, Qcritical))
2774 debug_on_quit |= 2; /* set critical bit. */
2776 /* note that this is continuable. */
2777 Fsignal (Qquit, Qnil);
2781 /* Used in core lisp functions for efficiency */
2783 signal_void_function_error (Lisp_Object function)
2785 return Fsignal (Qvoid_function, list1 (function));
2789 signal_invalid_function_error (Lisp_Object function)
2791 return Fsignal (Qinvalid_function, list1 (function));
2795 signal_wrong_number_of_arguments_error (Lisp_Object function, int nargs)
2797 return Fsignal (Qwrong_number_of_arguments,
2798 list2 (function, make_int (nargs)));
2801 /* Used in list traversal macros for efficiency. */
2803 signal_malformed_list_error (Lisp_Object list)
2805 signal_error (Qmalformed_list, list1 (list));
2809 signal_malformed_property_list_error (Lisp_Object list)
2811 signal_error (Qmalformed_property_list, list1 (list));
2815 signal_circular_list_error (Lisp_Object list)
2817 signal_error (Qcircular_list, list1 (list));
2821 signal_circular_property_list_error (Lisp_Object list)
2823 signal_error (Qcircular_property_list, list1 (list));
2827 syntax_error (const char *reason, Lisp_Object frob)
2829 signal_type_error (Qsyntax_error, reason, frob);
2833 syntax_error_2 (const char *reason, Lisp_Object frob1, Lisp_Object frob2)
2835 signal_type_error_2 (Qsyntax_error, reason, frob1, frob2);
2839 invalid_argument (const char *reason, Lisp_Object frob)
2841 signal_type_error (Qinvalid_argument, reason, frob);
2845 invalid_argument_2 (const char *reason, Lisp_Object frob1, Lisp_Object frob2)
2847 signal_type_error_2 (Qinvalid_argument, reason, frob1, frob2);
2851 invalid_operation (const char *reason, Lisp_Object frob)
2853 signal_type_error (Qinvalid_operation, reason, frob);
2857 invalid_operation_2 (const char *reason, Lisp_Object frob1, Lisp_Object frob2)
2859 signal_type_error_2 (Qinvalid_operation, reason, frob1, frob2);
2863 invalid_change (const char *reason, Lisp_Object frob)
2865 signal_type_error (Qinvalid_change, reason, frob);
2869 invalid_change_2 (const char *reason, Lisp_Object frob1, Lisp_Object frob2)
2871 signal_type_error_2 (Qinvalid_change, reason, frob1, frob2);
2875 /************************************************************************/
2877 /************************************************************************/
2879 DEFUN ("commandp", Fcommandp, 1, 1, 0, /*
2880 Return t if FUNCTION makes provisions for interactive calling.
2881 This means it contains a description for how to read arguments to give it.
2882 The value is nil for an invalid function or a symbol with no function
2885 Interactively callable functions include
2887 -- strings and vectors (treated as keyboard macros)
2888 -- lambda-expressions that contain a top-level call to `interactive'
2889 -- autoload definitions made by `autoload' with non-nil fourth argument
2890 (i.e. the interactive flag)
2891 -- compiled-function objects with a non-nil `compiled-function-interactive'
2893 -- subrs (built-in functions) that are interactively callable
2895 Also, a symbol satisfies `commandp' if its function definition does so.
2899 Lisp_Object fun = indirect_function (function, 0);
2901 if (COMPILED_FUNCTIONP (fun))
2902 return XCOMPILED_FUNCTION (fun)->flags.interactivep ? Qt : Qnil;
2904 /* Lists may represent commands. */
2907 Lisp_Object funcar = XCAR (fun);
2908 if (EQ (funcar, Qlambda))
2909 return Fassq (Qinteractive, Fcdr (Fcdr (fun)));
2910 if (EQ (funcar, Qautoload))
2911 return Fcar (Fcdr (Fcdr (Fcdr (fun))));
2916 /* Emacs primitives are interactive if their DEFUN specifies an
2917 interactive spec. */
2919 return XSUBR (fun)->prompt ? Qt : Qnil;
2921 /* Strings and vectors are keyboard macros. */
2922 if (VECTORP (fun) || STRINGP (fun))
2925 /* Everything else (including Qunbound) is not a command. */
2929 DEFUN ("command-execute", Fcommand_execute, 1, 3, 0, /*
2930 Execute CMD as an editor command.
2931 CMD must be an object that satisfies the `commandp' predicate.
2932 Optional second arg RECORD-FLAG is as in `call-interactively'.
2933 The argument KEYS specifies the value to use instead of (this-command-keys)
2934 when reading the arguments.
2936 (cmd, record_flag, keys))
2938 /* This function can GC */
2939 Lisp_Object prefixarg;
2940 Lisp_Object final = cmd;
2941 struct backtrace backtrace;
2942 struct console *con = XCONSOLE (Vselected_console);
2944 prefixarg = con->prefix_arg;
2945 con->prefix_arg = Qnil;
2946 Vcurrent_prefix_arg = prefixarg;
2947 debug_on_next_call = 0; /* #### from FSFmacs; correct? */
2949 if (SYMBOLP (cmd) && !NILP (Fget (cmd, Qdisabled, Qnil)))
2950 return run_hook (Vdisabled_command_hook);
2954 final = indirect_function (cmd, 1);
2955 if (CONSP (final) && EQ (Fcar (final), Qautoload))
2957 /* do_autoload GCPROs both arguments */
2958 do_autoload (final, cmd);
2964 if (CONSP (final) || SUBRP (final) || COMPILED_FUNCTIONP (final))
2966 backtrace.function = &Qcall_interactively;
2967 backtrace.args = &cmd;
2968 backtrace.nargs = 1;
2969 backtrace.evalargs = 0;
2970 backtrace.pdlcount = specpdl_depth();
2971 backtrace.debug_on_exit = 0;
2972 PUSH_BACKTRACE (backtrace);
2974 final = Fcall_interactively (cmd, record_flag, keys);
2976 POP_BACKTRACE (backtrace);
2979 else if (STRINGP (final) || VECTORP (final))
2981 return Fexecute_kbd_macro (final, prefixarg);
2985 Fsignal (Qwrong_type_argument,
2989 : list2 (cmd, final))));
2994 DEFUN ("interactive-p", Finteractive_p, 0, 0, 0, /*
2995 Return t if function in which this appears was called interactively.
2996 This means that the function was called with call-interactively (which
2997 includes being called as the binding of a key)
2998 and input is currently coming from the keyboard (not in keyboard macro).
3002 REGISTER struct backtrace *btp;
3003 REGISTER Lisp_Object fun;
3008 /* Unless the object was compiled, skip the frame of interactive-p itself
3009 (if interpreted) or the frame of byte-code (if called from a compiled
3010 function). Note that *btp->function may be a symbol pointing at a
3011 compiled function. */
3012 btp = backtrace_list;
3016 /* #### FSFmacs does the following instead. I can't figure
3017 out which one is more correct. */
3018 /* If this isn't a byte-compiled function, there may be a frame at
3019 the top for Finteractive_p itself. If so, skip it. */
3020 fun = Findirect_function (*btp->function);
3021 if (SUBRP (fun) && XSUBR (fun) == &Sinteractive_p)
3024 /* If we're running an Emacs 18-style byte-compiled function, there
3025 may be a frame for Fbyte_code. Now, given the strictest
3026 definition, this function isn't really being called
3027 interactively, but because that's the way Emacs 18 always builds
3028 byte-compiled functions, we'll accept it for now. */
3029 if (EQ (*btp->function, Qbyte_code))
3032 /* If this isn't a byte-compiled function, then we may now be
3033 looking at several frames for special forms. Skip past them. */
3035 btp->nargs == UNEVALLED)
3040 if (! (COMPILED_FUNCTIONP (Findirect_function (*btp->function))))
3043 btp && (btp->nargs == UNEVALLED
3044 || EQ (*btp->function, Qbyte_code));
3047 /* btp now points at the frame of the innermost function
3048 that DOES eval its args.
3049 If it is a built-in function (such as load or eval-region)
3051 /* Beats me why this is necessary, but it is */
3052 if (btp && EQ (*btp->function, Qcall_interactively))
3057 fun = Findirect_function (*btp->function);
3060 /* btp points to the frame of a Lisp function that called interactive-p.
3061 Return t if that function was called interactively. */
3062 if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively))
3068 /************************************************************************/
3070 /************************************************************************/
3072 DEFUN ("autoload", Fautoload, 2, 5, 0, /*
3073 Define FUNCTION to autoload from FILENAME.
3074 FUNCTION is a symbol; FILENAME is a file name string to pass to `load'.
3075 The remaining optional arguments provide additional info about the
3077 DOCSTRING is documentation for FUNCTION.
3078 INTERACTIVE, if non-nil, says FUNCTION can be called interactively.
3079 TYPE indicates the type of the object:
3080 nil or omitted says FUNCTION is a function,
3081 `keymap' says FUNCTION is really a keymap, and
3082 `macro' or t says FUNCTION is really a macro.
3083 If FUNCTION already has a non-void function definition that is not an
3084 autoload object, this function does nothing and returns nil.
3086 (function, filename, docstring, interactive, type))
3088 /* This function can GC */
3089 CHECK_SYMBOL (function);
3090 CHECK_STRING (filename);
3092 /* If function is defined and not as an autoload, don't override */
3094 Lisp_Object f = XSYMBOL (function)->function;
3095 if (!UNBOUNDP (f) && !(CONSP (f) && EQ (XCAR (f), Qautoload)))
3101 /* Attempt to avoid consing identical (string=) pure strings. */
3102 filename = Fsymbol_name (Fintern (filename, Qnil));
3105 return Ffset (function, Fcons (Qautoload, list4 (filename,
3112 un_autoload (Lisp_Object oldqueue)
3114 /* This function can GC */
3115 REGISTER Lisp_Object queue, first, second;
3117 /* Queue to unwind is current value of Vautoload_queue.
3118 oldqueue is the shadowed value to leave in Vautoload_queue. */
3119 queue = Vautoload_queue;
3120 Vautoload_queue = oldqueue;
3121 while (CONSP (queue))
3123 first = XCAR (queue);
3124 second = Fcdr (first);
3125 first = Fcar (first);
3129 Ffset (first, second);
3130 queue = Fcdr (queue);
3136 do_autoload (Lisp_Object fundef,
3137 Lisp_Object funname)
3139 /* This function can GC */
3140 int speccount = specpdl_depth();
3141 Lisp_Object fun = funname;
3142 struct gcpro gcpro1, gcpro2, gcpro3;
3144 CHECK_SYMBOL (funname);
3145 GCPRO3 (fun, funname, fundef);
3147 /* Value saved here is to be restored into Vautoload_queue */
3148 record_unwind_protect (un_autoload, Vautoload_queue);
3149 Vautoload_queue = Qt;
3150 call4 (Qload, Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil);
3155 /* Save the old autoloads, in case we ever do an unload. */
3156 for (queue = Vautoload_queue; CONSP (queue); queue = XCDR (queue))
3158 Lisp_Object first = XCAR (queue);
3159 Lisp_Object second = Fcdr (first);
3161 first = Fcar (first);
3163 /* Note: This test is subtle. The cdr of an autoload-queue entry
3164 may be an atom if the autoload entry was generated by a defalias
3167 Fput (first, Qautoload, (XCDR (second)));
3171 /* Once loading finishes, don't undo it. */
3172 Vautoload_queue = Qt;
3173 unbind_to (speccount, Qnil);
3175 fun = indirect_function (fun, 0);
3178 if (!NILP (Fequal (fun, fundef)))
3182 && EQ (XCAR (fun), Qautoload)))
3184 error ("Autoloading failed to define function %s",
3185 string_data (XSYMBOL (funname)->name));
3190 /************************************************************************/
3191 /* eval, funcall, apply */
3192 /************************************************************************/
3194 static Lisp_Object funcall_lambda (Lisp_Object fun,
3195 int nargs, Lisp_Object args[]);
3196 static int in_warnings;
3199 in_warnings_restore (Lisp_Object minimus)
3205 DEFUN ("eval", Feval, 1, 1, 0, /*
3206 Evaluate FORM and return its value.
3210 /* This function can GC */
3211 Lisp_Object fun, val, original_fun, original_args;
3213 struct backtrace backtrace;
3215 /* I think this is a pretty safe place to call Lisp code, don't you? */
3216 while (!in_warnings && !NILP (Vpending_warnings))
3218 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
3219 int speccount = specpdl_depth();
3220 Lisp_Object this_warning_cons, this_warning, class, level, messij;
3222 record_unwind_protect (in_warnings_restore, Qnil);
3224 this_warning_cons = Vpending_warnings;
3225 this_warning = XCAR (this_warning_cons);
3226 /* in case an error occurs in the warn function, at least
3227 it won't happen infinitely */
3228 Vpending_warnings = XCDR (Vpending_warnings);
3229 free_cons (XCONS (this_warning_cons));
3230 class = XCAR (this_warning);
3231 level = XCAR (XCDR (this_warning));
3232 messij = XCAR (XCDR (XCDR (this_warning)));
3233 free_list (this_warning);
3235 if (NILP (Vpending_warnings))
3236 Vpending_warnings_tail = Qnil; /* perhaps not strictly necessary,
3239 GCPRO4 (form, class, level, messij);
3240 if (!STRINGP (messij))
3241 messij = Fprin1_to_string (messij, Qnil);
3242 call3 (Qdisplay_warning, class, messij, level);
3244 unbind_to (speccount, Qnil);
3250 return Fsymbol_value (form);
3256 if ((consing_since_gc > gc_cons_threshold) || always_gc)
3258 struct gcpro gcpro1;
3260 garbage_collect_1 ();
3264 if (++lisp_eval_depth > max_lisp_eval_depth)
3266 if (max_lisp_eval_depth < 100)
3267 max_lisp_eval_depth = 100;
3268 if (lisp_eval_depth > max_lisp_eval_depth)
3269 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
3272 /* We guaranteed CONSP (form) above */
3273 original_fun = XCAR (form);
3274 original_args = XCDR (form);
3276 GET_EXTERNAL_LIST_LENGTH (original_args, nargs);
3278 backtrace.pdlcount = specpdl_depth();
3279 backtrace.function = &original_fun; /* This also protects them from gc */
3280 backtrace.args = &original_args;
3281 backtrace.nargs = UNEVALLED;
3282 backtrace.evalargs = 1;
3283 backtrace.debug_on_exit = 0;
3284 PUSH_BACKTRACE (backtrace);
3286 if (debug_on_next_call)
3287 do_debug_on_call (Qt);
3289 if (profiling_active)
3290 profile_increase_call_count (original_fun);
3292 /* At this point, only original_fun and original_args
3293 have values that will be used below. */
3295 fun = indirect_function (original_fun, 1);
3299 Lisp_Subr *subr = XSUBR (fun);
3300 int max_args = subr->max_args;
3302 if (nargs < subr->min_args)
3303 goto wrong_number_of_arguments;
3305 if (max_args == UNEVALLED) /* Optimize for the common case */
3307 backtrace.evalargs = 0;
3308 val = (((Lisp_Object (*) (Lisp_Object)) subr_function (subr))
3311 else if (nargs <= max_args)
3313 struct gcpro gcpro1;
3314 Lisp_Object args[SUBR_MAX_ARGS];
3315 REGISTER Lisp_Object *p = args;
3321 LIST_LOOP_2 (arg, original_args)
3328 /* &optional args default to nil. */
3329 while (p - args < max_args)
3332 backtrace.args = args;
3333 backtrace.nargs = nargs;
3335 FUNCALL_SUBR (val, subr, args, max_args);
3339 else if (max_args == MANY)
3341 /* Pass a vector of evaluated arguments */
3342 struct gcpro gcpro1;
3343 Lisp_Object *args = alloca_array (Lisp_Object, nargs);
3344 REGISTER Lisp_Object *p = args;
3350 LIST_LOOP_2 (arg, original_args)
3357 backtrace.args = args;
3358 backtrace.nargs = nargs;
3360 val = (((Lisp_Object (*) (int, Lisp_Object *)) subr_function (subr))
3367 wrong_number_of_arguments:
3368 val = signal_wrong_number_of_arguments_error (original_fun, nargs);
3371 else if (COMPILED_FUNCTIONP (fun))
3373 struct gcpro gcpro1;
3374 Lisp_Object *args = alloca_array (Lisp_Object, nargs);
3375 REGISTER Lisp_Object *p = args;
3381 LIST_LOOP_2 (arg, original_args)
3388 backtrace.args = args;
3389 backtrace.nargs = nargs;
3390 backtrace.evalargs = 0;
3392 val = funcall_compiled_function (fun, nargs, args);
3394 /* Do the debug-on-exit now, while args is still GCPROed. */
3395 if (backtrace.debug_on_exit)
3396 val = do_debug_on_exit (val);
3397 /* Don't do it again when we return to eval. */
3398 backtrace.debug_on_exit = 0;
3402 else if (CONSP (fun))
3404 Lisp_Object funcar = XCAR (fun);
3406 if (EQ (funcar, Qautoload))
3408 /* do_autoload GCPROs both arguments */
3409 do_autoload (fun, original_fun);
3412 else if (EQ (funcar, Qmacro))
3414 val = Feval (apply1 (XCDR (fun), original_args));
3416 else if (EQ (funcar, Qlambda))
3418 struct gcpro gcpro1;
3419 Lisp_Object *args = alloca_array (Lisp_Object, nargs);
3420 REGISTER Lisp_Object *p = args;
3426 LIST_LOOP_2 (arg, original_args)
3435 backtrace.args = args; /* this also GCPROs `args' */
3436 backtrace.nargs = nargs;
3437 backtrace.evalargs = 0;
3439 val = funcall_lambda (fun, nargs, args);
3441 /* Do the debug-on-exit now, while args is still GCPROed. */
3442 if (backtrace.debug_on_exit)
3443 val = do_debug_on_exit (val);
3444 /* Don't do it again when we return to eval. */
3445 backtrace.debug_on_exit = 0;
3449 goto invalid_function;
3452 else /* ! (SUBRP (fun) || COMPILED_FUNCTIONP (fun) || CONSP (fun)) */
3455 val = signal_invalid_function_error (fun);
3459 if (backtrace.debug_on_exit)
3460 val = do_debug_on_exit (val);
3461 POP_BACKTRACE (backtrace);
3466 /* #### Why is Feval so anal about GCPRO, Ffuncall so cavalier? */
3467 DEFUN ("funcall", Ffuncall, 1, MANY, 0, /*
3468 Call first argument as a function, passing the remaining arguments to it.
3469 Thus, (funcall 'cons 'x 'y) returns (x . y).
3471 (int nargs, Lisp_Object *args))
3473 /* This function can GC */
3476 struct backtrace backtrace;
3477 int fun_nargs = nargs - 1;
3478 Lisp_Object *fun_args = args + 1;
3481 if ((consing_since_gc > gc_cons_threshold) || always_gc)
3482 /* Callers should gcpro lexpr args */
3483 garbage_collect_1 ();
3485 if (++lisp_eval_depth > max_lisp_eval_depth)
3487 if (max_lisp_eval_depth < 100)
3488 max_lisp_eval_depth = 100;
3489 if (lisp_eval_depth > max_lisp_eval_depth)
3490 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
3493 backtrace.pdlcount = specpdl_depth();
3494 backtrace.function = &args[0];
3495 backtrace.args = fun_args;
3496 backtrace.nargs = fun_nargs;
3497 backtrace.evalargs = 0;
3498 backtrace.debug_on_exit = 0;
3499 PUSH_BACKTRACE (backtrace);
3501 if (debug_on_next_call)
3502 do_debug_on_call (Qlambda);
3508 /* It might be useful to place this *after* all the checks. */
3509 if (profiling_active)
3510 profile_increase_call_count (fun);
3512 /* We could call indirect_function directly, but profiling shows
3513 this is worth optimizing by partially unrolling the loop. */
3516 fun = XSYMBOL (fun)->function;
3519 fun = XSYMBOL (fun)->function;
3521 fun = indirect_function (fun, 1);
3527 Lisp_Subr *subr = XSUBR (fun);
3528 int max_args = subr->max_args;
3529 Lisp_Object spacious_args[SUBR_MAX_ARGS];
3531 if (fun_nargs == max_args) /* Optimize for the common case */
3535 /* The "extra" braces placate GCC 2.95.4. */
3536 FUNCALL_SUBR (val, subr, fun_args, max_args);
3539 else if (fun_nargs < subr->min_args)
3541 goto wrong_number_of_arguments;
3543 else if (fun_nargs < max_args)
3545 Lisp_Object *p = spacious_args;
3547 /* Default optionals to nil */
3550 while (p - spacious_args < max_args)
3553 fun_args = spacious_args;
3556 else if (max_args == MANY)
3558 val = SUBR_FUNCTION (subr, MANY) (fun_nargs, fun_args);
3560 else if (max_args == UNEVALLED) /* Can't funcall a special form */
3562 goto invalid_function;
3566 wrong_number_of_arguments:
3567 val = signal_wrong_number_of_arguments_error (fun, fun_nargs);
3570 else if (COMPILED_FUNCTIONP (fun))
3572 val = funcall_compiled_function (fun, fun_nargs, fun_args);
3574 else if (CONSP (fun))
3576 Lisp_Object funcar = XCAR (fun);
3578 if (EQ (funcar, Qlambda))
3580 val = funcall_lambda (fun, fun_nargs, fun_args);
3582 else if (EQ (funcar, Qautoload))
3584 /* do_autoload GCPROs both arguments */
3585 do_autoload (fun, args[0]);
3588 else /* Can't funcall a macro */
3590 goto invalid_function;
3593 else if (UNBOUNDP (fun))
3595 val = signal_void_function_error (args[0]);
3600 val = signal_invalid_function_error (fun);
3604 if (backtrace.debug_on_exit)
3605 val = do_debug_on_exit (val);
3606 POP_BACKTRACE (backtrace);
3610 DEFUN ("functionp", Ffunctionp, 1, 1, 0, /*
3611 Return t if OBJECT can be called as a function, else nil.
3612 A function is an object that can be applied to arguments,
3613 using for example `funcall' or `apply'.
3617 if (SYMBOLP (object))
3618 object = indirect_function (object, 0);
3622 COMPILED_FUNCTIONP (object) ||
3624 (EQ (XCAR (object), Qlambda) ||
3625 EQ (XCAR (object), Qautoload))))
3630 function_argcount (Lisp_Object function, int function_min_args_p)
3632 Lisp_Object orig_function = function;
3633 Lisp_Object arglist;
3637 if (SYMBOLP (function))
3638 function = indirect_function (function, 1);
3640 if (SUBRP (function))
3642 /* Using return with the ?: operator tickles a DEC CC compiler bug. */
3643 if (function_min_args_p)
3644 return Fsubr_min_args (function);
3646 return Fsubr_max_args (function);
3648 else if (COMPILED_FUNCTIONP (function))
3650 arglist = compiled_function_arglist (XCOMPILED_FUNCTION (function));
3652 else if (CONSP (function))
3654 Lisp_Object funcar = XCAR (function);
3656 if (EQ (funcar, Qmacro))
3658 function = XCDR (function);
3661 else if (EQ (funcar, Qautoload))
3663 /* do_autoload GCPROs both arguments */
3664 do_autoload (function, orig_function);
3665 function = orig_function;
3668 else if (EQ (funcar, Qlambda))
3670 arglist = Fcar (XCDR (function));
3674 goto invalid_function;
3680 return signal_invalid_function_error (orig_function);
3686 EXTERNAL_LIST_LOOP_2 (arg, arglist)
3688 if (EQ (arg, Qand_optional))
3690 if (function_min_args_p)
3693 else if (EQ (arg, Qand_rest))
3695 if (function_min_args_p)
3706 return make_int (argcount);
3710 DEFUN ("function-min-args", Ffunction_min_args, 1, 1, 0, /*
3711 Return the number of arguments a function may be called with.
3712 The function may be any form that can be passed to `funcall',
3713 any special form, or any macro.
3717 return function_argcount (function, 1);
3720 DEFUN ("function-max-args", Ffunction_max_args, 1, 1, 0, /*
3721 Return the number of arguments a function may be called with.
3722 The function may be any form that can be passed to `funcall',
3723 any special form, or any macro.
3724 If the function takes an arbitrary number of arguments or is
3725 a built-in special form, nil is returned.
3729 return function_argcount (function, 0);
3733 DEFUN ("apply", Fapply, 2, MANY, 0, /*
3734 Call FUNCTION with the remaining args, using the last arg as a list of args.
3735 Thus, (apply '+ 1 2 '(3 4)) returns 10.
3737 (int nargs, Lisp_Object *args))
3739 /* This function can GC */
3740 Lisp_Object fun = args[0];
3741 Lisp_Object spread_arg = args [nargs - 1];
3745 GET_EXTERNAL_LIST_LENGTH (spread_arg, numargs);
3748 /* (apply foo 0 1 '()) */
3749 return Ffuncall (nargs - 1, args);
3750 else if (numargs == 1)
3752 /* (apply foo 0 1 '(2)) */
3753 args [nargs - 1] = XCAR (spread_arg);
3754 return Ffuncall (nargs, args);
3757 /* -1 for function, -1 for spread arg */
3758 numargs = nargs - 2 + numargs;
3759 /* +1 for function */
3760 funcall_nargs = 1 + numargs;
3763 fun = indirect_function (fun, 0);
3767 Lisp_Subr *subr = XSUBR (fun);
3768 int max_args = subr->max_args;
3770 if (numargs < subr->min_args
3771 || (max_args >= 0 && max_args < numargs))
3773 /* Let funcall get the error */
3775 else if (max_args > numargs)
3777 /* Avoid having funcall cons up yet another new vector of arguments
3778 by explicitly supplying nil's for optional values */
3779 funcall_nargs += (max_args - numargs);
3782 else if (UNBOUNDP (fun))
3784 /* Let funcall get the error */
3790 Lisp_Object *funcall_args = alloca_array (Lisp_Object, funcall_nargs);
3791 struct gcpro gcpro1;
3793 GCPRO1 (*funcall_args);
3794 gcpro1.nvars = funcall_nargs;
3796 /* Copy in the unspread args */
3797 memcpy (funcall_args, args, (nargs - 1) * sizeof (Lisp_Object));
3798 /* Spread the last arg we got. Its first element goes in
3799 the slot that it used to occupy, hence this value of I. */
3801 !NILP (spread_arg); /* i < 1 + numargs */
3802 i++, spread_arg = XCDR (spread_arg))
3804 funcall_args [i] = XCAR (spread_arg);
3806 /* Supply nil for optional args (to subrs) */
3807 for (; i < funcall_nargs; i++)
3808 funcall_args[i] = Qnil;
3811 RETURN_UNGCPRO (Ffuncall (funcall_nargs, funcall_args));
3816 /* Apply lambda list FUN to the NARGS evaluated arguments in ARGS and
3817 return the result of evaluation. */
3820 funcall_lambda (Lisp_Object fun, int nargs, Lisp_Object args[])
3822 /* This function can GC */
3823 Lisp_Object arglist, body, tail;
3824 int speccount = specpdl_depth();
3830 goto invalid_function;
3832 arglist = XCAR (tail);
3836 int optional = 0, rest = 0;
3838 EXTERNAL_LIST_LOOP_2 (symbol, arglist)
3840 if (!SYMBOLP (symbol))
3841 goto invalid_function;
3842 if (EQ (symbol, Qand_rest))
3844 else if (EQ (symbol, Qand_optional))
3848 specbind (symbol, Flist (nargs - i, &args[i]));
3852 specbind (symbol, args[i++]);
3854 goto wrong_number_of_arguments;
3856 specbind (symbol, Qnil);
3861 goto wrong_number_of_arguments;
3863 return unbind_to (speccount, Fprogn (body));
3865 wrong_number_of_arguments:
3866 return signal_wrong_number_of_arguments_error (fun, nargs);
3869 return signal_invalid_function_error (fun);
3873 /************************************************************************/
3874 /* Run hook variables in various ways. */
3875 /************************************************************************/
3877 DEFUN ("run-hooks", Frun_hooks, 1, MANY, 0, /*
3878 Run each hook in HOOKS. Major mode functions use this.
3879 Each argument should be a symbol, a hook variable.
3880 These symbols are processed in the order specified.
3881 If a hook symbol has a non-nil value, that value may be a function
3882 or a list of functions to be called to run the hook.
3883 If the value is a function, it is called with no arguments.
3884 If it is a list, the elements are called, in order, with no arguments.
3886 To make a hook variable buffer-local, use `make-local-hook',
3887 not `make-local-variable'.
3889 (int nargs, Lisp_Object *args))
3893 for (i = 0; i < nargs; i++)
3894 run_hook_with_args (1, args + i, RUN_HOOKS_TO_COMPLETION);
3899 DEFUN ("run-hook-with-args", Frun_hook_with_args, 1, MANY, 0, /*
3900 Run HOOK with the specified arguments ARGS.
3901 HOOK should be a symbol, a hook variable. If HOOK has a non-nil
3902 value, that value may be a function or a list of functions to be
3903 called to run the hook. If the value is a function, it is called with
3904 the given arguments and its return value is returned. If it is a list
3905 of functions, those functions are called, in order,
3906 with the given arguments ARGS.
3907 It is best not to depend on the value returned by `run-hook-with-args',
3910 To make a hook variable buffer-local, use `make-local-hook',
3911 not `make-local-variable'.
3913 (int nargs, Lisp_Object *args))
3915 return run_hook_with_args (nargs, args, RUN_HOOKS_TO_COMPLETION);
3918 DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success, 1, MANY, 0, /*
3919 Run HOOK with the specified arguments ARGS.
3920 HOOK should be a symbol, a hook variable. Its value should
3921 be a list of functions. We call those functions, one by one,
3922 passing arguments ARGS to each of them, until one of them
3923 returns a non-nil value. Then we return that value.
3924 If all the functions return nil, we return nil.
3926 To make a hook variable buffer-local, use `make-local-hook',
3927 not `make-local-variable'.
3929 (int nargs, Lisp_Object *args))
3931 return run_hook_with_args (nargs, args, RUN_HOOKS_UNTIL_SUCCESS);
3934 DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure, 1, MANY, 0, /*
3935 Run HOOK with the specified arguments ARGS.
3936 HOOK should be a symbol, a hook variable. Its value should
3937 be a list of functions. We call those functions, one by one,
3938 passing arguments ARGS to each of them, until one of them
3939 returns nil. Then we return nil.
3940 If all the functions return non-nil, we return non-nil.
3942 To make a hook variable buffer-local, use `make-local-hook',
3943 not `make-local-variable'.
3945 (int nargs, Lisp_Object *args))
3947 return run_hook_with_args (nargs, args, RUN_HOOKS_UNTIL_FAILURE);
3950 /* ARGS[0] should be a hook symbol.
3951 Call each of the functions in the hook value, passing each of them
3952 as arguments all the rest of ARGS (all NARGS - 1 elements).
3953 COND specifies a condition to test after each call
3954 to decide whether to stop.
3955 The caller (or its caller, etc) must gcpro all of ARGS,
3956 except that it isn't necessary to gcpro ARGS[0]. */
3959 run_hook_with_args_in_buffer (struct buffer *buf, int nargs, Lisp_Object *args,
3960 enum run_hooks_condition cond)
3962 Lisp_Object sym, val, ret;
3964 if (!initialized || preparing_for_armageddon)
3965 /* We need to bail out of here pronto. */
3968 /* Whenever gc_in_progress is true, preparing_for_armageddon
3969 will also be true unless something is really hosed. */
3970 assert (!gc_in_progress);
3973 val = symbol_value_in_buffer (sym, make_buffer (buf));
3974 ret = (cond == RUN_HOOKS_UNTIL_FAILURE ? Qt : Qnil);
3976 if (UNBOUNDP (val) || NILP (val))
3978 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
3981 return Ffuncall (nargs, args);
3985 struct gcpro gcpro1, gcpro2, gcpro3;
3986 Lisp_Object globals = Qnil;
3987 GCPRO3 (sym, val, globals);
3990 CONSP (val) && ((cond == RUN_HOOKS_TO_COMPLETION)
3991 || (cond == RUN_HOOKS_UNTIL_SUCCESS ? NILP (ret)
3995 if (EQ (XCAR (val), Qt))
3997 /* t indicates this hook has a local binding;
3998 it means to run the global binding too. */
3999 globals = Fdefault_value (sym);
4001 if ((! CONSP (globals) || EQ (XCAR (globals), Qlambda)) &&
4005 ret = Ffuncall (nargs, args);
4010 CONSP (globals) && ((cond == RUN_HOOKS_TO_COMPLETION)
4011 || (cond == RUN_HOOKS_UNTIL_SUCCESS
4014 globals = XCDR (globals))
4016 args[0] = XCAR (globals);
4017 /* In a global value, t should not occur. If it does, we
4018 must ignore it to avoid an endless loop. */
4019 if (!EQ (args[0], Qt))
4020 ret = Ffuncall (nargs, args);
4026 args[0] = XCAR (val);
4027 ret = Ffuncall (nargs, args);
4037 run_hook_with_args (int nargs, Lisp_Object *args,
4038 enum run_hooks_condition cond)
4040 return run_hook_with_args_in_buffer (current_buffer, nargs, args, cond);
4045 /* From FSF 19.30, not currently used */
4047 /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
4048 present value of that symbol.
4049 Call each element of FUNLIST,
4050 passing each of them the rest of ARGS.
4051 The caller (or its caller, etc) must gcpro all of ARGS,
4052 except that it isn't necessary to gcpro ARGS[0]. */
4055 run_hook_list_with_args (Lisp_Object funlist, int nargs, Lisp_Object *args)
4057 Lisp_Object sym = args[0];
4059 struct gcpro gcpro1, gcpro2;
4063 for (val = funlist; CONSP (val); val = XCDR (val))
4065 if (EQ (XCAR (val), Qt))
4067 /* t indicates this hook has a local binding;
4068 it means to run the global binding too. */
4069 Lisp_Object globals;
4071 for (globals = Fdefault_value (sym);
4073 globals = XCDR (globals))
4075 args[0] = XCAR (globals);
4076 /* In a global value, t should not occur. If it does, we
4077 must ignore it to avoid an endless loop. */
4078 if (!EQ (args[0], Qt))
4079 Ffuncall (nargs, args);
4084 args[0] = XCAR (val);
4085 Ffuncall (nargs, args);
4095 va_run_hook_with_args (Lisp_Object hook_var, int nargs, ...)
4097 /* This function can GC */
4098 struct gcpro gcpro1;
4101 Lisp_Object *funcall_args = alloca_array (Lisp_Object, 1 + nargs);
4103 va_start (vargs, nargs);
4104 funcall_args[0] = hook_var;
4105 for (i = 0; i < nargs; i++)
4106 funcall_args[i + 1] = va_arg (vargs, Lisp_Object);
4109 GCPRO1 (*funcall_args);
4110 gcpro1.nvars = nargs + 1;
4111 run_hook_with_args (nargs + 1, funcall_args, RUN_HOOKS_TO_COMPLETION);
4116 va_run_hook_with_args_in_buffer (struct buffer *buf, Lisp_Object hook_var,
4119 /* This function can GC */
4120 struct gcpro gcpro1;
4123 Lisp_Object *funcall_args = alloca_array (Lisp_Object, 1 + nargs);
4125 va_start (vargs, nargs);
4126 funcall_args[0] = hook_var;
4127 for (i = 0; i < nargs; i++)
4128 funcall_args[i + 1] = va_arg (vargs, Lisp_Object);
4131 GCPRO1 (*funcall_args);
4132 gcpro1.nvars = nargs + 1;
4133 run_hook_with_args_in_buffer (buf, nargs + 1, funcall_args,
4134 RUN_HOOKS_TO_COMPLETION);
4139 run_hook (Lisp_Object hook)
4141 Frun_hooks (1, &hook);
4146 /************************************************************************/
4147 /* Front-ends to eval, funcall, apply */
4148 /************************************************************************/
4150 /* Apply fn to arg */
4152 apply1 (Lisp_Object fn, Lisp_Object arg)
4154 /* This function can GC */
4155 struct gcpro gcpro1;
4156 Lisp_Object args[2];
4159 return Ffuncall (1, &fn);
4164 RETURN_UNGCPRO (Fapply (2, args));
4167 /* Call function fn on no arguments */
4169 call0 (Lisp_Object fn)
4171 /* This function can GC */
4172 struct gcpro gcpro1;
4175 RETURN_UNGCPRO (Ffuncall (1, &fn));
4178 /* Call function fn with argument arg0 */
4180 call1 (Lisp_Object fn,
4183 /* This function can GC */
4184 struct gcpro gcpro1;
4185 Lisp_Object args[2];
4190 RETURN_UNGCPRO (Ffuncall (2, args));
4193 /* Call function fn with arguments arg0, arg1 */
4195 call2 (Lisp_Object fn,
4196 Lisp_Object arg0, Lisp_Object arg1)
4198 /* This function can GC */
4199 struct gcpro gcpro1;
4200 Lisp_Object args[3];
4206 RETURN_UNGCPRO (Ffuncall (3, args));
4209 /* Call function fn with arguments arg0, arg1, arg2 */
4211 call3 (Lisp_Object fn,
4212 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2)
4214 /* This function can GC */
4215 struct gcpro gcpro1;
4216 Lisp_Object args[4];
4223 RETURN_UNGCPRO (Ffuncall (4, args));
4226 /* Call function fn with arguments arg0, arg1, arg2, arg3 */
4228 call4 (Lisp_Object fn,
4229 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4232 /* This function can GC */
4233 struct gcpro gcpro1;
4234 Lisp_Object args[5];
4242 RETURN_UNGCPRO (Ffuncall (5, args));
4245 /* Call function fn with arguments arg0, arg1, arg2, arg3, arg4 */
4247 call5 (Lisp_Object fn,
4248 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4249 Lisp_Object arg3, Lisp_Object arg4)
4251 /* This function can GC */
4252 struct gcpro gcpro1;
4253 Lisp_Object args[6];
4262 RETURN_UNGCPRO (Ffuncall (6, args));
4266 call6 (Lisp_Object fn,
4267 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4268 Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5)
4270 /* This function can GC */
4271 struct gcpro gcpro1;
4272 Lisp_Object args[7];
4282 RETURN_UNGCPRO (Ffuncall (7, args));
4286 call7 (Lisp_Object fn,
4287 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4288 Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5,
4291 /* This function can GC */
4292 struct gcpro gcpro1;
4293 Lisp_Object args[8];
4304 RETURN_UNGCPRO (Ffuncall (8, args));
4308 call8 (Lisp_Object fn,
4309 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4310 Lisp_Object arg3, Lisp_Object arg4, Lisp_Object arg5,
4311 Lisp_Object arg6, Lisp_Object arg7)
4313 /* This function can GC */
4314 struct gcpro gcpro1;
4315 Lisp_Object args[9];
4327 RETURN_UNGCPRO (Ffuncall (9, args));
4331 call0_in_buffer (struct buffer *buf, Lisp_Object fn)
4333 if (current_buffer == buf)
4338 int speccount = specpdl_depth();
4339 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4340 set_buffer_internal (buf);
4342 unbind_to (speccount, Qnil);
4348 call1_in_buffer (struct buffer *buf, Lisp_Object fn,
4351 if (current_buffer == buf)
4352 return call1 (fn, arg0);
4356 int speccount = specpdl_depth();
4357 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4358 set_buffer_internal (buf);
4359 val = call1 (fn, arg0);
4360 unbind_to (speccount, Qnil);
4366 call2_in_buffer (struct buffer *buf, Lisp_Object fn,
4367 Lisp_Object arg0, Lisp_Object arg1)
4369 if (current_buffer == buf)
4370 return call2 (fn, arg0, arg1);
4374 int speccount = specpdl_depth();
4375 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4376 set_buffer_internal (buf);
4377 val = call2 (fn, arg0, arg1);
4378 unbind_to (speccount, Qnil);
4384 call3_in_buffer (struct buffer *buf, Lisp_Object fn,
4385 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2)
4387 if (current_buffer == buf)
4388 return call3 (fn, arg0, arg1, arg2);
4392 int speccount = specpdl_depth();
4393 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4394 set_buffer_internal (buf);
4395 val = call3 (fn, arg0, arg1, arg2);
4396 unbind_to (speccount, Qnil);
4402 call4_in_buffer (struct buffer *buf, Lisp_Object fn,
4403 Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2,
4406 if (current_buffer == buf)
4407 return call4 (fn, arg0, arg1, arg2, arg3);
4411 int speccount = specpdl_depth();
4412 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4413 set_buffer_internal (buf);
4414 val = call4 (fn, arg0, arg1, arg2, arg3);
4415 unbind_to (speccount, Qnil);
4421 eval_in_buffer (struct buffer *buf, Lisp_Object form)
4423 if (current_buffer == buf)
4424 return Feval (form);
4428 int speccount = specpdl_depth();
4429 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
4430 set_buffer_internal (buf);
4432 unbind_to (speccount, Qnil);
4438 /************************************************************************/
4439 /* Error-catching front-ends to eval, funcall, apply */
4440 /************************************************************************/
4442 /* Call function fn on no arguments, with condition handler */
4444 call0_with_handler (Lisp_Object handler, Lisp_Object fn)
4446 /* This function can GC */
4447 struct gcpro gcpro1;
4448 Lisp_Object args[2];
4453 RETURN_UNGCPRO (Fcall_with_condition_handler (2, args));
4456 /* Call function fn with argument arg0, with condition handler */
4458 call1_with_handler (Lisp_Object handler, Lisp_Object fn,
4461 /* This function can GC */
4462 struct gcpro gcpro1;
4463 Lisp_Object args[3];
4469 RETURN_UNGCPRO (Fcall_with_condition_handler (3, args));
4473 /* The following functions provide you with error-trapping versions
4474 of the various front-ends above. They take an additional
4475 "warning_string" argument; if non-zero, a warning with this
4476 string and the actual error that occurred will be displayed
4477 in the *Warnings* buffer if an error occurs. In all cases,
4478 QUIT is inhibited while these functions are running, and if
4479 an error occurs, Qunbound is returned instead of the normal
4483 /* #### This stuff needs to catch throws as well. We need to
4484 improve internal_catch() so it can take a "catch anything"
4485 argument similar to Qt or Qerror for condition_case_1(). */
4488 caught_a_squirmer (Lisp_Object errordata, Lisp_Object arg)
4490 if (!NILP (errordata))
4492 Lisp_Object args[2];
4496 char *str = (char *) get_opaque_ptr (arg);
4497 args[0] = build_string (str);
4500 args[0] = build_string ("error");
4501 /* #### This should call
4502 (with-output-to-string (display-error errordata))
4503 but that stuff is all in Lisp currently. */
4504 args[1] = errordata;
4505 warn_when_safe_lispobj
4507 emacs_doprnt_string_lisp ((const Bufbyte *) "%s: %s",
4508 Qnil, -1, 2, args));
4514 allow_quit_caught_a_squirmer (Lisp_Object errordata, Lisp_Object arg)
4516 if (CONSP (errordata) && EQ (XCAR (errordata), Qquit))
4517 return Fsignal (Qquit, XCDR (errordata));
4518 return caught_a_squirmer (errordata, arg);
4522 safe_run_hook_caught_a_squirmer (Lisp_Object errordata, Lisp_Object arg)
4524 Lisp_Object hook = Fcar (arg);
4526 /* Clear out the hook. */
4528 return caught_a_squirmer (errordata, arg);
4532 allow_quit_safe_run_hook_caught_a_squirmer (Lisp_Object errordata,
4535 Lisp_Object hook = Fcar (arg);
4537 if (!CONSP (errordata) || !EQ (XCAR (errordata), Qquit))
4538 /* Clear out the hook. */
4540 return allow_quit_caught_a_squirmer (errordata, arg);
4544 catch_them_squirmers_eval_in_buffer (Lisp_Object cons)
4546 return eval_in_buffer (XBUFFER (XCAR (cons)), XCDR (cons));
4550 eval_in_buffer_trapping_errors (const char *warning_string,
4551 struct buffer *buf, Lisp_Object form)
4553 int speccount = specpdl_depth();
4558 struct gcpro gcpro1, gcpro2;
4560 XSETBUFFER (buffer, buf);
4562 specbind (Qinhibit_quit, Qt);
4563 /* gc_currently_forbidden = 1; Currently no reason to do this; */
4565 cons = noseeum_cons (buffer, form);
4566 opaque = (warning_string ? make_opaque_ptr ((void *)warning_string) : Qnil);
4567 GCPRO2 (cons, opaque);
4568 /* Qerror not Qt, so you can get a backtrace */
4569 tem = condition_case_1 (Qerror,
4570 catch_them_squirmers_eval_in_buffer, cons,
4571 caught_a_squirmer, opaque);
4572 free_cons (XCONS (cons));
4573 if (OPAQUE_PTRP (opaque))
4574 free_opaque_ptr (opaque);
4577 /* gc_currently_forbidden = 0; */
4578 return unbind_to (speccount, tem);
4582 catch_them_squirmers_run_hook (Lisp_Object hook_symbol)
4584 /* This function can GC */
4585 run_hook (hook_symbol);
4590 run_hook_trapping_errors (const char *warning_string, Lisp_Object hook_symbol)
4595 struct gcpro gcpro1;
4597 if (!initialized || preparing_for_armageddon)
4599 tem = find_symbol_value (hook_symbol);
4600 if (NILP (tem) || UNBOUNDP (tem))
4603 speccount = specpdl_depth();
4604 specbind (Qinhibit_quit, Qt);
4606 opaque = (warning_string ? make_opaque_ptr ((void *)warning_string) : Qnil);
4608 /* Qerror not Qt, so you can get a backtrace */
4609 tem = condition_case_1 (Qerror,
4610 catch_them_squirmers_run_hook, hook_symbol,
4611 caught_a_squirmer, opaque);
4612 if (OPAQUE_PTRP (opaque))
4613 free_opaque_ptr (opaque);
4616 return unbind_to (speccount, tem);
4619 /* Same as run_hook_trapping_errors() but also set the hook to nil
4620 if an error occurs. */
4623 safe_run_hook_trapping_errors (const char *warning_string,
4624 Lisp_Object hook_symbol,
4627 int speccount = specpdl_depth();
4629 Lisp_Object cons = Qnil;
4630 struct gcpro gcpro1;
4632 if (!initialized || preparing_for_armageddon)
4634 tem = find_symbol_value (hook_symbol);
4635 if (NILP (tem) || UNBOUNDP (tem))
4639 specbind (Qinhibit_quit, Qt);
4641 cons = noseeum_cons (hook_symbol,
4642 warning_string ? make_opaque_ptr ((void *)warning_string)
4645 /* Qerror not Qt, so you can get a backtrace */
4646 tem = condition_case_1 (Qerror,
4647 catch_them_squirmers_run_hook,
4650 allow_quit_safe_run_hook_caught_a_squirmer :
4651 safe_run_hook_caught_a_squirmer,
4653 if (OPAQUE_PTRP (XCDR (cons)))
4654 free_opaque_ptr (XCDR (cons));
4655 free_cons (XCONS (cons));
4658 return unbind_to (speccount, tem);
4662 catch_them_squirmers_call0 (Lisp_Object function)
4664 /* This function can GC */
4665 return call0 (function);
4669 call0_trapping_errors (const char *warning_string, Lisp_Object function)
4673 Lisp_Object opaque = Qnil;
4674 struct gcpro gcpro1, gcpro2;
4676 if (SYMBOLP (function))
4678 tem = XSYMBOL (function)->function;
4679 if (NILP (tem) || UNBOUNDP (tem))
4683 GCPRO2 (opaque, function);
4684 speccount = specpdl_depth();
4685 specbind (Qinhibit_quit, Qt);
4686 /* gc_currently_forbidden = 1; Currently no reason to do this; */
4688 opaque = (warning_string ? make_opaque_ptr ((void *)warning_string) : Qnil);
4689 /* Qerror not Qt, so you can get a backtrace */
4690 tem = condition_case_1 (Qerror,
4691 catch_them_squirmers_call0, function,
4692 caught_a_squirmer, opaque);
4693 if (OPAQUE_PTRP (opaque))
4694 free_opaque_ptr (opaque);
4697 /* gc_currently_forbidden = 0; */
4698 return unbind_to (speccount, tem);
4702 catch_them_squirmers_call1 (Lisp_Object cons)
4704 /* This function can GC */
4705 return call1 (XCAR (cons), XCDR (cons));
4709 catch_them_squirmers_call2 (Lisp_Object cons)
4711 /* This function can GC */
4712 return call2 (XCAR (cons), XCAR (XCDR (cons)), XCAR (XCDR (XCDR (cons))));
4716 call1_trapping_errors (const char *warning_string, Lisp_Object function,
4719 int speccount = specpdl_depth();
4721 Lisp_Object cons = Qnil;
4722 Lisp_Object opaque = Qnil;
4723 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
4725 if (SYMBOLP (function))
4727 tem = XSYMBOL (function)->function;
4728 if (NILP (tem) || UNBOUNDP (tem))
4732 GCPRO4 (cons, opaque, function, object);
4734 specbind (Qinhibit_quit, Qt);
4735 /* gc_currently_forbidden = 1; Currently no reason to do this; */
4737 cons = noseeum_cons (function, object);
4738 opaque = (warning_string ? make_opaque_ptr ((void *)warning_string) : Qnil);
4739 /* Qerror not Qt, so you can get a backtrace */
4740 tem = condition_case_1 (Qerror,
4741 catch_them_squirmers_call1, cons,
4742 caught_a_squirmer, opaque);
4743 if (OPAQUE_PTRP (opaque))
4744 free_opaque_ptr (opaque);
4745 free_cons (XCONS (cons));
4748 /* gc_currently_forbidden = 0; */
4749 return unbind_to (speccount, tem);
4753 call2_trapping_errors (const char *warning_string, Lisp_Object function,
4754 Lisp_Object object1, Lisp_Object object2)
4756 int speccount = specpdl_depth();
4758 Lisp_Object cons = Qnil;
4759 Lisp_Object opaque = Qnil;
4760 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
4762 if (SYMBOLP (function))
4764 tem = XSYMBOL (function)->function;
4765 if (NILP (tem) || UNBOUNDP (tem))
4769 GCPRO5 (cons, opaque, function, object1, object2);
4770 specbind (Qinhibit_quit, Qt);
4771 /* gc_currently_forbidden = 1; Currently no reason to do this; */
4773 cons = list3 (function, object1, object2);
4774 opaque = (warning_string ? make_opaque_ptr ((void *)warning_string) : Qnil);
4775 /* Qerror not Qt, so you can get a backtrace */
4776 tem = condition_case_1 (Qerror,
4777 catch_them_squirmers_call2, cons,
4778 caught_a_squirmer, opaque);
4779 if (OPAQUE_PTRP (opaque))
4780 free_opaque_ptr (opaque);
4784 /* gc_currently_forbidden = 0; */
4785 return unbind_to (speccount, tem);
4789 /************************************************************************/
4790 /* The special binding stack */
4791 /* Most C code should simply use specbind() and unbind_to(). */
4792 /* When performance is critical, use the macros in backtrace.h. */
4793 /************************************************************************/
4795 #define min_max_specpdl_size 400
4798 grow_specpdl (EMACS_INT reserved)
4800 EMACS_INT size_needed = specpdl_depth() + reserved;
4801 if (size_needed >= max_specpdl_size)
4803 if (max_specpdl_size < min_max_specpdl_size)
4804 max_specpdl_size = min_max_specpdl_size;
4805 if (size_needed >= max_specpdl_size)
4807 if (!NILP (Vdebug_on_error) ||
4808 !NILP (Vdebug_on_signal))
4809 /* Leave room for some specpdl in the debugger. */
4810 max_specpdl_size = size_needed + 100;
4812 ("Variable binding depth exceeds max-specpdl-size");
4815 while (specpdl_size < size_needed)
4818 if (specpdl_size > max_specpdl_size)
4819 specpdl_size = max_specpdl_size;
4821 XREALLOC_ARRAY (specpdl, struct specbinding, specpdl_size);
4822 specpdl_ptr = specpdl + specpdl_depth();
4826 /* Handle unbinding buffer-local variables */
4828 specbind_unwind_local (Lisp_Object ovalue)
4830 Lisp_Object current = Fcurrent_buffer ();
4831 Lisp_Object symbol = specpdl_ptr->symbol;
4832 Lisp_Cons *victim = XCONS (ovalue);
4833 Lisp_Object buf = get_buffer (victim->car, 0);
4834 ovalue = victim->cdr;
4840 /* Deleted buffer -- do nothing */
4842 else if (symbol_value_buffer_local_info (symbol, XBUFFER (buf)) == 0)
4844 /* Was buffer-local when binding was made, now no longer is.
4845 * (kill-local-variable can do this.)
4846 * Do nothing in this case.
4849 else if (EQ (buf, current))
4850 Fset (symbol, ovalue);
4853 /* Urk! Somebody switched buffers */
4854 struct gcpro gcpro1;
4857 Fset (symbol, ovalue);
4858 Fset_buffer (current);
4865 specbind_unwind_wasnt_local (Lisp_Object buffer)
4867 Lisp_Object current = Fcurrent_buffer ();
4868 Lisp_Object symbol = specpdl_ptr->symbol;
4870 buffer = get_buffer (buffer, 0);
4873 /* Deleted buffer -- do nothing */
4875 else if (symbol_value_buffer_local_info (symbol, XBUFFER (buffer)) == 0)
4877 /* Was buffer-local when binding was made, now no longer is.
4878 * (kill-local-variable can do this.)
4879 * Do nothing in this case.
4882 else if (EQ (buffer, current))
4883 Fkill_local_variable (symbol);
4886 /* Urk! Somebody switched buffers */
4887 struct gcpro gcpro1;
4889 Fset_buffer (buffer);
4890 Fkill_local_variable (symbol);
4891 Fset_buffer (current);
4899 specbind (Lisp_Object symbol, Lisp_Object value)
4901 SPECBIND (symbol, value);
4905 specbind_magic (Lisp_Object symbol, Lisp_Object value)
4908 symbol_value_buffer_local_info (symbol, current_buffer);
4910 if (buffer_local == 0)
4912 specpdl_ptr->old_value = find_symbol_value (symbol);
4913 specpdl_ptr->func = 0; /* Handled specially by unbind_to */
4915 else if (buffer_local > 0)
4917 /* Already buffer-local */
4918 specpdl_ptr->old_value = noseeum_cons (Fcurrent_buffer (),
4919 find_symbol_value (symbol));
4920 specpdl_ptr->func = specbind_unwind_local;
4924 /* About to become buffer-local */
4925 specpdl_ptr->old_value = Fcurrent_buffer ();
4926 specpdl_ptr->func = specbind_unwind_wasnt_local;
4929 specpdl_ptr->symbol = symbol;
4931 specpdl_depth_counter++;
4933 Fset (symbol, value);
4936 /* Note: As long as the unwind-protect exists, its arg is automatically
4940 record_unwind_protect (Lisp_Object (*function) (Lisp_Object arg),
4943 SPECPDL_RESERVE (1);
4944 specpdl_ptr->func = function;
4945 specpdl_ptr->symbol = Qnil;
4946 specpdl_ptr->old_value = arg;
4948 specpdl_depth_counter++;
4951 extern int check_sigio (void);
4953 /* Unwind the stack till specpdl_depth() == COUNT.
4954 VALUE is not used, except that, purely as a convenience to the
4955 caller, it is protected from garbage-protection. */
4957 unbind_to (int count, Lisp_Object value)
4959 UNBIND_TO_GCPRO (count, value);
4963 /* Don't call this directly.
4964 Only for use by UNBIND_TO* macros in backtrace.h */
4966 unbind_to_hairy (int count)
4971 ++specpdl_depth_counter;
4973 check_quit (); /* make Vquit_flag accurate */
4974 quitf = !NILP (Vquit_flag);
4977 while (specpdl_depth_counter != count)
4980 --specpdl_depth_counter;
4982 if (specpdl_ptr->func != 0)
4983 /* An unwind-protect */
4984 (*specpdl_ptr->func) (specpdl_ptr->old_value);
4987 /* We checked symbol for validity when we specbound it,
4988 so only need to call Fset if symbol has magic value. */
4989 Lisp_Symbol *sym = XSYMBOL (specpdl_ptr->symbol);
4990 if (!SYMBOL_VALUE_MAGIC_P (sym->value))
4991 sym->value = specpdl_ptr->old_value;
4993 Fset (specpdl_ptr->symbol, specpdl_ptr->old_value);
4997 #ifndef EXCEEDINGLY_QUESTIONABLE_CODE
4998 /* There should never be anything here for us to remove.
4999 If so, it indicates a logic error in Emacs. Catches
5000 should get removed when a throw or signal occurs, or
5001 when a catch or condition-case exits normally. But
5002 it's too dangerous to just remove this code. --ben */
5004 /* Furthermore, this code is not in FSFmacs!!!
5005 Braino on mly's part? */
5006 /* If we're unwound past the pdlcount of a catch frame,
5007 that catch can't possibly still be valid. */
5008 while (catchlist && catchlist->pdlcount > specpdl_depth_counter)
5010 catchlist = catchlist->next;
5011 /* Don't mess with gcprolist, backtrace_list here */
5022 /* Get the value of symbol's global binding, even if that binding is
5023 not now dynamically visible. May return Qunbound or magic values. */
5026 top_level_value (Lisp_Object symbol)
5028 REGISTER struct specbinding *ptr = specpdl;
5030 CHECK_SYMBOL (symbol);
5031 for (; ptr != specpdl_ptr; ptr++)
5033 if (EQ (ptr->symbol, symbol))
5034 return ptr->old_value;
5036 return XSYMBOL (symbol)->value;
5042 top_level_set (Lisp_Object symbol, Lisp_Object newval)
5044 REGISTER struct specbinding *ptr = specpdl;
5046 CHECK_SYMBOL (symbol);
5047 for (; ptr != specpdl_ptr; ptr++)
5049 if (EQ (ptr->symbol, symbol))
5051 ptr->old_value = newval;
5055 return Fset (symbol, newval);
5061 /************************************************************************/
5063 /************************************************************************/
5065 DEFUN ("backtrace-debug", Fbacktrace_debug, 2, 2, 0, /*
5066 Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
5067 The debugger is entered when that frame exits, if the flag is non-nil.
5071 REGISTER struct backtrace *backlist = backtrace_list;
5076 for (i = 0; backlist && i < XINT (level); i++)
5078 backlist = backlist->next;
5082 backlist->debug_on_exit = !NILP (flag);
5088 backtrace_specials (int speccount, int speclimit, Lisp_Object stream)
5090 int printing_bindings = 0;
5092 for (; speccount > speclimit; speccount--)
5094 if (specpdl[speccount - 1].func == 0
5095 || specpdl[speccount - 1].func == specbind_unwind_local
5096 || specpdl[speccount - 1].func == specbind_unwind_wasnt_local)
5098 write_c_string (((!printing_bindings) ? " # bind (" : " "),
5100 Fprin1 (specpdl[speccount - 1].symbol, stream);
5101 printing_bindings = 1;
5105 if (printing_bindings) write_c_string (")\n", stream);
5106 write_c_string (" # (unwind-protect ...)\n", stream);
5107 printing_bindings = 0;
5110 if (printing_bindings) write_c_string (")\n", stream);
5113 DEFUN ("backtrace", Fbacktrace, 0, 2, "", /*
5114 Print a trace of Lisp function calls currently active.
5115 Optional arg STREAM specifies the output stream to send the backtrace to,
5116 and defaults to the value of `standard-output'.
5117 Optional second arg DETAILED non-nil means show places where currently
5118 active variable bindings, catches, condition-cases, and
5119 unwind-protects, as well as function calls, were made.
5123 /* This function can GC */
5124 struct backtrace *backlist = backtrace_list;
5125 struct catchtag *catches = catchlist;
5126 int speccount = specpdl_depth();
5128 int old_nl = print_escape_newlines;
5129 int old_pr = print_readably;
5130 Lisp_Object old_level = Vprint_level;
5131 Lisp_Object oiq = Vinhibit_quit;
5132 struct gcpro gcpro1, gcpro2;
5134 /* We can't allow quits in here because that could cause the values
5135 of print_readably and print_escape_newlines to get screwed up.
5136 Normally we would use a record_unwind_protect but that would
5137 screw up the functioning of this function. */
5140 entering_debugger = 0;
5142 Vprint_level = make_int (3);
5144 print_escape_newlines = 1;
5146 GCPRO2 (stream, old_level);
5149 stream = Vstandard_output;
5150 if (!noninteractive && (NILP (stream) || EQ (stream, Qt)))
5151 stream = Fselected_frame (Qnil);
5155 if (!NILP (detailed) && catches && catches->backlist == backlist)
5157 int catchpdl = catches->pdlcount;
5158 if (speccount > catchpdl
5159 && specpdl[catchpdl].func == condition_case_unwind)
5160 /* This is a condition-case catchpoint */
5161 catchpdl = catchpdl + 1;
5163 backtrace_specials (speccount, catchpdl, stream);
5165 speccount = catches->pdlcount;
5166 if (catchpdl == speccount)
5168 write_c_string (" # (catch ", stream);
5169 Fprin1 (catches->tag, stream);
5170 write_c_string (" ...)\n", stream);
5174 write_c_string (" # (condition-case ... . ", stream);
5175 Fprin1 (Fcdr (Fcar (catches->tag)), stream);
5176 write_c_string (")\n", stream);
5178 catches = catches->next;
5184 if (!NILP (detailed) && backlist->pdlcount < speccount)
5186 backtrace_specials (speccount, backlist->pdlcount, stream);
5187 speccount = backlist->pdlcount;
5189 write_c_string (((backlist->debug_on_exit) ? "* " : " "),
5191 if (backlist->nargs == UNEVALLED)
5193 Fprin1 (Fcons (*backlist->function, *backlist->args), stream);
5194 write_c_string ("\n", stream); /* from FSFmacs 19.30 */
5198 Lisp_Object tem = *backlist->function;
5199 Fprin1 (tem, stream); /* This can QUIT */
5200 write_c_string ("(", stream);
5201 if (backlist->nargs == MANY)
5204 Lisp_Object tail = Qnil;
5205 struct gcpro ngcpro1;
5208 for (tail = *backlist->args, i = 0;
5210 tail = Fcdr (tail), i++)
5212 if (i != 0) write_c_string (" ", stream);
5213 Fprin1 (Fcar (tail), stream);
5220 for (i = 0; i < backlist->nargs; i++)
5222 if (!i && EQ(tem, Qbyte_code)) {
5223 write_c_string("\"...\"", stream);
5226 if (i != 0) write_c_string (" ", stream);
5227 Fprin1 (backlist->args[i], stream);
5230 write_c_string (")\n", stream);
5232 backlist = backlist->next;
5235 Vprint_level = old_level;
5236 print_readably = old_pr;
5237 print_escape_newlines = old_nl;
5239 Vinhibit_quit = oiq;
5244 DEFUN ("backtrace-frame", Fbacktrace_frame, 1, 1, 0, /*
5245 Return the function and arguments NFRAMES up from current execution point.
5246 If that frame has not evaluated the arguments yet (or is a special form),
5247 the value is (nil FUNCTION ARG-FORMS...).
5248 If that frame has evaluated its arguments and called its function already,
5249 the value is (t FUNCTION ARG-VALUES...).
5250 A &rest arg is represented as the tail of the list ARG-VALUES.
5251 FUNCTION is whatever was supplied as car of evaluated list,
5252 or a lambda expression for macro calls.
5253 If NFRAMES is more than the number of frames, the value is nil.
5257 REGISTER struct backtrace *backlist = backtrace_list;
5261 CHECK_NATNUM (nframes);
5263 /* Find the frame requested. */
5264 for (i = XINT (nframes); backlist && (i-- > 0);)
5265 backlist = backlist->next;
5269 if (backlist->nargs == UNEVALLED)
5270 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
5273 if (backlist->nargs == MANY)
5274 tem = *backlist->args;
5276 tem = Flist (backlist->nargs, backlist->args);
5278 return Fcons (Qt, Fcons (*backlist->function, tem));
5283 /************************************************************************/
5285 /************************************************************************/
5288 warn_when_safe_lispobj (Lisp_Object class, Lisp_Object level,
5291 obj = list1 (list3 (class, level, obj));
5292 if (NILP (Vpending_warnings))
5293 Vpending_warnings = Vpending_warnings_tail = obj;
5296 Fsetcdr (Vpending_warnings_tail, obj);
5297 Vpending_warnings_tail = obj;
5301 /* #### This should probably accept Lisp objects; but then we have
5302 to make sure that Feval() isn't called, since it might not be safe.
5304 An alternative approach is to just pass some non-string type of
5305 Lisp_Object to warn_when_safe_lispobj(); `prin1-to-string' will
5306 automatically be called when it is safe to do so. */
5309 warn_when_safe (Lisp_Object class, Lisp_Object level, const char *fmt, ...)
5314 va_start (args, fmt);
5315 obj = emacs_doprnt_string_va ((const Bufbyte *) GETTEXT (fmt),
5319 warn_when_safe_lispobj (class, level, obj);
5325 /************************************************************************/
5326 /* Initialization */
5327 /************************************************************************/
5332 INIT_LRECORD_IMPLEMENTATION (subr);
5334 defsymbol (&Qinhibit_quit, "inhibit-quit");
5335 defsymbol (&Qautoload, "autoload");
5336 defsymbol (&Qdebug_on_error, "debug-on-error");
5337 defsymbol (&Qstack_trace_on_error, "stack-trace-on-error");
5338 defsymbol (&Qdebug_on_signal, "debug-on-signal");
5339 defsymbol (&Qstack_trace_on_signal, "stack-trace-on-signal");
5340 defsymbol (&Qdebugger, "debugger");
5341 defsymbol (&Qmacro, "macro");
5342 defsymbol (&Qand_rest, "&rest");
5343 defsymbol (&Qand_optional, "&optional");
5344 /* Note that the process code also uses Qexit */
5345 defsymbol (&Qexit, "exit");
5346 defsymbol (&Qsetq, "setq");
5347 defsymbol (&Qinteractive, "interactive");
5348 defsymbol (&Qcommandp, "commandp");
5349 defsymbol (&Qdefun, "defun");
5350 defsymbol (&Qprogn, "progn");
5351 defsymbol (&Qvalues, "values");
5352 defsymbol (&Qdisplay_warning, "display-warning");
5353 defsymbol (&Qrun_hooks, "run-hooks");
5354 defsymbol (&Qif, "if");
5359 DEFSUBR_MACRO (Fwhen);
5360 DEFSUBR_MACRO (Funless);
5367 DEFSUBR (Ffunction);
5369 DEFSUBR (Fdefmacro);
5371 DEFSUBR (Fdefconst);
5372 DEFSUBR (Fuser_variable_p);
5376 DEFSUBR (Fmacroexpand_internal);
5379 DEFSUBR (Funwind_protect);
5380 DEFSUBR (Fcondition_case);
5381 DEFSUBR (Fcall_with_condition_handler);
5383 DEFSUBR (Finteractive_p);
5384 DEFSUBR (Fcommandp);
5385 DEFSUBR (Fcommand_execute);
5386 DEFSUBR (Fautoload);
5390 DEFSUBR (Ffunctionp);
5391 DEFSUBR (Ffunction_min_args);
5392 DEFSUBR (Ffunction_max_args);
5393 DEFSUBR (Frun_hooks);
5394 DEFSUBR (Frun_hook_with_args);
5395 DEFSUBR (Frun_hook_with_args_until_success);
5396 DEFSUBR (Frun_hook_with_args_until_failure);
5397 DEFSUBR (Fbacktrace_debug);
5398 DEFSUBR (Fbacktrace);
5399 DEFSUBR (Fbacktrace_frame);
5405 specpdl_ptr = specpdl;
5406 specpdl_depth_counter = 0;
5408 Vcondition_handlers = Qnil;
5411 debug_on_next_call = 0;
5412 lisp_eval_depth = 0;
5413 entering_debugger = 0;
5417 reinit_vars_of_eval (void)
5419 preparing_for_armageddon = 0;
5421 Qunbound_suspended_errors_tag = make_opaque_ptr (&Qunbound_suspended_errors_tag);
5422 staticpro_nodump (&Qunbound_suspended_errors_tag);
5425 specpdl = xnew_array (struct specbinding, specpdl_size);
5426 /* XEmacs change: increase these values. */
5427 max_specpdl_size = 3000;
5428 max_lisp_eval_depth = 1000;
5429 #ifdef DEFEND_AGAINST_THROW_RECURSION
5437 reinit_vars_of_eval ();
5439 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size /*
5440 Limit on number of Lisp variable bindings & unwind-protects before error.
5443 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth /*
5444 Limit on depth in `eval', `apply' and `funcall' before error.
5445 This limit is to catch infinite recursions for you before they cause
5446 actual stack overflow in C, which would be fatal for Emacs.
5447 You can safely make it considerably larger than its default value,
5448 if that proves inconveniently small.
5451 DEFVAR_LISP ("quit-flag", &Vquit_flag /*
5452 Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
5453 Typing C-G sets `quit-flag' non-nil, regardless of `inhibit-quit'.
5457 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit /*
5458 Non-nil inhibits C-g quitting from happening immediately.
5459 Note that `quit-flag' will still be set by typing C-g,
5460 so a quit will be signalled as soon as `inhibit-quit' is nil.
5461 To prevent this happening, set `quit-flag' to nil
5462 before making `inhibit-quit' nil. The value of `inhibit-quit' is
5463 ignored if a critical quit is requested by typing control-shift-G in
5466 Vinhibit_quit = Qnil;
5468 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error /*
5469 *Non-nil means automatically display a backtrace buffer
5470 after any error that is not handled by a `condition-case'.
5471 If the value is a list, an error only means to display a backtrace
5472 if one of its condition symbols appears in the list.
5473 See also variable `stack-trace-on-signal'.
5475 Vstack_trace_on_error = Qnil;
5477 DEFVAR_LISP ("stack-trace-on-signal", &Vstack_trace_on_signal /*
5478 *Non-nil means automatically display a backtrace buffer
5479 after any error that is signalled, whether or not it is handled by
5481 If the value is a list, an error only means to display a backtrace
5482 if one of its condition symbols appears in the list.
5483 See also variable `stack-trace-on-error'.
5485 Vstack_trace_on_signal = Qnil;
5487 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors /*
5488 *List of errors for which the debugger should not be called.
5489 Each element may be a condition-name or a regexp that matches error messages.
5490 If any element applies to a given error, that error skips the debugger
5491 and just returns to top level.
5492 This overrides the variable `debug-on-error'.
5493 It does not apply to errors handled by `condition-case'.
5495 Vdebug_ignored_errors = Qnil;
5497 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error /*
5498 *Non-nil means enter debugger if an unhandled error is signalled.
5499 The debugger will not be entered if the error is handled by
5501 If the value is a list, an error only means to enter the debugger
5502 if one of its condition symbols appears in the list.
5503 This variable is overridden by `debug-ignored-errors'.
5504 See also variables `debug-on-quit' and `debug-on-signal'.
5506 Vdebug_on_error = Qnil;
5508 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal /*
5509 *Non-nil means enter debugger if an error is signalled.
5510 The debugger will be entered whether or not the error is handled by
5512 If the value is a list, an error only means to enter the debugger
5513 if one of its condition symbols appears in the list.
5514 See also variable `debug-on-quit'.
5516 Vdebug_on_signal = Qnil;
5518 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit /*
5519 *Non-nil means enter debugger if quit is signalled (C-G, for example).
5520 Does not apply if quit is handled by a `condition-case'. Entering the
5521 debugger can also be achieved at any time (for X11 console) by typing
5522 control-shift-G to signal a critical quit.
5526 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call /*
5527 Non-nil means enter debugger before next `eval', `apply' or `funcall'.
5530 DEFVAR_LISP ("debugger", &Vdebugger /*
5531 Function to call to invoke debugger.
5532 If due to frame exit, args are `exit' and the value being returned;
5533 this function's value will be returned instead of that.
5534 If due to error, args are `error' and a list of the args to `signal'.
5535 If due to `apply' or `funcall' entry, one arg, `lambda'.
5536 If due to `eval' entry, one arg, t.
5540 staticpro (&Vpending_warnings);
5541 Vpending_warnings = Qnil;
5542 dump_add_root_object (&Vpending_warnings_tail);
5543 Vpending_warnings_tail = Qnil;
5545 staticpro (&Vautoload_queue);
5546 Vautoload_queue = Qnil;
5548 staticpro (&Vcondition_handlers);
5550 staticpro (&Vcurrent_warning_class);
5551 Vcurrent_warning_class = Qnil;
5553 staticpro (&Vcurrent_error_state);
5554 Vcurrent_error_state = Qnil; /* errors as normal */