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