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