* subr.el (with-current-buffer): don't use backquotes to avoid
[emacs.git] / src / eval.c
blobc879ecb7ec43bb3c7508543bbfeb0de8a5d0f075
1 /* Evaluator for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995 Free Software Foundation, Inc.
4 This file is part of GNU Emacs.
6 GNU Emacs is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Emacs is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
22 #include <config.h>
24 #ifdef STDC_HEADERS
25 #include <stdlib.h>
26 #endif
28 #include "lisp.h"
29 #include "blockinput.h"
31 #ifndef standalone
32 #include "commands.h"
33 #include "keyboard.h"
34 #else
35 #define INTERACTIVE 1
36 #endif
38 #include <setjmp.h>
40 /* This definition is duplicated in alloc.c and keyboard.c */
41 /* Putting it in lisp.h makes cc bomb out! */
43 struct backtrace
45 struct backtrace *next;
46 Lisp_Object *function;
47 Lisp_Object *args; /* Points to vector of args. */
48 int nargs; /* Length of vector.
49 If nargs is UNEVALLED, args points to slot holding
50 list of unevalled args */
51 char evalargs;
52 /* Nonzero means call value of debugger when done with this operation. */
53 char debug_on_exit;
56 struct backtrace *backtrace_list;
58 /* This structure helps implement the `catch' and `throw' control
59 structure. A struct catchtag contains all the information needed
60 to restore the state of the interpreter after a non-local jump.
62 Handlers for error conditions (represented by `struct handler'
63 structures) just point to a catch tag to do the cleanup required
64 for their jumps.
66 catchtag structures are chained together in the C calling stack;
67 the `next' member points to the next outer catchtag.
69 A call like (throw TAG VAL) searches for a catchtag whose `tag'
70 member is TAG, and then unbinds to it. The `val' member is used to
71 hold VAL while the stack is unwound; `val' is returned as the value
72 of the catch form.
74 All the other members are concerned with restoring the interpreter
75 state. */
76 struct catchtag
78 Lisp_Object tag;
79 Lisp_Object val;
80 struct catchtag *next;
81 struct gcpro *gcpro;
82 jmp_buf jmp;
83 struct backtrace *backlist;
84 struct handler *handlerlist;
85 int lisp_eval_depth;
86 int pdlcount;
87 int poll_suppress_count;
90 struct catchtag *catchlist;
92 Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
93 Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
94 Lisp_Object Qmocklisp_arguments, Vmocklisp_arguments, Qmocklisp;
95 Lisp_Object Qand_rest, Qand_optional;
96 Lisp_Object Qdebug_on_error;
98 /* This holds either the symbol `run-hooks' or nil.
99 It is nil at an early stage of startup, and when Emacs
100 is shutting down. */
101 Lisp_Object Vrun_hooks;
103 /* Non-nil means record all fset's and provide's, to be undone
104 if the file being autoloaded is not fully loaded.
105 They are recorded by being consed onto the front of Vautoload_queue:
106 (FUN . ODEF) for a defun, (OFEATURES . nil) for a provide. */
108 Lisp_Object Vautoload_queue;
110 /* Current number of specbindings allocated in specpdl. */
111 int specpdl_size;
113 /* Pointer to beginning of specpdl. */
114 struct specbinding *specpdl;
116 /* Pointer to first unused element in specpdl. */
117 struct specbinding *specpdl_ptr;
119 /* Maximum size allowed for specpdl allocation */
120 int max_specpdl_size;
122 /* Depth in Lisp evaluations and function calls. */
123 int lisp_eval_depth;
125 /* Maximum allowed depth in Lisp evaluations and function calls. */
126 int max_lisp_eval_depth;
128 /* Nonzero means enter debugger before next function call */
129 int debug_on_next_call;
131 /* List of conditions (non-nil atom means all) which cause a backtrace
132 if an error is handled by the command loop's error handler. */
133 Lisp_Object Vstack_trace_on_error;
135 /* List of conditions (non-nil atom means all) which enter the debugger
136 if an error is handled by the command loop's error handler. */
137 Lisp_Object Vdebug_on_error;
139 /* List of conditions and regexps specifying error messages which
140 do not enter the debugger even if Vdebug_on_errors says they should. */
141 Lisp_Object Vdebug_ignored_errors;
143 /* Non-nil means call the debugger even if the error will be handled. */
144 Lisp_Object Vdebug_on_signal;
146 /* Hook for edebug to use. */
147 Lisp_Object Vsignal_hook_function;
149 /* Nonzero means enter debugger if a quit signal
150 is handled by the command loop's error handler. */
151 int debug_on_quit;
153 /* The value of num_nonmacro_input_events as of the last time we
154 started to enter the debugger. If we decide to enter the debugger
155 again when this is still equal to num_nonmacro_input_events, then we
156 know that the debugger itself has an error, and we should just
157 signal the error instead of entering an infinite loop of debugger
158 invocations. */
159 int when_entered_debugger;
161 Lisp_Object Vdebugger;
163 void specbind (), record_unwind_protect ();
165 Lisp_Object run_hook_with_args ();
167 Lisp_Object funcall_lambda ();
168 extern Lisp_Object ml_apply (); /* Apply a mocklisp function to unevaluated argument list */
170 void
171 init_eval_once ()
173 specpdl_size = 50;
174 specpdl = (struct specbinding *) xmalloc (specpdl_size * sizeof (struct specbinding));
175 specpdl_ptr = specpdl;
176 max_specpdl_size = 600;
177 max_lisp_eval_depth = 300;
179 Vrun_hooks = Qnil;
182 void
183 init_eval ()
185 specpdl_ptr = specpdl;
186 catchlist = 0;
187 handlerlist = 0;
188 backtrace_list = 0;
189 Vquit_flag = Qnil;
190 debug_on_next_call = 0;
191 lisp_eval_depth = 0;
192 /* This is less than the initial value of num_nonmacro_input_events. */
193 when_entered_debugger = -1;
196 Lisp_Object
197 call_debugger (arg)
198 Lisp_Object arg;
200 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
201 max_lisp_eval_depth = lisp_eval_depth + 20;
202 if (specpdl_size + 40 > max_specpdl_size)
203 max_specpdl_size = specpdl_size + 40;
204 debug_on_next_call = 0;
205 when_entered_debugger = num_nonmacro_input_events;
206 return apply1 (Vdebugger, arg);
209 void
210 do_debug_on_call (code)
211 Lisp_Object code;
213 debug_on_next_call = 0;
214 backtrace_list->debug_on_exit = 1;
215 call_debugger (Fcons (code, Qnil));
218 /* NOTE!!! Every function that can call EVAL must protect its args
219 and temporaries from garbage collection while it needs them.
220 The definition of `For' shows what you have to do. */
222 DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
223 "Eval args until one of them yields non-nil, then return that value.\n\
224 The remaining args are not evalled at all.\n\
225 If all args return nil, return nil.")
226 (args)
227 Lisp_Object args;
229 register Lisp_Object val;
230 Lisp_Object args_left;
231 struct gcpro gcpro1;
233 if (NILP(args))
234 return Qnil;
236 args_left = args;
237 GCPRO1 (args_left);
241 val = Feval (Fcar (args_left));
242 if (!NILP (val))
243 break;
244 args_left = Fcdr (args_left);
246 while (!NILP(args_left));
248 UNGCPRO;
249 return val;
252 DEFUN ("and", Fand, Sand, 0, UNEVALLED, 0,
253 "Eval args until one of them yields nil, then return nil.\n\
254 The remaining args are not evalled at all.\n\
255 If no arg yields nil, return the last arg's value.")
256 (args)
257 Lisp_Object args;
259 register Lisp_Object val;
260 Lisp_Object args_left;
261 struct gcpro gcpro1;
263 if (NILP(args))
264 return Qt;
266 args_left = args;
267 GCPRO1 (args_left);
271 val = Feval (Fcar (args_left));
272 if (NILP (val))
273 break;
274 args_left = Fcdr (args_left);
276 while (!NILP(args_left));
278 UNGCPRO;
279 return val;
282 DEFUN ("if", Fif, Sif, 2, UNEVALLED, 0,
283 "(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...\n\
284 Returns the value of THEN or the value of the last of the ELSE's.\n\
285 THEN must be one expression, but ELSE... can be zero or more expressions.\n\
286 If COND yields nil, and there are no ELSE's, the value is nil.")
287 (args)
288 Lisp_Object args;
290 register Lisp_Object cond;
291 struct gcpro gcpro1;
293 GCPRO1 (args);
294 cond = Feval (Fcar (args));
295 UNGCPRO;
297 if (!NILP (cond))
298 return Feval (Fcar (Fcdr (args)));
299 return Fprogn (Fcdr (Fcdr (args)));
302 DEFUN ("cond", Fcond, Scond, 0, UNEVALLED, 0,
303 "(cond CLAUSES...): try each clause until one succeeds.\n\
304 Each clause looks like (CONDITION BODY...). CONDITION is evaluated\n\
305 and, if the value is non-nil, this clause succeeds:\n\
306 then the expressions in BODY are evaluated and the last one's\n\
307 value is the value of the cond-form.\n\
308 If no clause succeeds, cond returns nil.\n\
309 If a clause has one element, as in (CONDITION),\n\
310 CONDITION's value if non-nil is returned from the cond-form.")
311 (args)
312 Lisp_Object args;
314 register Lisp_Object clause, val;
315 struct gcpro gcpro1;
317 val = Qnil;
318 GCPRO1 (args);
319 while (!NILP (args))
321 clause = Fcar (args);
322 val = Feval (Fcar (clause));
323 if (!NILP (val))
325 if (!EQ (XCDR (clause), Qnil))
326 val = Fprogn (XCDR (clause));
327 break;
329 args = XCDR (args);
331 UNGCPRO;
333 return val;
336 DEFUN ("progn", Fprogn, Sprogn, 0, UNEVALLED, 0,
337 "(progn BODY...): eval BODY forms sequentially and return value of last one.")
338 (args)
339 Lisp_Object args;
341 register Lisp_Object val, tem;
342 Lisp_Object args_left;
343 struct gcpro gcpro1;
345 /* In Mocklisp code, symbols at the front of the progn arglist
346 are to be bound to zero. */
347 if (!EQ (Vmocklisp_arguments, Qt))
349 val = make_number (0);
350 while (!NILP (args) && (tem = Fcar (args), SYMBOLP (tem)))
352 QUIT;
353 specbind (tem, val), args = Fcdr (args);
357 if (NILP(args))
358 return Qnil;
360 args_left = args;
361 GCPRO1 (args_left);
365 val = Feval (Fcar (args_left));
366 args_left = Fcdr (args_left);
368 while (!NILP(args_left));
370 UNGCPRO;
371 return val;
374 DEFUN ("prog1", Fprog1, Sprog1, 1, UNEVALLED, 0,
375 "(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.\n\
376 The value of FIRST is saved during the evaluation of the remaining args,\n\
377 whose values are discarded.")
378 (args)
379 Lisp_Object args;
381 Lisp_Object val;
382 register Lisp_Object args_left;
383 struct gcpro gcpro1, gcpro2;
384 register int argnum = 0;
386 if (NILP(args))
387 return Qnil;
389 args_left = args;
390 val = Qnil;
391 GCPRO2 (args, val);
395 if (!(argnum++))
396 val = Feval (Fcar (args_left));
397 else
398 Feval (Fcar (args_left));
399 args_left = Fcdr (args_left);
401 while (!NILP(args_left));
403 UNGCPRO;
404 return val;
407 DEFUN ("prog2", Fprog2, Sprog2, 2, UNEVALLED, 0,
408 "(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.\n\
409 The value of Y is saved during the evaluation of the remaining args,\n\
410 whose values are discarded.")
411 (args)
412 Lisp_Object args;
414 Lisp_Object val;
415 register Lisp_Object args_left;
416 struct gcpro gcpro1, gcpro2;
417 register int argnum = -1;
419 val = Qnil;
421 if (NILP (args))
422 return Qnil;
424 args_left = args;
425 val = Qnil;
426 GCPRO2 (args, val);
430 if (!(argnum++))
431 val = Feval (Fcar (args_left));
432 else
433 Feval (Fcar (args_left));
434 args_left = Fcdr (args_left);
436 while (!NILP (args_left));
438 UNGCPRO;
439 return val;
442 DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0,
443 "(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.\n\
444 The symbols SYM are variables; they are literal (not evaluated).\n\
445 The values VAL are expressions; they are evaluated.\n\
446 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.\n\
447 The second VAL is not computed until after the first SYM is set, and so on;\n\
448 each VAL can use the new value of variables set earlier in the `setq'.\n\
449 The return value of the `setq' form is the value of the last VAL.")
450 (args)
451 Lisp_Object args;
453 register Lisp_Object args_left;
454 register Lisp_Object val, sym;
455 struct gcpro gcpro1;
457 if (NILP(args))
458 return Qnil;
460 args_left = args;
461 GCPRO1 (args);
465 val = Feval (Fcar (Fcdr (args_left)));
466 sym = Fcar (args_left);
467 Fset (sym, val);
468 args_left = Fcdr (Fcdr (args_left));
470 while (!NILP(args_left));
472 UNGCPRO;
473 return val;
476 DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0,
477 "Return the argument, without evaluating it. `(quote x)' yields `x'.")
478 (args)
479 Lisp_Object args;
481 return Fcar (args);
484 DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0,
485 "Like `quote', but preferred for objects which are functions.\n\
486 In byte compilation, `function' causes its argument to be compiled.\n\
487 `quote' cannot do that.")
488 (args)
489 Lisp_Object args;
491 return Fcar (args);
494 DEFUN ("interactive-p", Finteractive_p, Sinteractive_p, 0, 0, 0,
495 "Return t if function in which this appears was called interactively.\n\
496 This means that the function was called with call-interactively (which\n\
497 includes being called as the binding of a key)\n\
498 and input is currently coming from the keyboard (not in keyboard macro).")
501 register struct backtrace *btp;
502 register Lisp_Object fun;
504 if (!INTERACTIVE)
505 return Qnil;
507 btp = backtrace_list;
509 /* If this isn't a byte-compiled function, there may be a frame at
510 the top for Finteractive_p itself. If so, skip it. */
511 fun = Findirect_function (*btp->function);
512 if (SUBRP (fun) && XSUBR (fun) == &Sinteractive_p)
513 btp = btp->next;
515 /* If we're running an Emacs 18-style byte-compiled function, there
516 may be a frame for Fbytecode. Now, given the strictest
517 definition, this function isn't really being called
518 interactively, but because that's the way Emacs 18 always builds
519 byte-compiled functions, we'll accept it for now. */
520 if (EQ (*btp->function, Qbytecode))
521 btp = btp->next;
523 /* If this isn't a byte-compiled function, then we may now be
524 looking at several frames for special forms. Skip past them. */
525 while (btp &&
526 btp->nargs == UNEVALLED)
527 btp = btp->next;
529 /* btp now points at the frame of the innermost function that isn't
530 a special form, ignoring frames for Finteractive_p and/or
531 Fbytecode at the top. If this frame is for a built-in function
532 (such as load or eval-region) return nil. */
533 fun = Findirect_function (*btp->function);
534 if (SUBRP (fun))
535 return Qnil;
536 /* btp points to the frame of a Lisp function that called interactive-p.
537 Return t if that function was called interactively. */
538 if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively))
539 return Qt;
540 return Qnil;
543 DEFUN ("defun", Fdefun, Sdefun, 2, UNEVALLED, 0,
544 "(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.\n\
545 The definition is (lambda ARGLIST [DOCSTRING] BODY...).\n\
546 See also the function `interactive'.")
547 (args)
548 Lisp_Object args;
550 register Lisp_Object fn_name;
551 register Lisp_Object defn;
553 fn_name = Fcar (args);
554 defn = Fcons (Qlambda, Fcdr (args));
555 if (!NILP (Vpurify_flag))
556 defn = Fpurecopy (defn);
557 Ffset (fn_name, defn);
558 LOADHIST_ATTACH (fn_name);
559 return fn_name;
562 DEFUN ("defmacro", Fdefmacro, Sdefmacro, 2, UNEVALLED, 0,
563 "(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.\n\
564 The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).\n\
565 When the macro is called, as in (NAME ARGS...),\n\
566 the function (lambda ARGLIST BODY...) is applied to\n\
567 the list ARGS... as it appears in the expression,\n\
568 and the result should be a form to be evaluated instead of the original.")
569 (args)
570 Lisp_Object args;
572 register Lisp_Object fn_name;
573 register Lisp_Object defn;
575 fn_name = Fcar (args);
576 defn = Fcons (Qmacro, Fcons (Qlambda, Fcdr (args)));
577 if (!NILP (Vpurify_flag))
578 defn = Fpurecopy (defn);
579 Ffset (fn_name, defn);
580 LOADHIST_ATTACH (fn_name);
581 return fn_name;
584 DEFUN ("defvar", Fdefvar, Sdefvar, 1, UNEVALLED, 0,
585 "(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.\n\
586 You are not required to define a variable in order to use it,\n\
587 but the definition can supply documentation and an initial value\n\
588 in a way that tags can recognize.\n\n\
589 INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.\n\
590 If SYMBOL is buffer-local, its default value is what is set;\n\
591 buffer-local values are not affected.\n\
592 INITVALUE and DOCSTRING are optional.\n\
593 If DOCSTRING starts with *, this variable is identified as a user option.\n\
594 This means that M-x set-variable and M-x edit-options recognize it.\n\
595 If INITVALUE is missing, SYMBOL's value is not set.")
596 (args)
597 Lisp_Object args;
599 register Lisp_Object sym, tem, tail;
601 sym = Fcar (args);
602 tail = Fcdr (args);
603 if (!NILP (Fcdr (Fcdr (tail))))
604 error ("too many arguments");
606 if (!NILP (tail))
608 tem = Fdefault_boundp (sym);
609 if (NILP (tem))
610 Fset_default (sym, Feval (Fcar (Fcdr (args))));
612 tail = Fcdr (Fcdr (args));
613 if (!NILP (Fcar (tail)))
615 tem = Fcar (tail);
616 if (!NILP (Vpurify_flag))
617 tem = Fpurecopy (tem);
618 Fput (sym, Qvariable_documentation, tem);
620 LOADHIST_ATTACH (sym);
621 return sym;
624 DEFUN ("defconst", Fdefconst, Sdefconst, 2, UNEVALLED, 0,
625 "(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.\n\
626 The intent is that neither programs nor users should ever change this value.\n\
627 Always sets the value of SYMBOL to the result of evalling INITVALUE.\n\
628 If SYMBOL is buffer-local, its default value is what is set;\n\
629 buffer-local values are not affected.\n\
630 DOCSTRING is optional.")
631 (args)
632 Lisp_Object args;
634 register Lisp_Object sym, tem;
636 sym = Fcar (args);
637 if (!NILP (Fcdr (Fcdr (Fcdr (args)))))
638 error ("too many arguments");
640 Fset_default (sym, Feval (Fcar (Fcdr (args))));
641 tem = Fcar (Fcdr (Fcdr (args)));
642 if (!NILP (tem))
644 if (!NILP (Vpurify_flag))
645 tem = Fpurecopy (tem);
646 Fput (sym, Qvariable_documentation, tem);
648 LOADHIST_ATTACH (sym);
649 return sym;
652 DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0,
653 "Returns t if VARIABLE is intended to be set and modified by users.\n\
654 \(The alternative is a variable used internally in a Lisp program.)\n\
655 Determined by whether the first character of the documentation\n\
656 for the variable is `*'.")
657 (variable)
658 Lisp_Object variable;
660 Lisp_Object documentation;
662 if (!SYMBOLP (variable))
663 return Qnil;
665 documentation = Fget (variable, Qvariable_documentation);
666 if (INTEGERP (documentation) && XINT (documentation) < 0)
667 return Qt;
668 if (STRINGP (documentation)
669 && ((unsigned char) XSTRING (documentation)->data[0] == '*'))
670 return Qt;
671 /* If it is (STRING . INTEGER), a negative integer means a user variable. */
672 if (CONSP (documentation)
673 && STRINGP (XCAR (documentation))
674 && INTEGERP (XCDR (documentation))
675 && XINT (XCDR (documentation)) < 0)
676 return Qt;
677 return Qnil;
680 DEFUN ("let*", FletX, SletX, 1, UNEVALLED, 0,
681 "(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
682 The value of the last form in BODY is returned.\n\
683 Each element of VARLIST is a symbol (which is bound to nil)\n\
684 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
685 Each VALUEFORM can refer to the symbols already bound by this VARLIST.")
686 (args)
687 Lisp_Object args;
689 Lisp_Object varlist, val, elt;
690 int count = specpdl_ptr - specpdl;
691 struct gcpro gcpro1, gcpro2, gcpro3;
693 GCPRO3 (args, elt, varlist);
695 varlist = Fcar (args);
696 while (!NILP (varlist))
698 QUIT;
699 elt = Fcar (varlist);
700 if (SYMBOLP (elt))
701 specbind (elt, Qnil);
702 else if (! NILP (Fcdr (Fcdr (elt))))
703 Fsignal (Qerror,
704 Fcons (build_string ("`let' bindings can have only one value-form"),
705 elt));
706 else
708 val = Feval (Fcar (Fcdr (elt)));
709 specbind (Fcar (elt), val);
711 varlist = Fcdr (varlist);
713 UNGCPRO;
714 val = Fprogn (Fcdr (args));
715 return unbind_to (count, val);
718 DEFUN ("let", Flet, Slet, 1, UNEVALLED, 0,
719 "(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
720 The value of the last form in BODY is returned.\n\
721 Each element of VARLIST is a symbol (which is bound to nil)\n\
722 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
723 All the VALUEFORMs are evalled before any symbols are bound.")
724 (args)
725 Lisp_Object args;
727 Lisp_Object *temps, tem;
728 register Lisp_Object elt, varlist;
729 int count = specpdl_ptr - specpdl;
730 register int argnum;
731 struct gcpro gcpro1, gcpro2;
733 varlist = Fcar (args);
735 /* Make space to hold the values to give the bound variables */
736 elt = Flength (varlist);
737 temps = (Lisp_Object *) alloca (XFASTINT (elt) * sizeof (Lisp_Object));
739 /* Compute the values and store them in `temps' */
741 GCPRO2 (args, *temps);
742 gcpro2.nvars = 0;
744 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
746 QUIT;
747 elt = Fcar (varlist);
748 if (SYMBOLP (elt))
749 temps [argnum++] = Qnil;
750 else if (! NILP (Fcdr (Fcdr (elt))))
751 Fsignal (Qerror,
752 Fcons (build_string ("`let' bindings can have only one value-form"),
753 elt));
754 else
755 temps [argnum++] = Feval (Fcar (Fcdr (elt)));
756 gcpro2.nvars = argnum;
758 UNGCPRO;
760 varlist = Fcar (args);
761 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
763 elt = Fcar (varlist);
764 tem = temps[argnum++];
765 if (SYMBOLP (elt))
766 specbind (elt, tem);
767 else
768 specbind (Fcar (elt), tem);
771 elt = Fprogn (Fcdr (args));
772 return unbind_to (count, elt);
775 DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0,
776 "(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.\n\
777 The order of execution is thus TEST, BODY, TEST, BODY and so on\n\
778 until TEST returns nil.")
779 (args)
780 Lisp_Object args;
782 Lisp_Object test, body, tem;
783 struct gcpro gcpro1, gcpro2;
785 GCPRO2 (test, body);
787 test = Fcar (args);
788 body = Fcdr (args);
789 while (tem = Feval (test),
790 (!EQ (Vmocklisp_arguments, Qt) ? XINT (tem) : !NILP (tem)))
792 QUIT;
793 Fprogn (body);
796 UNGCPRO;
797 return Qnil;
800 DEFUN ("macroexpand", Fmacroexpand, Smacroexpand, 1, 2, 0,
801 "Return result of expanding macros at top level of FORM.\n\
802 If FORM is not a macro call, it is returned unchanged.\n\
803 Otherwise, the macro is expanded and the expansion is considered\n\
804 in place of FORM. When a non-macro-call results, it is returned.\n\n\
805 The second optional arg ENVIRONMENT species an environment of macro\n\
806 definitions to shadow the loaded ones for use in file byte-compilation.")
807 (form, environment)
808 Lisp_Object form;
809 Lisp_Object environment;
811 /* With cleanups from Hallvard Furuseth. */
812 register Lisp_Object expander, sym, def, tem;
814 while (1)
816 /* Come back here each time we expand a macro call,
817 in case it expands into another macro call. */
818 if (!CONSP (form))
819 break;
820 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
821 def = sym = XCAR (form);
822 tem = Qnil;
823 /* Trace symbols aliases to other symbols
824 until we get a symbol that is not an alias. */
825 while (SYMBOLP (def))
827 QUIT;
828 sym = def;
829 tem = Fassq (sym, environment);
830 if (NILP (tem))
832 def = XSYMBOL (sym)->function;
833 if (!EQ (def, Qunbound))
834 continue;
836 break;
838 /* Right now TEM is the result from SYM in ENVIRONMENT,
839 and if TEM is nil then DEF is SYM's function definition. */
840 if (NILP (tem))
842 /* SYM is not mentioned in ENVIRONMENT.
843 Look at its function definition. */
844 if (EQ (def, Qunbound) || !CONSP (def))
845 /* Not defined or definition not suitable */
846 break;
847 if (EQ (XCAR (def), Qautoload))
849 /* Autoloading function: will it be a macro when loaded? */
850 tem = Fnth (make_number (4), def);
851 if (EQ (tem, Qt) || EQ (tem, Qmacro))
852 /* Yes, load it and try again. */
854 struct gcpro gcpro1;
855 GCPRO1 (form);
856 do_autoload (def, sym);
857 UNGCPRO;
858 continue;
860 else
861 break;
863 else if (!EQ (XCAR (def), Qmacro))
864 break;
865 else expander = XCDR (def);
867 else
869 expander = XCDR (tem);
870 if (NILP (expander))
871 break;
873 form = apply1 (expander, XCDR (form));
875 return form;
878 DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
879 "(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.\n\
880 TAG is evalled to get the tag to use; it must not be nil.\n\
882 Then the BODY is executed.\n\
883 Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.\n\
884 If no throw happens, `catch' returns the value of the last BODY form.\n\
885 If a throw happens, it specifies the value to return from `catch'.")
886 (args)
887 Lisp_Object args;
889 register Lisp_Object tag;
890 struct gcpro gcpro1;
892 GCPRO1 (args);
893 tag = Feval (Fcar (args));
894 UNGCPRO;
895 return internal_catch (tag, Fprogn, Fcdr (args));
898 /* Set up a catch, then call C function FUNC on argument ARG.
899 FUNC should return a Lisp_Object.
900 This is how catches are done from within C code. */
902 Lisp_Object
903 internal_catch (tag, func, arg)
904 Lisp_Object tag;
905 Lisp_Object (*func) ();
906 Lisp_Object arg;
908 /* This structure is made part of the chain `catchlist'. */
909 struct catchtag c;
911 /* Fill in the components of c, and put it on the list. */
912 c.next = catchlist;
913 c.tag = tag;
914 c.val = Qnil;
915 c.backlist = backtrace_list;
916 c.handlerlist = handlerlist;
917 c.lisp_eval_depth = lisp_eval_depth;
918 c.pdlcount = specpdl_ptr - specpdl;
919 c.poll_suppress_count = poll_suppress_count;
920 c.gcpro = gcprolist;
921 catchlist = &c;
923 /* Call FUNC. */
924 if (! _setjmp (c.jmp))
925 c.val = (*func) (arg);
927 /* Throw works by a longjmp that comes right here. */
928 catchlist = c.next;
929 return c.val;
932 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
933 jump to that CATCH, returning VALUE as the value of that catch.
935 This is the guts Fthrow and Fsignal; they differ only in the way
936 they choose the catch tag to throw to. A catch tag for a
937 condition-case form has a TAG of Qnil.
939 Before each catch is discarded, unbind all special bindings and
940 execute all unwind-protect clauses made above that catch. Unwind
941 the handler stack as we go, so that the proper handlers are in
942 effect for each unwind-protect clause we run. At the end, restore
943 some static info saved in CATCH, and longjmp to the location
944 specified in the
946 This is used for correct unwinding in Fthrow and Fsignal. */
948 static void
949 unwind_to_catch (catch, value)
950 struct catchtag *catch;
951 Lisp_Object value;
953 register int last_time;
955 /* Save the value in the tag. */
956 catch->val = value;
958 /* Restore the polling-suppression count. */
959 set_poll_suppress_count (catch->poll_suppress_count);
963 last_time = catchlist == catch;
965 /* Unwind the specpdl stack, and then restore the proper set of
966 handlers. */
967 unbind_to (catchlist->pdlcount, Qnil);
968 handlerlist = catchlist->handlerlist;
969 catchlist = catchlist->next;
971 while (! last_time);
973 gcprolist = catch->gcpro;
974 backtrace_list = catch->backlist;
975 lisp_eval_depth = catch->lisp_eval_depth;
977 _longjmp (catch->jmp, 1);
980 DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
981 "(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.\n\
982 Both TAG and VALUE are evalled.")
983 (tag, value)
984 register Lisp_Object tag, value;
986 register struct catchtag *c;
988 while (1)
990 if (!NILP (tag))
991 for (c = catchlist; c; c = c->next)
993 if (EQ (c->tag, tag))
994 unwind_to_catch (c, value);
996 tag = Fsignal (Qno_catch, Fcons (tag, Fcons (value, Qnil)));
1001 DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
1002 "Do BODYFORM, protecting with UNWINDFORMS.\n\
1003 Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).\n\
1004 If BODYFORM completes normally, its value is returned\n\
1005 after executing the UNWINDFORMS.\n\
1006 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.")
1007 (args)
1008 Lisp_Object args;
1010 Lisp_Object val;
1011 int count = specpdl_ptr - specpdl;
1013 record_unwind_protect (0, Fcdr (args));
1014 val = Feval (Fcar (args));
1015 return unbind_to (count, val);
1018 /* Chain of condition handlers currently in effect.
1019 The elements of this chain are contained in the stack frames
1020 of Fcondition_case and internal_condition_case.
1021 When an error is signaled (by calling Fsignal, below),
1022 this chain is searched for an element that applies. */
1024 struct handler *handlerlist;
1026 DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
1027 "Regain control when an error is signaled.\n\
1028 Usage looks like (condition-case VAR BODYFORM HANDLERS...).\n\
1029 executes BODYFORM and returns its value if no error happens.\n\
1030 Each element of HANDLERS looks like (CONDITION-NAME BODY...)\n\
1031 where the BODY is made of Lisp expressions.\n\n\
1032 A handler is applicable to an error\n\
1033 if CONDITION-NAME is one of the error's condition names.\n\
1034 If an error happens, the first applicable handler is run.\n\
1036 The car of a handler may be a list of condition names\n\
1037 instead of a single condition name.\n\
1039 When a handler handles an error,\n\
1040 control returns to the condition-case and the handler BODY... is executed\n\
1041 with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).\n\
1042 VAR may be nil; then you do not get access to the signal information.\n\
1044 The value of the last BODY form is returned from the condition-case.\n\
1045 See also the function `signal' for more info.")
1046 (args)
1047 Lisp_Object args;
1049 Lisp_Object val;
1050 struct catchtag c;
1051 struct handler h;
1052 register Lisp_Object var, bodyform, handlers;
1054 var = Fcar (args);
1055 bodyform = Fcar (Fcdr (args));
1056 handlers = Fcdr (Fcdr (args));
1057 CHECK_SYMBOL (var, 0);
1059 for (val = handlers; ! NILP (val); val = Fcdr (val))
1061 Lisp_Object tem;
1062 tem = Fcar (val);
1063 if (! (NILP (tem)
1064 || (CONSP (tem)
1065 && (SYMBOLP (XCAR (tem))
1066 || CONSP (XCAR (tem))))))
1067 error ("Invalid condition handler", tem);
1070 c.tag = Qnil;
1071 c.val = Qnil;
1072 c.backlist = backtrace_list;
1073 c.handlerlist = handlerlist;
1074 c.lisp_eval_depth = lisp_eval_depth;
1075 c.pdlcount = specpdl_ptr - specpdl;
1076 c.poll_suppress_count = poll_suppress_count;
1077 c.gcpro = gcprolist;
1078 if (_setjmp (c.jmp))
1080 if (!NILP (h.var))
1081 specbind (h.var, c.val);
1082 val = Fprogn (Fcdr (h.chosen_clause));
1084 /* Note that this just undoes the binding of h.var; whoever
1085 longjumped to us unwound the stack to c.pdlcount before
1086 throwing. */
1087 unbind_to (c.pdlcount, Qnil);
1088 return val;
1090 c.next = catchlist;
1091 catchlist = &c;
1093 h.var = var;
1094 h.handler = handlers;
1095 h.next = handlerlist;
1096 h.tag = &c;
1097 handlerlist = &h;
1099 val = Feval (bodyform);
1100 catchlist = c.next;
1101 handlerlist = h.next;
1102 return val;
1105 /* Call the function BFUN with no arguments, catching errors within it
1106 according to HANDLERS. If there is an error, call HFUN with
1107 one argument which is the data that describes the error:
1108 (SIGNALNAME . DATA)
1110 HANDLERS can be a list of conditions to catch.
1111 If HANDLERS is Qt, catch all errors.
1112 If HANDLERS is Qerror, catch all errors
1113 but allow the debugger to run if that is enabled. */
1115 Lisp_Object
1116 internal_condition_case (bfun, handlers, hfun)
1117 Lisp_Object (*bfun) ();
1118 Lisp_Object handlers;
1119 Lisp_Object (*hfun) ();
1121 Lisp_Object val;
1122 struct catchtag c;
1123 struct handler h;
1125 /* Since Fsignal resets this to 0, it had better be 0 now
1126 or else we have a potential bug. */
1127 if (interrupt_input_blocked != 0)
1128 abort ();
1130 c.tag = Qnil;
1131 c.val = Qnil;
1132 c.backlist = backtrace_list;
1133 c.handlerlist = handlerlist;
1134 c.lisp_eval_depth = lisp_eval_depth;
1135 c.pdlcount = specpdl_ptr - specpdl;
1136 c.poll_suppress_count = poll_suppress_count;
1137 c.gcpro = gcprolist;
1138 if (_setjmp (c.jmp))
1140 return (*hfun) (c.val);
1142 c.next = catchlist;
1143 catchlist = &c;
1144 h.handler = handlers;
1145 h.var = Qnil;
1146 h.next = handlerlist;
1147 h.tag = &c;
1148 handlerlist = &h;
1150 val = (*bfun) ();
1151 catchlist = c.next;
1152 handlerlist = h.next;
1153 return val;
1156 /* Like internal_condition_case but call HFUN with ARG as its argument. */
1158 Lisp_Object
1159 internal_condition_case_1 (bfun, arg, handlers, hfun)
1160 Lisp_Object (*bfun) ();
1161 Lisp_Object arg;
1162 Lisp_Object handlers;
1163 Lisp_Object (*hfun) ();
1165 Lisp_Object val;
1166 struct catchtag c;
1167 struct handler h;
1169 c.tag = Qnil;
1170 c.val = Qnil;
1171 c.backlist = backtrace_list;
1172 c.handlerlist = handlerlist;
1173 c.lisp_eval_depth = lisp_eval_depth;
1174 c.pdlcount = specpdl_ptr - specpdl;
1175 c.poll_suppress_count = poll_suppress_count;
1176 c.gcpro = gcprolist;
1177 if (_setjmp (c.jmp))
1179 return (*hfun) (c.val);
1181 c.next = catchlist;
1182 catchlist = &c;
1183 h.handler = handlers;
1184 h.var = Qnil;
1185 h.next = handlerlist;
1186 h.tag = &c;
1187 handlerlist = &h;
1189 val = (*bfun) (arg);
1190 catchlist = c.next;
1191 handlerlist = h.next;
1192 return val;
1195 static Lisp_Object find_handler_clause ();
1197 DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
1198 "Signal an error. Args are ERROR-SYMBOL and associated DATA.\n\
1199 This function does not return.\n\n\
1200 An error symbol is a symbol with an `error-conditions' property\n\
1201 that is a list of condition names.\n\
1202 A handler for any of those names will get to handle this signal.\n\
1203 The symbol `error' should normally be one of them.\n\
1205 DATA should be a list. Its elements are printed as part of the error message.\n\
1206 If the signal is handled, DATA is made available to the handler.\n\
1207 See also the function `condition-case'.")
1208 (error_symbol, data)
1209 Lisp_Object error_symbol, data;
1211 /* When memory is full, ERROR-SYMBOL is nil,
1212 and DATA is (REAL-ERROR-SYMBOL . REAL-DATA). */
1213 register struct handler *allhandlers = handlerlist;
1214 Lisp_Object conditions;
1215 extern int gc_in_progress;
1216 extern int waiting_for_input;
1217 Lisp_Object debugger_value;
1218 Lisp_Object string;
1219 Lisp_Object real_error_symbol;
1220 extern int display_busy_cursor_p;
1222 immediate_quit = 0;
1223 if (gc_in_progress || waiting_for_input)
1224 abort ();
1226 TOTALLY_UNBLOCK_INPUT;
1228 if (NILP (error_symbol))
1229 real_error_symbol = Fcar (data);
1230 else
1231 real_error_symbol = error_symbol;
1233 #ifdef HAVE_X_WINDOWS
1234 if (display_busy_cursor_p)
1235 Fx_hide_busy_cursor (Qt);
1236 #endif
1238 /* This hook is used by edebug. */
1239 if (! NILP (Vsignal_hook_function))
1240 call2 (Vsignal_hook_function, error_symbol, data);
1242 conditions = Fget (real_error_symbol, Qerror_conditions);
1244 for (; handlerlist; handlerlist = handlerlist->next)
1246 register Lisp_Object clause;
1247 clause = find_handler_clause (handlerlist->handler, conditions,
1248 error_symbol, data, &debugger_value);
1250 #if 0 /* Most callers are not prepared to handle gc if this returns.
1251 So, since this feature is not very useful, take it out. */
1252 /* If have called debugger and user wants to continue,
1253 just return nil. */
1254 if (EQ (clause, Qlambda))
1255 return debugger_value;
1256 #else
1257 if (EQ (clause, Qlambda))
1259 /* We can't return values to code which signaled an error, but we
1260 can continue code which has signaled a quit. */
1261 if (EQ (real_error_symbol, Qquit))
1262 return Qnil;
1263 else
1264 error ("Cannot return from the debugger in an error");
1266 #endif
1268 if (!NILP (clause))
1270 Lisp_Object unwind_data;
1271 struct handler *h = handlerlist;
1273 handlerlist = allhandlers;
1275 if (NILP (error_symbol))
1276 unwind_data = data;
1277 else
1278 unwind_data = Fcons (error_symbol, data);
1279 h->chosen_clause = clause;
1280 unwind_to_catch (h->tag, unwind_data);
1284 handlerlist = allhandlers;
1285 /* If no handler is present now, try to run the debugger,
1286 and if that fails, throw to top level. */
1287 find_handler_clause (Qerror, conditions, error_symbol, data, &debugger_value);
1288 if (catchlist != 0)
1289 Fthrow (Qtop_level, Qt);
1291 if (! NILP (error_symbol))
1292 data = Fcons (error_symbol, data);
1294 string = Ferror_message_string (data);
1295 fatal ("%s", XSTRING (string)->data, 0);
1298 /* Return nonzero iff LIST is a non-nil atom or
1299 a list containing one of CONDITIONS. */
1301 static int
1302 wants_debugger (list, conditions)
1303 Lisp_Object list, conditions;
1305 if (NILP (list))
1306 return 0;
1307 if (! CONSP (list))
1308 return 1;
1310 while (CONSP (conditions))
1312 Lisp_Object this, tail;
1313 this = XCAR (conditions);
1314 for (tail = list; CONSP (tail); tail = XCDR (tail))
1315 if (EQ (XCAR (tail), this))
1316 return 1;
1317 conditions = XCDR (conditions);
1319 return 0;
1322 /* Return 1 if an error with condition-symbols CONDITIONS,
1323 and described by SIGNAL-DATA, should skip the debugger
1324 according to debugger-ignore-errors. */
1326 static int
1327 skip_debugger (conditions, data)
1328 Lisp_Object conditions, data;
1330 Lisp_Object tail;
1331 int first_string = 1;
1332 Lisp_Object error_message;
1334 for (tail = Vdebug_ignored_errors; CONSP (tail);
1335 tail = XCDR (tail))
1337 if (STRINGP (XCAR (tail)))
1339 if (first_string)
1341 error_message = Ferror_message_string (data);
1342 first_string = 0;
1344 if (fast_string_match (XCAR (tail), error_message) >= 0)
1345 return 1;
1347 else
1349 Lisp_Object contail;
1351 for (contail = conditions; CONSP (contail);
1352 contail = XCDR (contail))
1353 if (EQ (XCAR (tail), XCAR (contail)))
1354 return 1;
1358 return 0;
1361 /* Value of Qlambda means we have called debugger and user has continued.
1362 There are two ways to pass SIG and DATA:
1363 = SIG is the error symbol, and DATA is the rest of the data.
1364 = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
1365 This is for memory-full errors only.
1367 Store value returned from debugger into *DEBUGGER_VALUE_PTR. */
1369 static Lisp_Object
1370 find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
1371 Lisp_Object handlers, conditions, sig, data;
1372 Lisp_Object *debugger_value_ptr;
1374 register Lisp_Object h;
1375 register Lisp_Object tem;
1377 if (EQ (handlers, Qt)) /* t is used by handlers for all conditions, set up by C code. */
1378 return Qt;
1379 /* error is used similarly, but means print an error message
1380 and run the debugger if that is enabled. */
1381 if (EQ (handlers, Qerror)
1382 || !NILP (Vdebug_on_signal)) /* This says call debugger even if
1383 there is a handler. */
1385 int count = specpdl_ptr - specpdl;
1386 int debugger_called = 0;
1387 Lisp_Object sig_symbol, combined_data;
1388 /* This is set to 1 if we are handling a memory-full error,
1389 because these must not run the debugger.
1390 (There is no room in memory to do that!) */
1391 int no_debugger = 0;
1393 if (NILP (sig))
1395 combined_data = data;
1396 sig_symbol = Fcar (data);
1397 no_debugger = 1;
1399 else
1401 combined_data = Fcons (sig, data);
1402 sig_symbol = sig;
1405 if (wants_debugger (Vstack_trace_on_error, conditions))
1407 #ifdef __STDC__
1408 internal_with_output_to_temp_buffer ("*Backtrace*",
1409 (Lisp_Object (*) (Lisp_Object)) Fbacktrace,
1410 Qnil);
1411 #else
1412 internal_with_output_to_temp_buffer ("*Backtrace*",
1413 Fbacktrace, Qnil);
1414 #endif
1416 if (! no_debugger
1417 && (EQ (sig_symbol, Qquit)
1418 ? debug_on_quit
1419 : wants_debugger (Vdebug_on_error, conditions))
1420 && ! skip_debugger (conditions, combined_data)
1421 && when_entered_debugger < num_nonmacro_input_events)
1423 specbind (Qdebug_on_error, Qnil);
1424 *debugger_value_ptr
1425 = call_debugger (Fcons (Qerror,
1426 Fcons (combined_data, Qnil)));
1427 debugger_called = 1;
1429 /* If there is no handler, return saying whether we ran the debugger. */
1430 if (EQ (handlers, Qerror))
1432 if (debugger_called)
1433 return unbind_to (count, Qlambda);
1434 return Qt;
1437 for (h = handlers; CONSP (h); h = Fcdr (h))
1439 Lisp_Object handler, condit;
1441 handler = Fcar (h);
1442 if (!CONSP (handler))
1443 continue;
1444 condit = Fcar (handler);
1445 /* Handle a single condition name in handler HANDLER. */
1446 if (SYMBOLP (condit))
1448 tem = Fmemq (Fcar (handler), conditions);
1449 if (!NILP (tem))
1450 return handler;
1452 /* Handle a list of condition names in handler HANDLER. */
1453 else if (CONSP (condit))
1455 while (CONSP (condit))
1457 tem = Fmemq (Fcar (condit), conditions);
1458 if (!NILP (tem))
1459 return handler;
1460 condit = XCDR (condit);
1464 return Qnil;
1467 /* dump an error message; called like printf */
1469 /* VARARGS 1 */
1470 void
1471 error (m, a1, a2, a3)
1472 char *m;
1473 char *a1, *a2, *a3;
1475 char buf[200];
1476 int size = 200;
1477 int mlen;
1478 char *buffer = buf;
1479 char *args[3];
1480 int allocated = 0;
1481 Lisp_Object string;
1483 args[0] = a1;
1484 args[1] = a2;
1485 args[2] = a3;
1487 mlen = strlen (m);
1489 while (1)
1491 int used = doprnt (buffer, size, m, m + mlen, 3, args);
1492 if (used < size)
1493 break;
1494 size *= 2;
1495 if (allocated)
1496 buffer = (char *) xrealloc (buffer, size);
1497 else
1499 buffer = (char *) xmalloc (size);
1500 allocated = 1;
1504 string = build_string (buffer);
1505 if (allocated)
1506 free (buffer);
1508 Fsignal (Qerror, Fcons (string, Qnil));
1511 DEFUN ("commandp", Fcommandp, Scommandp, 1, 1, 0,
1512 "T if FUNCTION makes provisions for interactive calling.\n\
1513 This means it contains a description for how to read arguments to give it.\n\
1514 The value is nil for an invalid function or a symbol with no function\n\
1515 definition.\n\
1517 Interactively callable functions include strings and vectors (treated\n\
1518 as keyboard macros), lambda-expressions that contain a top-level call\n\
1519 to `interactive', autoload definitions made by `autoload' with non-nil\n\
1520 fourth argument, and some of the built-in functions of Lisp.\n\
1522 Also, a symbol satisfies `commandp' if its function definition does so.")
1523 (function)
1524 Lisp_Object function;
1526 register Lisp_Object fun;
1527 register Lisp_Object funcar;
1529 fun = function;
1531 fun = indirect_function (fun);
1532 if (EQ (fun, Qunbound))
1533 return Qnil;
1535 /* Emacs primitives are interactive if their DEFUN specifies an
1536 interactive spec. */
1537 if (SUBRP (fun))
1539 if (XSUBR (fun)->prompt)
1540 return Qt;
1541 else
1542 return Qnil;
1545 /* Bytecode objects are interactive if they are long enough to
1546 have an element whose index is COMPILED_INTERACTIVE, which is
1547 where the interactive spec is stored. */
1548 else if (COMPILEDP (fun))
1549 return ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
1550 ? Qt : Qnil);
1552 /* Strings and vectors are keyboard macros. */
1553 if (STRINGP (fun) || VECTORP (fun))
1554 return Qt;
1556 /* Lists may represent commands. */
1557 if (!CONSP (fun))
1558 return Qnil;
1559 funcar = Fcar (fun);
1560 if (!SYMBOLP (funcar))
1561 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1562 if (EQ (funcar, Qlambda))
1563 return Fassq (Qinteractive, Fcdr (Fcdr (fun)));
1564 if (EQ (funcar, Qmocklisp))
1565 return Qt; /* All mocklisp functions can be called interactively */
1566 if (EQ (funcar, Qautoload))
1567 return Fcar (Fcdr (Fcdr (Fcdr (fun))));
1568 else
1569 return Qnil;
1572 /* ARGSUSED */
1573 DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
1574 "Define FUNCTION to autoload from FILE.\n\
1575 FUNCTION is a symbol; FILE is a file name string to pass to `load'.\n\
1576 Third arg DOCSTRING is documentation for the function.\n\
1577 Fourth arg INTERACTIVE if non-nil says function can be called interactively.\n\
1578 Fifth arg TYPE indicates the type of the object:\n\
1579 nil or omitted says FUNCTION is a function,\n\
1580 `keymap' says FUNCTION is really a keymap, and\n\
1581 `macro' or t says FUNCTION is really a macro.\n\
1582 Third through fifth args give info about the real definition.\n\
1583 They default to nil.\n\
1584 If FUNCTION is already defined other than as an autoload,\n\
1585 this does nothing and returns nil.")
1586 (function, file, docstring, interactive, type)
1587 Lisp_Object function, file, docstring, interactive, type;
1589 #ifdef NO_ARG_ARRAY
1590 Lisp_Object args[4];
1591 #endif
1593 CHECK_SYMBOL (function, 0);
1594 CHECK_STRING (file, 1);
1596 /* If function is defined and not as an autoload, don't override */
1597 if (!EQ (XSYMBOL (function)->function, Qunbound)
1598 && !(CONSP (XSYMBOL (function)->function)
1599 && EQ (XCAR (XSYMBOL (function)->function), Qautoload)))
1600 return Qnil;
1602 #ifdef NO_ARG_ARRAY
1603 args[0] = file;
1604 args[1] = docstring;
1605 args[2] = interactive;
1606 args[3] = type;
1608 return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
1609 #else /* NO_ARG_ARRAY */
1610 return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
1611 #endif /* not NO_ARG_ARRAY */
1614 Lisp_Object
1615 un_autoload (oldqueue)
1616 Lisp_Object oldqueue;
1618 register Lisp_Object queue, first, second;
1620 /* Queue to unwind is current value of Vautoload_queue.
1621 oldqueue is the shadowed value to leave in Vautoload_queue. */
1622 queue = Vautoload_queue;
1623 Vautoload_queue = oldqueue;
1624 while (CONSP (queue))
1626 first = Fcar (queue);
1627 second = Fcdr (first);
1628 first = Fcar (first);
1629 if (EQ (second, Qnil))
1630 Vfeatures = first;
1631 else
1632 Ffset (first, second);
1633 queue = Fcdr (queue);
1635 return Qnil;
1638 /* Load an autoloaded function.
1639 FUNNAME is the symbol which is the function's name.
1640 FUNDEF is the autoload definition (a list). */
1642 void
1643 do_autoload (fundef, funname)
1644 Lisp_Object fundef, funname;
1646 int count = specpdl_ptr - specpdl;
1647 Lisp_Object fun, queue, first, second;
1648 struct gcpro gcpro1, gcpro2, gcpro3;
1650 fun = funname;
1651 CHECK_SYMBOL (funname, 0);
1652 GCPRO3 (fun, funname, fundef);
1654 /* Preserve the match data. */
1655 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
1657 /* Value saved here is to be restored into Vautoload_queue. */
1658 record_unwind_protect (un_autoload, Vautoload_queue);
1659 Vautoload_queue = Qt;
1660 Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil, Qt);
1662 /* Save the old autoloads, in case we ever do an unload. */
1663 queue = Vautoload_queue;
1664 while (CONSP (queue))
1666 first = Fcar (queue);
1667 second = Fcdr (first);
1668 first = Fcar (first);
1670 /* Note: This test is subtle. The cdr of an autoload-queue entry
1671 may be an atom if the autoload entry was generated by a defalias
1672 or fset. */
1673 if (CONSP (second))
1674 Fput (first, Qautoload, (Fcdr (second)));
1676 queue = Fcdr (queue);
1679 /* Once loading finishes, don't undo it. */
1680 Vautoload_queue = Qt;
1681 unbind_to (count, Qnil);
1683 fun = Findirect_function (fun);
1685 if (!NILP (Fequal (fun, fundef)))
1686 error ("Autoloading failed to define function %s",
1687 XSYMBOL (funname)->name->data);
1688 UNGCPRO;
1691 DEFUN ("eval", Feval, Seval, 1, 1, 0,
1692 "Evaluate FORM and return its value.")
1693 (form)
1694 Lisp_Object form;
1696 Lisp_Object fun, val, original_fun, original_args;
1697 Lisp_Object funcar;
1698 struct backtrace backtrace;
1699 struct gcpro gcpro1, gcpro2, gcpro3;
1701 /* Since Fsignal resets this to 0, it had better be 0 now
1702 or else we have a potential bug. */
1703 if (interrupt_input_blocked != 0)
1704 abort ();
1706 if (SYMBOLP (form))
1708 if (EQ (Vmocklisp_arguments, Qt))
1709 return Fsymbol_value (form);
1710 val = Fsymbol_value (form);
1711 if (NILP (val))
1712 XSETFASTINT (val, 0);
1713 else if (EQ (val, Qt))
1714 XSETFASTINT (val, 1);
1715 return val;
1717 if (!CONSP (form))
1718 return form;
1720 QUIT;
1721 if (consing_since_gc > gc_cons_threshold)
1723 GCPRO1 (form);
1724 Fgarbage_collect ();
1725 UNGCPRO;
1728 if (++lisp_eval_depth > max_lisp_eval_depth)
1730 if (max_lisp_eval_depth < 100)
1731 max_lisp_eval_depth = 100;
1732 if (lisp_eval_depth > max_lisp_eval_depth)
1733 error ("Lisp nesting exceeds max-lisp-eval-depth");
1736 original_fun = Fcar (form);
1737 original_args = Fcdr (form);
1739 backtrace.next = backtrace_list;
1740 backtrace_list = &backtrace;
1741 backtrace.function = &original_fun; /* This also protects them from gc */
1742 backtrace.args = &original_args;
1743 backtrace.nargs = UNEVALLED;
1744 backtrace.evalargs = 1;
1745 backtrace.debug_on_exit = 0;
1747 if (debug_on_next_call)
1748 do_debug_on_call (Qt);
1750 /* At this point, only original_fun and original_args
1751 have values that will be used below */
1752 retry:
1753 fun = Findirect_function (original_fun);
1755 if (SUBRP (fun))
1757 Lisp_Object numargs;
1758 Lisp_Object argvals[8];
1759 Lisp_Object args_left;
1760 register int i, maxargs;
1762 args_left = original_args;
1763 numargs = Flength (args_left);
1765 if (XINT (numargs) < XSUBR (fun)->min_args ||
1766 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
1767 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
1769 if (XSUBR (fun)->max_args == UNEVALLED)
1771 backtrace.evalargs = 0;
1772 val = (*XSUBR (fun)->function) (args_left);
1773 goto done;
1776 if (XSUBR (fun)->max_args == MANY)
1778 /* Pass a vector of evaluated arguments */
1779 Lisp_Object *vals;
1780 register int argnum = 0;
1782 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
1784 GCPRO3 (args_left, fun, fun);
1785 gcpro3.var = vals;
1786 gcpro3.nvars = 0;
1788 while (!NILP (args_left))
1790 vals[argnum++] = Feval (Fcar (args_left));
1791 args_left = Fcdr (args_left);
1792 gcpro3.nvars = argnum;
1795 backtrace.args = vals;
1796 backtrace.nargs = XINT (numargs);
1798 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
1799 UNGCPRO;
1800 goto done;
1803 GCPRO3 (args_left, fun, fun);
1804 gcpro3.var = argvals;
1805 gcpro3.nvars = 0;
1807 maxargs = XSUBR (fun)->max_args;
1808 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
1810 argvals[i] = Feval (Fcar (args_left));
1811 gcpro3.nvars = ++i;
1814 UNGCPRO;
1816 backtrace.args = argvals;
1817 backtrace.nargs = XINT (numargs);
1819 switch (i)
1821 case 0:
1822 val = (*XSUBR (fun)->function) ();
1823 goto done;
1824 case 1:
1825 val = (*XSUBR (fun)->function) (argvals[0]);
1826 goto done;
1827 case 2:
1828 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
1829 goto done;
1830 case 3:
1831 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1832 argvals[2]);
1833 goto done;
1834 case 4:
1835 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1836 argvals[2], argvals[3]);
1837 goto done;
1838 case 5:
1839 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1840 argvals[3], argvals[4]);
1841 goto done;
1842 case 6:
1843 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1844 argvals[3], argvals[4], argvals[5]);
1845 goto done;
1846 case 7:
1847 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1848 argvals[3], argvals[4], argvals[5],
1849 argvals[6]);
1850 goto done;
1852 case 8:
1853 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1854 argvals[3], argvals[4], argvals[5],
1855 argvals[6], argvals[7]);
1856 goto done;
1858 default:
1859 /* Someone has created a subr that takes more arguments than
1860 is supported by this code. We need to either rewrite the
1861 subr to use a different argument protocol, or add more
1862 cases to this switch. */
1863 abort ();
1866 if (COMPILEDP (fun))
1867 val = apply_lambda (fun, original_args, 1);
1868 else
1870 if (!CONSP (fun))
1871 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1872 funcar = Fcar (fun);
1873 if (!SYMBOLP (funcar))
1874 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1875 if (EQ (funcar, Qautoload))
1877 do_autoload (fun, original_fun);
1878 goto retry;
1880 if (EQ (funcar, Qmacro))
1881 val = Feval (apply1 (Fcdr (fun), original_args));
1882 else if (EQ (funcar, Qlambda))
1883 val = apply_lambda (fun, original_args, 1);
1884 else if (EQ (funcar, Qmocklisp))
1885 val = ml_apply (fun, original_args);
1886 else
1887 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1889 done:
1890 if (!EQ (Vmocklisp_arguments, Qt))
1892 if (NILP (val))
1893 XSETFASTINT (val, 0);
1894 else if (EQ (val, Qt))
1895 XSETFASTINT (val, 1);
1897 lisp_eval_depth--;
1898 if (backtrace.debug_on_exit)
1899 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
1900 backtrace_list = backtrace.next;
1901 return val;
1904 DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
1905 "Call FUNCTION with our remaining args, using our last arg as list of args.\n\
1906 Then return the value FUNCTION returns.\n\
1907 Thus, (apply '+ 1 2 '(3 4)) returns 10.")
1908 (nargs, args)
1909 int nargs;
1910 Lisp_Object *args;
1912 register int i, numargs;
1913 register Lisp_Object spread_arg;
1914 register Lisp_Object *funcall_args;
1915 Lisp_Object fun;
1916 struct gcpro gcpro1;
1918 fun = args [0];
1919 funcall_args = 0;
1920 spread_arg = args [nargs - 1];
1921 CHECK_LIST (spread_arg, nargs);
1923 numargs = XINT (Flength (spread_arg));
1925 if (numargs == 0)
1926 return Ffuncall (nargs - 1, args);
1927 else if (numargs == 1)
1929 args [nargs - 1] = XCAR (spread_arg);
1930 return Ffuncall (nargs, args);
1933 numargs += nargs - 2;
1935 fun = indirect_function (fun);
1936 if (EQ (fun, Qunbound))
1938 /* Let funcall get the error */
1939 fun = args[0];
1940 goto funcall;
1943 if (SUBRP (fun))
1945 if (numargs < XSUBR (fun)->min_args
1946 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
1947 goto funcall; /* Let funcall get the error */
1948 else if (XSUBR (fun)->max_args > numargs)
1950 /* Avoid making funcall cons up a yet another new vector of arguments
1951 by explicitly supplying nil's for optional values */
1952 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
1953 * sizeof (Lisp_Object));
1954 for (i = numargs; i < XSUBR (fun)->max_args;)
1955 funcall_args[++i] = Qnil;
1956 GCPRO1 (*funcall_args);
1957 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
1960 funcall:
1961 /* We add 1 to numargs because funcall_args includes the
1962 function itself as well as its arguments. */
1963 if (!funcall_args)
1965 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
1966 * sizeof (Lisp_Object));
1967 GCPRO1 (*funcall_args);
1968 gcpro1.nvars = 1 + numargs;
1971 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
1972 /* Spread the last arg we got. Its first element goes in
1973 the slot that it used to occupy, hence this value of I. */
1974 i = nargs - 1;
1975 while (!NILP (spread_arg))
1977 funcall_args [i++] = XCAR (spread_arg);
1978 spread_arg = XCDR (spread_arg);
1981 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
1984 /* Run hook variables in various ways. */
1986 enum run_hooks_condition {to_completion, until_success, until_failure};
1988 DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 1, MANY, 0,
1989 "Run each hook in HOOKS. Major mode functions use this.\n\
1990 Each argument should be a symbol, a hook variable.\n\
1991 These symbols are processed in the order specified.\n\
1992 If a hook symbol has a non-nil value, that value may be a function\n\
1993 or a list of functions to be called to run the hook.\n\
1994 If the value is a function, it is called with no arguments.\n\
1995 If it is a list, the elements are called, in order, with no arguments.\n\
1997 To make a hook variable buffer-local, use `make-local-hook',\n\
1998 not `make-local-variable'.")
1999 (nargs, args)
2000 int nargs;
2001 Lisp_Object *args;
2003 Lisp_Object hook[1];
2004 register int i;
2006 for (i = 0; i < nargs; i++)
2008 hook[0] = args[i];
2009 run_hook_with_args (1, hook, to_completion);
2012 return Qnil;
2015 DEFUN ("run-hook-with-args", Frun_hook_with_args,
2016 Srun_hook_with_args, 1, MANY, 0,
2017 "Run HOOK with the specified arguments ARGS.\n\
2018 HOOK should be a symbol, a hook variable. If HOOK has a non-nil\n\
2019 value, that value may be a function or a list of functions to be\n\
2020 called to run the hook. If the value is a function, it is called with\n\
2021 the given arguments and its return value is returned. If it is a list\n\
2022 of functions, those functions are called, in order,\n\
2023 with the given arguments ARGS.\n\
2024 It is best not to depend on the value return by `run-hook-with-args',\n\
2025 as that may change.\n\
2027 To make a hook variable buffer-local, use `make-local-hook',\n\
2028 not `make-local-variable'.")
2029 (nargs, args)
2030 int nargs;
2031 Lisp_Object *args;
2033 return run_hook_with_args (nargs, args, to_completion);
2036 DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
2037 Srun_hook_with_args_until_success, 1, MANY, 0,
2038 "Run HOOK with the specified arguments ARGS.\n\
2039 HOOK should be a symbol, a hook variable. Its value should\n\
2040 be a list of functions. We call those functions, one by one,\n\
2041 passing arguments ARGS to each of them, until one of them\n\
2042 returns a non-nil value. Then we return that value.\n\
2043 If all the functions return nil, we return nil.\n\
2045 To make a hook variable buffer-local, use `make-local-hook',\n\
2046 not `make-local-variable'.")
2047 (nargs, args)
2048 int nargs;
2049 Lisp_Object *args;
2051 return run_hook_with_args (nargs, args, until_success);
2054 DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
2055 Srun_hook_with_args_until_failure, 1, MANY, 0,
2056 "Run HOOK with the specified arguments ARGS.\n\
2057 HOOK should be a symbol, a hook variable. Its value should\n\
2058 be a list of functions. We call those functions, one by one,\n\
2059 passing arguments ARGS to each of them, until one of them\n\
2060 returns nil. Then we return nil.\n\
2061 If all the functions return non-nil, we return non-nil.\n\
2063 To make a hook variable buffer-local, use `make-local-hook',\n\
2064 not `make-local-variable'.")
2065 (nargs, args)
2066 int nargs;
2067 Lisp_Object *args;
2069 return run_hook_with_args (nargs, args, until_failure);
2072 /* ARGS[0] should be a hook symbol.
2073 Call each of the functions in the hook value, passing each of them
2074 as arguments all the rest of ARGS (all NARGS - 1 elements).
2075 COND specifies a condition to test after each call
2076 to decide whether to stop.
2077 The caller (or its caller, etc) must gcpro all of ARGS,
2078 except that it isn't necessary to gcpro ARGS[0]. */
2080 Lisp_Object
2081 run_hook_with_args (nargs, args, cond)
2082 int nargs;
2083 Lisp_Object *args;
2084 enum run_hooks_condition cond;
2086 Lisp_Object sym, val, ret;
2087 Lisp_Object globals;
2088 struct gcpro gcpro1, gcpro2, gcpro3;
2090 /* If we are dying or still initializing,
2091 don't do anything--it would probably crash if we tried. */
2092 if (NILP (Vrun_hooks))
2093 return;
2095 sym = args[0];
2096 val = find_symbol_value (sym);
2097 ret = (cond == until_failure ? Qt : Qnil);
2099 if (EQ (val, Qunbound) || NILP (val))
2100 return ret;
2101 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
2103 args[0] = val;
2104 return Ffuncall (nargs, args);
2106 else
2108 globals = Qnil;
2109 GCPRO3 (sym, val, globals);
2111 for (;
2112 CONSP (val) && ((cond == to_completion)
2113 || (cond == until_success ? NILP (ret)
2114 : !NILP (ret)));
2115 val = XCDR (val))
2117 if (EQ (XCAR (val), Qt))
2119 /* t indicates this hook has a local binding;
2120 it means to run the global binding too. */
2122 for (globals = Fdefault_value (sym);
2123 CONSP (globals) && ((cond == to_completion)
2124 || (cond == until_success ? NILP (ret)
2125 : !NILP (ret)));
2126 globals = XCDR (globals))
2128 args[0] = XCAR (globals);
2129 /* In a global value, t should not occur. If it does, we
2130 must ignore it to avoid an endless loop. */
2131 if (!EQ (args[0], Qt))
2132 ret = Ffuncall (nargs, args);
2135 else
2137 args[0] = XCAR (val);
2138 ret = Ffuncall (nargs, args);
2142 UNGCPRO;
2143 return ret;
2147 /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2148 present value of that symbol.
2149 Call each element of FUNLIST,
2150 passing each of them the rest of ARGS.
2151 The caller (or its caller, etc) must gcpro all of ARGS,
2152 except that it isn't necessary to gcpro ARGS[0]. */
2154 Lisp_Object
2155 run_hook_list_with_args (funlist, nargs, args)
2156 Lisp_Object funlist;
2157 int nargs;
2158 Lisp_Object *args;
2160 Lisp_Object sym;
2161 Lisp_Object val;
2162 Lisp_Object globals;
2163 struct gcpro gcpro1, gcpro2, gcpro3;
2165 sym = args[0];
2166 globals = Qnil;
2167 GCPRO3 (sym, val, globals);
2169 for (val = funlist; CONSP (val); val = XCDR (val))
2171 if (EQ (XCAR (val), Qt))
2173 /* t indicates this hook has a local binding;
2174 it means to run the global binding too. */
2176 for (globals = Fdefault_value (sym);
2177 CONSP (globals);
2178 globals = XCDR (globals))
2180 args[0] = XCAR (globals);
2181 /* In a global value, t should not occur. If it does, we
2182 must ignore it to avoid an endless loop. */
2183 if (!EQ (args[0], Qt))
2184 Ffuncall (nargs, args);
2187 else
2189 args[0] = XCAR (val);
2190 Ffuncall (nargs, args);
2193 UNGCPRO;
2194 return Qnil;
2197 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2199 void
2200 run_hook_with_args_2 (hook, arg1, arg2)
2201 Lisp_Object hook, arg1, arg2;
2203 Lisp_Object temp[3];
2204 temp[0] = hook;
2205 temp[1] = arg1;
2206 temp[2] = arg2;
2208 Frun_hook_with_args (3, temp);
2211 /* Apply fn to arg */
2212 Lisp_Object
2213 apply1 (fn, arg)
2214 Lisp_Object fn, arg;
2216 struct gcpro gcpro1;
2218 GCPRO1 (fn);
2219 if (NILP (arg))
2220 RETURN_UNGCPRO (Ffuncall (1, &fn));
2221 gcpro1.nvars = 2;
2222 #ifdef NO_ARG_ARRAY
2224 Lisp_Object args[2];
2225 args[0] = fn;
2226 args[1] = arg;
2227 gcpro1.var = args;
2228 RETURN_UNGCPRO (Fapply (2, args));
2230 #else /* not NO_ARG_ARRAY */
2231 RETURN_UNGCPRO (Fapply (2, &fn));
2232 #endif /* not NO_ARG_ARRAY */
2235 /* Call function fn on no arguments */
2236 Lisp_Object
2237 call0 (fn)
2238 Lisp_Object fn;
2240 struct gcpro gcpro1;
2242 GCPRO1 (fn);
2243 RETURN_UNGCPRO (Ffuncall (1, &fn));
2246 /* Call function fn with 1 argument arg1 */
2247 /* ARGSUSED */
2248 Lisp_Object
2249 call1 (fn, arg1)
2250 Lisp_Object fn, arg1;
2252 struct gcpro gcpro1;
2253 #ifdef NO_ARG_ARRAY
2254 Lisp_Object args[2];
2256 args[0] = fn;
2257 args[1] = arg1;
2258 GCPRO1 (args[0]);
2259 gcpro1.nvars = 2;
2260 RETURN_UNGCPRO (Ffuncall (2, args));
2261 #else /* not NO_ARG_ARRAY */
2262 GCPRO1 (fn);
2263 gcpro1.nvars = 2;
2264 RETURN_UNGCPRO (Ffuncall (2, &fn));
2265 #endif /* not NO_ARG_ARRAY */
2268 /* Call function fn with 2 arguments arg1, arg2 */
2269 /* ARGSUSED */
2270 Lisp_Object
2271 call2 (fn, arg1, arg2)
2272 Lisp_Object fn, arg1, arg2;
2274 struct gcpro gcpro1;
2275 #ifdef NO_ARG_ARRAY
2276 Lisp_Object args[3];
2277 args[0] = fn;
2278 args[1] = arg1;
2279 args[2] = arg2;
2280 GCPRO1 (args[0]);
2281 gcpro1.nvars = 3;
2282 RETURN_UNGCPRO (Ffuncall (3, args));
2283 #else /* not NO_ARG_ARRAY */
2284 GCPRO1 (fn);
2285 gcpro1.nvars = 3;
2286 RETURN_UNGCPRO (Ffuncall (3, &fn));
2287 #endif /* not NO_ARG_ARRAY */
2290 /* Call function fn with 3 arguments arg1, arg2, arg3 */
2291 /* ARGSUSED */
2292 Lisp_Object
2293 call3 (fn, arg1, arg2, arg3)
2294 Lisp_Object fn, arg1, arg2, arg3;
2296 struct gcpro gcpro1;
2297 #ifdef NO_ARG_ARRAY
2298 Lisp_Object args[4];
2299 args[0] = fn;
2300 args[1] = arg1;
2301 args[2] = arg2;
2302 args[3] = arg3;
2303 GCPRO1 (args[0]);
2304 gcpro1.nvars = 4;
2305 RETURN_UNGCPRO (Ffuncall (4, args));
2306 #else /* not NO_ARG_ARRAY */
2307 GCPRO1 (fn);
2308 gcpro1.nvars = 4;
2309 RETURN_UNGCPRO (Ffuncall (4, &fn));
2310 #endif /* not NO_ARG_ARRAY */
2313 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
2314 /* ARGSUSED */
2315 Lisp_Object
2316 call4 (fn, arg1, arg2, arg3, arg4)
2317 Lisp_Object fn, arg1, arg2, arg3, arg4;
2319 struct gcpro gcpro1;
2320 #ifdef NO_ARG_ARRAY
2321 Lisp_Object args[5];
2322 args[0] = fn;
2323 args[1] = arg1;
2324 args[2] = arg2;
2325 args[3] = arg3;
2326 args[4] = arg4;
2327 GCPRO1 (args[0]);
2328 gcpro1.nvars = 5;
2329 RETURN_UNGCPRO (Ffuncall (5, args));
2330 #else /* not NO_ARG_ARRAY */
2331 GCPRO1 (fn);
2332 gcpro1.nvars = 5;
2333 RETURN_UNGCPRO (Ffuncall (5, &fn));
2334 #endif /* not NO_ARG_ARRAY */
2337 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2338 /* ARGSUSED */
2339 Lisp_Object
2340 call5 (fn, arg1, arg2, arg3, arg4, arg5)
2341 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2343 struct gcpro gcpro1;
2344 #ifdef NO_ARG_ARRAY
2345 Lisp_Object args[6];
2346 args[0] = fn;
2347 args[1] = arg1;
2348 args[2] = arg2;
2349 args[3] = arg3;
2350 args[4] = arg4;
2351 args[5] = arg5;
2352 GCPRO1 (args[0]);
2353 gcpro1.nvars = 6;
2354 RETURN_UNGCPRO (Ffuncall (6, args));
2355 #else /* not NO_ARG_ARRAY */
2356 GCPRO1 (fn);
2357 gcpro1.nvars = 6;
2358 RETURN_UNGCPRO (Ffuncall (6, &fn));
2359 #endif /* not NO_ARG_ARRAY */
2362 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2363 /* ARGSUSED */
2364 Lisp_Object
2365 call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2366 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2368 struct gcpro gcpro1;
2369 #ifdef NO_ARG_ARRAY
2370 Lisp_Object args[7];
2371 args[0] = fn;
2372 args[1] = arg1;
2373 args[2] = arg2;
2374 args[3] = arg3;
2375 args[4] = arg4;
2376 args[5] = arg5;
2377 args[6] = arg6;
2378 GCPRO1 (args[0]);
2379 gcpro1.nvars = 7;
2380 RETURN_UNGCPRO (Ffuncall (7, args));
2381 #else /* not NO_ARG_ARRAY */
2382 GCPRO1 (fn);
2383 gcpro1.nvars = 7;
2384 RETURN_UNGCPRO (Ffuncall (7, &fn));
2385 #endif /* not NO_ARG_ARRAY */
2388 DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
2389 "Call first argument as a function, passing remaining arguments to it.\n\
2390 Return the value that function returns.\n\
2391 Thus, (funcall 'cons 'x 'y) returns (x . y).")
2392 (nargs, args)
2393 int nargs;
2394 Lisp_Object *args;
2396 Lisp_Object fun;
2397 Lisp_Object funcar;
2398 int numargs = nargs - 1;
2399 Lisp_Object lisp_numargs;
2400 Lisp_Object val;
2401 struct backtrace backtrace;
2402 register Lisp_Object *internal_args;
2403 register int i;
2405 QUIT;
2406 if (consing_since_gc > gc_cons_threshold)
2407 Fgarbage_collect ();
2409 if (++lisp_eval_depth > max_lisp_eval_depth)
2411 if (max_lisp_eval_depth < 100)
2412 max_lisp_eval_depth = 100;
2413 if (lisp_eval_depth > max_lisp_eval_depth)
2414 error ("Lisp nesting exceeds max-lisp-eval-depth");
2417 backtrace.next = backtrace_list;
2418 backtrace_list = &backtrace;
2419 backtrace.function = &args[0];
2420 backtrace.args = &args[1];
2421 backtrace.nargs = nargs - 1;
2422 backtrace.evalargs = 0;
2423 backtrace.debug_on_exit = 0;
2425 if (debug_on_next_call)
2426 do_debug_on_call (Qlambda);
2428 retry:
2430 fun = args[0];
2432 fun = Findirect_function (fun);
2434 if (SUBRP (fun))
2436 if (numargs < XSUBR (fun)->min_args
2437 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2439 XSETFASTINT (lisp_numargs, numargs);
2440 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (lisp_numargs, Qnil)));
2443 if (XSUBR (fun)->max_args == UNEVALLED)
2444 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2446 if (XSUBR (fun)->max_args == MANY)
2448 val = (*XSUBR (fun)->function) (numargs, args + 1);
2449 goto done;
2452 if (XSUBR (fun)->max_args > numargs)
2454 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
2455 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
2456 for (i = numargs; i < XSUBR (fun)->max_args; i++)
2457 internal_args[i] = Qnil;
2459 else
2460 internal_args = args + 1;
2461 switch (XSUBR (fun)->max_args)
2463 case 0:
2464 val = (*XSUBR (fun)->function) ();
2465 goto done;
2466 case 1:
2467 val = (*XSUBR (fun)->function) (internal_args[0]);
2468 goto done;
2469 case 2:
2470 val = (*XSUBR (fun)->function) (internal_args[0],
2471 internal_args[1]);
2472 goto done;
2473 case 3:
2474 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2475 internal_args[2]);
2476 goto done;
2477 case 4:
2478 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2479 internal_args[2],
2480 internal_args[3]);
2481 goto done;
2482 case 5:
2483 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2484 internal_args[2], internal_args[3],
2485 internal_args[4]);
2486 goto done;
2487 case 6:
2488 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2489 internal_args[2], internal_args[3],
2490 internal_args[4], internal_args[5]);
2491 goto done;
2492 case 7:
2493 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2494 internal_args[2], internal_args[3],
2495 internal_args[4], internal_args[5],
2496 internal_args[6]);
2497 goto done;
2499 case 8:
2500 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2501 internal_args[2], internal_args[3],
2502 internal_args[4], internal_args[5],
2503 internal_args[6], internal_args[7]);
2504 goto done;
2506 default:
2508 /* If a subr takes more than 8 arguments without using MANY
2509 or UNEVALLED, we need to extend this function to support it.
2510 Until this is done, there is no way to call the function. */
2511 abort ();
2514 if (COMPILEDP (fun))
2515 val = funcall_lambda (fun, numargs, args + 1);
2516 else
2518 if (!CONSP (fun))
2519 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2520 funcar = Fcar (fun);
2521 if (!SYMBOLP (funcar))
2522 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2523 if (EQ (funcar, Qlambda))
2524 val = funcall_lambda (fun, numargs, args + 1);
2525 else if (EQ (funcar, Qmocklisp))
2526 val = ml_apply (fun, Flist (numargs, args + 1));
2527 else if (EQ (funcar, Qautoload))
2529 do_autoload (fun, args[0]);
2530 goto retry;
2532 else
2533 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2535 done:
2536 lisp_eval_depth--;
2537 if (backtrace.debug_on_exit)
2538 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2539 backtrace_list = backtrace.next;
2540 return val;
2543 Lisp_Object
2544 apply_lambda (fun, args, eval_flag)
2545 Lisp_Object fun, args;
2546 int eval_flag;
2548 Lisp_Object args_left;
2549 Lisp_Object numargs;
2550 register Lisp_Object *arg_vector;
2551 struct gcpro gcpro1, gcpro2, gcpro3;
2552 register int i;
2553 register Lisp_Object tem;
2555 numargs = Flength (args);
2556 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2557 args_left = args;
2559 GCPRO3 (*arg_vector, args_left, fun);
2560 gcpro1.nvars = 0;
2562 for (i = 0; i < XINT (numargs);)
2564 tem = Fcar (args_left), args_left = Fcdr (args_left);
2565 if (eval_flag) tem = Feval (tem);
2566 arg_vector[i++] = tem;
2567 gcpro1.nvars = i;
2570 UNGCPRO;
2572 if (eval_flag)
2574 backtrace_list->args = arg_vector;
2575 backtrace_list->nargs = i;
2577 backtrace_list->evalargs = 0;
2578 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
2580 /* Do the debug-on-exit now, while arg_vector still exists. */
2581 if (backtrace_list->debug_on_exit)
2582 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
2583 /* Don't do it again when we return to eval. */
2584 backtrace_list->debug_on_exit = 0;
2585 return tem;
2588 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2589 and return the result of evaluation.
2590 FUN must be either a lambda-expression or a compiled-code object. */
2592 Lisp_Object
2593 funcall_lambda (fun, nargs, arg_vector)
2594 Lisp_Object fun;
2595 int nargs;
2596 register Lisp_Object *arg_vector;
2598 Lisp_Object val, tem;
2599 register Lisp_Object syms_left;
2600 Lisp_Object numargs;
2601 register Lisp_Object next;
2602 int count = specpdl_ptr - specpdl;
2603 register int i;
2604 int optional = 0, rest = 0;
2606 specbind (Qmocklisp_arguments, Qt); /* t means NOT mocklisp! */
2608 XSETFASTINT (numargs, nargs);
2610 if (CONSP (fun))
2611 syms_left = Fcar (Fcdr (fun));
2612 else if (COMPILEDP (fun))
2613 syms_left = XVECTOR (fun)->contents[COMPILED_ARGLIST];
2614 else abort ();
2616 i = 0;
2617 for (; !NILP (syms_left); syms_left = Fcdr (syms_left))
2619 QUIT;
2620 next = Fcar (syms_left);
2621 while (!SYMBOLP (next))
2622 next = Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2623 if (EQ (next, Qand_rest))
2624 rest = 1;
2625 else if (EQ (next, Qand_optional))
2626 optional = 1;
2627 else if (rest)
2629 specbind (next, Flist (nargs - i, &arg_vector[i]));
2630 i = nargs;
2632 else if (i < nargs)
2634 tem = arg_vector[i++];
2635 specbind (next, tem);
2637 else if (!optional)
2638 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2639 else
2640 specbind (next, Qnil);
2643 if (i < nargs)
2644 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2646 if (CONSP (fun))
2647 val = Fprogn (Fcdr (Fcdr (fun)));
2648 else
2650 /* If we have not actually read the bytecode string
2651 and constants vector yet, fetch them from the file. */
2652 if (CONSP (XVECTOR (fun)->contents[COMPILED_BYTECODE]))
2653 Ffetch_bytecode (fun);
2654 val = Fbyte_code (XVECTOR (fun)->contents[COMPILED_BYTECODE],
2655 XVECTOR (fun)->contents[COMPILED_CONSTANTS],
2656 XVECTOR (fun)->contents[COMPILED_STACK_DEPTH]);
2658 return unbind_to (count, val);
2661 DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
2662 1, 1, 0,
2663 "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
2664 (object)
2665 Lisp_Object object;
2667 Lisp_Object tem;
2669 if (COMPILEDP (object)
2670 && CONSP (XVECTOR (object)->contents[COMPILED_BYTECODE]))
2672 tem = read_doc_string (XVECTOR (object)->contents[COMPILED_BYTECODE]);
2673 if (!CONSP (tem))
2674 error ("invalid byte code");
2675 XVECTOR (object)->contents[COMPILED_BYTECODE] = XCAR (tem);
2676 XVECTOR (object)->contents[COMPILED_CONSTANTS] = XCDR (tem);
2678 return object;
2681 void
2682 grow_specpdl ()
2684 register int count = specpdl_ptr - specpdl;
2685 if (specpdl_size >= max_specpdl_size)
2687 if (max_specpdl_size < 400)
2688 max_specpdl_size = 400;
2689 if (specpdl_size >= max_specpdl_size)
2691 if (!NILP (Vdebug_on_error))
2692 /* Leave room for some specpdl in the debugger. */
2693 max_specpdl_size = specpdl_size + 100;
2694 Fsignal (Qerror,
2695 Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil));
2698 specpdl_size *= 2;
2699 if (specpdl_size > max_specpdl_size)
2700 specpdl_size = max_specpdl_size;
2701 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
2702 specpdl_ptr = specpdl + count;
2705 void
2706 specbind (symbol, value)
2707 Lisp_Object symbol, value;
2709 Lisp_Object ovalue;
2711 CHECK_SYMBOL (symbol, 0);
2713 if (specpdl_ptr == specpdl + specpdl_size)
2714 grow_specpdl ();
2715 specpdl_ptr->symbol = symbol;
2716 specpdl_ptr->func = 0;
2717 specpdl_ptr->old_value = ovalue = find_symbol_value (symbol);
2718 specpdl_ptr++;
2719 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
2720 store_symval_forwarding (symbol, ovalue, value);
2721 else
2722 set_internal (symbol, value, 1);
2725 void
2726 record_unwind_protect (function, arg)
2727 Lisp_Object (*function) P_ ((Lisp_Object));
2728 Lisp_Object arg;
2730 if (specpdl_ptr == specpdl + specpdl_size)
2731 grow_specpdl ();
2732 specpdl_ptr->func = function;
2733 specpdl_ptr->symbol = Qnil;
2734 specpdl_ptr->old_value = arg;
2735 specpdl_ptr++;
2738 Lisp_Object
2739 unbind_to (count, value)
2740 int count;
2741 Lisp_Object value;
2743 int quitf = !NILP (Vquit_flag);
2744 struct gcpro gcpro1;
2746 GCPRO1 (value);
2748 Vquit_flag = Qnil;
2750 while (specpdl_ptr != specpdl + count)
2752 --specpdl_ptr;
2753 if (specpdl_ptr->func != 0)
2754 (*specpdl_ptr->func) (specpdl_ptr->old_value);
2755 /* Note that a "binding" of nil is really an unwind protect,
2756 so in that case the "old value" is a list of forms to evaluate. */
2757 else if (NILP (specpdl_ptr->symbol))
2758 Fprogn (specpdl_ptr->old_value);
2759 else
2760 set_internal (specpdl_ptr->symbol, specpdl_ptr->old_value, 1);
2762 if (NILP (Vquit_flag) && quitf) Vquit_flag = Qt;
2764 UNGCPRO;
2766 return value;
2769 #if 0
2771 /* Get the value of symbol's global binding, even if that binding
2772 is not now dynamically visible. */
2774 Lisp_Object
2775 top_level_value (symbol)
2776 Lisp_Object symbol;
2778 register struct specbinding *ptr = specpdl;
2780 CHECK_SYMBOL (symbol, 0);
2781 for (; ptr != specpdl_ptr; ptr++)
2783 if (EQ (ptr->symbol, symbol))
2784 return ptr->old_value;
2786 return Fsymbol_value (symbol);
2789 Lisp_Object
2790 top_level_set (symbol, newval)
2791 Lisp_Object symbol, newval;
2793 register struct specbinding *ptr = specpdl;
2795 CHECK_SYMBOL (symbol, 0);
2796 for (; ptr != specpdl_ptr; ptr++)
2798 if (EQ (ptr->symbol, symbol))
2800 ptr->old_value = newval;
2801 return newval;
2804 return Fset (symbol, newval);
2807 #endif /* 0 */
2809 DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
2810 "Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.\n\
2811 The debugger is entered when that frame exits, if the flag is non-nil.")
2812 (level, flag)
2813 Lisp_Object level, flag;
2815 register struct backtrace *backlist = backtrace_list;
2816 register int i;
2818 CHECK_NUMBER (level, 0);
2820 for (i = 0; backlist && i < XINT (level); i++)
2822 backlist = backlist->next;
2825 if (backlist)
2826 backlist->debug_on_exit = !NILP (flag);
2828 return flag;
2831 DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
2832 "Print a trace of Lisp function calls currently active.\n\
2833 Output stream used is value of `standard-output'.")
2836 register struct backtrace *backlist = backtrace_list;
2837 register int i;
2838 Lisp_Object tail;
2839 Lisp_Object tem;
2840 extern Lisp_Object Vprint_level;
2841 struct gcpro gcpro1;
2843 XSETFASTINT (Vprint_level, 3);
2845 tail = Qnil;
2846 GCPRO1 (tail);
2848 while (backlist)
2850 write_string (backlist->debug_on_exit ? "* " : " ", 2);
2851 if (backlist->nargs == UNEVALLED)
2853 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
2854 write_string ("\n", -1);
2856 else
2858 tem = *backlist->function;
2859 Fprin1 (tem, Qnil); /* This can QUIT */
2860 write_string ("(", -1);
2861 if (backlist->nargs == MANY)
2863 for (tail = *backlist->args, i = 0;
2864 !NILP (tail);
2865 tail = Fcdr (tail), i++)
2867 if (i) write_string (" ", -1);
2868 Fprin1 (Fcar (tail), Qnil);
2871 else
2873 for (i = 0; i < backlist->nargs; i++)
2875 if (i) write_string (" ", -1);
2876 Fprin1 (backlist->args[i], Qnil);
2879 write_string (")\n", -1);
2881 backlist = backlist->next;
2884 Vprint_level = Qnil;
2885 UNGCPRO;
2886 return Qnil;
2889 DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, "",
2890 "Return the function and arguments NFRAMES up from current execution point.\n\
2891 If that frame has not evaluated the arguments yet (or is a special form),\n\
2892 the value is (nil FUNCTION ARG-FORMS...).\n\
2893 If that frame has evaluated its arguments and called its function already,\n\
2894 the value is (t FUNCTION ARG-VALUES...).\n\
2895 A &rest arg is represented as the tail of the list ARG-VALUES.\n\
2896 FUNCTION is whatever was supplied as car of evaluated list,\n\
2897 or a lambda expression for macro calls.\n\
2898 If NFRAMES is more than the number of frames, the value is nil.")
2899 (nframes)
2900 Lisp_Object nframes;
2902 register struct backtrace *backlist = backtrace_list;
2903 register int i;
2904 Lisp_Object tem;
2906 CHECK_NATNUM (nframes, 0);
2908 /* Find the frame requested. */
2909 for (i = 0; backlist && i < XFASTINT (nframes); i++)
2910 backlist = backlist->next;
2912 if (!backlist)
2913 return Qnil;
2914 if (backlist->nargs == UNEVALLED)
2915 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
2916 else
2918 if (backlist->nargs == MANY)
2919 tem = *backlist->args;
2920 else
2921 tem = Flist (backlist->nargs, backlist->args);
2923 return Fcons (Qt, Fcons (*backlist->function, tem));
2927 void
2928 syms_of_eval ()
2930 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
2931 "*Limit on number of Lisp variable bindings & unwind-protects.\n\
2932 If Lisp code tries to make more than this many at once,\n\
2933 an error is signaled.");
2935 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
2936 "*Limit on depth in `eval', `apply' and `funcall' before error.\n\
2937 This limit is to catch infinite recursions for you before they cause\n\
2938 actual stack overflow in C, which would be fatal for Emacs.\n\
2939 You can safely make it considerably larger than its default value,\n\
2940 if that proves inconveniently small.");
2942 DEFVAR_LISP ("quit-flag", &Vquit_flag,
2943 "Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.\n\
2944 Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.");
2945 Vquit_flag = Qnil;
2947 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
2948 "Non-nil inhibits C-g quitting from happening immediately.\n\
2949 Note that `quit-flag' will still be set by typing C-g,\n\
2950 so a quit will be signaled as soon as `inhibit-quit' is nil.\n\
2951 To prevent this happening, set `quit-flag' to nil\n\
2952 before making `inhibit-quit' nil.");
2953 Vinhibit_quit = Qnil;
2955 Qinhibit_quit = intern ("inhibit-quit");
2956 staticpro (&Qinhibit_quit);
2958 Qautoload = intern ("autoload");
2959 staticpro (&Qautoload);
2961 Qdebug_on_error = intern ("debug-on-error");
2962 staticpro (&Qdebug_on_error);
2964 Qmacro = intern ("macro");
2965 staticpro (&Qmacro);
2967 /* Note that the process handling also uses Qexit, but we don't want
2968 to staticpro it twice, so we just do it here. */
2969 Qexit = intern ("exit");
2970 staticpro (&Qexit);
2972 Qinteractive = intern ("interactive");
2973 staticpro (&Qinteractive);
2975 Qcommandp = intern ("commandp");
2976 staticpro (&Qcommandp);
2978 Qdefun = intern ("defun");
2979 staticpro (&Qdefun);
2981 Qand_rest = intern ("&rest");
2982 staticpro (&Qand_rest);
2984 Qand_optional = intern ("&optional");
2985 staticpro (&Qand_optional);
2987 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
2988 "*Non-nil means automatically display a backtrace buffer\n\
2989 after any error that is handled by the editor command loop.\n\
2990 If the value is a list, an error only means to display a backtrace\n\
2991 if one of its condition symbols appears in the list.");
2992 Vstack_trace_on_error = Qnil;
2994 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
2995 "*Non-nil means enter debugger if an error is signaled.\n\
2996 Does not apply to errors handled by `condition-case'.\n\
2997 If the value is a list, an error only means to enter the debugger\n\
2998 if one of its condition symbols appears in the list.\n\
2999 See also variable `debug-on-quit'.");
3000 Vdebug_on_error = Qnil;
3002 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
3003 "*List of errors for which the debugger should not be called.\n\
3004 Each element may be a condition-name or a regexp that matches error messages.\n\
3005 If any element applies to a given error, that error skips the debugger\n\
3006 and just returns to top level.\n\
3007 This overrides the variable `debug-on-error'.\n\
3008 It does not apply to errors handled by `condition-case'.");
3009 Vdebug_ignored_errors = Qnil;
3011 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
3012 "*Non-nil means enter debugger if quit is signaled (C-g, for example).\n\
3013 Does not apply if quit is handled by a `condition-case'.");
3014 debug_on_quit = 0;
3016 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
3017 "Non-nil means enter debugger before next `eval', `apply' or `funcall'.");
3019 DEFVAR_LISP ("debugger", &Vdebugger,
3020 "Function to call to invoke debugger.\n\
3021 If due to frame exit, args are `exit' and the value being returned;\n\
3022 this function's value will be returned instead of that.\n\
3023 If due to error, args are `error' and a list of the args to `signal'.\n\
3024 If due to `apply' or `funcall' entry, one arg, `lambda'.\n\
3025 If due to `eval' entry, one arg, t.");
3026 Vdebugger = Qnil;
3028 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
3029 "If non-nil, this is a function for `signal' to call.\n\
3030 It receives the same arguments that `signal' was given.\n\
3031 The Edebug package uses this to regain control.");
3032 Vsignal_hook_function = Qnil;
3034 Qmocklisp_arguments = intern ("mocklisp-arguments");
3035 staticpro (&Qmocklisp_arguments);
3036 DEFVAR_LISP ("mocklisp-arguments", &Vmocklisp_arguments,
3037 "While in a mocklisp function, the list of its unevaluated args.");
3038 Vmocklisp_arguments = Qt;
3040 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
3041 "*Non-nil means call the debugger regardless of condition handlers.\n\
3042 Note that `debug-on-error', `debug-on-quit' and friends\n\
3043 still determine whether to handle the particular condition.");
3044 Vdebug_on_signal = Qnil;
3046 Vrun_hooks = intern ("run-hooks");
3047 staticpro (&Vrun_hooks);
3049 staticpro (&Vautoload_queue);
3050 Vautoload_queue = Qnil;
3052 defsubr (&Sor);
3053 defsubr (&Sand);
3054 defsubr (&Sif);
3055 defsubr (&Scond);
3056 defsubr (&Sprogn);
3057 defsubr (&Sprog1);
3058 defsubr (&Sprog2);
3059 defsubr (&Ssetq);
3060 defsubr (&Squote);
3061 defsubr (&Sfunction);
3062 defsubr (&Sdefun);
3063 defsubr (&Sdefmacro);
3064 defsubr (&Sdefvar);
3065 defsubr (&Sdefconst);
3066 defsubr (&Suser_variable_p);
3067 defsubr (&Slet);
3068 defsubr (&SletX);
3069 defsubr (&Swhile);
3070 defsubr (&Smacroexpand);
3071 defsubr (&Scatch);
3072 defsubr (&Sthrow);
3073 defsubr (&Sunwind_protect);
3074 defsubr (&Scondition_case);
3075 defsubr (&Ssignal);
3076 defsubr (&Sinteractive_p);
3077 defsubr (&Scommandp);
3078 defsubr (&Sautoload);
3079 defsubr (&Seval);
3080 defsubr (&Sapply);
3081 defsubr (&Sfuncall);
3082 defsubr (&Srun_hooks);
3083 defsubr (&Srun_hook_with_args);
3084 defsubr (&Srun_hook_with_args_until_success);
3085 defsubr (&Srun_hook_with_args_until_failure);
3086 defsubr (&Sfetch_bytecode);
3087 defsubr (&Sbacktrace_debug);
3088 defsubr (&Sbacktrace);
3089 defsubr (&Sbacktrace_frame);