(mail-fetch-field): New arg LIST.
[bpt/emacs.git] / src / eval.c
1 /* Evaluator for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995 Free Software Foundation, Inc.
3
4 This file is part of GNU Emacs.
5
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.
10
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.
15
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. */
20
21
22 #include <config.h>
23 #include "lisp.h"
24 #include "blockinput.h"
25
26 #ifndef standalone
27 #include "commands.h"
28 #include "keyboard.h"
29 #else
30 #define INTERACTIVE 1
31 #endif
32
33 #include <setjmp.h>
34
35 /* This definition is duplicated in alloc.c and keyboard.c */
36 /* Putting it in lisp.h makes cc bomb out! */
37
38 struct backtrace
39 {
40 struct backtrace *next;
41 Lisp_Object *function;
42 Lisp_Object *args; /* Points to vector of args. */
43 int nargs; /* Length of vector.
44 If nargs is UNEVALLED, args points to slot holding
45 list of unevalled args */
46 char evalargs;
47 /* Nonzero means call value of debugger when done with this operation. */
48 char debug_on_exit;
49 };
50
51 struct backtrace *backtrace_list;
52
53 /* This structure helps implement the `catch' and `throw' control
54 structure. A struct catchtag contains all the information needed
55 to restore the state of the interpreter after a non-local jump.
56
57 Handlers for error conditions (represented by `struct handler'
58 structures) just point to a catch tag to do the cleanup required
59 for their jumps.
60
61 catchtag structures are chained together in the C calling stack;
62 the `next' member points to the next outer catchtag.
63
64 A call like (throw TAG VAL) searches for a catchtag whose `tag'
65 member is TAG, and then unbinds to it. The `val' member is used to
66 hold VAL while the stack is unwound; `val' is returned as the value
67 of the catch form.
68
69 All the other members are concerned with restoring the interpreter
70 state. */
71 struct catchtag
72 {
73 Lisp_Object tag;
74 Lisp_Object val;
75 struct catchtag *next;
76 struct gcpro *gcpro;
77 jmp_buf jmp;
78 struct backtrace *backlist;
79 struct handler *handlerlist;
80 int lisp_eval_depth;
81 int pdlcount;
82 int poll_suppress_count;
83 };
84
85 struct catchtag *catchlist;
86
87 Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
88 Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
89 Lisp_Object Qmocklisp_arguments, Vmocklisp_arguments, Qmocklisp;
90 Lisp_Object Qand_rest, Qand_optional;
91 Lisp_Object Qdebug_on_error;
92
93 /* This holds either the symbol `run-hooks' or nil.
94 It is nil at an early stage of startup, and when Emacs
95 is shutting down. */
96 Lisp_Object Vrun_hooks;
97
98 /* Non-nil means record all fset's and provide's, to be undone
99 if the file being autoloaded is not fully loaded.
100 They are recorded by being consed onto the front of Vautoload_queue:
101 (FUN . ODEF) for a defun, (OFEATURES . nil) for a provide. */
102
103 Lisp_Object Vautoload_queue;
104
105 /* Current number of specbindings allocated in specpdl. */
106 int specpdl_size;
107
108 /* Pointer to beginning of specpdl. */
109 struct specbinding *specpdl;
110
111 /* Pointer to first unused element in specpdl. */
112 struct specbinding *specpdl_ptr;
113
114 /* Maximum size allowed for specpdl allocation */
115 int max_specpdl_size;
116
117 /* Depth in Lisp evaluations and function calls. */
118 int lisp_eval_depth;
119
120 /* Maximum allowed depth in Lisp evaluations and function calls. */
121 int max_lisp_eval_depth;
122
123 /* Nonzero means enter debugger before next function call */
124 int debug_on_next_call;
125
126 /* List of conditions (non-nil atom means all) which cause a backtrace
127 if an error is handled by the command loop's error handler. */
128 Lisp_Object Vstack_trace_on_error;
129
130 /* List of conditions (non-nil atom means all) which enter the debugger
131 if an error is handled by the command loop's error handler. */
132 Lisp_Object Vdebug_on_error;
133
134 /* List of conditions and regexps specifying error messages which
135 do not enter the debugger even if Vdebug_on_errors says they should. */
136 Lisp_Object Vdebug_ignored_errors;
137
138 /* Non-nil means call the debugger even if the error will be handled. */
139 Lisp_Object Vdebug_on_signal;
140
141 /* Hook for edebug to use. */
142 Lisp_Object Vsignal_hook_function;
143
144 /* Nonzero means enter debugger if a quit signal
145 is handled by the command loop's error handler. */
146 int debug_on_quit;
147
148 /* The value of num_nonmacro_input_chars as of the last time we
149 started to enter the debugger. If we decide to enter the debugger
150 again when this is still equal to num_nonmacro_input_chars, then we
151 know that the debugger itself has an error, and we should just
152 signal the error instead of entering an infinite loop of debugger
153 invocations. */
154 int when_entered_debugger;
155
156 Lisp_Object Vdebugger;
157
158 void specbind (), record_unwind_protect ();
159
160 Lisp_Object run_hook_with_args ();
161
162 Lisp_Object funcall_lambda ();
163 extern Lisp_Object ml_apply (); /* Apply a mocklisp function to unevaluated argument list */
164
165 init_eval_once ()
166 {
167 specpdl_size = 50;
168 specpdl = (struct specbinding *) xmalloc (specpdl_size * sizeof (struct specbinding));
169 specpdl_ptr = specpdl;
170 max_specpdl_size = 600;
171 max_lisp_eval_depth = 200;
172
173 Vrun_hooks = Qnil;
174 }
175
176 init_eval ()
177 {
178 specpdl_ptr = specpdl;
179 catchlist = 0;
180 handlerlist = 0;
181 backtrace_list = 0;
182 Vquit_flag = Qnil;
183 debug_on_next_call = 0;
184 lisp_eval_depth = 0;
185 /* This is less than the initial value of num_nonmacro_input_chars. */
186 when_entered_debugger = -1;
187 }
188
189 Lisp_Object
190 call_debugger (arg)
191 Lisp_Object arg;
192 {
193 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
194 max_lisp_eval_depth = lisp_eval_depth + 20;
195 if (specpdl_size + 40 > max_specpdl_size)
196 max_specpdl_size = specpdl_size + 40;
197 debug_on_next_call = 0;
198 when_entered_debugger = num_nonmacro_input_chars;
199 return apply1 (Vdebugger, arg);
200 }
201
202 do_debug_on_call (code)
203 Lisp_Object code;
204 {
205 debug_on_next_call = 0;
206 backtrace_list->debug_on_exit = 1;
207 call_debugger (Fcons (code, Qnil));
208 }
209 \f
210 /* NOTE!!! Every function that can call EVAL must protect its args
211 and temporaries from garbage collection while it needs them.
212 The definition of `For' shows what you have to do. */
213
214 DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
215 "Eval args until one of them yields non-nil, then return that value.\n\
216 The remaining args are not evalled at all.\n\
217 If all args return nil, return nil.")
218 (args)
219 Lisp_Object args;
220 {
221 register Lisp_Object val;
222 Lisp_Object args_left;
223 struct gcpro gcpro1;
224
225 if (NILP(args))
226 return Qnil;
227
228 args_left = args;
229 GCPRO1 (args_left);
230
231 do
232 {
233 val = Feval (Fcar (args_left));
234 if (!NILP (val))
235 break;
236 args_left = Fcdr (args_left);
237 }
238 while (!NILP(args_left));
239
240 UNGCPRO;
241 return val;
242 }
243
244 DEFUN ("and", Fand, Sand, 0, UNEVALLED, 0,
245 "Eval args until one of them yields nil, then return nil.\n\
246 The remaining args are not evalled at all.\n\
247 If no arg yields nil, return the last arg's value.")
248 (args)
249 Lisp_Object args;
250 {
251 register Lisp_Object val;
252 Lisp_Object args_left;
253 struct gcpro gcpro1;
254
255 if (NILP(args))
256 return Qt;
257
258 args_left = args;
259 GCPRO1 (args_left);
260
261 do
262 {
263 val = Feval (Fcar (args_left));
264 if (NILP (val))
265 break;
266 args_left = Fcdr (args_left);
267 }
268 while (!NILP(args_left));
269
270 UNGCPRO;
271 return val;
272 }
273
274 DEFUN ("if", Fif, Sif, 2, UNEVALLED, 0,
275 "(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...\n\
276 Returns the value of THEN or the value of the last of the ELSE's.\n\
277 THEN must be one expression, but ELSE... can be zero or more expressions.\n\
278 If COND yields nil, and there are no ELSE's, the value is nil.")
279 (args)
280 Lisp_Object args;
281 {
282 register Lisp_Object cond;
283 struct gcpro gcpro1;
284
285 GCPRO1 (args);
286 cond = Feval (Fcar (args));
287 UNGCPRO;
288
289 if (!NILP (cond))
290 return Feval (Fcar (Fcdr (args)));
291 return Fprogn (Fcdr (Fcdr (args)));
292 }
293
294 DEFUN ("cond", Fcond, Scond, 0, UNEVALLED, 0,
295 "(cond CLAUSES...): try each clause until one succeeds.\n\
296 Each clause looks like (CONDITION BODY...). CONDITION is evaluated\n\
297 and, if the value is non-nil, this clause succeeds:\n\
298 then the expressions in BODY are evaluated and the last one's\n\
299 value is the value of the cond-form.\n\
300 If no clause succeeds, cond returns nil.\n\
301 If a clause has one element, as in (CONDITION),\n\
302 CONDITION's value if non-nil is returned from the cond-form.")
303 (args)
304 Lisp_Object args;
305 {
306 register Lisp_Object clause, val;
307 struct gcpro gcpro1;
308
309 val = Qnil;
310 GCPRO1 (args);
311 while (!NILP (args))
312 {
313 clause = Fcar (args);
314 val = Feval (Fcar (clause));
315 if (!NILP (val))
316 {
317 if (!EQ (XCONS (clause)->cdr, Qnil))
318 val = Fprogn (XCONS (clause)->cdr);
319 break;
320 }
321 args = XCONS (args)->cdr;
322 }
323 UNGCPRO;
324
325 return val;
326 }
327
328 DEFUN ("progn", Fprogn, Sprogn, 0, UNEVALLED, 0,
329 "(progn BODY...): eval BODY forms sequentially and return value of last one.")
330 (args)
331 Lisp_Object args;
332 {
333 register Lisp_Object val, tem;
334 Lisp_Object args_left;
335 struct gcpro gcpro1;
336
337 /* In Mocklisp code, symbols at the front of the progn arglist
338 are to be bound to zero. */
339 if (!EQ (Vmocklisp_arguments, Qt))
340 {
341 val = make_number (0);
342 while (!NILP (args) && (tem = Fcar (args), SYMBOLP (tem)))
343 {
344 QUIT;
345 specbind (tem, val), args = Fcdr (args);
346 }
347 }
348
349 if (NILP(args))
350 return Qnil;
351
352 args_left = args;
353 GCPRO1 (args_left);
354
355 do
356 {
357 val = Feval (Fcar (args_left));
358 args_left = Fcdr (args_left);
359 }
360 while (!NILP(args_left));
361
362 UNGCPRO;
363 return val;
364 }
365
366 DEFUN ("prog1", Fprog1, Sprog1, 1, UNEVALLED, 0,
367 "(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.\n\
368 The value of FIRST is saved during the evaluation of the remaining args,\n\
369 whose values are discarded.")
370 (args)
371 Lisp_Object args;
372 {
373 Lisp_Object val;
374 register Lisp_Object args_left;
375 struct gcpro gcpro1, gcpro2;
376 register int argnum = 0;
377
378 if (NILP(args))
379 return Qnil;
380
381 args_left = args;
382 val = Qnil;
383 GCPRO2 (args, val);
384
385 do
386 {
387 if (!(argnum++))
388 val = Feval (Fcar (args_left));
389 else
390 Feval (Fcar (args_left));
391 args_left = Fcdr (args_left);
392 }
393 while (!NILP(args_left));
394
395 UNGCPRO;
396 return val;
397 }
398
399 DEFUN ("prog2", Fprog2, Sprog2, 2, UNEVALLED, 0,
400 "(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.\n\
401 The value of Y is saved during the evaluation of the remaining args,\n\
402 whose values are discarded.")
403 (args)
404 Lisp_Object args;
405 {
406 Lisp_Object val;
407 register Lisp_Object args_left;
408 struct gcpro gcpro1, gcpro2;
409 register int argnum = -1;
410
411 val = Qnil;
412
413 if (NILP (args))
414 return Qnil;
415
416 args_left = args;
417 val = Qnil;
418 GCPRO2 (args, val);
419
420 do
421 {
422 if (!(argnum++))
423 val = Feval (Fcar (args_left));
424 else
425 Feval (Fcar (args_left));
426 args_left = Fcdr (args_left);
427 }
428 while (!NILP (args_left));
429
430 UNGCPRO;
431 return val;
432 }
433
434 DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0,
435 "(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.\n\
436 The symbols SYM are variables; they are literal (not evaluated).\n\
437 The values VAL are expressions; they are evaluated.\n\
438 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.\n\
439 The second VAL is not computed until after the first SYM is set, and so on;\n\
440 each VAL can use the new value of variables set earlier in the `setq'.\n\
441 The return value of the `setq' form is the value of the last VAL.")
442 (args)
443 Lisp_Object args;
444 {
445 register Lisp_Object args_left;
446 register Lisp_Object val, sym;
447 struct gcpro gcpro1;
448
449 if (NILP(args))
450 return Qnil;
451
452 args_left = args;
453 GCPRO1 (args);
454
455 do
456 {
457 val = Feval (Fcar (Fcdr (args_left)));
458 sym = Fcar (args_left);
459 Fset (sym, val);
460 args_left = Fcdr (Fcdr (args_left));
461 }
462 while (!NILP(args_left));
463
464 UNGCPRO;
465 return val;
466 }
467
468 DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0,
469 "Return the argument, without evaluating it. `(quote x)' yields `x'.")
470 (args)
471 Lisp_Object args;
472 {
473 return Fcar (args);
474 }
475
476 DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0,
477 "Like `quote', but preferred for objects which are functions.\n\
478 In byte compilation, `function' causes its argument to be compiled.\n\
479 `quote' cannot do that.")
480 (args)
481 Lisp_Object args;
482 {
483 return Fcar (args);
484 }
485
486 DEFUN ("interactive-p", Finteractive_p, Sinteractive_p, 0, 0, 0,
487 "Return t if function in which this appears was called interactively.\n\
488 This means that the function was called with call-interactively (which\n\
489 includes being called as the binding of a key)\n\
490 and input is currently coming from the keyboard (not in keyboard macro).")
491 ()
492 {
493 register struct backtrace *btp;
494 register Lisp_Object fun;
495
496 if (!INTERACTIVE)
497 return Qnil;
498
499 btp = backtrace_list;
500
501 /* If this isn't a byte-compiled function, there may be a frame at
502 the top for Finteractive_p itself. If so, skip it. */
503 fun = Findirect_function (*btp->function);
504 if (SUBRP (fun) && XSUBR (fun) == &Sinteractive_p)
505 btp = btp->next;
506
507 /* If we're running an Emacs 18-style byte-compiled function, there
508 may be a frame for Fbytecode. Now, given the strictest
509 definition, this function isn't really being called
510 interactively, but because that's the way Emacs 18 always builds
511 byte-compiled functions, we'll accept it for now. */
512 if (EQ (*btp->function, Qbytecode))
513 btp = btp->next;
514
515 /* If this isn't a byte-compiled function, then we may now be
516 looking at several frames for special forms. Skip past them. */
517 while (btp &&
518 btp->nargs == UNEVALLED)
519 btp = btp->next;
520
521 /* btp now points at the frame of the innermost function that isn't
522 a special form, ignoring frames for Finteractive_p and/or
523 Fbytecode at the top. If this frame is for a built-in function
524 (such as load or eval-region) return nil. */
525 fun = Findirect_function (*btp->function);
526 if (SUBRP (fun))
527 return Qnil;
528 /* btp points to the frame of a Lisp function that called interactive-p.
529 Return t if that function was called interactively. */
530 if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively))
531 return Qt;
532 return Qnil;
533 }
534
535 DEFUN ("defun", Fdefun, Sdefun, 2, UNEVALLED, 0,
536 "(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.\n\
537 The definition is (lambda ARGLIST [DOCSTRING] BODY...).\n\
538 See also the function `interactive'.")
539 (args)
540 Lisp_Object args;
541 {
542 register Lisp_Object fn_name;
543 register Lisp_Object defn;
544
545 fn_name = Fcar (args);
546 defn = Fcons (Qlambda, Fcdr (args));
547 if (!NILP (Vpurify_flag))
548 defn = Fpurecopy (defn);
549 Ffset (fn_name, defn);
550 LOADHIST_ATTACH (fn_name);
551 return fn_name;
552 }
553
554 DEFUN ("defmacro", Fdefmacro, Sdefmacro, 2, UNEVALLED, 0,
555 "(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.\n\
556 The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).\n\
557 When the macro is called, as in (NAME ARGS...),\n\
558 the function (lambda ARGLIST BODY...) is applied to\n\
559 the list ARGS... as it appears in the expression,\n\
560 and the result should be a form to be evaluated instead of the original.")
561 (args)
562 Lisp_Object args;
563 {
564 register Lisp_Object fn_name;
565 register Lisp_Object defn;
566
567 fn_name = Fcar (args);
568 defn = Fcons (Qmacro, Fcons (Qlambda, Fcdr (args)));
569 if (!NILP (Vpurify_flag))
570 defn = Fpurecopy (defn);
571 Ffset (fn_name, defn);
572 LOADHIST_ATTACH (fn_name);
573 return fn_name;
574 }
575
576 DEFUN ("defvar", Fdefvar, Sdefvar, 1, UNEVALLED, 0,
577 "(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.\n\
578 You are not required to define a variable in order to use it,\n\
579 but the definition can supply documentation and an initial value\n\
580 in a way that tags can recognize.\n\n\
581 INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.\n\
582 If SYMBOL is buffer-local, its default value is what is set;\n\
583 buffer-local values are not affected.\n\
584 INITVALUE and DOCSTRING are optional.\n\
585 If DOCSTRING starts with *, this variable is identified as a user option.\n\
586 This means that M-x set-variable and M-x edit-options recognize it.\n\
587 If INITVALUE is missing, SYMBOL's value is not set.")
588 (args)
589 Lisp_Object args;
590 {
591 register Lisp_Object sym, tem, tail;
592
593 sym = Fcar (args);
594 tail = Fcdr (args);
595 if (!NILP (Fcdr (Fcdr (tail))))
596 error ("too many arguments");
597
598 if (!NILP (tail))
599 {
600 tem = Fdefault_boundp (sym);
601 if (NILP (tem))
602 Fset_default (sym, Feval (Fcar (Fcdr (args))));
603 }
604 tail = Fcdr (Fcdr (args));
605 if (!NILP (Fcar (tail)))
606 {
607 tem = Fcar (tail);
608 if (!NILP (Vpurify_flag))
609 tem = Fpurecopy (tem);
610 Fput (sym, Qvariable_documentation, tem);
611 }
612 LOADHIST_ATTACH (sym);
613 return sym;
614 }
615
616 DEFUN ("defconst", Fdefconst, Sdefconst, 2, UNEVALLED, 0,
617 "(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.\n\
618 The intent is that programs do not change this value, but users may.\n\
619 Always sets the value of SYMBOL to the result of evalling INITVALUE.\n\
620 If SYMBOL is buffer-local, its default value is what is set;\n\
621 buffer-local values are not affected.\n\
622 DOCSTRING is optional.\n\
623 If DOCSTRING starts with *, this variable is identified as a user option.\n\
624 This means that M-x set-variable and M-x edit-options recognize it.\n\n\
625 Note: do not use `defconst' for user options in libraries that are not\n\
626 normally loaded, since it is useful for users to be able to specify\n\
627 their own values for such variables before loading the library.\n\
628 Since `defconst' unconditionally assigns the variable,\n\
629 it would override the user's choice.")
630 (args)
631 Lisp_Object args;
632 {
633 register Lisp_Object sym, tem;
634
635 sym = Fcar (args);
636 if (!NILP (Fcdr (Fcdr (Fcdr (args)))))
637 error ("too many arguments");
638
639 Fset_default (sym, Feval (Fcar (Fcdr (args))));
640 tem = Fcar (Fcdr (Fcdr (args)));
641 if (!NILP (tem))
642 {
643 if (!NILP (Vpurify_flag))
644 tem = Fpurecopy (tem);
645 Fput (sym, Qvariable_documentation, tem);
646 }
647 LOADHIST_ATTACH (sym);
648 return sym;
649 }
650
651 DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0,
652 "Returns t if VARIABLE is intended to be set and modified by users.\n\
653 \(The alternative is a variable used internally in a Lisp program.)\n\
654 Determined by whether the first character of the documentation\n\
655 for the variable is `*'.")
656 (variable)
657 Lisp_Object variable;
658 {
659 Lisp_Object documentation;
660
661 documentation = Fget (variable, Qvariable_documentation);
662 if (INTEGERP (documentation) && XINT (documentation) < 0)
663 return Qt;
664 if (STRINGP (documentation)
665 && ((unsigned char) XSTRING (documentation)->data[0] == '*'))
666 return Qt;
667 /* If it is (STRING . INTEGER), a negative integer means a user variable. */
668 if (CONSP (documentation)
669 && STRINGP (XCONS (documentation)->car)
670 && INTEGERP (XCONS (documentation)->cdr)
671 && XINT (XCONS (documentation)->cdr) < 0)
672 return Qt;
673 return Qnil;
674 }
675 \f
676 DEFUN ("let*", FletX, SletX, 1, UNEVALLED, 0,
677 "(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
678 The value of the last form in BODY is returned.\n\
679 Each element of VARLIST is a symbol (which is bound to nil)\n\
680 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
681 Each VALUEFORM can refer to the symbols already bound by this VARLIST.")
682 (args)
683 Lisp_Object args;
684 {
685 Lisp_Object varlist, val, elt;
686 int count = specpdl_ptr - specpdl;
687 struct gcpro gcpro1, gcpro2, gcpro3;
688
689 GCPRO3 (args, elt, varlist);
690
691 varlist = Fcar (args);
692 while (!NILP (varlist))
693 {
694 QUIT;
695 elt = Fcar (varlist);
696 if (SYMBOLP (elt))
697 specbind (elt, Qnil);
698 else if (! NILP (Fcdr (Fcdr (elt))))
699 Fsignal (Qerror,
700 Fcons (build_string ("`let' bindings can have only one value-form"),
701 elt));
702 else
703 {
704 val = Feval (Fcar (Fcdr (elt)));
705 specbind (Fcar (elt), val);
706 }
707 varlist = Fcdr (varlist);
708 }
709 UNGCPRO;
710 val = Fprogn (Fcdr (args));
711 return unbind_to (count, val);
712 }
713
714 DEFUN ("let", Flet, Slet, 1, UNEVALLED, 0,
715 "(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
716 The value of the last form in BODY is returned.\n\
717 Each element of VARLIST is a symbol (which is bound to nil)\n\
718 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
719 All the VALUEFORMs are evalled before any symbols are bound.")
720 (args)
721 Lisp_Object args;
722 {
723 Lisp_Object *temps, tem;
724 register Lisp_Object elt, varlist;
725 int count = specpdl_ptr - specpdl;
726 register int argnum;
727 struct gcpro gcpro1, gcpro2;
728
729 varlist = Fcar (args);
730
731 /* Make space to hold the values to give the bound variables */
732 elt = Flength (varlist);
733 temps = (Lisp_Object *) alloca (XFASTINT (elt) * sizeof (Lisp_Object));
734
735 /* Compute the values and store them in `temps' */
736
737 GCPRO2 (args, *temps);
738 gcpro2.nvars = 0;
739
740 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
741 {
742 QUIT;
743 elt = Fcar (varlist);
744 if (SYMBOLP (elt))
745 temps [argnum++] = Qnil;
746 else if (! NILP (Fcdr (Fcdr (elt))))
747 Fsignal (Qerror,
748 Fcons (build_string ("`let' bindings can have only one value-form"),
749 elt));
750 else
751 temps [argnum++] = Feval (Fcar (Fcdr (elt)));
752 gcpro2.nvars = argnum;
753 }
754 UNGCPRO;
755
756 varlist = Fcar (args);
757 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
758 {
759 elt = Fcar (varlist);
760 tem = temps[argnum++];
761 if (SYMBOLP (elt))
762 specbind (elt, tem);
763 else
764 specbind (Fcar (elt), tem);
765 }
766
767 elt = Fprogn (Fcdr (args));
768 return unbind_to (count, elt);
769 }
770
771 DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0,
772 "(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.\n\
773 The order of execution is thus TEST, BODY, TEST, BODY and so on\n\
774 until TEST returns nil.")
775 (args)
776 Lisp_Object args;
777 {
778 Lisp_Object test, body, tem;
779 struct gcpro gcpro1, gcpro2;
780
781 GCPRO2 (test, body);
782
783 test = Fcar (args);
784 body = Fcdr (args);
785 while (tem = Feval (test),
786 (!EQ (Vmocklisp_arguments, Qt) ? XINT (tem) : !NILP (tem)))
787 {
788 QUIT;
789 Fprogn (body);
790 }
791
792 UNGCPRO;
793 return Qnil;
794 }
795
796 DEFUN ("macroexpand", Fmacroexpand, Smacroexpand, 1, 2, 0,
797 "Return result of expanding macros at top level of FORM.\n\
798 If FORM is not a macro call, it is returned unchanged.\n\
799 Otherwise, the macro is expanded and the expansion is considered\n\
800 in place of FORM. When a non-macro-call results, it is returned.\n\n\
801 The second optional arg ENVIRONMENT species an environment of macro\n\
802 definitions to shadow the loaded ones for use in file byte-compilation.")
803 (form, environment)
804 Lisp_Object form;
805 Lisp_Object environment;
806 {
807 /* With cleanups from Hallvard Furuseth. */
808 register Lisp_Object expander, sym, def, tem;
809
810 while (1)
811 {
812 /* Come back here each time we expand a macro call,
813 in case it expands into another macro call. */
814 if (!CONSP (form))
815 break;
816 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
817 def = sym = XCONS (form)->car;
818 tem = Qnil;
819 /* Trace symbols aliases to other symbols
820 until we get a symbol that is not an alias. */
821 while (SYMBOLP (def))
822 {
823 QUIT;
824 sym = def;
825 tem = Fassq (sym, environment);
826 if (NILP (tem))
827 {
828 def = XSYMBOL (sym)->function;
829 if (!EQ (def, Qunbound))
830 continue;
831 }
832 break;
833 }
834 /* Right now TEM is the result from SYM in ENVIRONMENT,
835 and if TEM is nil then DEF is SYM's function definition. */
836 if (NILP (tem))
837 {
838 /* SYM is not mentioned in ENVIRONMENT.
839 Look at its function definition. */
840 if (EQ (def, Qunbound) || !CONSP (def))
841 /* Not defined or definition not suitable */
842 break;
843 if (EQ (XCONS (def)->car, Qautoload))
844 {
845 /* Autoloading function: will it be a macro when loaded? */
846 tem = Fnth (make_number (4), def);
847 if (EQ (tem, Qt) || EQ (tem, Qmacro))
848 /* Yes, load it and try again. */
849 {
850 struct gcpro gcpro1;
851 GCPRO1 (form);
852 do_autoload (def, sym);
853 UNGCPRO;
854 continue;
855 }
856 else
857 break;
858 }
859 else if (!EQ (XCONS (def)->car, Qmacro))
860 break;
861 else expander = XCONS (def)->cdr;
862 }
863 else
864 {
865 expander = XCONS (tem)->cdr;
866 if (NILP (expander))
867 break;
868 }
869 form = apply1 (expander, XCONS (form)->cdr);
870 }
871 return form;
872 }
873 \f
874 DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
875 "(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.\n\
876 TAG is evalled to get the tag to use. Then the BODY is executed.\n\
877 Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.\n\
878 If no throw happens, `catch' returns the value of the last BODY form.\n\
879 If a throw happens, it specifies the value to return from `catch'.")
880 (args)
881 Lisp_Object args;
882 {
883 register Lisp_Object tag;
884 struct gcpro gcpro1;
885
886 GCPRO1 (args);
887 tag = Feval (Fcar (args));
888 UNGCPRO;
889 return internal_catch (tag, Fprogn, Fcdr (args));
890 }
891
892 /* Set up a catch, then call C function FUNC on argument ARG.
893 FUNC should return a Lisp_Object.
894 This is how catches are done from within C code. */
895
896 Lisp_Object
897 internal_catch (tag, func, arg)
898 Lisp_Object tag;
899 Lisp_Object (*func) ();
900 Lisp_Object arg;
901 {
902 /* This structure is made part of the chain `catchlist'. */
903 struct catchtag c;
904
905 /* Fill in the components of c, and put it on the list. */
906 c.next = catchlist;
907 c.tag = tag;
908 c.val = Qnil;
909 c.backlist = backtrace_list;
910 c.handlerlist = handlerlist;
911 c.lisp_eval_depth = lisp_eval_depth;
912 c.pdlcount = specpdl_ptr - specpdl;
913 c.poll_suppress_count = poll_suppress_count;
914 c.gcpro = gcprolist;
915 catchlist = &c;
916
917 /* Call FUNC. */
918 if (! _setjmp (c.jmp))
919 c.val = (*func) (arg);
920
921 /* Throw works by a longjmp that comes right here. */
922 catchlist = c.next;
923 return c.val;
924 }
925
926 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
927 jump to that CATCH, returning VALUE as the value of that catch.
928
929 This is the guts Fthrow and Fsignal; they differ only in the way
930 they choose the catch tag to throw to. A catch tag for a
931 condition-case form has a TAG of Qnil.
932
933 Before each catch is discarded, unbind all special bindings and
934 execute all unwind-protect clauses made above that catch. Unwind
935 the handler stack as we go, so that the proper handlers are in
936 effect for each unwind-protect clause we run. At the end, restore
937 some static info saved in CATCH, and longjmp to the location
938 specified in the
939
940 This is used for correct unwinding in Fthrow and Fsignal. */
941
942 static void
943 unwind_to_catch (catch, value)
944 struct catchtag *catch;
945 Lisp_Object value;
946 {
947 register int last_time;
948
949 /* Save the value in the tag. */
950 catch->val = value;
951
952 /* Restore the polling-suppression count. */
953 set_poll_suppress_count (catch->poll_suppress_count);
954
955 do
956 {
957 last_time = catchlist == catch;
958
959 /* Unwind the specpdl stack, and then restore the proper set of
960 handlers. */
961 unbind_to (catchlist->pdlcount, Qnil);
962 handlerlist = catchlist->handlerlist;
963 catchlist = catchlist->next;
964 }
965 while (! last_time);
966
967 gcprolist = catch->gcpro;
968 backtrace_list = catch->backlist;
969 lisp_eval_depth = catch->lisp_eval_depth;
970
971 _longjmp (catch->jmp, 1);
972 }
973
974 DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
975 "(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.\n\
976 Both TAG and VALUE are evalled.")
977 (tag, value)
978 register Lisp_Object tag, value;
979 {
980 register struct catchtag *c;
981
982 while (1)
983 {
984 if (!NILP (tag))
985 for (c = catchlist; c; c = c->next)
986 {
987 if (EQ (c->tag, tag))
988 unwind_to_catch (c, value);
989 }
990 tag = Fsignal (Qno_catch, Fcons (tag, Fcons (value, Qnil)));
991 }
992 }
993
994
995 DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
996 "Do BODYFORM, protecting with UNWINDFORMS.\n\
997 Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).\n\
998 If BODYFORM completes normally, its value is returned\n\
999 after executing the UNWINDFORMS.\n\
1000 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.")
1001 (args)
1002 Lisp_Object args;
1003 {
1004 Lisp_Object val;
1005 int count = specpdl_ptr - specpdl;
1006
1007 record_unwind_protect (0, Fcdr (args));
1008 val = Feval (Fcar (args));
1009 return unbind_to (count, val);
1010 }
1011 \f
1012 /* Chain of condition handlers currently in effect.
1013 The elements of this chain are contained in the stack frames
1014 of Fcondition_case and internal_condition_case.
1015 When an error is signaled (by calling Fsignal, below),
1016 this chain is searched for an element that applies. */
1017
1018 struct handler *handlerlist;
1019
1020 DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
1021 "Regain control when an error is signaled.\n\
1022 Usage looks like (condition-case VAR BODYFORM HANDLERS...).\n\
1023 executes BODYFORM and returns its value if no error happens.\n\
1024 Each element of HANDLERS looks like (CONDITION-NAME BODY...)\n\
1025 where the BODY is made of Lisp expressions.\n\n\
1026 A handler is applicable to an error\n\
1027 if CONDITION-NAME is one of the error's condition names.\n\
1028 If an error happens, the first applicable handler is run.\n\
1029 \n\
1030 The car of a handler may be a list of condition names\n\
1031 instead of a single condition name.\n\
1032 \n\
1033 When a handler handles an error,\n\
1034 control returns to the condition-case and the handler BODY... is executed\n\
1035 with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).\n\
1036 VAR may be nil; then you do not get access to the signal information.\n\
1037 \n\
1038 The value of the last BODY form is returned from the condition-case.\n\
1039 See also the function `signal' for more info.")
1040 (args)
1041 Lisp_Object args;
1042 {
1043 Lisp_Object val;
1044 struct catchtag c;
1045 struct handler h;
1046 register Lisp_Object var, bodyform, handlers;
1047
1048 var = Fcar (args);
1049 bodyform = Fcar (Fcdr (args));
1050 handlers = Fcdr (Fcdr (args));
1051 CHECK_SYMBOL (var, 0);
1052
1053 for (val = handlers; ! NILP (val); val = Fcdr (val))
1054 {
1055 Lisp_Object tem;
1056 tem = Fcar (val);
1057 if (! (NILP (tem)
1058 || (CONSP (tem)
1059 && (SYMBOLP (XCONS (tem)->car)
1060 || CONSP (XCONS (tem)->car)))))
1061 error ("Invalid condition handler", tem);
1062 }
1063
1064 c.tag = Qnil;
1065 c.val = Qnil;
1066 c.backlist = backtrace_list;
1067 c.handlerlist = handlerlist;
1068 c.lisp_eval_depth = lisp_eval_depth;
1069 c.pdlcount = specpdl_ptr - specpdl;
1070 c.poll_suppress_count = poll_suppress_count;
1071 c.gcpro = gcprolist;
1072 if (_setjmp (c.jmp))
1073 {
1074 if (!NILP (h.var))
1075 specbind (h.var, c.val);
1076 val = Fprogn (Fcdr (h.chosen_clause));
1077
1078 /* Note that this just undoes the binding of h.var; whoever
1079 longjumped to us unwound the stack to c.pdlcount before
1080 throwing. */
1081 unbind_to (c.pdlcount, Qnil);
1082 return val;
1083 }
1084 c.next = catchlist;
1085 catchlist = &c;
1086
1087 h.var = var;
1088 h.handler = handlers;
1089 h.next = handlerlist;
1090 h.tag = &c;
1091 handlerlist = &h;
1092
1093 val = Feval (bodyform);
1094 catchlist = c.next;
1095 handlerlist = h.next;
1096 return val;
1097 }
1098
1099 /* Call the function BFUN with no arguments, catching errors within it
1100 according to HANDLERS. If there is an error, call HFUN with
1101 one argument which is the data that describes the error:
1102 (SIGNALNAME . DATA)
1103
1104 HANDLERS can be a list of conditions to catch.
1105 If HANDLERS is Qt, catch all errors.
1106 If HANDLERS is Qerror, catch all errors
1107 but allow the debugger to run if that is enabled. */
1108
1109 Lisp_Object
1110 internal_condition_case (bfun, handlers, hfun)
1111 Lisp_Object (*bfun) ();
1112 Lisp_Object handlers;
1113 Lisp_Object (*hfun) ();
1114 {
1115 Lisp_Object val;
1116 struct catchtag c;
1117 struct handler h;
1118
1119 /* Since Fsignal resets this to 0, it had better be 0 now
1120 or else we have a potential bug. */
1121 if (interrupt_input_blocked != 0)
1122 abort ();
1123
1124 c.tag = Qnil;
1125 c.val = Qnil;
1126 c.backlist = backtrace_list;
1127 c.handlerlist = handlerlist;
1128 c.lisp_eval_depth = lisp_eval_depth;
1129 c.pdlcount = specpdl_ptr - specpdl;
1130 c.poll_suppress_count = poll_suppress_count;
1131 c.gcpro = gcprolist;
1132 if (_setjmp (c.jmp))
1133 {
1134 return (*hfun) (c.val);
1135 }
1136 c.next = catchlist;
1137 catchlist = &c;
1138 h.handler = handlers;
1139 h.var = Qnil;
1140 h.next = handlerlist;
1141 h.tag = &c;
1142 handlerlist = &h;
1143
1144 val = (*bfun) ();
1145 catchlist = c.next;
1146 handlerlist = h.next;
1147 return val;
1148 }
1149
1150 /* Like internal_condition_case but call HFUN with ARG as its argument. */
1151
1152 Lisp_Object
1153 internal_condition_case_1 (bfun, arg, handlers, hfun)
1154 Lisp_Object (*bfun) ();
1155 Lisp_Object arg;
1156 Lisp_Object handlers;
1157 Lisp_Object (*hfun) ();
1158 {
1159 Lisp_Object val;
1160 struct catchtag c;
1161 struct handler h;
1162
1163 c.tag = Qnil;
1164 c.val = Qnil;
1165 c.backlist = backtrace_list;
1166 c.handlerlist = handlerlist;
1167 c.lisp_eval_depth = lisp_eval_depth;
1168 c.pdlcount = specpdl_ptr - specpdl;
1169 c.poll_suppress_count = poll_suppress_count;
1170 c.gcpro = gcprolist;
1171 if (_setjmp (c.jmp))
1172 {
1173 return (*hfun) (c.val);
1174 }
1175 c.next = catchlist;
1176 catchlist = &c;
1177 h.handler = handlers;
1178 h.var = Qnil;
1179 h.next = handlerlist;
1180 h.tag = &c;
1181 handlerlist = &h;
1182
1183 val = (*bfun) (arg);
1184 catchlist = c.next;
1185 handlerlist = h.next;
1186 return val;
1187 }
1188 \f
1189 static Lisp_Object find_handler_clause ();
1190
1191 DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
1192 "Signal an error. Args are ERROR-SYMBOL and associated DATA.\n\
1193 This function does not return.\n\n\
1194 An error symbol is a symbol with an `error-conditions' property\n\
1195 that is a list of condition names.\n\
1196 A handler for any of those names will get to handle this signal.\n\
1197 The symbol `error' should normally be one of them.\n\
1198 \n\
1199 DATA should be a list. Its elements are printed as part of the error message.\n\
1200 If the signal is handled, DATA is made available to the handler.\n\
1201 See also the function `condition-case'.")
1202 (error_symbol, data)
1203 Lisp_Object error_symbol, data;
1204 {
1205 register struct handler *allhandlers = handlerlist;
1206 Lisp_Object conditions;
1207 extern int gc_in_progress;
1208 extern int waiting_for_input;
1209 Lisp_Object debugger_value;
1210 Lisp_Object string;
1211
1212 quit_error_check ();
1213 immediate_quit = 0;
1214 if (gc_in_progress || waiting_for_input)
1215 abort ();
1216
1217 #ifdef HAVE_WINDOW_SYSTEM
1218 TOTALLY_UNBLOCK_INPUT;
1219 #endif
1220
1221 /* This hook is used by edebug. */
1222 if (! NILP (Vsignal_hook_function))
1223 Ffuncall (Vsignal_hook_function, error_symbol, data);
1224
1225 conditions = Fget (error_symbol, Qerror_conditions);
1226
1227 for (; handlerlist; handlerlist = handlerlist->next)
1228 {
1229 register Lisp_Object clause;
1230 clause = find_handler_clause (handlerlist->handler, conditions,
1231 error_symbol, data, &debugger_value);
1232
1233 #if 0 /* Most callers are not prepared to handle gc if this returns.
1234 So, since this feature is not very useful, take it out. */
1235 /* If have called debugger and user wants to continue,
1236 just return nil. */
1237 if (EQ (clause, Qlambda))
1238 return debugger_value;
1239 #else
1240 if (EQ (clause, Qlambda))
1241 {
1242 /* We can't return values to code which signaled an error, but we
1243 can continue code which has signaled a quit. */
1244 if (EQ (error_symbol, Qquit))
1245 return Qnil;
1246 else
1247 error ("Cannot return from the debugger in an error");
1248 }
1249 #endif
1250
1251 if (!NILP (clause))
1252 {
1253 Lisp_Object unwind_data;
1254 struct handler *h = handlerlist;
1255
1256 handlerlist = allhandlers;
1257 if (EQ (data, memory_signal_data))
1258 unwind_data = memory_signal_data;
1259 else
1260 unwind_data = Fcons (error_symbol, data);
1261 h->chosen_clause = clause;
1262 unwind_to_catch (h->tag, unwind_data);
1263 }
1264 }
1265
1266 handlerlist = allhandlers;
1267 /* If no handler is present now, try to run the debugger,
1268 and if that fails, throw to top level. */
1269 find_handler_clause (Qerror, conditions, error_symbol, data, &debugger_value);
1270 if (catchlist != 0)
1271 Fthrow (Qtop_level, Qt);
1272
1273 if (! EQ (data, memory_signal_data))
1274 data = Fcons (error_symbol, data);
1275
1276 string = Ferror_message_string (data);
1277 fatal (XSTRING (string)->data, 0, 0);
1278 }
1279
1280 /* Return nonzero iff LIST is a non-nil atom or
1281 a list containing one of CONDITIONS. */
1282
1283 static int
1284 wants_debugger (list, conditions)
1285 Lisp_Object list, conditions;
1286 {
1287 if (NILP (list))
1288 return 0;
1289 if (! CONSP (list))
1290 return 1;
1291
1292 while (CONSP (conditions))
1293 {
1294 Lisp_Object this, tail;
1295 this = XCONS (conditions)->car;
1296 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr)
1297 if (EQ (XCONS (tail)->car, this))
1298 return 1;
1299 conditions = XCONS (conditions)->cdr;
1300 }
1301 return 0;
1302 }
1303
1304 /* Return 1 if an error with condition-symbols CONDITIONS,
1305 and described by SIGNAL-DATA, should skip the debugger
1306 according to debugger-ignore-errors. */
1307
1308 static int
1309 skip_debugger (conditions, data)
1310 Lisp_Object conditions, data;
1311 {
1312 Lisp_Object tail;
1313 int first_string = 1;
1314 Lisp_Object error_message;
1315
1316 for (tail = Vdebug_ignored_errors; CONSP (tail);
1317 tail = XCONS (tail)->cdr)
1318 {
1319 if (STRINGP (XCONS (tail)->car))
1320 {
1321 if (first_string)
1322 {
1323 error_message = Ferror_message_string (data);
1324 first_string = 0;
1325 }
1326 if (fast_string_match (XCONS (tail)->car, error_message) >= 0)
1327 return 1;
1328 }
1329 else
1330 {
1331 Lisp_Object contail;
1332
1333 for (contail = conditions; CONSP (contail);
1334 contail = XCONS (contail)->cdr)
1335 if (EQ (XCONS (tail)->car, XCONS (contail)->car))
1336 return 1;
1337 }
1338 }
1339
1340 return 0;
1341 }
1342
1343 /* Value of Qlambda means we have called debugger and user has continued.
1344 Store value returned from debugger into *DEBUGGER_VALUE_PTR. */
1345
1346 static Lisp_Object
1347 find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
1348 Lisp_Object handlers, conditions, sig, data;
1349 Lisp_Object *debugger_value_ptr;
1350 {
1351 register Lisp_Object h;
1352 register Lisp_Object tem;
1353
1354 if (EQ (handlers, Qt)) /* t is used by handlers for all conditions, set up by C code. */
1355 return Qt;
1356 /* error is used similarly, but means print an error message
1357 and run the debugger if that is enabled. */
1358 if (EQ (handlers, Qerror)
1359 || !NILP (Vdebug_on_signal)) /* This says call debugger even if
1360 there is a handler. */
1361 {
1362 int count = specpdl_ptr - specpdl;
1363 int debugger_called = 0;
1364
1365 if (wants_debugger (Vstack_trace_on_error, conditions))
1366 internal_with_output_to_temp_buffer ("*Backtrace*", Fbacktrace, Qnil);
1367 if ((EQ (sig, Qquit)
1368 ? debug_on_quit
1369 : wants_debugger (Vdebug_on_error, conditions))
1370 && ! skip_debugger (conditions, Fcons (sig, data))
1371 && when_entered_debugger < num_nonmacro_input_chars)
1372 {
1373 specbind (Qdebug_on_error, Qnil);
1374 *debugger_value_ptr
1375 = call_debugger (Fcons (Qerror,
1376 Fcons (Fcons (sig, data),
1377 Qnil)));
1378 debugger_called = 1;
1379 }
1380 /* If there is no handler, return saying whether we ran the debugger. */
1381 if (EQ (handlers, Qerror))
1382 {
1383 if (debugger_called)
1384 return unbind_to (count, Qlambda);
1385 return Qt;
1386 }
1387 }
1388 for (h = handlers; CONSP (h); h = Fcdr (h))
1389 {
1390 Lisp_Object handler, condit;
1391
1392 handler = Fcar (h);
1393 if (!CONSP (handler))
1394 continue;
1395 condit = Fcar (handler);
1396 /* Handle a single condition name in handler HANDLER. */
1397 if (SYMBOLP (condit))
1398 {
1399 tem = Fmemq (Fcar (handler), conditions);
1400 if (!NILP (tem))
1401 return handler;
1402 }
1403 /* Handle a list of condition names in handler HANDLER. */
1404 else if (CONSP (condit))
1405 {
1406 while (CONSP (condit))
1407 {
1408 tem = Fmemq (Fcar (condit), conditions);
1409 if (!NILP (tem))
1410 return handler;
1411 condit = XCONS (condit)->cdr;
1412 }
1413 }
1414 }
1415 return Qnil;
1416 }
1417
1418 /* dump an error message; called like printf */
1419
1420 /* VARARGS 1 */
1421 void
1422 error (m, a1, a2, a3)
1423 char *m;
1424 char *a1, *a2, *a3;
1425 {
1426 char buf[200];
1427 int size = 200;
1428 int mlen;
1429 char *buffer = buf;
1430 char *args[3];
1431 int allocated = 0;
1432 Lisp_Object string;
1433
1434 args[0] = a1;
1435 args[1] = a2;
1436 args[2] = a3;
1437
1438 mlen = strlen (m);
1439
1440 while (1)
1441 {
1442 int used = doprnt (buf, size, m, m + mlen, 3, args);
1443 if (used < size)
1444 break;
1445 size *= 2;
1446 if (allocated)
1447 buffer = (char *) xrealloc (buffer, size);
1448 else
1449 {
1450 buffer = (char *) xmalloc (size);
1451 allocated = 1;
1452 }
1453 }
1454
1455 string = build_string (buf);
1456 if (allocated)
1457 free (buffer);
1458
1459 Fsignal (Qerror, Fcons (string, Qnil));
1460 }
1461 \f
1462 DEFUN ("commandp", Fcommandp, Scommandp, 1, 1, 0,
1463 "T if FUNCTION makes provisions for interactive calling.\n\
1464 This means it contains a description for how to read arguments to give it.\n\
1465 The value is nil for an invalid function or a symbol with no function\n\
1466 definition.\n\
1467 \n\
1468 Interactively callable functions include strings and vectors (treated\n\
1469 as keyboard macros), lambda-expressions that contain a top-level call\n\
1470 to `interactive', autoload definitions made by `autoload' with non-nil\n\
1471 fourth argument, and some of the built-in functions of Lisp.\n\
1472 \n\
1473 Also, a symbol satisfies `commandp' if its function definition does so.")
1474 (function)
1475 Lisp_Object function;
1476 {
1477 register Lisp_Object fun;
1478 register Lisp_Object funcar;
1479 register Lisp_Object tem;
1480 register int i = 0;
1481
1482 fun = function;
1483
1484 fun = indirect_function (fun);
1485 if (EQ (fun, Qunbound))
1486 return Qnil;
1487
1488 /* Emacs primitives are interactive if their DEFUN specifies an
1489 interactive spec. */
1490 if (SUBRP (fun))
1491 {
1492 if (XSUBR (fun)->prompt)
1493 return Qt;
1494 else
1495 return Qnil;
1496 }
1497
1498 /* Bytecode objects are interactive if they are long enough to
1499 have an element whose index is COMPILED_INTERACTIVE, which is
1500 where the interactive spec is stored. */
1501 else if (COMPILEDP (fun))
1502 return ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
1503 ? Qt : Qnil);
1504
1505 /* Strings and vectors are keyboard macros. */
1506 if (STRINGP (fun) || VECTORP (fun))
1507 return Qt;
1508
1509 /* Lists may represent commands. */
1510 if (!CONSP (fun))
1511 return Qnil;
1512 funcar = Fcar (fun);
1513 if (!SYMBOLP (funcar))
1514 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1515 if (EQ (funcar, Qlambda))
1516 return Fassq (Qinteractive, Fcdr (Fcdr (fun)));
1517 if (EQ (funcar, Qmocklisp))
1518 return Qt; /* All mocklisp functions can be called interactively */
1519 if (EQ (funcar, Qautoload))
1520 return Fcar (Fcdr (Fcdr (Fcdr (fun))));
1521 else
1522 return Qnil;
1523 }
1524
1525 /* ARGSUSED */
1526 DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
1527 "Define FUNCTION to autoload from FILE.\n\
1528 FUNCTION is a symbol; FILE is a file name string to pass to `load'.\n\
1529 Third arg DOCSTRING is documentation for the function.\n\
1530 Fourth arg INTERACTIVE if non-nil says function can be called interactively.\n\
1531 Fifth arg TYPE indicates the type of the object:\n\
1532 nil or omitted says FUNCTION is a function,\n\
1533 `keymap' says FUNCTION is really a keymap, and\n\
1534 `macro' or t says FUNCTION is really a macro.\n\
1535 Third through fifth args give info about the real definition.\n\
1536 They default to nil.\n\
1537 If FUNCTION is already defined other than as an autoload,\n\
1538 this does nothing and returns nil.")
1539 (function, file, docstring, interactive, type)
1540 Lisp_Object function, file, docstring, interactive, type;
1541 {
1542 #ifdef NO_ARG_ARRAY
1543 Lisp_Object args[4];
1544 #endif
1545
1546 CHECK_SYMBOL (function, 0);
1547 CHECK_STRING (file, 1);
1548
1549 /* If function is defined and not as an autoload, don't override */
1550 if (!EQ (XSYMBOL (function)->function, Qunbound)
1551 && !(CONSP (XSYMBOL (function)->function)
1552 && EQ (XCONS (XSYMBOL (function)->function)->car, Qautoload)))
1553 return Qnil;
1554
1555 #ifdef NO_ARG_ARRAY
1556 args[0] = file;
1557 args[1] = docstring;
1558 args[2] = interactive;
1559 args[3] = type;
1560
1561 return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
1562 #else /* NO_ARG_ARRAY */
1563 return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
1564 #endif /* not NO_ARG_ARRAY */
1565 }
1566
1567 Lisp_Object
1568 un_autoload (oldqueue)
1569 Lisp_Object oldqueue;
1570 {
1571 register Lisp_Object queue, first, second;
1572
1573 /* Queue to unwind is current value of Vautoload_queue.
1574 oldqueue is the shadowed value to leave in Vautoload_queue. */
1575 queue = Vautoload_queue;
1576 Vautoload_queue = oldqueue;
1577 while (CONSP (queue))
1578 {
1579 first = Fcar (queue);
1580 second = Fcdr (first);
1581 first = Fcar (first);
1582 if (EQ (second, Qnil))
1583 Vfeatures = first;
1584 else
1585 Ffset (first, second);
1586 queue = Fcdr (queue);
1587 }
1588 return Qnil;
1589 }
1590
1591 /* Load an autoloaded function.
1592 FUNNAME is the symbol which is the function's name.
1593 FUNDEF is the autoload definition (a list). */
1594
1595 do_autoload (fundef, funname)
1596 Lisp_Object fundef, funname;
1597 {
1598 int count = specpdl_ptr - specpdl;
1599 Lisp_Object fun, val, queue, first, second;
1600 struct gcpro gcpro1, gcpro2, gcpro3;
1601
1602 fun = funname;
1603 CHECK_SYMBOL (funname, 0);
1604 GCPRO3 (fun, funname, fundef);
1605
1606 /* Value saved here is to be restored into Vautoload_queue */
1607 record_unwind_protect (un_autoload, Vautoload_queue);
1608 Vautoload_queue = Qt;
1609 Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil);
1610
1611 /* Save the old autoloads, in case we ever do an unload. */
1612 queue = Vautoload_queue;
1613 while (CONSP (queue))
1614 {
1615 first = Fcar (queue);
1616 second = Fcdr (first);
1617 first = Fcar (first);
1618
1619 /* Note: This test is subtle. The cdr of an autoload-queue entry
1620 may be an atom if the autoload entry was generated by a defalias
1621 or fset. */
1622 if (CONSP (second))
1623 Fput (first, Qautoload, (Fcdr (second)));
1624
1625 queue = Fcdr (queue);
1626 }
1627
1628 /* Once loading finishes, don't undo it. */
1629 Vautoload_queue = Qt;
1630 unbind_to (count, Qnil);
1631
1632 fun = Findirect_function (fun);
1633
1634 if (!NILP (Fequal (fun, fundef)))
1635 error ("Autoloading failed to define function %s",
1636 XSYMBOL (funname)->name->data);
1637 UNGCPRO;
1638 }
1639 \f
1640 DEFUN ("eval", Feval, Seval, 1, 1, 0,
1641 "Evaluate FORM and return its value.")
1642 (form)
1643 Lisp_Object form;
1644 {
1645 Lisp_Object fun, val, original_fun, original_args;
1646 Lisp_Object funcar;
1647 struct backtrace backtrace;
1648 struct gcpro gcpro1, gcpro2, gcpro3;
1649
1650 if (SYMBOLP (form))
1651 {
1652 if (EQ (Vmocklisp_arguments, Qt))
1653 return Fsymbol_value (form);
1654 val = Fsymbol_value (form);
1655 if (NILP (val))
1656 XSETFASTINT (val, 0);
1657 else if (EQ (val, Qt))
1658 XSETFASTINT (val, 1);
1659 return val;
1660 }
1661 if (!CONSP (form))
1662 return form;
1663
1664 QUIT;
1665 if (consing_since_gc > gc_cons_threshold)
1666 {
1667 GCPRO1 (form);
1668 Fgarbage_collect ();
1669 UNGCPRO;
1670 }
1671
1672 if (++lisp_eval_depth > max_lisp_eval_depth)
1673 {
1674 if (max_lisp_eval_depth < 100)
1675 max_lisp_eval_depth = 100;
1676 if (lisp_eval_depth > max_lisp_eval_depth)
1677 error ("Lisp nesting exceeds max-lisp-eval-depth");
1678 }
1679
1680 original_fun = Fcar (form);
1681 original_args = Fcdr (form);
1682
1683 backtrace.next = backtrace_list;
1684 backtrace_list = &backtrace;
1685 backtrace.function = &original_fun; /* This also protects them from gc */
1686 backtrace.args = &original_args;
1687 backtrace.nargs = UNEVALLED;
1688 backtrace.evalargs = 1;
1689 backtrace.debug_on_exit = 0;
1690
1691 if (debug_on_next_call)
1692 do_debug_on_call (Qt);
1693
1694 /* At this point, only original_fun and original_args
1695 have values that will be used below */
1696 retry:
1697 fun = Findirect_function (original_fun);
1698
1699 if (SUBRP (fun))
1700 {
1701 Lisp_Object numargs;
1702 Lisp_Object argvals[7];
1703 Lisp_Object args_left;
1704 register int i, maxargs;
1705
1706 args_left = original_args;
1707 numargs = Flength (args_left);
1708
1709 if (XINT (numargs) < XSUBR (fun)->min_args ||
1710 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
1711 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
1712
1713 if (XSUBR (fun)->max_args == UNEVALLED)
1714 {
1715 backtrace.evalargs = 0;
1716 val = (*XSUBR (fun)->function) (args_left);
1717 goto done;
1718 }
1719
1720 if (XSUBR (fun)->max_args == MANY)
1721 {
1722 /* Pass a vector of evaluated arguments */
1723 Lisp_Object *vals;
1724 register int argnum = 0;
1725
1726 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
1727
1728 GCPRO3 (args_left, fun, fun);
1729 gcpro3.var = vals;
1730 gcpro3.nvars = 0;
1731
1732 while (!NILP (args_left))
1733 {
1734 vals[argnum++] = Feval (Fcar (args_left));
1735 args_left = Fcdr (args_left);
1736 gcpro3.nvars = argnum;
1737 }
1738
1739 backtrace.args = vals;
1740 backtrace.nargs = XINT (numargs);
1741
1742 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
1743 UNGCPRO;
1744 goto done;
1745 }
1746
1747 GCPRO3 (args_left, fun, fun);
1748 gcpro3.var = argvals;
1749 gcpro3.nvars = 0;
1750
1751 maxargs = XSUBR (fun)->max_args;
1752 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
1753 {
1754 argvals[i] = Feval (Fcar (args_left));
1755 gcpro3.nvars = ++i;
1756 }
1757
1758 UNGCPRO;
1759
1760 backtrace.args = argvals;
1761 backtrace.nargs = XINT (numargs);
1762
1763 switch (i)
1764 {
1765 case 0:
1766 val = (*XSUBR (fun)->function) ();
1767 goto done;
1768 case 1:
1769 val = (*XSUBR (fun)->function) (argvals[0]);
1770 goto done;
1771 case 2:
1772 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
1773 goto done;
1774 case 3:
1775 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1776 argvals[2]);
1777 goto done;
1778 case 4:
1779 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1780 argvals[2], argvals[3]);
1781 goto done;
1782 case 5:
1783 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1784 argvals[3], argvals[4]);
1785 goto done;
1786 case 6:
1787 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1788 argvals[3], argvals[4], argvals[5]);
1789 goto done;
1790 case 7:
1791 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1792 argvals[3], argvals[4], argvals[5],
1793 argvals[6]);
1794 goto done;
1795
1796 default:
1797 /* Someone has created a subr that takes more arguments than
1798 is supported by this code. We need to either rewrite the
1799 subr to use a different argument protocol, or add more
1800 cases to this switch. */
1801 abort ();
1802 }
1803 }
1804 if (COMPILEDP (fun))
1805 val = apply_lambda (fun, original_args, 1);
1806 else
1807 {
1808 if (!CONSP (fun))
1809 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1810 funcar = Fcar (fun);
1811 if (!SYMBOLP (funcar))
1812 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1813 if (EQ (funcar, Qautoload))
1814 {
1815 do_autoload (fun, original_fun);
1816 goto retry;
1817 }
1818 if (EQ (funcar, Qmacro))
1819 val = Feval (apply1 (Fcdr (fun), original_args));
1820 else if (EQ (funcar, Qlambda))
1821 val = apply_lambda (fun, original_args, 1);
1822 else if (EQ (funcar, Qmocklisp))
1823 val = ml_apply (fun, original_args);
1824 else
1825 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1826 }
1827 done:
1828 if (!EQ (Vmocklisp_arguments, Qt))
1829 {
1830 if (NILP (val))
1831 XSETFASTINT (val, 0);
1832 else if (EQ (val, Qt))
1833 XSETFASTINT (val, 1);
1834 }
1835 lisp_eval_depth--;
1836 if (backtrace.debug_on_exit)
1837 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
1838 backtrace_list = backtrace.next;
1839 return val;
1840 }
1841 \f
1842 DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
1843 "Call FUNCTION with our remaining args, using our last arg as list of args.\n\
1844 Then return the value FUNCTION returns.\n\
1845 Thus, (apply '+ 1 2 '(3 4)) returns 10.")
1846 (nargs, args)
1847 int nargs;
1848 Lisp_Object *args;
1849 {
1850 register int i, numargs;
1851 register Lisp_Object spread_arg;
1852 register Lisp_Object *funcall_args;
1853 Lisp_Object fun;
1854 struct gcpro gcpro1;
1855
1856 fun = args [0];
1857 funcall_args = 0;
1858 spread_arg = args [nargs - 1];
1859 CHECK_LIST (spread_arg, nargs);
1860
1861 numargs = XINT (Flength (spread_arg));
1862
1863 if (numargs == 0)
1864 return Ffuncall (nargs - 1, args);
1865 else if (numargs == 1)
1866 {
1867 args [nargs - 1] = XCONS (spread_arg)->car;
1868 return Ffuncall (nargs, args);
1869 }
1870
1871 numargs += nargs - 2;
1872
1873 fun = indirect_function (fun);
1874 if (EQ (fun, Qunbound))
1875 {
1876 /* Let funcall get the error */
1877 fun = args[0];
1878 goto funcall;
1879 }
1880
1881 if (SUBRP (fun))
1882 {
1883 if (numargs < XSUBR (fun)->min_args
1884 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
1885 goto funcall; /* Let funcall get the error */
1886 else if (XSUBR (fun)->max_args > numargs)
1887 {
1888 /* Avoid making funcall cons up a yet another new vector of arguments
1889 by explicitly supplying nil's for optional values */
1890 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
1891 * sizeof (Lisp_Object));
1892 for (i = numargs; i < XSUBR (fun)->max_args;)
1893 funcall_args[++i] = Qnil;
1894 GCPRO1 (*funcall_args);
1895 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
1896 }
1897 }
1898 funcall:
1899 /* We add 1 to numargs because funcall_args includes the
1900 function itself as well as its arguments. */
1901 if (!funcall_args)
1902 {
1903 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
1904 * sizeof (Lisp_Object));
1905 GCPRO1 (*funcall_args);
1906 gcpro1.nvars = 1 + numargs;
1907 }
1908
1909 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
1910 /* Spread the last arg we got. Its first element goes in
1911 the slot that it used to occupy, hence this value of I. */
1912 i = nargs - 1;
1913 while (!NILP (spread_arg))
1914 {
1915 funcall_args [i++] = XCONS (spread_arg)->car;
1916 spread_arg = XCONS (spread_arg)->cdr;
1917 }
1918
1919 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
1920 }
1921 \f
1922 /* Run hook variables in various ways. */
1923
1924 enum run_hooks_condition {to_completion, until_success, until_failure};
1925
1926 DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 1, MANY, 0,
1927 "Run each hook in HOOKS. Major mode functions use this.\n\
1928 Each argument should be a symbol, a hook variable.\n\
1929 These symbols are processed in the order specified.\n\
1930 If a hook symbol has a non-nil value, that value may be a function\n\
1931 or a list of functions to be called to run the hook.\n\
1932 If the value is a function, it is called with no arguments.\n\
1933 If it is a list, the elements are called, in order, with no arguments.\n\
1934 \n\
1935 To make a hook variable buffer-local, use `make-local-hook',\n\
1936 not `make-local-variable'.")
1937 (nargs, args)
1938 int nargs;
1939 Lisp_Object *args;
1940 {
1941 Lisp_Object hook[1];
1942 register int i;
1943
1944 for (i = 0; i < nargs; i++)
1945 {
1946 hook[0] = args[i];
1947 run_hook_with_args (1, hook, to_completion);
1948 }
1949
1950 return Qnil;
1951 }
1952
1953 DEFUN ("run-hook-with-args", Frun_hook_with_args,
1954 Srun_hook_with_args, 1, MANY, 0,
1955 "Run HOOK with the specified arguments ARGS.\n\
1956 HOOK should be a symbol, a hook variable. If HOOK has a non-nil\n\
1957 value, that value may be a function or a list of functions to be\n\
1958 called to run the hook. If the value is a function, it is called with\n\
1959 the given arguments and its return value is returned. If it is a list\n\
1960 of functions, those functions are called, in order,\n\
1961 with the given arguments ARGS.\n\
1962 It is best not to depend on the value return by `run-hook-with-args',\n\
1963 as that may change.\n\
1964 \n\
1965 To make a hook variable buffer-local, use `make-local-hook',\n\
1966 not `make-local-variable'.")
1967 (nargs, args)
1968 int nargs;
1969 Lisp_Object *args;
1970 {
1971 return run_hook_with_args (nargs, args, to_completion);
1972 }
1973
1974 DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
1975 Srun_hook_with_args_until_success, 1, MANY, 0,
1976 "Run HOOK with the specified arguments ARGS.\n\
1977 HOOK should be a symbol, a hook variable. Its value should\n\
1978 be a list of functions. We call those functions, one by one,\n\
1979 passing arguments ARGS to each of them, until one of them\n\
1980 returns a non-nil value. Then we return that value.\n\
1981 If all the functions return nil, we return nil.\n\
1982 \n\
1983 To make a hook variable buffer-local, use `make-local-hook',\n\
1984 not `make-local-variable'.")
1985 (nargs, args)
1986 int nargs;
1987 Lisp_Object *args;
1988 {
1989 return run_hook_with_args (nargs, args, until_success);
1990 }
1991
1992 DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
1993 Srun_hook_with_args_until_failure, 1, MANY, 0,
1994 "Run HOOK with the specified arguments ARGS.\n\
1995 HOOK should be a symbol, a hook variable. Its value should\n\
1996 be a list of functions. We call those functions, one by one,\n\
1997 passing arguments ARGS to each of them, until one of them\n\
1998 returns nil. Then we return nil.\n\
1999 If all the functions return non-nil, we return non-nil.\n\
2000 \n\
2001 To make a hook variable buffer-local, use `make-local-hook',\n\
2002 not `make-local-variable'.")
2003 (nargs, args)
2004 int nargs;
2005 Lisp_Object *args;
2006 {
2007 return run_hook_with_args (nargs, args, until_failure);
2008 }
2009
2010 /* ARGS[0] should be a hook symbol.
2011 Call each of the functions in the hook value, passing each of them
2012 as arguments all the rest of ARGS (all NARGS - 1 elements).
2013 COND specifies a condition to test after each call
2014 to decide whether to stop.
2015 The caller (or its caller, etc) must gcpro all of ARGS,
2016 except that it isn't necessary to gcpro ARGS[0]. */
2017
2018 Lisp_Object
2019 run_hook_with_args (nargs, args, cond)
2020 int nargs;
2021 Lisp_Object *args;
2022 enum run_hooks_condition cond;
2023 {
2024 Lisp_Object sym, val, ret;
2025 struct gcpro gcpro1, gcpro2;
2026
2027 /* If we are dying or still initializing,
2028 don't do anything--it would probably crash if we tried. */
2029 if (NILP (Vrun_hooks))
2030 return;
2031
2032 sym = args[0];
2033 val = find_symbol_value (sym);
2034 ret = (cond == until_failure ? Qt : Qnil);
2035
2036 if (EQ (val, Qunbound) || NILP (val))
2037 return ret;
2038 else if (!CONSP (val) || EQ (XCONS (val)->car, Qlambda))
2039 {
2040 args[0] = val;
2041 return Ffuncall (nargs, args);
2042 }
2043 else
2044 {
2045 GCPRO2 (sym, val);
2046
2047 for (;
2048 CONSP (val) && ((cond == to_completion)
2049 || (cond == until_success ? NILP (ret)
2050 : !NILP (ret)));
2051 val = XCONS (val)->cdr)
2052 {
2053 if (EQ (XCONS (val)->car, Qt))
2054 {
2055 /* t indicates this hook has a local binding;
2056 it means to run the global binding too. */
2057 Lisp_Object globals;
2058
2059 for (globals = Fdefault_value (sym);
2060 CONSP (globals) && ((cond == to_completion)
2061 || (cond == until_success ? NILP (ret)
2062 : !NILP (ret)));
2063 globals = XCONS (globals)->cdr)
2064 {
2065 args[0] = XCONS (globals)->car;
2066 /* In a global value, t should not occur. If it does, we
2067 must ignore it to avoid an endless loop. */
2068 if (!EQ (args[0], Qt))
2069 ret = Ffuncall (nargs, args);
2070 }
2071 }
2072 else
2073 {
2074 args[0] = XCONS (val)->car;
2075 ret = Ffuncall (nargs, args);
2076 }
2077 }
2078
2079 UNGCPRO;
2080 return ret;
2081 }
2082 }
2083
2084 /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2085 present value of that symbol.
2086 Call each element of FUNLIST,
2087 passing each of them the rest of ARGS.
2088 The caller (or its caller, etc) must gcpro all of ARGS,
2089 except that it isn't necessary to gcpro ARGS[0]. */
2090
2091 Lisp_Object
2092 run_hook_list_with_args (funlist, nargs, args)
2093 Lisp_Object funlist;
2094 int nargs;
2095 Lisp_Object *args;
2096 {
2097 Lisp_Object sym;
2098 Lisp_Object val;
2099 struct gcpro gcpro1, gcpro2;
2100
2101 sym = args[0];
2102 GCPRO2 (sym, val);
2103
2104 for (val = funlist; CONSP (val); val = XCONS (val)->cdr)
2105 {
2106 if (EQ (XCONS (val)->car, Qt))
2107 {
2108 /* t indicates this hook has a local binding;
2109 it means to run the global binding too. */
2110 Lisp_Object globals;
2111
2112 for (globals = Fdefault_value (sym);
2113 CONSP (globals);
2114 globals = XCONS (globals)->cdr)
2115 {
2116 args[0] = XCONS (globals)->car;
2117 /* In a global value, t should not occur. If it does, we
2118 must ignore it to avoid an endless loop. */
2119 if (!EQ (args[0], Qt))
2120 Ffuncall (nargs, args);
2121 }
2122 }
2123 else
2124 {
2125 args[0] = XCONS (val)->car;
2126 Ffuncall (nargs, args);
2127 }
2128 }
2129 UNGCPRO;
2130 return Qnil;
2131 }
2132
2133 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2134
2135 void
2136 run_hook_with_args_2 (hook, arg1, arg2)
2137 Lisp_Object hook, arg1, arg2;
2138 {
2139 Lisp_Object temp[3];
2140 temp[0] = hook;
2141 temp[1] = arg1;
2142 temp[2] = arg2;
2143
2144 Frun_hook_with_args (3, temp);
2145 }
2146 \f
2147 /* Apply fn to arg */
2148 Lisp_Object
2149 apply1 (fn, arg)
2150 Lisp_Object fn, arg;
2151 {
2152 struct gcpro gcpro1;
2153
2154 GCPRO1 (fn);
2155 if (NILP (arg))
2156 RETURN_UNGCPRO (Ffuncall (1, &fn));
2157 gcpro1.nvars = 2;
2158 #ifdef NO_ARG_ARRAY
2159 {
2160 Lisp_Object args[2];
2161 args[0] = fn;
2162 args[1] = arg;
2163 gcpro1.var = args;
2164 RETURN_UNGCPRO (Fapply (2, args));
2165 }
2166 #else /* not NO_ARG_ARRAY */
2167 RETURN_UNGCPRO (Fapply (2, &fn));
2168 #endif /* not NO_ARG_ARRAY */
2169 }
2170
2171 /* Call function fn on no arguments */
2172 Lisp_Object
2173 call0 (fn)
2174 Lisp_Object fn;
2175 {
2176 struct gcpro gcpro1;
2177
2178 GCPRO1 (fn);
2179 RETURN_UNGCPRO (Ffuncall (1, &fn));
2180 }
2181
2182 /* Call function fn with 1 argument arg1 */
2183 /* ARGSUSED */
2184 Lisp_Object
2185 call1 (fn, arg1)
2186 Lisp_Object fn, arg1;
2187 {
2188 struct gcpro gcpro1;
2189 #ifdef NO_ARG_ARRAY
2190 Lisp_Object args[2];
2191
2192 args[0] = fn;
2193 args[1] = arg1;
2194 GCPRO1 (args[0]);
2195 gcpro1.nvars = 2;
2196 RETURN_UNGCPRO (Ffuncall (2, args));
2197 #else /* not NO_ARG_ARRAY */
2198 GCPRO1 (fn);
2199 gcpro1.nvars = 2;
2200 RETURN_UNGCPRO (Ffuncall (2, &fn));
2201 #endif /* not NO_ARG_ARRAY */
2202 }
2203
2204 /* Call function fn with 2 arguments arg1, arg2 */
2205 /* ARGSUSED */
2206 Lisp_Object
2207 call2 (fn, arg1, arg2)
2208 Lisp_Object fn, arg1, arg2;
2209 {
2210 struct gcpro gcpro1;
2211 #ifdef NO_ARG_ARRAY
2212 Lisp_Object args[3];
2213 args[0] = fn;
2214 args[1] = arg1;
2215 args[2] = arg2;
2216 GCPRO1 (args[0]);
2217 gcpro1.nvars = 3;
2218 RETURN_UNGCPRO (Ffuncall (3, args));
2219 #else /* not NO_ARG_ARRAY */
2220 GCPRO1 (fn);
2221 gcpro1.nvars = 3;
2222 RETURN_UNGCPRO (Ffuncall (3, &fn));
2223 #endif /* not NO_ARG_ARRAY */
2224 }
2225
2226 /* Call function fn with 3 arguments arg1, arg2, arg3 */
2227 /* ARGSUSED */
2228 Lisp_Object
2229 call3 (fn, arg1, arg2, arg3)
2230 Lisp_Object fn, arg1, arg2, arg3;
2231 {
2232 struct gcpro gcpro1;
2233 #ifdef NO_ARG_ARRAY
2234 Lisp_Object args[4];
2235 args[0] = fn;
2236 args[1] = arg1;
2237 args[2] = arg2;
2238 args[3] = arg3;
2239 GCPRO1 (args[0]);
2240 gcpro1.nvars = 4;
2241 RETURN_UNGCPRO (Ffuncall (4, args));
2242 #else /* not NO_ARG_ARRAY */
2243 GCPRO1 (fn);
2244 gcpro1.nvars = 4;
2245 RETURN_UNGCPRO (Ffuncall (4, &fn));
2246 #endif /* not NO_ARG_ARRAY */
2247 }
2248
2249 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
2250 /* ARGSUSED */
2251 Lisp_Object
2252 call4 (fn, arg1, arg2, arg3, arg4)
2253 Lisp_Object fn, arg1, arg2, arg3, arg4;
2254 {
2255 struct gcpro gcpro1;
2256 #ifdef NO_ARG_ARRAY
2257 Lisp_Object args[5];
2258 args[0] = fn;
2259 args[1] = arg1;
2260 args[2] = arg2;
2261 args[3] = arg3;
2262 args[4] = arg4;
2263 GCPRO1 (args[0]);
2264 gcpro1.nvars = 5;
2265 RETURN_UNGCPRO (Ffuncall (5, args));
2266 #else /* not NO_ARG_ARRAY */
2267 GCPRO1 (fn);
2268 gcpro1.nvars = 5;
2269 RETURN_UNGCPRO (Ffuncall (5, &fn));
2270 #endif /* not NO_ARG_ARRAY */
2271 }
2272
2273 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2274 /* ARGSUSED */
2275 Lisp_Object
2276 call5 (fn, arg1, arg2, arg3, arg4, arg5)
2277 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2278 {
2279 struct gcpro gcpro1;
2280 #ifdef NO_ARG_ARRAY
2281 Lisp_Object args[6];
2282 args[0] = fn;
2283 args[1] = arg1;
2284 args[2] = arg2;
2285 args[3] = arg3;
2286 args[4] = arg4;
2287 args[5] = arg5;
2288 GCPRO1 (args[0]);
2289 gcpro1.nvars = 6;
2290 RETURN_UNGCPRO (Ffuncall (6, args));
2291 #else /* not NO_ARG_ARRAY */
2292 GCPRO1 (fn);
2293 gcpro1.nvars = 6;
2294 RETURN_UNGCPRO (Ffuncall (6, &fn));
2295 #endif /* not NO_ARG_ARRAY */
2296 }
2297
2298 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2299 /* ARGSUSED */
2300 Lisp_Object
2301 call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2302 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2303 {
2304 struct gcpro gcpro1;
2305 #ifdef NO_ARG_ARRAY
2306 Lisp_Object args[7];
2307 args[0] = fn;
2308 args[1] = arg1;
2309 args[2] = arg2;
2310 args[3] = arg3;
2311 args[4] = arg4;
2312 args[5] = arg5;
2313 args[6] = arg6;
2314 GCPRO1 (args[0]);
2315 gcpro1.nvars = 7;
2316 RETURN_UNGCPRO (Ffuncall (7, args));
2317 #else /* not NO_ARG_ARRAY */
2318 GCPRO1 (fn);
2319 gcpro1.nvars = 7;
2320 RETURN_UNGCPRO (Ffuncall (7, &fn));
2321 #endif /* not NO_ARG_ARRAY */
2322 }
2323
2324 DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
2325 "Call first argument as a function, passing remaining arguments to it.\n\
2326 Return the value that function returns.\n\
2327 Thus, (funcall 'cons 'x 'y) returns (x . y).")
2328 (nargs, args)
2329 int nargs;
2330 Lisp_Object *args;
2331 {
2332 Lisp_Object fun;
2333 Lisp_Object funcar;
2334 int numargs = nargs - 1;
2335 Lisp_Object lisp_numargs;
2336 Lisp_Object val;
2337 struct backtrace backtrace;
2338 register Lisp_Object *internal_args;
2339 register int i;
2340
2341 QUIT;
2342 if (consing_since_gc > gc_cons_threshold)
2343 Fgarbage_collect ();
2344
2345 if (++lisp_eval_depth > max_lisp_eval_depth)
2346 {
2347 if (max_lisp_eval_depth < 100)
2348 max_lisp_eval_depth = 100;
2349 if (lisp_eval_depth > max_lisp_eval_depth)
2350 error ("Lisp nesting exceeds max-lisp-eval-depth");
2351 }
2352
2353 backtrace.next = backtrace_list;
2354 backtrace_list = &backtrace;
2355 backtrace.function = &args[0];
2356 backtrace.args = &args[1];
2357 backtrace.nargs = nargs - 1;
2358 backtrace.evalargs = 0;
2359 backtrace.debug_on_exit = 0;
2360
2361 if (debug_on_next_call)
2362 do_debug_on_call (Qlambda);
2363
2364 retry:
2365
2366 fun = args[0];
2367
2368 fun = Findirect_function (fun);
2369
2370 if (SUBRP (fun))
2371 {
2372 if (numargs < XSUBR (fun)->min_args
2373 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2374 {
2375 XSETFASTINT (lisp_numargs, numargs);
2376 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (lisp_numargs, Qnil)));
2377 }
2378
2379 if (XSUBR (fun)->max_args == UNEVALLED)
2380 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2381
2382 if (XSUBR (fun)->max_args == MANY)
2383 {
2384 val = (*XSUBR (fun)->function) (numargs, args + 1);
2385 goto done;
2386 }
2387
2388 if (XSUBR (fun)->max_args > numargs)
2389 {
2390 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
2391 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
2392 for (i = numargs; i < XSUBR (fun)->max_args; i++)
2393 internal_args[i] = Qnil;
2394 }
2395 else
2396 internal_args = args + 1;
2397 switch (XSUBR (fun)->max_args)
2398 {
2399 case 0:
2400 val = (*XSUBR (fun)->function) ();
2401 goto done;
2402 case 1:
2403 val = (*XSUBR (fun)->function) (internal_args[0]);
2404 goto done;
2405 case 2:
2406 val = (*XSUBR (fun)->function) (internal_args[0],
2407 internal_args[1]);
2408 goto done;
2409 case 3:
2410 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2411 internal_args[2]);
2412 goto done;
2413 case 4:
2414 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2415 internal_args[2],
2416 internal_args[3]);
2417 goto done;
2418 case 5:
2419 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2420 internal_args[2], internal_args[3],
2421 internal_args[4]);
2422 goto done;
2423 case 6:
2424 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2425 internal_args[2], internal_args[3],
2426 internal_args[4], internal_args[5]);
2427 goto done;
2428 case 7:
2429 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2430 internal_args[2], internal_args[3],
2431 internal_args[4], internal_args[5],
2432 internal_args[6]);
2433 goto done;
2434
2435 default:
2436
2437 /* If a subr takes more than 6 arguments without using MANY
2438 or UNEVALLED, we need to extend this function to support it.
2439 Until this is done, there is no way to call the function. */
2440 abort ();
2441 }
2442 }
2443 if (COMPILEDP (fun))
2444 val = funcall_lambda (fun, numargs, args + 1);
2445 else
2446 {
2447 if (!CONSP (fun))
2448 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2449 funcar = Fcar (fun);
2450 if (!SYMBOLP (funcar))
2451 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2452 if (EQ (funcar, Qlambda))
2453 val = funcall_lambda (fun, numargs, args + 1);
2454 else if (EQ (funcar, Qmocklisp))
2455 val = ml_apply (fun, Flist (numargs, args + 1));
2456 else if (EQ (funcar, Qautoload))
2457 {
2458 do_autoload (fun, args[0]);
2459 goto retry;
2460 }
2461 else
2462 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2463 }
2464 done:
2465 lisp_eval_depth--;
2466 if (backtrace.debug_on_exit)
2467 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2468 backtrace_list = backtrace.next;
2469 return val;
2470 }
2471 \f
2472 Lisp_Object
2473 apply_lambda (fun, args, eval_flag)
2474 Lisp_Object fun, args;
2475 int eval_flag;
2476 {
2477 Lisp_Object args_left;
2478 Lisp_Object numargs;
2479 register Lisp_Object *arg_vector;
2480 struct gcpro gcpro1, gcpro2, gcpro3;
2481 register int i;
2482 register Lisp_Object tem;
2483
2484 numargs = Flength (args);
2485 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2486 args_left = args;
2487
2488 GCPRO3 (*arg_vector, args_left, fun);
2489 gcpro1.nvars = 0;
2490
2491 for (i = 0; i < XINT (numargs);)
2492 {
2493 tem = Fcar (args_left), args_left = Fcdr (args_left);
2494 if (eval_flag) tem = Feval (tem);
2495 arg_vector[i++] = tem;
2496 gcpro1.nvars = i;
2497 }
2498
2499 UNGCPRO;
2500
2501 if (eval_flag)
2502 {
2503 backtrace_list->args = arg_vector;
2504 backtrace_list->nargs = i;
2505 }
2506 backtrace_list->evalargs = 0;
2507 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
2508
2509 /* Do the debug-on-exit now, while arg_vector still exists. */
2510 if (backtrace_list->debug_on_exit)
2511 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
2512 /* Don't do it again when we return to eval. */
2513 backtrace_list->debug_on_exit = 0;
2514 return tem;
2515 }
2516
2517 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2518 and return the result of evaluation.
2519 FUN must be either a lambda-expression or a compiled-code object. */
2520
2521 Lisp_Object
2522 funcall_lambda (fun, nargs, arg_vector)
2523 Lisp_Object fun;
2524 int nargs;
2525 register Lisp_Object *arg_vector;
2526 {
2527 Lisp_Object val, tem;
2528 register Lisp_Object syms_left;
2529 Lisp_Object numargs;
2530 register Lisp_Object next;
2531 int count = specpdl_ptr - specpdl;
2532 register int i;
2533 int optional = 0, rest = 0;
2534
2535 specbind (Qmocklisp_arguments, Qt); /* t means NOT mocklisp! */
2536
2537 XSETFASTINT (numargs, nargs);
2538
2539 if (CONSP (fun))
2540 syms_left = Fcar (Fcdr (fun));
2541 else if (COMPILEDP (fun))
2542 syms_left = XVECTOR (fun)->contents[COMPILED_ARGLIST];
2543 else abort ();
2544
2545 i = 0;
2546 for (; !NILP (syms_left); syms_left = Fcdr (syms_left))
2547 {
2548 QUIT;
2549 next = Fcar (syms_left);
2550 while (!SYMBOLP (next))
2551 next = Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2552 if (EQ (next, Qand_rest))
2553 rest = 1;
2554 else if (EQ (next, Qand_optional))
2555 optional = 1;
2556 else if (rest)
2557 {
2558 specbind (next, Flist (nargs - i, &arg_vector[i]));
2559 i = nargs;
2560 }
2561 else if (i < nargs)
2562 {
2563 tem = arg_vector[i++];
2564 specbind (next, tem);
2565 }
2566 else if (!optional)
2567 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2568 else
2569 specbind (next, Qnil);
2570 }
2571
2572 if (i < nargs)
2573 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2574
2575 if (CONSP (fun))
2576 val = Fprogn (Fcdr (Fcdr (fun)));
2577 else
2578 {
2579 /* If we have not actually read the bytecode string
2580 and constants vector yet, fetch them from the file. */
2581 if (CONSP (XVECTOR (fun)->contents[COMPILED_BYTECODE]))
2582 Ffetch_bytecode (fun);
2583 val = Fbyte_code (XVECTOR (fun)->contents[COMPILED_BYTECODE],
2584 XVECTOR (fun)->contents[COMPILED_CONSTANTS],
2585 XVECTOR (fun)->contents[COMPILED_STACK_DEPTH]);
2586 }
2587 return unbind_to (count, val);
2588 }
2589
2590 DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
2591 1, 1, 0,
2592 "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
2593 (object)
2594 Lisp_Object object;
2595 {
2596 Lisp_Object tem;
2597
2598 if (COMPILEDP (object)
2599 && CONSP (XVECTOR (object)->contents[COMPILED_BYTECODE]))
2600 {
2601 tem = read_doc_string (XVECTOR (object)->contents[COMPILED_BYTECODE]);
2602 if (!CONSP (tem))
2603 error ("invalid byte code");
2604 XVECTOR (object)->contents[COMPILED_BYTECODE] = XCONS (tem)->car;
2605 XVECTOR (object)->contents[COMPILED_CONSTANTS] = XCONS (tem)->cdr;
2606 }
2607 return object;
2608 }
2609 \f
2610 void
2611 grow_specpdl ()
2612 {
2613 register int count = specpdl_ptr - specpdl;
2614 if (specpdl_size >= max_specpdl_size)
2615 {
2616 if (max_specpdl_size < 400)
2617 max_specpdl_size = 400;
2618 if (specpdl_size >= max_specpdl_size)
2619 {
2620 if (!NILP (Vdebug_on_error))
2621 /* Leave room for some specpdl in the debugger. */
2622 max_specpdl_size = specpdl_size + 100;
2623 Fsignal (Qerror,
2624 Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil));
2625 }
2626 }
2627 specpdl_size *= 2;
2628 if (specpdl_size > max_specpdl_size)
2629 specpdl_size = max_specpdl_size;
2630 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
2631 specpdl_ptr = specpdl + count;
2632 }
2633
2634 void
2635 specbind (symbol, value)
2636 Lisp_Object symbol, value;
2637 {
2638 Lisp_Object ovalue;
2639
2640 CHECK_SYMBOL (symbol, 0);
2641
2642 if (specpdl_ptr == specpdl + specpdl_size)
2643 grow_specpdl ();
2644 specpdl_ptr->symbol = symbol;
2645 specpdl_ptr->func = 0;
2646 specpdl_ptr->old_value = ovalue = find_symbol_value (symbol);
2647 specpdl_ptr++;
2648 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
2649 store_symval_forwarding (symbol, ovalue, value);
2650 else
2651 set_internal (symbol, value, 1);
2652 }
2653
2654 void
2655 record_unwind_protect (function, arg)
2656 Lisp_Object (*function)();
2657 Lisp_Object arg;
2658 {
2659 if (specpdl_ptr == specpdl + specpdl_size)
2660 grow_specpdl ();
2661 specpdl_ptr->func = function;
2662 specpdl_ptr->symbol = Qnil;
2663 specpdl_ptr->old_value = arg;
2664 specpdl_ptr++;
2665 }
2666
2667 Lisp_Object
2668 unbind_to (count, value)
2669 int count;
2670 Lisp_Object value;
2671 {
2672 int quitf = !NILP (Vquit_flag);
2673 struct gcpro gcpro1;
2674
2675 GCPRO1 (value);
2676
2677 Vquit_flag = Qnil;
2678
2679 while (specpdl_ptr != specpdl + count)
2680 {
2681 --specpdl_ptr;
2682 if (specpdl_ptr->func != 0)
2683 (*specpdl_ptr->func) (specpdl_ptr->old_value);
2684 /* Note that a "binding" of nil is really an unwind protect,
2685 so in that case the "old value" is a list of forms to evaluate. */
2686 else if (NILP (specpdl_ptr->symbol))
2687 Fprogn (specpdl_ptr->old_value);
2688 else
2689 set_internal (specpdl_ptr->symbol, specpdl_ptr->old_value, 1);
2690 }
2691 if (NILP (Vquit_flag) && quitf) Vquit_flag = Qt;
2692
2693 UNGCPRO;
2694
2695 return value;
2696 }
2697 \f
2698 #if 0
2699
2700 /* Get the value of symbol's global binding, even if that binding
2701 is not now dynamically visible. */
2702
2703 Lisp_Object
2704 top_level_value (symbol)
2705 Lisp_Object symbol;
2706 {
2707 register struct specbinding *ptr = specpdl;
2708
2709 CHECK_SYMBOL (symbol, 0);
2710 for (; ptr != specpdl_ptr; ptr++)
2711 {
2712 if (EQ (ptr->symbol, symbol))
2713 return ptr->old_value;
2714 }
2715 return Fsymbol_value (symbol);
2716 }
2717
2718 Lisp_Object
2719 top_level_set (symbol, newval)
2720 Lisp_Object symbol, newval;
2721 {
2722 register struct specbinding *ptr = specpdl;
2723
2724 CHECK_SYMBOL (symbol, 0);
2725 for (; ptr != specpdl_ptr; ptr++)
2726 {
2727 if (EQ (ptr->symbol, symbol))
2728 {
2729 ptr->old_value = newval;
2730 return newval;
2731 }
2732 }
2733 return Fset (symbol, newval);
2734 }
2735
2736 #endif /* 0 */
2737 \f
2738 DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
2739 "Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.\n\
2740 The debugger is entered when that frame exits, if the flag is non-nil.")
2741 (level, flag)
2742 Lisp_Object level, flag;
2743 {
2744 register struct backtrace *backlist = backtrace_list;
2745 register int i;
2746
2747 CHECK_NUMBER (level, 0);
2748
2749 for (i = 0; backlist && i < XINT (level); i++)
2750 {
2751 backlist = backlist->next;
2752 }
2753
2754 if (backlist)
2755 backlist->debug_on_exit = !NILP (flag);
2756
2757 return flag;
2758 }
2759
2760 DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
2761 "Print a trace of Lisp function calls currently active.\n\
2762 Output stream used is value of `standard-output'.")
2763 ()
2764 {
2765 register struct backtrace *backlist = backtrace_list;
2766 register int i;
2767 Lisp_Object tail;
2768 Lisp_Object tem;
2769 extern Lisp_Object Vprint_level;
2770 struct gcpro gcpro1;
2771
2772 XSETFASTINT (Vprint_level, 3);
2773
2774 tail = Qnil;
2775 GCPRO1 (tail);
2776
2777 while (backlist)
2778 {
2779 write_string (backlist->debug_on_exit ? "* " : " ", 2);
2780 if (backlist->nargs == UNEVALLED)
2781 {
2782 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
2783 write_string ("\n", -1);
2784 }
2785 else
2786 {
2787 tem = *backlist->function;
2788 Fprin1 (tem, Qnil); /* This can QUIT */
2789 write_string ("(", -1);
2790 if (backlist->nargs == MANY)
2791 {
2792 for (tail = *backlist->args, i = 0;
2793 !NILP (tail);
2794 tail = Fcdr (tail), i++)
2795 {
2796 if (i) write_string (" ", -1);
2797 Fprin1 (Fcar (tail), Qnil);
2798 }
2799 }
2800 else
2801 {
2802 for (i = 0; i < backlist->nargs; i++)
2803 {
2804 if (i) write_string (" ", -1);
2805 Fprin1 (backlist->args[i], Qnil);
2806 }
2807 }
2808 write_string (")\n", -1);
2809 }
2810 backlist = backlist->next;
2811 }
2812
2813 Vprint_level = Qnil;
2814 UNGCPRO;
2815 return Qnil;
2816 }
2817
2818 DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, "",
2819 "Return the function and arguments NFRAMES up from current execution point.\n\
2820 If that frame has not evaluated the arguments yet (or is a special form),\n\
2821 the value is (nil FUNCTION ARG-FORMS...).\n\
2822 If that frame has evaluated its arguments and called its function already,\n\
2823 the value is (t FUNCTION ARG-VALUES...).\n\
2824 A &rest arg is represented as the tail of the list ARG-VALUES.\n\
2825 FUNCTION is whatever was supplied as car of evaluated list,\n\
2826 or a lambda expression for macro calls.\n\
2827 If NFRAMES is more than the number of frames, the value is nil.")
2828 (nframes)
2829 Lisp_Object nframes;
2830 {
2831 register struct backtrace *backlist = backtrace_list;
2832 register int i;
2833 Lisp_Object tem;
2834
2835 CHECK_NATNUM (nframes, 0);
2836
2837 /* Find the frame requested. */
2838 for (i = 0; backlist && i < XFASTINT (nframes); i++)
2839 backlist = backlist->next;
2840
2841 if (!backlist)
2842 return Qnil;
2843 if (backlist->nargs == UNEVALLED)
2844 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
2845 else
2846 {
2847 if (backlist->nargs == MANY)
2848 tem = *backlist->args;
2849 else
2850 tem = Flist (backlist->nargs, backlist->args);
2851
2852 return Fcons (Qt, Fcons (*backlist->function, tem));
2853 }
2854 }
2855 \f
2856 syms_of_eval ()
2857 {
2858 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
2859 "Limit on number of Lisp variable bindings & unwind-protects before error.");
2860
2861 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
2862 "Limit on depth in `eval', `apply' and `funcall' before error.\n\
2863 This limit is to catch infinite recursions for you before they cause\n\
2864 actual stack overflow in C, which would be fatal for Emacs.\n\
2865 You can safely make it considerably larger than its default value,\n\
2866 if that proves inconveniently small.");
2867
2868 DEFVAR_LISP ("quit-flag", &Vquit_flag,
2869 "Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.\n\
2870 Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.");
2871 Vquit_flag = Qnil;
2872
2873 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
2874 "Non-nil inhibits C-g quitting from happening immediately.\n\
2875 Note that `quit-flag' will still be set by typing C-g,\n\
2876 so a quit will be signaled as soon as `inhibit-quit' is nil.\n\
2877 To prevent this happening, set `quit-flag' to nil\n\
2878 before making `inhibit-quit' nil.");
2879 Vinhibit_quit = Qnil;
2880
2881 Qinhibit_quit = intern ("inhibit-quit");
2882 staticpro (&Qinhibit_quit);
2883
2884 Qautoload = intern ("autoload");
2885 staticpro (&Qautoload);
2886
2887 Qdebug_on_error = intern ("debug-on-error");
2888 staticpro (&Qdebug_on_error);
2889
2890 Qmacro = intern ("macro");
2891 staticpro (&Qmacro);
2892
2893 /* Note that the process handling also uses Qexit, but we don't want
2894 to staticpro it twice, so we just do it here. */
2895 Qexit = intern ("exit");
2896 staticpro (&Qexit);
2897
2898 Qinteractive = intern ("interactive");
2899 staticpro (&Qinteractive);
2900
2901 Qcommandp = intern ("commandp");
2902 staticpro (&Qcommandp);
2903
2904 Qdefun = intern ("defun");
2905 staticpro (&Qdefun);
2906
2907 Qand_rest = intern ("&rest");
2908 staticpro (&Qand_rest);
2909
2910 Qand_optional = intern ("&optional");
2911 staticpro (&Qand_optional);
2912
2913 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
2914 "*Non-nil means automatically display a backtrace buffer\n\
2915 after any error that is handled by the editor command loop.\n\
2916 If the value is a list, an error only means to display a backtrace\n\
2917 if one of its condition symbols appears in the list.");
2918 Vstack_trace_on_error = Qnil;
2919
2920 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
2921 "*Non-nil means enter debugger if an error is signaled.\n\
2922 Does not apply to errors handled by `condition-case'.\n\
2923 If the value is a list, an error only means to enter the debugger\n\
2924 if one of its condition symbols appears in the list.\n\
2925 See also variable `debug-on-quit'.");
2926 Vdebug_on_error = Qnil;
2927
2928 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
2929 "*List of errors for which the debugger should not be called.\n\
2930 Each element may be a condition-name or a regexp that matches error messages.\n\
2931 If any element applies to a given error, that error skips the debugger\n\
2932 and just returns to top level.\n\
2933 This overrides the variable `debug-on-error'.\n\
2934 It does not apply to errors handled by `condition-case'.");
2935 Vdebug_ignored_errors = Qnil;
2936
2937 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
2938 "*Non-nil means enter debugger if quit is signaled (C-g, for example).\n\
2939 Does not apply if quit is handled by a `condition-case'.");
2940 debug_on_quit = 0;
2941
2942 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
2943 "Non-nil means enter debugger before next `eval', `apply' or `funcall'.");
2944
2945 DEFVAR_LISP ("debugger", &Vdebugger,
2946 "Function to call to invoke debugger.\n\
2947 If due to frame exit, args are `exit' and the value being returned;\n\
2948 this function's value will be returned instead of that.\n\
2949 If due to error, args are `error' and a list of the args to `signal'.\n\
2950 If due to `apply' or `funcall' entry, one arg, `lambda'.\n\
2951 If due to `eval' entry, one arg, t.");
2952 Vdebugger = Qnil;
2953
2954 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
2955 "If non-nil, this is a function for `signal' to call.\n\
2956 It receives the same arguments that `signal' was given.\n\
2957 The Edebug package uses this to regain control.");
2958 Vsignal_hook_function = Qnil;
2959
2960 Qmocklisp_arguments = intern ("mocklisp-arguments");
2961 staticpro (&Qmocklisp_arguments);
2962 DEFVAR_LISP ("mocklisp-arguments", &Vmocklisp_arguments,
2963 "While in a mocklisp function, the list of its unevaluated args.");
2964 Vmocklisp_arguments = Qt;
2965
2966 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
2967 "*Non-nil means call the debugger regardless of condition handlers.\n\
2968 Note that `debug-on-error', `debug-on-quit' and friends\n\
2969 still determine whether to handle the particular condition.");
2970 Vdebug_on_signal = Qnil;
2971
2972 Vrun_hooks = intern ("run-hooks");
2973 staticpro (&Vrun_hooks);
2974
2975 staticpro (&Vautoload_queue);
2976 Vautoload_queue = Qnil;
2977
2978 defsubr (&Sor);
2979 defsubr (&Sand);
2980 defsubr (&Sif);
2981 defsubr (&Scond);
2982 defsubr (&Sprogn);
2983 defsubr (&Sprog1);
2984 defsubr (&Sprog2);
2985 defsubr (&Ssetq);
2986 defsubr (&Squote);
2987 defsubr (&Sfunction);
2988 defsubr (&Sdefun);
2989 defsubr (&Sdefmacro);
2990 defsubr (&Sdefvar);
2991 defsubr (&Sdefconst);
2992 defsubr (&Suser_variable_p);
2993 defsubr (&Slet);
2994 defsubr (&SletX);
2995 defsubr (&Swhile);
2996 defsubr (&Smacroexpand);
2997 defsubr (&Scatch);
2998 defsubr (&Sthrow);
2999 defsubr (&Sunwind_protect);
3000 defsubr (&Scondition_case);
3001 defsubr (&Ssignal);
3002 defsubr (&Sinteractive_p);
3003 defsubr (&Scommandp);
3004 defsubr (&Sautoload);
3005 defsubr (&Seval);
3006 defsubr (&Sapply);
3007 defsubr (&Sfuncall);
3008 defsubr (&Srun_hooks);
3009 defsubr (&Srun_hook_with_args);
3010 defsubr (&Srun_hook_with_args_until_success);
3011 defsubr (&Srun_hook_with_args_until_failure);
3012 defsubr (&Sfetch_bytecode);
3013 defsubr (&Sbacktrace_debug);
3014 defsubr (&Sbacktrace);
3015 defsubr (&Sbacktrace_frame);
3016 }