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