(Fcommandp): Pay attention to the `interactive-form' property.
[bpt/emacs.git] / src / eval.c
1 /* Evaluator for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
5 This file is part of GNU Emacs.
6
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA. */
21
22
23 #include <config.h>
24 #include "lisp.h"
25 #include "blockinput.h"
26 #include "commands.h"
27 #include "keyboard.h"
28 #include "dispextern.h"
29 #include <setjmp.h>
30
31 #if HAVE_X_WINDOWS
32 #include "xterm.h"
33 #endif
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
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 int interrupt_input_blocked;
85 struct byte_stack *byte_stack;
86 };
87
88 struct catchtag *catchlist;
89
90 #ifdef DEBUG_GCPRO
91 /* Count levels of GCPRO to detect failure to UNGCPRO. */
92 int gcpro_level;
93 #endif
94
95 Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
96 Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
97 Lisp_Object Qand_rest, Qand_optional;
98 Lisp_Object Qdebug_on_error;
99 Lisp_Object Qdeclare;
100 Lisp_Object Qdebug;
101
102 /* This holds either the symbol `run-hooks' or nil.
103 It is nil at an early stage of startup, and when Emacs
104 is shutting down. */
105
106 Lisp_Object Vrun_hooks;
107
108 /* Non-nil means record all fset's and provide's, to be undone
109 if the file being autoloaded is not fully loaded.
110 They are recorded by being consed onto the front of Vautoload_queue:
111 (FUN . ODEF) for a defun, (0 . OFEATURES) for a provide. */
112
113 Lisp_Object Vautoload_queue;
114
115 /* Current number of specbindings allocated in specpdl. */
116
117 int specpdl_size;
118
119 /* Pointer to beginning of specpdl. */
120
121 struct specbinding *specpdl;
122
123 /* Pointer to first unused element in specpdl. */
124
125 struct specbinding *specpdl_ptr;
126
127 /* Maximum size allowed for specpdl allocation */
128
129 EMACS_INT max_specpdl_size;
130
131 /* Depth in Lisp evaluations and function calls. */
132
133 int lisp_eval_depth;
134
135 /* Maximum allowed depth in Lisp evaluations and function calls. */
136
137 EMACS_INT max_lisp_eval_depth;
138
139 /* Nonzero means enter debugger before next function call */
140
141 int debug_on_next_call;
142
143 /* Non-zero means debugger may continue. This is zero when the
144 debugger is called during redisplay, where it might not be safe to
145 continue the interrupted redisplay. */
146
147 int debugger_may_continue;
148
149 /* List of conditions (non-nil atom means all) which cause a backtrace
150 if an error is handled by the command loop's error handler. */
151
152 Lisp_Object Vstack_trace_on_error;
153
154 /* List of conditions (non-nil atom means all) which enter the debugger
155 if an error is handled by the command loop's error handler. */
156
157 Lisp_Object Vdebug_on_error;
158
159 /* List of conditions and regexps specifying error messages which
160 do not enter the debugger even if Vdebug_on_error says they should. */
161
162 Lisp_Object Vdebug_ignored_errors;
163
164 /* Non-nil means call the debugger even if the error will be handled. */
165
166 Lisp_Object Vdebug_on_signal;
167
168 /* Hook for edebug to use. */
169
170 Lisp_Object Vsignal_hook_function;
171
172 /* Nonzero means enter debugger if a quit signal
173 is handled by the command loop's error handler. */
174
175 int debug_on_quit;
176
177 /* The value of num_nonmacro_input_events as of the last time we
178 started to enter the debugger. If we decide to enter the debugger
179 again when this is still equal to num_nonmacro_input_events, then we
180 know that the debugger itself has an error, and we should just
181 signal the error instead of entering an infinite loop of debugger
182 invocations. */
183
184 int when_entered_debugger;
185
186 Lisp_Object Vdebugger;
187
188 /* The function from which the last `signal' was called. Set in
189 Fsignal. */
190
191 Lisp_Object Vsignaling_function;
192
193 /* Set to non-zero while processing X events. Checked in Feval to
194 make sure the Lisp interpreter isn't called from a signal handler,
195 which is unsafe because the interpreter isn't reentrant. */
196
197 int handling_signal;
198
199 /* Function to process declarations in defmacro forms. */
200
201 Lisp_Object Vmacro_declaration_function;
202
203 extern Lisp_Object Qrisky_local_variable;
204
205 static Lisp_Object funcall_lambda P_ ((Lisp_Object, int, Lisp_Object*));
206 static void unwind_to_catch P_ ((struct catchtag *, Lisp_Object)) NO_RETURN;
207
208 #if __GNUC__
209 /* "gcc -O3" enables automatic function inlining, which optimizes out
210 the arguments for the invocations of these functions, whereas they
211 expect these values on the stack. */
212 Lisp_Object apply1 () __attribute__((noinline));
213 Lisp_Object call2 () __attribute__((noinline));
214 #endif
215 \f
216 void
217 init_eval_once ()
218 {
219 specpdl_size = 50;
220 specpdl = (struct specbinding *) xmalloc (specpdl_size * sizeof (struct specbinding));
221 specpdl_ptr = specpdl;
222 /* Don't forget to update docs (lispref node "Local Variables"). */
223 max_specpdl_size = 1000;
224 max_lisp_eval_depth = 400;
225
226 Vrun_hooks = Qnil;
227 }
228
229 void
230 init_eval ()
231 {
232 specpdl_ptr = specpdl;
233 catchlist = 0;
234 handlerlist = 0;
235 backtrace_list = 0;
236 Vquit_flag = Qnil;
237 debug_on_next_call = 0;
238 lisp_eval_depth = 0;
239 #ifdef DEBUG_GCPRO
240 gcpro_level = 0;
241 #endif
242 /* This is less than the initial value of num_nonmacro_input_events. */
243 when_entered_debugger = -1;
244 }
245
246 /* unwind-protect function used by call_debugger. */
247
248 static Lisp_Object
249 restore_stack_limits (data)
250 Lisp_Object data;
251 {
252 max_specpdl_size = XINT (XCAR (data));
253 max_lisp_eval_depth = XINT (XCDR (data));
254 return Qnil;
255 }
256
257 /* Call the Lisp debugger, giving it argument ARG. */
258
259 Lisp_Object
260 call_debugger (arg)
261 Lisp_Object arg;
262 {
263 int debug_while_redisplaying;
264 int count = SPECPDL_INDEX ();
265 Lisp_Object val;
266 int old_max = max_specpdl_size;
267
268 /* Temporarily bump up the stack limits,
269 so the debugger won't run out of stack. */
270
271 max_specpdl_size += 1;
272 record_unwind_protect (restore_stack_limits,
273 Fcons (make_number (old_max),
274 make_number (max_lisp_eval_depth)));
275 max_specpdl_size = old_max;
276
277 if (lisp_eval_depth + 40 > max_lisp_eval_depth)
278 max_lisp_eval_depth = lisp_eval_depth + 40;
279
280 if (SPECPDL_INDEX () + 100 > max_specpdl_size)
281 max_specpdl_size = SPECPDL_INDEX () + 100;
282
283 #ifdef HAVE_X_WINDOWS
284 if (display_hourglass_p)
285 cancel_hourglass ();
286 #endif
287
288 debug_on_next_call = 0;
289 when_entered_debugger = num_nonmacro_input_events;
290
291 /* Resetting redisplaying_p to 0 makes sure that debug output is
292 displayed if the debugger is invoked during redisplay. */
293 debug_while_redisplaying = redisplaying_p;
294 redisplaying_p = 0;
295 specbind (intern ("debugger-may-continue"),
296 debug_while_redisplaying ? Qnil : Qt);
297 specbind (Qinhibit_redisplay, Qnil);
298 specbind (Qdebug_on_error, Qnil);
299
300 #if 0 /* Binding this prevents execution of Lisp code during
301 redisplay, which necessarily leads to display problems. */
302 specbind (Qinhibit_eval_during_redisplay, Qt);
303 #endif
304
305 val = apply1 (Vdebugger, arg);
306
307 /* Interrupting redisplay and resuming it later is not safe under
308 all circumstances. So, when the debugger returns, abort the
309 interrupted redisplay by going back to the top-level. */
310 if (debug_while_redisplaying)
311 Ftop_level ();
312
313 return unbind_to (count, val);
314 }
315
316 void
317 do_debug_on_call (code)
318 Lisp_Object code;
319 {
320 debug_on_next_call = 0;
321 backtrace_list->debug_on_exit = 1;
322 call_debugger (Fcons (code, Qnil));
323 }
324 \f
325 /* NOTE!!! Every function that can call EVAL must protect its args
326 and temporaries from garbage collection while it needs them.
327 The definition of `For' shows what you have to do. */
328
329 DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
330 doc: /* Eval args until one of them yields non-nil, then return that value.
331 The remaining args are not evalled at all.
332 If all args return nil, return nil.
333 usage: (or CONDITIONS...) */)
334 (args)
335 Lisp_Object args;
336 {
337 register Lisp_Object val = Qnil;
338 struct gcpro gcpro1;
339
340 GCPRO1 (args);
341
342 while (CONSP (args))
343 {
344 val = Feval (XCAR (args));
345 if (!NILP (val))
346 break;
347 args = XCDR (args);
348 }
349
350 UNGCPRO;
351 return val;
352 }
353
354 DEFUN ("and", Fand, Sand, 0, UNEVALLED, 0,
355 doc: /* Eval args until one of them yields nil, then return nil.
356 The remaining args are not evalled at all.
357 If no arg yields nil, return the last arg's value.
358 usage: (and CONDITIONS...) */)
359 (args)
360 Lisp_Object args;
361 {
362 register Lisp_Object val = Qt;
363 struct gcpro gcpro1;
364
365 GCPRO1 (args);
366
367 while (CONSP (args))
368 {
369 val = Feval (XCAR (args));
370 if (NILP (val))
371 break;
372 args = XCDR (args);
373 }
374
375 UNGCPRO;
376 return val;
377 }
378
379 DEFUN ("if", Fif, Sif, 2, UNEVALLED, 0,
380 doc: /* If COND yields non-nil, do THEN, else do ELSE...
381 Returns the value of THEN or the value of the last of the ELSE's.
382 THEN must be one expression, but ELSE... can be zero or more expressions.
383 If COND yields nil, and there are no ELSE's, the value is nil.
384 usage: (if COND THEN ELSE...) */)
385 (args)
386 Lisp_Object args;
387 {
388 register Lisp_Object cond;
389 struct gcpro gcpro1;
390
391 GCPRO1 (args);
392 cond = Feval (Fcar (args));
393 UNGCPRO;
394
395 if (!NILP (cond))
396 return Feval (Fcar (Fcdr (args)));
397 return Fprogn (Fcdr (Fcdr (args)));
398 }
399
400 DEFUN ("cond", Fcond, Scond, 0, UNEVALLED, 0,
401 doc: /* Try each clause until one succeeds.
402 Each clause looks like (CONDITION BODY...). CONDITION is evaluated
403 and, if the value is non-nil, this clause succeeds:
404 then the expressions in BODY are evaluated and the last one's
405 value is the value of the cond-form.
406 If no clause succeeds, cond returns nil.
407 If a clause has one element, as in (CONDITION),
408 CONDITION's value if non-nil is returned from the cond-form.
409 usage: (cond CLAUSES...) */)
410 (args)
411 Lisp_Object args;
412 {
413 register Lisp_Object clause, val;
414 struct gcpro gcpro1;
415
416 val = Qnil;
417 GCPRO1 (args);
418 while (!NILP (args))
419 {
420 clause = Fcar (args);
421 val = Feval (Fcar (clause));
422 if (!NILP (val))
423 {
424 if (!EQ (XCDR (clause), Qnil))
425 val = Fprogn (XCDR (clause));
426 break;
427 }
428 args = XCDR (args);
429 }
430 UNGCPRO;
431
432 return val;
433 }
434
435 DEFUN ("progn", Fprogn, Sprogn, 0, UNEVALLED, 0,
436 doc: /* Eval BODY forms sequentially and return value of last one.
437 usage: (progn BODY...) */)
438 (args)
439 Lisp_Object args;
440 {
441 register Lisp_Object val = Qnil;
442 struct gcpro gcpro1;
443
444 GCPRO1 (args);
445
446 while (CONSP (args))
447 {
448 val = Feval (XCAR (args));
449 args = XCDR (args);
450 }
451
452 UNGCPRO;
453 return val;
454 }
455
456 DEFUN ("prog1", Fprog1, Sprog1, 1, UNEVALLED, 0,
457 doc: /* Eval FIRST and BODY sequentially; value from FIRST.
458 The value of FIRST is saved during the evaluation of the remaining args,
459 whose values are discarded.
460 usage: (prog1 FIRST BODY...) */)
461 (args)
462 Lisp_Object args;
463 {
464 Lisp_Object val;
465 register Lisp_Object args_left;
466 struct gcpro gcpro1, gcpro2;
467 register int argnum = 0;
468
469 if (NILP(args))
470 return Qnil;
471
472 args_left = args;
473 val = Qnil;
474 GCPRO2 (args, val);
475
476 do
477 {
478 if (!(argnum++))
479 val = Feval (Fcar (args_left));
480 else
481 Feval (Fcar (args_left));
482 args_left = Fcdr (args_left);
483 }
484 while (!NILP(args_left));
485
486 UNGCPRO;
487 return val;
488 }
489
490 DEFUN ("prog2", Fprog2, Sprog2, 2, UNEVALLED, 0,
491 doc: /* Eval FORM1, FORM2 and BODY sequentially; value from FORM2.
492 The value of FORM2 is saved during the evaluation of the
493 remaining args, whose values are discarded.
494 usage: (prog2 FORM1 FORM2 BODY...) */)
495 (args)
496 Lisp_Object args;
497 {
498 Lisp_Object val;
499 register Lisp_Object args_left;
500 struct gcpro gcpro1, gcpro2;
501 register int argnum = -1;
502
503 val = Qnil;
504
505 if (NILP (args))
506 return Qnil;
507
508 args_left = args;
509 val = Qnil;
510 GCPRO2 (args, val);
511
512 do
513 {
514 if (!(argnum++))
515 val = Feval (Fcar (args_left));
516 else
517 Feval (Fcar (args_left));
518 args_left = Fcdr (args_left);
519 }
520 while (!NILP (args_left));
521
522 UNGCPRO;
523 return val;
524 }
525
526 DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0,
527 doc: /* Set each SYM to the value of its VAL.
528 The symbols SYM are variables; they are literal (not evaluated).
529 The values VAL are expressions; they are evaluated.
530 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
531 The second VAL is not computed until after the first SYM is set, and so on;
532 each VAL can use the new value of variables set earlier in the `setq'.
533 The return value of the `setq' form is the value of the last VAL.
534 usage: (setq [SYM VAL]...) */)
535 (args)
536 Lisp_Object args;
537 {
538 register Lisp_Object args_left;
539 register Lisp_Object val, sym;
540 struct gcpro gcpro1;
541
542 if (NILP(args))
543 return Qnil;
544
545 args_left = args;
546 GCPRO1 (args);
547
548 do
549 {
550 val = Feval (Fcar (Fcdr (args_left)));
551 sym = Fcar (args_left);
552 Fset (sym, val);
553 args_left = Fcdr (Fcdr (args_left));
554 }
555 while (!NILP(args_left));
556
557 UNGCPRO;
558 return val;
559 }
560
561 DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0,
562 doc: /* Return the argument, without evaluating it. `(quote x)' yields `x'.
563 usage: (quote ARG) */)
564 (args)
565 Lisp_Object args;
566 {
567 return Fcar (args);
568 }
569
570 DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0,
571 doc: /* Like `quote', but preferred for objects which are functions.
572 In byte compilation, `function' causes its argument to be compiled.
573 `quote' cannot do that.
574 usage: (function ARG) */)
575 (args)
576 Lisp_Object args;
577 {
578 return Fcar (args);
579 }
580
581
582 DEFUN ("interactive-p", Finteractive_p, Sinteractive_p, 0, 0, 0,
583 doc: /* Return t if the function was run directly by user input.
584 This means that the function was called with `call-interactively'
585 \(which includes being called as the binding of a key)
586 and input is currently coming from the keyboard (not in keyboard macro),
587 and Emacs is not running in batch mode (`noninteractive' is nil).
588
589 The only known proper use of `interactive-p' is in deciding whether to
590 display a helpful message, or how to display it. If you're thinking
591 of using it for any other purpose, it is quite likely that you're
592 making a mistake. Think: what do you want to do when the command is
593 called from a keyboard macro?
594
595 If you want to test whether your function was called with
596 `call-interactively', the way to do that is by adding an extra
597 optional argument, and making the `interactive' spec specify non-nil
598 unconditionally for that argument. (`p' is a good way to do this.) */)
599 ()
600 {
601 return (INTERACTIVE && interactive_p (1)) ? Qt : Qnil;
602 }
603
604
605 DEFUN ("called-interactively-p", Fcalled_interactively_p, Scalled_interactively_p, 0, 0, 0,
606 doc: /* Return t if the function using this was called with `call-interactively'.
607 This is used for implementing advice and other function-modifying
608 features of Emacs.
609
610 The cleanest way to test whether your function was called with
611 `call-interactively' is by adding an extra optional argument,
612 and making the `interactive' spec specify non-nil unconditionally
613 for that argument. (`p' is a good way to do this.) */)
614 ()
615 {
616 return interactive_p (1) ? Qt : Qnil;
617 }
618
619
620 /* Return 1 if function in which this appears was called using
621 call-interactively.
622
623 EXCLUDE_SUBRS_P non-zero means always return 0 if the function
624 called is a built-in. */
625
626 int
627 interactive_p (exclude_subrs_p)
628 int exclude_subrs_p;
629 {
630 struct backtrace *btp;
631 Lisp_Object fun;
632
633 btp = backtrace_list;
634
635 /* If this isn't a byte-compiled function, there may be a frame at
636 the top for Finteractive_p. If so, skip it. */
637 fun = Findirect_function (*btp->function, Qnil);
638 if (SUBRP (fun) && (XSUBR (fun) == &Sinteractive_p
639 || XSUBR (fun) == &Scalled_interactively_p))
640 btp = btp->next;
641
642 /* If we're running an Emacs 18-style byte-compiled function, there
643 may be a frame for Fbytecode at the top level. In any version of
644 Emacs there can be Fbytecode frames for subexpressions evaluated
645 inside catch and condition-case. Skip past them.
646
647 If this isn't a byte-compiled function, then we may now be
648 looking at several frames for special forms. Skip past them. */
649 while (btp
650 && (EQ (*btp->function, Qbytecode)
651 || btp->nargs == UNEVALLED))
652 btp = btp->next;
653
654 /* btp now points at the frame of the innermost function that isn't
655 a special form, ignoring frames for Finteractive_p and/or
656 Fbytecode at the top. If this frame is for a built-in function
657 (such as load or eval-region) return nil. */
658 fun = Findirect_function (*btp->function, Qnil);
659 if (exclude_subrs_p && SUBRP (fun))
660 return 0;
661
662 /* btp points to the frame of a Lisp function that called interactive-p.
663 Return t if that function was called interactively. */
664 if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively))
665 return 1;
666 return 0;
667 }
668
669
670 DEFUN ("defun", Fdefun, Sdefun, 2, UNEVALLED, 0,
671 doc: /* Define NAME as a function.
672 The definition is (lambda ARGLIST [DOCSTRING] BODY...).
673 See also the function `interactive'.
674 usage: (defun NAME ARGLIST [DOCSTRING] BODY...) */)
675 (args)
676 Lisp_Object args;
677 {
678 register Lisp_Object fn_name;
679 register Lisp_Object defn;
680
681 fn_name = Fcar (args);
682 CHECK_SYMBOL (fn_name);
683 defn = Fcons (Qlambda, Fcdr (args));
684 if (!NILP (Vpurify_flag))
685 defn = Fpurecopy (defn);
686 if (CONSP (XSYMBOL (fn_name)->function)
687 && EQ (XCAR (XSYMBOL (fn_name)->function), Qautoload))
688 LOADHIST_ATTACH (Fcons (Qt, fn_name));
689 Ffset (fn_name, defn);
690 LOADHIST_ATTACH (Fcons (Qdefun, fn_name));
691 return fn_name;
692 }
693
694 DEFUN ("defmacro", Fdefmacro, Sdefmacro, 2, UNEVALLED, 0,
695 doc: /* Define NAME as a macro.
696 The actual definition looks like
697 (macro lambda ARGLIST [DOCSTRING] [DECL] BODY...).
698 When the macro is called, as in (NAME ARGS...),
699 the function (lambda ARGLIST BODY...) is applied to
700 the list ARGS... as it appears in the expression,
701 and the result should be a form to be evaluated instead of the original.
702
703 DECL is a declaration, optional, which can specify how to indent
704 calls to this macro and how Edebug should handle it. It looks like this:
705 (declare SPECS...)
706 The elements can look like this:
707 (indent INDENT)
708 Set NAME's `lisp-indent-function' property to INDENT.
709
710 (debug DEBUG)
711 Set NAME's `edebug-form-spec' property to DEBUG. (This is
712 equivalent to writing a `def-edebug-spec' for the macro.)
713 usage: (defmacro NAME ARGLIST [DOCSTRING] [DECL] BODY...) */)
714 (args)
715 Lisp_Object args;
716 {
717 register Lisp_Object fn_name;
718 register Lisp_Object defn;
719 Lisp_Object lambda_list, doc, tail;
720
721 fn_name = Fcar (args);
722 CHECK_SYMBOL (fn_name);
723 lambda_list = Fcar (Fcdr (args));
724 tail = Fcdr (Fcdr (args));
725
726 doc = Qnil;
727 if (STRINGP (Fcar (tail)))
728 {
729 doc = XCAR (tail);
730 tail = XCDR (tail);
731 }
732
733 while (CONSP (Fcar (tail))
734 && EQ (Fcar (Fcar (tail)), Qdeclare))
735 {
736 if (!NILP (Vmacro_declaration_function))
737 {
738 struct gcpro gcpro1;
739 GCPRO1 (args);
740 call2 (Vmacro_declaration_function, fn_name, Fcar (tail));
741 UNGCPRO;
742 }
743
744 tail = Fcdr (tail);
745 }
746
747 if (NILP (doc))
748 tail = Fcons (lambda_list, tail);
749 else
750 tail = Fcons (lambda_list, Fcons (doc, tail));
751 defn = Fcons (Qmacro, Fcons (Qlambda, tail));
752
753 if (!NILP (Vpurify_flag))
754 defn = Fpurecopy (defn);
755 if (CONSP (XSYMBOL (fn_name)->function)
756 && EQ (XCAR (XSYMBOL (fn_name)->function), Qautoload))
757 LOADHIST_ATTACH (Fcons (Qt, fn_name));
758 Ffset (fn_name, defn);
759 LOADHIST_ATTACH (Fcons (Qdefun, fn_name));
760 return fn_name;
761 }
762
763
764 DEFUN ("defvaralias", Fdefvaralias, Sdefvaralias, 2, 3, 0,
765 doc: /* Make NEW-ALIAS a variable alias for symbol BASE-VARIABLE.
766 Aliased variables always have the same value; setting one sets the other.
767 Third arg DOCSTRING, if non-nil, is documentation for NEW-ALIAS. If it is
768 omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
769 or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
770 itself an alias.
771 The return value is BASE-VARIABLE. */)
772 (new_alias, base_variable, docstring)
773 Lisp_Object new_alias, base_variable, docstring;
774 {
775 struct Lisp_Symbol *sym;
776
777 CHECK_SYMBOL (new_alias);
778 CHECK_SYMBOL (base_variable);
779
780 if (SYMBOL_CONSTANT_P (new_alias))
781 error ("Cannot make a constant an alias");
782
783 sym = XSYMBOL (new_alias);
784 sym->indirect_variable = 1;
785 sym->value = base_variable;
786 sym->constant = SYMBOL_CONSTANT_P (base_variable);
787 LOADHIST_ATTACH (new_alias);
788 if (!NILP (docstring))
789 Fput (new_alias, Qvariable_documentation, docstring);
790 else
791 Fput (new_alias, Qvariable_documentation, Qnil);
792
793 return base_variable;
794 }
795
796
797 DEFUN ("defvar", Fdefvar, Sdefvar, 1, UNEVALLED, 0,
798 doc: /* Define SYMBOL as a variable, and return SYMBOL.
799 You are not required to define a variable in order to use it,
800 but the definition can supply documentation and an initial value
801 in a way that tags can recognize.
802
803 INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.
804 If SYMBOL is buffer-local, its default value is what is set;
805 buffer-local values are not affected.
806 INITVALUE and DOCSTRING are optional.
807 If DOCSTRING starts with *, this variable is identified as a user option.
808 This means that M-x set-variable recognizes it.
809 See also `user-variable-p'.
810 If INITVALUE is missing, SYMBOL's value is not set.
811
812 If SYMBOL has a local binding, then this form affects the local
813 binding. This is usually not what you want. Thus, if you need to
814 load a file defining variables, with this form or with `defconst' or
815 `defcustom', you should always load that file _outside_ any bindings
816 for these variables. \(`defconst' and `defcustom' behave similarly in
817 this respect.)
818 usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */)
819 (args)
820 Lisp_Object args;
821 {
822 register Lisp_Object sym, tem, tail;
823
824 sym = Fcar (args);
825 tail = Fcdr (args);
826 if (!NILP (Fcdr (Fcdr (tail))))
827 error ("Too many arguments");
828
829 tem = Fdefault_boundp (sym);
830 if (!NILP (tail))
831 {
832 if (SYMBOL_CONSTANT_P (sym))
833 {
834 /* For upward compatibility, allow (defvar :foo (quote :foo)). */
835 Lisp_Object tem = Fcar (tail);
836 if (! (CONSP (tem)
837 && EQ (XCAR (tem), Qquote)
838 && CONSP (XCDR (tem))
839 && EQ (XCAR (XCDR (tem)), sym)))
840 error ("Constant symbol `%s' specified in defvar",
841 SDATA (SYMBOL_NAME (sym)));
842 }
843
844 if (NILP (tem))
845 Fset_default (sym, Feval (Fcar (tail)));
846 else
847 { /* Check if there is really a global binding rather than just a let
848 binding that shadows the global unboundness of the var. */
849 volatile struct specbinding *pdl = specpdl_ptr;
850 while (--pdl >= specpdl)
851 {
852 if (EQ (pdl->symbol, sym) && !pdl->func
853 && EQ (pdl->old_value, Qunbound))
854 {
855 message_with_string ("Warning: defvar ignored because %s is let-bound",
856 SYMBOL_NAME (sym), 1);
857 break;
858 }
859 }
860 }
861 tail = Fcdr (tail);
862 tem = Fcar (tail);
863 if (!NILP (tem))
864 {
865 if (!NILP (Vpurify_flag))
866 tem = Fpurecopy (tem);
867 Fput (sym, Qvariable_documentation, tem);
868 }
869 LOADHIST_ATTACH (sym);
870 }
871 else
872 /* Simple (defvar <var>) should not count as a definition at all.
873 It could get in the way of other definitions, and unloading this
874 package could try to make the variable unbound. */
875 ;
876
877 return sym;
878 }
879
880 DEFUN ("defconst", Fdefconst, Sdefconst, 2, UNEVALLED, 0,
881 doc: /* Define SYMBOL as a constant variable.
882 The intent is that neither programs nor users should ever change this value.
883 Always sets the value of SYMBOL to the result of evalling INITVALUE.
884 If SYMBOL is buffer-local, its default value is what is set;
885 buffer-local values are not affected.
886 DOCSTRING is optional.
887
888 If SYMBOL has a local binding, then this form sets the local binding's
889 value. However, you should normally not make local bindings for
890 variables defined with this form.
891 usage: (defconst SYMBOL INITVALUE [DOCSTRING]) */)
892 (args)
893 Lisp_Object args;
894 {
895 register Lisp_Object sym, tem;
896
897 sym = Fcar (args);
898 if (!NILP (Fcdr (Fcdr (Fcdr (args)))))
899 error ("Too many arguments");
900
901 tem = Feval (Fcar (Fcdr (args)));
902 if (!NILP (Vpurify_flag))
903 tem = Fpurecopy (tem);
904 Fset_default (sym, tem);
905 tem = Fcar (Fcdr (Fcdr (args)));
906 if (!NILP (tem))
907 {
908 if (!NILP (Vpurify_flag))
909 tem = Fpurecopy (tem);
910 Fput (sym, Qvariable_documentation, tem);
911 }
912 Fput (sym, Qrisky_local_variable, Qt);
913 LOADHIST_ATTACH (sym);
914 return sym;
915 }
916
917 /* Error handler used in Fuser_variable_p. */
918 static Lisp_Object
919 user_variable_p_eh (ignore)
920 Lisp_Object ignore;
921 {
922 return Qnil;
923 }
924
925 DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0,
926 doc: /* Return t if VARIABLE is intended to be set and modified by users.
927 \(The alternative is a variable used internally in a Lisp program.)
928 A variable is a user variable if
929 \(1) the first character of its documentation is `*', or
930 \(2) it is customizable (its property list contains a non-nil value
931 of `standard-value' or `custom-autoload'), or
932 \(3) it is an alias for another user variable.
933 Return nil if VARIABLE is an alias and there is a loop in the
934 chain of symbols. */)
935 (variable)
936 Lisp_Object variable;
937 {
938 Lisp_Object documentation;
939
940 if (!SYMBOLP (variable))
941 return Qnil;
942
943 /* If indirect and there's an alias loop, don't check anything else. */
944 if (XSYMBOL (variable)->indirect_variable
945 && NILP (internal_condition_case_1 (indirect_variable, variable,
946 Qt, user_variable_p_eh)))
947 return Qnil;
948
949 while (1)
950 {
951 documentation = Fget (variable, Qvariable_documentation);
952 if (INTEGERP (documentation) && XINT (documentation) < 0)
953 return Qt;
954 if (STRINGP (documentation)
955 && ((unsigned char) SREF (documentation, 0) == '*'))
956 return Qt;
957 /* If it is (STRING . INTEGER), a negative integer means a user variable. */
958 if (CONSP (documentation)
959 && STRINGP (XCAR (documentation))
960 && INTEGERP (XCDR (documentation))
961 && XINT (XCDR (documentation)) < 0)
962 return Qt;
963 /* Customizable? See `custom-variable-p'. */
964 if ((!NILP (Fget (variable, intern ("standard-value"))))
965 || (!NILP (Fget (variable, intern ("custom-autoload")))))
966 return Qt;
967
968 if (!XSYMBOL (variable)->indirect_variable)
969 return Qnil;
970
971 /* An indirect variable? Let's follow the chain. */
972 variable = XSYMBOL (variable)->value;
973 }
974 }
975 \f
976 DEFUN ("let*", FletX, SletX, 1, UNEVALLED, 0,
977 doc: /* Bind variables according to VARLIST then eval BODY.
978 The value of the last form in BODY is returned.
979 Each element of VARLIST is a symbol (which is bound to nil)
980 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
981 Each VALUEFORM can refer to the symbols already bound by this VARLIST.
982 usage: (let* VARLIST BODY...) */)
983 (args)
984 Lisp_Object args;
985 {
986 Lisp_Object varlist, val, elt;
987 int count = SPECPDL_INDEX ();
988 struct gcpro gcpro1, gcpro2, gcpro3;
989
990 GCPRO3 (args, elt, varlist);
991
992 varlist = Fcar (args);
993 while (!NILP (varlist))
994 {
995 QUIT;
996 elt = Fcar (varlist);
997 if (SYMBOLP (elt))
998 specbind (elt, Qnil);
999 else if (! NILP (Fcdr (Fcdr (elt))))
1000 signal_error ("`let' bindings can have only one value-form", elt);
1001 else
1002 {
1003 val = Feval (Fcar (Fcdr (elt)));
1004 specbind (Fcar (elt), val);
1005 }
1006 varlist = Fcdr (varlist);
1007 }
1008 UNGCPRO;
1009 val = Fprogn (Fcdr (args));
1010 return unbind_to (count, val);
1011 }
1012
1013 DEFUN ("let", Flet, Slet, 1, UNEVALLED, 0,
1014 doc: /* Bind variables according to VARLIST then eval BODY.
1015 The value of the last form in BODY is returned.
1016 Each element of VARLIST is a symbol (which is bound to nil)
1017 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
1018 All the VALUEFORMs are evalled before any symbols are bound.
1019 usage: (let VARLIST BODY...) */)
1020 (args)
1021 Lisp_Object args;
1022 {
1023 Lisp_Object *temps, tem;
1024 register Lisp_Object elt, varlist;
1025 int count = SPECPDL_INDEX ();
1026 register int argnum;
1027 struct gcpro gcpro1, gcpro2;
1028
1029 varlist = Fcar (args);
1030
1031 /* Make space to hold the values to give the bound variables */
1032 elt = Flength (varlist);
1033 temps = (Lisp_Object *) alloca (XFASTINT (elt) * sizeof (Lisp_Object));
1034
1035 /* Compute the values and store them in `temps' */
1036
1037 GCPRO2 (args, *temps);
1038 gcpro2.nvars = 0;
1039
1040 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
1041 {
1042 QUIT;
1043 elt = Fcar (varlist);
1044 if (SYMBOLP (elt))
1045 temps [argnum++] = Qnil;
1046 else if (! NILP (Fcdr (Fcdr (elt))))
1047 signal_error ("`let' bindings can have only one value-form", elt);
1048 else
1049 temps [argnum++] = Feval (Fcar (Fcdr (elt)));
1050 gcpro2.nvars = argnum;
1051 }
1052 UNGCPRO;
1053
1054 varlist = Fcar (args);
1055 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
1056 {
1057 elt = Fcar (varlist);
1058 tem = temps[argnum++];
1059 if (SYMBOLP (elt))
1060 specbind (elt, tem);
1061 else
1062 specbind (Fcar (elt), tem);
1063 }
1064
1065 elt = Fprogn (Fcdr (args));
1066 return unbind_to (count, elt);
1067 }
1068
1069 DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0,
1070 doc: /* If TEST yields non-nil, eval BODY... and repeat.
1071 The order of execution is thus TEST, BODY, TEST, BODY and so on
1072 until TEST returns nil.
1073 usage: (while TEST BODY...) */)
1074 (args)
1075 Lisp_Object args;
1076 {
1077 Lisp_Object test, body;
1078 struct gcpro gcpro1, gcpro2;
1079
1080 GCPRO2 (test, body);
1081
1082 test = Fcar (args);
1083 body = Fcdr (args);
1084 while (!NILP (Feval (test)))
1085 {
1086 QUIT;
1087 Fprogn (body);
1088 }
1089
1090 UNGCPRO;
1091 return Qnil;
1092 }
1093
1094 DEFUN ("macroexpand", Fmacroexpand, Smacroexpand, 1, 2, 0,
1095 doc: /* Return result of expanding macros at top level of FORM.
1096 If FORM is not a macro call, it is returned unchanged.
1097 Otherwise, the macro is expanded and the expansion is considered
1098 in place of FORM. When a non-macro-call results, it is returned.
1099
1100 The second optional arg ENVIRONMENT specifies an environment of macro
1101 definitions to shadow the loaded ones for use in file byte-compilation. */)
1102 (form, environment)
1103 Lisp_Object form;
1104 Lisp_Object environment;
1105 {
1106 /* With cleanups from Hallvard Furuseth. */
1107 register Lisp_Object expander, sym, def, tem;
1108
1109 while (1)
1110 {
1111 /* Come back here each time we expand a macro call,
1112 in case it expands into another macro call. */
1113 if (!CONSP (form))
1114 break;
1115 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
1116 def = sym = XCAR (form);
1117 tem = Qnil;
1118 /* Trace symbols aliases to other symbols
1119 until we get a symbol that is not an alias. */
1120 while (SYMBOLP (def))
1121 {
1122 QUIT;
1123 sym = def;
1124 tem = Fassq (sym, environment);
1125 if (NILP (tem))
1126 {
1127 def = XSYMBOL (sym)->function;
1128 if (!EQ (def, Qunbound))
1129 continue;
1130 }
1131 break;
1132 }
1133 /* Right now TEM is the result from SYM in ENVIRONMENT,
1134 and if TEM is nil then DEF is SYM's function definition. */
1135 if (NILP (tem))
1136 {
1137 /* SYM is not mentioned in ENVIRONMENT.
1138 Look at its function definition. */
1139 if (EQ (def, Qunbound) || !CONSP (def))
1140 /* Not defined or definition not suitable */
1141 break;
1142 if (EQ (XCAR (def), Qautoload))
1143 {
1144 /* Autoloading function: will it be a macro when loaded? */
1145 tem = Fnth (make_number (4), def);
1146 if (EQ (tem, Qt) || EQ (tem, Qmacro))
1147 /* Yes, load it and try again. */
1148 {
1149 struct gcpro gcpro1;
1150 GCPRO1 (form);
1151 do_autoload (def, sym);
1152 UNGCPRO;
1153 continue;
1154 }
1155 else
1156 break;
1157 }
1158 else if (!EQ (XCAR (def), Qmacro))
1159 break;
1160 else expander = XCDR (def);
1161 }
1162 else
1163 {
1164 expander = XCDR (tem);
1165 if (NILP (expander))
1166 break;
1167 }
1168 form = apply1 (expander, XCDR (form));
1169 }
1170 return form;
1171 }
1172 \f
1173 DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
1174 doc: /* Eval BODY allowing nonlocal exits using `throw'.
1175 TAG is evalled to get the tag to use; it must not be nil.
1176
1177 Then the BODY is executed.
1178 Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
1179 If no throw happens, `catch' returns the value of the last BODY form.
1180 If a throw happens, it specifies the value to return from `catch'.
1181 usage: (catch TAG BODY...) */)
1182 (args)
1183 Lisp_Object args;
1184 {
1185 register Lisp_Object tag;
1186 struct gcpro gcpro1;
1187
1188 GCPRO1 (args);
1189 tag = Feval (Fcar (args));
1190 UNGCPRO;
1191 return internal_catch (tag, Fprogn, Fcdr (args));
1192 }
1193
1194 /* Set up a catch, then call C function FUNC on argument ARG.
1195 FUNC should return a Lisp_Object.
1196 This is how catches are done from within C code. */
1197
1198 Lisp_Object
1199 internal_catch (tag, func, arg)
1200 Lisp_Object tag;
1201 Lisp_Object (*func) ();
1202 Lisp_Object arg;
1203 {
1204 /* This structure is made part of the chain `catchlist'. */
1205 struct catchtag c;
1206
1207 /* Fill in the components of c, and put it on the list. */
1208 c.next = catchlist;
1209 c.tag = tag;
1210 c.val = Qnil;
1211 c.backlist = backtrace_list;
1212 c.handlerlist = handlerlist;
1213 c.lisp_eval_depth = lisp_eval_depth;
1214 c.pdlcount = SPECPDL_INDEX ();
1215 c.poll_suppress_count = poll_suppress_count;
1216 c.interrupt_input_blocked = interrupt_input_blocked;
1217 c.gcpro = gcprolist;
1218 c.byte_stack = byte_stack_list;
1219 catchlist = &c;
1220
1221 /* Call FUNC. */
1222 if (! _setjmp (c.jmp))
1223 c.val = (*func) (arg);
1224
1225 /* Throw works by a longjmp that comes right here. */
1226 catchlist = c.next;
1227 return c.val;
1228 }
1229
1230 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
1231 jump to that CATCH, returning VALUE as the value of that catch.
1232
1233 This is the guts Fthrow and Fsignal; they differ only in the way
1234 they choose the catch tag to throw to. A catch tag for a
1235 condition-case form has a TAG of Qnil.
1236
1237 Before each catch is discarded, unbind all special bindings and
1238 execute all unwind-protect clauses made above that catch. Unwind
1239 the handler stack as we go, so that the proper handlers are in
1240 effect for each unwind-protect clause we run. At the end, restore
1241 some static info saved in CATCH, and longjmp to the location
1242 specified in the
1243
1244 This is used for correct unwinding in Fthrow and Fsignal. */
1245
1246 static void
1247 unwind_to_catch (catch, value)
1248 struct catchtag *catch;
1249 Lisp_Object value;
1250 {
1251 register int last_time;
1252
1253 /* Save the value in the tag. */
1254 catch->val = value;
1255
1256 /* Restore certain special C variables. */
1257 set_poll_suppress_count (catch->poll_suppress_count);
1258 UNBLOCK_INPUT_TO (catch->interrupt_input_blocked);
1259 handling_signal = 0;
1260 immediate_quit = 0;
1261
1262 do
1263 {
1264 last_time = catchlist == catch;
1265
1266 /* Unwind the specpdl stack, and then restore the proper set of
1267 handlers. */
1268 unbind_to (catchlist->pdlcount, Qnil);
1269 handlerlist = catchlist->handlerlist;
1270 catchlist = catchlist->next;
1271 }
1272 while (! last_time);
1273
1274 #if HAVE_X_WINDOWS
1275 /* If x_catch_errors was done, turn it off now.
1276 (First we give unbind_to a chance to do that.) */
1277 x_fully_uncatch_errors ();
1278 #endif
1279
1280 byte_stack_list = catch->byte_stack;
1281 gcprolist = catch->gcpro;
1282 #ifdef DEBUG_GCPRO
1283 if (gcprolist != 0)
1284 gcpro_level = gcprolist->level + 1;
1285 else
1286 gcpro_level = 0;
1287 #endif
1288 backtrace_list = catch->backlist;
1289 lisp_eval_depth = catch->lisp_eval_depth;
1290
1291 _longjmp (catch->jmp, 1);
1292 }
1293
1294 DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
1295 doc: /* Throw to the catch for TAG and return VALUE from it.
1296 Both TAG and VALUE are evalled. */)
1297 (tag, value)
1298 register Lisp_Object tag, value;
1299 {
1300 register struct catchtag *c;
1301
1302 if (!NILP (tag))
1303 for (c = catchlist; c; c = c->next)
1304 {
1305 if (EQ (c->tag, tag))
1306 unwind_to_catch (c, value);
1307 }
1308 xsignal2 (Qno_catch, tag, value);
1309 }
1310
1311
1312 DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
1313 doc: /* Do BODYFORM, protecting with UNWINDFORMS.
1314 If BODYFORM completes normally, its value is returned
1315 after executing the UNWINDFORMS.
1316 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.
1317 usage: (unwind-protect BODYFORM UNWINDFORMS...) */)
1318 (args)
1319 Lisp_Object args;
1320 {
1321 Lisp_Object val;
1322 int count = SPECPDL_INDEX ();
1323
1324 record_unwind_protect (Fprogn, Fcdr (args));
1325 val = Feval (Fcar (args));
1326 return unbind_to (count, val);
1327 }
1328 \f
1329 /* Chain of condition handlers currently in effect.
1330 The elements of this chain are contained in the stack frames
1331 of Fcondition_case and internal_condition_case.
1332 When an error is signaled (by calling Fsignal, below),
1333 this chain is searched for an element that applies. */
1334
1335 struct handler *handlerlist;
1336
1337 DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
1338 doc: /* Regain control when an error is signaled.
1339 Executes BODYFORM and returns its value if no error happens.
1340 Each element of HANDLERS looks like (CONDITION-NAME BODY...)
1341 where the BODY is made of Lisp expressions.
1342
1343 A handler is applicable to an error
1344 if CONDITION-NAME is one of the error's condition names.
1345 If an error happens, the first applicable handler is run.
1346
1347 The car of a handler may be a list of condition names
1348 instead of a single condition name.
1349
1350 When a handler handles an error,
1351 control returns to the condition-case and the handler BODY... is executed
1352 with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).
1353 VAR may be nil; then you do not get access to the signal information.
1354
1355 The value of the last BODY form is returned from the condition-case.
1356 See also the function `signal' for more info.
1357 usage: (condition-case VAR BODYFORM &rest HANDLERS) */)
1358 (args)
1359 Lisp_Object args;
1360 {
1361 register Lisp_Object bodyform, handlers;
1362 volatile Lisp_Object var;
1363
1364 var = Fcar (args);
1365 bodyform = Fcar (Fcdr (args));
1366 handlers = Fcdr (Fcdr (args));
1367
1368 return internal_lisp_condition_case (var, bodyform, handlers);
1369 }
1370
1371 /* Like Fcondition_case, but the args are separate
1372 rather than passed in a list. Used by Fbyte_code. */
1373
1374 Lisp_Object
1375 internal_lisp_condition_case (var, bodyform, handlers)
1376 volatile Lisp_Object var;
1377 Lisp_Object bodyform, handlers;
1378 {
1379 Lisp_Object val;
1380 struct catchtag c;
1381 struct handler h;
1382
1383 CHECK_SYMBOL (var);
1384
1385 for (val = handlers; CONSP (val); val = XCDR (val))
1386 {
1387 Lisp_Object tem;
1388 tem = XCAR (val);
1389 if (! (NILP (tem)
1390 || (CONSP (tem)
1391 && (SYMBOLP (XCAR (tem))
1392 || CONSP (XCAR (tem))))))
1393 error ("Invalid condition handler", tem);
1394 }
1395
1396 c.tag = Qnil;
1397 c.val = Qnil;
1398 c.backlist = backtrace_list;
1399 c.handlerlist = handlerlist;
1400 c.lisp_eval_depth = lisp_eval_depth;
1401 c.pdlcount = SPECPDL_INDEX ();
1402 c.poll_suppress_count = poll_suppress_count;
1403 c.interrupt_input_blocked = interrupt_input_blocked;
1404 c.gcpro = gcprolist;
1405 c.byte_stack = byte_stack_list;
1406 if (_setjmp (c.jmp))
1407 {
1408 if (!NILP (h.var))
1409 specbind (h.var, c.val);
1410 val = Fprogn (Fcdr (h.chosen_clause));
1411
1412 /* Note that this just undoes the binding of h.var; whoever
1413 longjumped to us unwound the stack to c.pdlcount before
1414 throwing. */
1415 unbind_to (c.pdlcount, Qnil);
1416 return val;
1417 }
1418 c.next = catchlist;
1419 catchlist = &c;
1420
1421 h.var = var;
1422 h.handler = handlers;
1423 h.next = handlerlist;
1424 h.tag = &c;
1425 handlerlist = &h;
1426
1427 val = Feval (bodyform);
1428 catchlist = c.next;
1429 handlerlist = h.next;
1430 return val;
1431 }
1432
1433 /* Call the function BFUN with no arguments, catching errors within it
1434 according to HANDLERS. If there is an error, call HFUN with
1435 one argument which is the data that describes the error:
1436 (SIGNALNAME . DATA)
1437
1438 HANDLERS can be a list of conditions to catch.
1439 If HANDLERS is Qt, catch all errors.
1440 If HANDLERS is Qerror, catch all errors
1441 but allow the debugger to run if that is enabled. */
1442
1443 Lisp_Object
1444 internal_condition_case (bfun, handlers, hfun)
1445 Lisp_Object (*bfun) ();
1446 Lisp_Object handlers;
1447 Lisp_Object (*hfun) ();
1448 {
1449 Lisp_Object val;
1450 struct catchtag c;
1451 struct handler h;
1452
1453 /* Since Fsignal will close off all calls to x_catch_errors,
1454 we will get the wrong results if some are not closed now. */
1455 #if HAVE_X_WINDOWS
1456 if (x_catching_errors ())
1457 abort ();
1458 #endif
1459
1460 c.tag = Qnil;
1461 c.val = Qnil;
1462 c.backlist = backtrace_list;
1463 c.handlerlist = handlerlist;
1464 c.lisp_eval_depth = lisp_eval_depth;
1465 c.pdlcount = SPECPDL_INDEX ();
1466 c.poll_suppress_count = poll_suppress_count;
1467 c.interrupt_input_blocked = interrupt_input_blocked;
1468 c.gcpro = gcprolist;
1469 c.byte_stack = byte_stack_list;
1470 if (_setjmp (c.jmp))
1471 {
1472 return (*hfun) (c.val);
1473 }
1474 c.next = catchlist;
1475 catchlist = &c;
1476 h.handler = handlers;
1477 h.var = Qnil;
1478 h.next = handlerlist;
1479 h.tag = &c;
1480 handlerlist = &h;
1481
1482 val = (*bfun) ();
1483 catchlist = c.next;
1484 handlerlist = h.next;
1485 return val;
1486 }
1487
1488 /* Like internal_condition_case but call BFUN with ARG as its argument. */
1489
1490 Lisp_Object
1491 internal_condition_case_1 (bfun, arg, handlers, hfun)
1492 Lisp_Object (*bfun) ();
1493 Lisp_Object arg;
1494 Lisp_Object handlers;
1495 Lisp_Object (*hfun) ();
1496 {
1497 Lisp_Object val;
1498 struct catchtag c;
1499 struct handler h;
1500
1501 /* Since Fsignal will close off all calls to x_catch_errors,
1502 we will get the wrong results if some are not closed now. */
1503 #if HAVE_X_WINDOWS
1504 if (x_catching_errors ())
1505 abort ();
1506 #endif
1507
1508 c.tag = Qnil;
1509 c.val = Qnil;
1510 c.backlist = backtrace_list;
1511 c.handlerlist = handlerlist;
1512 c.lisp_eval_depth = lisp_eval_depth;
1513 c.pdlcount = SPECPDL_INDEX ();
1514 c.poll_suppress_count = poll_suppress_count;
1515 c.interrupt_input_blocked = interrupt_input_blocked;
1516 c.gcpro = gcprolist;
1517 c.byte_stack = byte_stack_list;
1518 if (_setjmp (c.jmp))
1519 {
1520 return (*hfun) (c.val);
1521 }
1522 c.next = catchlist;
1523 catchlist = &c;
1524 h.handler = handlers;
1525 h.var = Qnil;
1526 h.next = handlerlist;
1527 h.tag = &c;
1528 handlerlist = &h;
1529
1530 val = (*bfun) (arg);
1531 catchlist = c.next;
1532 handlerlist = h.next;
1533 return val;
1534 }
1535
1536
1537 /* Like internal_condition_case but call BFUN with NARGS as first,
1538 and ARGS as second argument. */
1539
1540 Lisp_Object
1541 internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
1542 Lisp_Object (*bfun) ();
1543 int nargs;
1544 Lisp_Object *args;
1545 Lisp_Object handlers;
1546 Lisp_Object (*hfun) ();
1547 {
1548 Lisp_Object val;
1549 struct catchtag c;
1550 struct handler h;
1551
1552 /* Since Fsignal will close off all calls to x_catch_errors,
1553 we will get the wrong results if some are not closed now. */
1554 #if HAVE_X_WINDOWS
1555 if (x_catching_errors ())
1556 abort ();
1557 #endif
1558
1559 c.tag = Qnil;
1560 c.val = Qnil;
1561 c.backlist = backtrace_list;
1562 c.handlerlist = handlerlist;
1563 c.lisp_eval_depth = lisp_eval_depth;
1564 c.pdlcount = SPECPDL_INDEX ();
1565 c.poll_suppress_count = poll_suppress_count;
1566 c.interrupt_input_blocked = interrupt_input_blocked;
1567 c.gcpro = gcprolist;
1568 c.byte_stack = byte_stack_list;
1569 if (_setjmp (c.jmp))
1570 {
1571 return (*hfun) (c.val);
1572 }
1573 c.next = catchlist;
1574 catchlist = &c;
1575 h.handler = handlers;
1576 h.var = Qnil;
1577 h.next = handlerlist;
1578 h.tag = &c;
1579 handlerlist = &h;
1580
1581 val = (*bfun) (nargs, args);
1582 catchlist = c.next;
1583 handlerlist = h.next;
1584 return val;
1585 }
1586
1587 \f
1588 static Lisp_Object find_handler_clause P_ ((Lisp_Object, Lisp_Object,
1589 Lisp_Object, Lisp_Object));
1590
1591 DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
1592 doc: /* Signal an error. Args are ERROR-SYMBOL and associated DATA.
1593 This function does not return.
1594
1595 An error symbol is a symbol with an `error-conditions' property
1596 that is a list of condition names.
1597 A handler for any of those names will get to handle this signal.
1598 The symbol `error' should normally be one of them.
1599
1600 DATA should be a list. Its elements are printed as part of the error message.
1601 See Info anchor `(elisp)Definition of signal' for some details on how this
1602 error message is constructed.
1603 If the signal is handled, DATA is made available to the handler.
1604 See also the function `condition-case'. */)
1605 (error_symbol, data)
1606 Lisp_Object error_symbol, data;
1607 {
1608 /* When memory is full, ERROR-SYMBOL is nil,
1609 and DATA is (REAL-ERROR-SYMBOL . REAL-DATA).
1610 That is a special case--don't do this in other situations. */
1611 register struct handler *allhandlers = handlerlist;
1612 Lisp_Object conditions;
1613 extern int gc_in_progress;
1614 extern int waiting_for_input;
1615 Lisp_Object string;
1616 Lisp_Object real_error_symbol;
1617 struct backtrace *bp;
1618
1619 immediate_quit = handling_signal = 0;
1620 abort_on_gc = 0;
1621 if (gc_in_progress || waiting_for_input)
1622 abort ();
1623
1624 if (NILP (error_symbol))
1625 real_error_symbol = Fcar (data);
1626 else
1627 real_error_symbol = error_symbol;
1628
1629 #if 0 /* rms: I don't know why this was here,
1630 but it is surely wrong for an error that is handled. */
1631 #ifdef HAVE_X_WINDOWS
1632 if (display_hourglass_p)
1633 cancel_hourglass ();
1634 #endif
1635 #endif
1636
1637 /* This hook is used by edebug. */
1638 if (! NILP (Vsignal_hook_function)
1639 && ! NILP (error_symbol))
1640 {
1641 /* Edebug takes care of restoring these variables when it exits. */
1642 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
1643 max_lisp_eval_depth = lisp_eval_depth + 20;
1644
1645 if (SPECPDL_INDEX () + 40 > max_specpdl_size)
1646 max_specpdl_size = SPECPDL_INDEX () + 40;
1647
1648 call2 (Vsignal_hook_function, error_symbol, data);
1649 }
1650
1651 conditions = Fget (real_error_symbol, Qerror_conditions);
1652
1653 /* Remember from where signal was called. Skip over the frame for
1654 `signal' itself. If a frame for `error' follows, skip that,
1655 too. Don't do this when ERROR_SYMBOL is nil, because that
1656 is a memory-full error. */
1657 Vsignaling_function = Qnil;
1658 if (backtrace_list && !NILP (error_symbol))
1659 {
1660 bp = backtrace_list->next;
1661 if (bp && bp->function && EQ (*bp->function, Qerror))
1662 bp = bp->next;
1663 if (bp && bp->function)
1664 Vsignaling_function = *bp->function;
1665 }
1666
1667 for (; handlerlist; handlerlist = handlerlist->next)
1668 {
1669 register Lisp_Object clause;
1670
1671 clause = find_handler_clause (handlerlist->handler, conditions,
1672 error_symbol, data);
1673
1674 if (EQ (clause, Qlambda))
1675 {
1676 /* We can't return values to code which signaled an error, but we
1677 can continue code which has signaled a quit. */
1678 if (EQ (real_error_symbol, Qquit))
1679 return Qnil;
1680 else
1681 error ("Cannot return from the debugger in an error");
1682 }
1683
1684 if (!NILP (clause))
1685 {
1686 Lisp_Object unwind_data;
1687 struct handler *h = handlerlist;
1688
1689 handlerlist = allhandlers;
1690
1691 if (NILP (error_symbol))
1692 unwind_data = data;
1693 else
1694 unwind_data = Fcons (error_symbol, data);
1695 h->chosen_clause = clause;
1696 unwind_to_catch (h->tag, unwind_data);
1697 }
1698 }
1699
1700 handlerlist = allhandlers;
1701 /* If no handler is present now, try to run the debugger,
1702 and if that fails, throw to top level. */
1703 find_handler_clause (Qerror, conditions, error_symbol, data);
1704 if (catchlist != 0)
1705 Fthrow (Qtop_level, Qt);
1706
1707 if (! NILP (error_symbol))
1708 data = Fcons (error_symbol, data);
1709
1710 string = Ferror_message_string (data);
1711 fatal ("%s", SDATA (string), 0);
1712 }
1713
1714 /* Internal version of Fsignal that never returns.
1715 Used for anything but Qquit (which can return from Fsignal). */
1716
1717 void
1718 xsignal (error_symbol, data)
1719 Lisp_Object error_symbol, data;
1720 {
1721 Fsignal (error_symbol, data);
1722 abort ();
1723 }
1724
1725 /* Like xsignal, but takes 0, 1, 2, or 3 args instead of a list. */
1726
1727 void
1728 xsignal0 (error_symbol)
1729 Lisp_Object error_symbol;
1730 {
1731 xsignal (error_symbol, Qnil);
1732 }
1733
1734 void
1735 xsignal1 (error_symbol, arg)
1736 Lisp_Object error_symbol, arg;
1737 {
1738 xsignal (error_symbol, list1 (arg));
1739 }
1740
1741 void
1742 xsignal2 (error_symbol, arg1, arg2)
1743 Lisp_Object error_symbol, arg1, arg2;
1744 {
1745 xsignal (error_symbol, list2 (arg1, arg2));
1746 }
1747
1748 void
1749 xsignal3 (error_symbol, arg1, arg2, arg3)
1750 Lisp_Object error_symbol, arg1, arg2, arg3;
1751 {
1752 xsignal (error_symbol, list3 (arg1, arg2, arg3));
1753 }
1754
1755 /* Signal `error' with message S, and additional arg ARG.
1756 If ARG is not a genuine list, make it a one-element list. */
1757
1758 void
1759 signal_error (s, arg)
1760 char *s;
1761 Lisp_Object arg;
1762 {
1763 Lisp_Object tortoise, hare;
1764
1765 hare = tortoise = arg;
1766 while (CONSP (hare))
1767 {
1768 hare = XCDR (hare);
1769 if (!CONSP (hare))
1770 break;
1771
1772 hare = XCDR (hare);
1773 tortoise = XCDR (tortoise);
1774
1775 if (EQ (hare, tortoise))
1776 break;
1777 }
1778
1779 if (!NILP (hare))
1780 arg = Fcons (arg, Qnil); /* Make it a list. */
1781
1782 xsignal (Qerror, Fcons (build_string (s), arg));
1783 }
1784
1785
1786 /* Return nonzero iff LIST is a non-nil atom or
1787 a list containing one of CONDITIONS. */
1788
1789 static int
1790 wants_debugger (list, conditions)
1791 Lisp_Object list, conditions;
1792 {
1793 if (NILP (list))
1794 return 0;
1795 if (! CONSP (list))
1796 return 1;
1797
1798 while (CONSP (conditions))
1799 {
1800 Lisp_Object this, tail;
1801 this = XCAR (conditions);
1802 for (tail = list; CONSP (tail); tail = XCDR (tail))
1803 if (EQ (XCAR (tail), this))
1804 return 1;
1805 conditions = XCDR (conditions);
1806 }
1807 return 0;
1808 }
1809
1810 /* Return 1 if an error with condition-symbols CONDITIONS,
1811 and described by SIGNAL-DATA, should skip the debugger
1812 according to debugger-ignored-errors. */
1813
1814 static int
1815 skip_debugger (conditions, data)
1816 Lisp_Object conditions, data;
1817 {
1818 Lisp_Object tail;
1819 int first_string = 1;
1820 Lisp_Object error_message;
1821
1822 error_message = Qnil;
1823 for (tail = Vdebug_ignored_errors; CONSP (tail); tail = XCDR (tail))
1824 {
1825 if (STRINGP (XCAR (tail)))
1826 {
1827 if (first_string)
1828 {
1829 error_message = Ferror_message_string (data);
1830 first_string = 0;
1831 }
1832
1833 if (fast_string_match (XCAR (tail), error_message) >= 0)
1834 return 1;
1835 }
1836 else
1837 {
1838 Lisp_Object contail;
1839
1840 for (contail = conditions; CONSP (contail); contail = XCDR (contail))
1841 if (EQ (XCAR (tail), XCAR (contail)))
1842 return 1;
1843 }
1844 }
1845
1846 return 0;
1847 }
1848
1849 /* Value of Qlambda means we have called debugger and user has continued.
1850 There are two ways to pass SIG and DATA:
1851 = SIG is the error symbol, and DATA is the rest of the data.
1852 = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
1853 This is for memory-full errors only.
1854
1855 We need to increase max_specpdl_size temporarily around
1856 anything we do that can push on the specpdl, so as not to get
1857 a second error here in case we're handling specpdl overflow. */
1858
1859 static Lisp_Object
1860 find_handler_clause (handlers, conditions, sig, data)
1861 Lisp_Object handlers, conditions, sig, data;
1862 {
1863 register Lisp_Object h;
1864 register Lisp_Object tem;
1865 int debugger_called = 0;
1866 int debugger_considered = 0;
1867
1868 /* t is used by handlers for all conditions, set up by C code. */
1869 if (EQ (handlers, Qt))
1870 return Qt;
1871
1872 /* Don't run the debugger for a memory-full error.
1873 (There is no room in memory to do that!) */
1874 if (NILP (sig))
1875 debugger_considered = 1;
1876
1877 /* error is used similarly, but means print an error message
1878 and run the debugger if that is enabled. */
1879 if (EQ (handlers, Qerror)
1880 || !NILP (Vdebug_on_signal)) /* This says call debugger even if
1881 there is a handler. */
1882 {
1883 if (!NILP (sig) && wants_debugger (Vstack_trace_on_error, conditions))
1884 {
1885 max_specpdl_size++;
1886 #ifdef PROTOTYPES
1887 internal_with_output_to_temp_buffer ("*Backtrace*",
1888 (Lisp_Object (*) (Lisp_Object)) Fbacktrace,
1889 Qnil);
1890 #else
1891 internal_with_output_to_temp_buffer ("*Backtrace*",
1892 Fbacktrace, Qnil);
1893 #endif
1894 max_specpdl_size--;
1895 }
1896
1897 if (!debugger_considered)
1898 {
1899 debugger_considered = 1;
1900 debugger_called = maybe_call_debugger (conditions, sig, data);
1901 }
1902
1903 /* If there is no handler, return saying whether we ran the debugger. */
1904 if (EQ (handlers, Qerror))
1905 {
1906 if (debugger_called)
1907 return Qlambda;
1908 return Qt;
1909 }
1910 }
1911
1912 for (h = handlers; CONSP (h); h = Fcdr (h))
1913 {
1914 Lisp_Object handler, condit;
1915
1916 handler = Fcar (h);
1917 if (!CONSP (handler))
1918 continue;
1919 condit = Fcar (handler);
1920 /* Handle a single condition name in handler HANDLER. */
1921 if (SYMBOLP (condit))
1922 {
1923 tem = Fmemq (Fcar (handler), conditions);
1924 if (!NILP (tem))
1925 return handler;
1926 }
1927 /* Handle a list of condition names in handler HANDLER. */
1928 else if (CONSP (condit))
1929 {
1930 Lisp_Object tail;
1931 for (tail = condit; CONSP (tail); tail = XCDR (tail))
1932 {
1933 tem = Fmemq (Fcar (tail), conditions);
1934 if (!NILP (tem))
1935 {
1936 /* This handler is going to apply.
1937 Does it allow the debugger to run first? */
1938 if (! debugger_considered && !NILP (Fmemq (Qdebug, condit)))
1939 maybe_call_debugger (conditions, sig, data);
1940 return handler;
1941 }
1942 }
1943 }
1944 }
1945
1946 return Qnil;
1947 }
1948
1949 /* Call the debugger if calling it is currently enabled for CONDITIONS.
1950 SIG and DATA describe the signal, as in find_handler_clause. */
1951
1952 int
1953 maybe_call_debugger (conditions, sig, data)
1954 Lisp_Object conditions, sig, data;
1955 {
1956 Lisp_Object combined_data;
1957
1958 combined_data = Fcons (sig, data);
1959
1960 if (
1961 /* Don't try to run the debugger with interrupts blocked.
1962 The editing loop would return anyway. */
1963 ! INPUT_BLOCKED_P
1964 /* Does user wants to enter debugger for this kind of error? */
1965 && (EQ (sig, Qquit)
1966 ? debug_on_quit
1967 : wants_debugger (Vdebug_on_error, conditions))
1968 && ! skip_debugger (conditions, combined_data)
1969 /* rms: what's this for? */
1970 && when_entered_debugger < num_nonmacro_input_events)
1971 {
1972 call_debugger (Fcons (Qerror, Fcons (combined_data, Qnil)));
1973 return 1;
1974 }
1975
1976 return 0;
1977 }
1978
1979 /* dump an error message; called like printf */
1980
1981 /* VARARGS 1 */
1982 void
1983 error (m, a1, a2, a3)
1984 char *m;
1985 char *a1, *a2, *a3;
1986 {
1987 char buf[200];
1988 int size = 200;
1989 int mlen;
1990 char *buffer = buf;
1991 char *args[3];
1992 int allocated = 0;
1993 Lisp_Object string;
1994
1995 args[0] = a1;
1996 args[1] = a2;
1997 args[2] = a3;
1998
1999 mlen = strlen (m);
2000
2001 while (1)
2002 {
2003 int used = doprnt (buffer, size, m, m + mlen, 3, args);
2004 if (used < size)
2005 break;
2006 size *= 2;
2007 if (allocated)
2008 buffer = (char *) xrealloc (buffer, size);
2009 else
2010 {
2011 buffer = (char *) xmalloc (size);
2012 allocated = 1;
2013 }
2014 }
2015
2016 string = build_string (buffer);
2017 if (allocated)
2018 xfree (buffer);
2019
2020 xsignal1 (Qerror, string);
2021 }
2022 \f
2023 DEFUN ("commandp", Fcommandp, Scommandp, 1, 2, 0,
2024 doc: /* Non-nil if FUNCTION makes provisions for interactive calling.
2025 This means it contains a description for how to read arguments to give it.
2026 The value is nil for an invalid function or a symbol with no function
2027 definition.
2028
2029 Interactively callable functions include strings and vectors (treated
2030 as keyboard macros), lambda-expressions that contain a top-level call
2031 to `interactive', autoload definitions made by `autoload' with non-nil
2032 fourth argument, and some of the built-in functions of Lisp.
2033
2034 Also, a symbol satisfies `commandp' if its function definition does so.
2035
2036 If the optional argument FOR-CALL-INTERACTIVELY is non-nil,
2037 then strings and vectors are not accepted. */)
2038 (function, for_call_interactively)
2039 Lisp_Object function, for_call_interactively;
2040 {
2041 register Lisp_Object fun;
2042 register Lisp_Object funcar;
2043 Lisp_Object if_prop = Qnil;
2044
2045 fun = function;
2046
2047 fun = indirect_function (fun); /* Check cycles. */
2048 if (NILP (fun) || EQ (fun, Qunbound))
2049 return Qnil;
2050
2051 /* Check an `interactive-form' property if present, analogous to the
2052 function-documentation property. */
2053 fun = function;
2054 while (SYMBOLP (fun))
2055 {
2056 Lisp_Object tmp = Fget (fun, intern ("interactive-form"));
2057 if (!NILP (tmp))
2058 if_prop = Qt;
2059 fun = Fsymbol_function (fun);
2060 }
2061
2062 /* Emacs primitives are interactive if their DEFUN specifies an
2063 interactive spec. */
2064 if (SUBRP (fun))
2065 return XSUBR (fun)->prompt ? Qt : if_prop;
2066
2067 /* Bytecode objects are interactive if they are long enough to
2068 have an element whose index is COMPILED_INTERACTIVE, which is
2069 where the interactive spec is stored. */
2070 else if (COMPILEDP (fun))
2071 return ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
2072 ? Qt : if_prop);
2073
2074 /* Strings and vectors are keyboard macros. */
2075 if (STRINGP (fun) || VECTORP (fun))
2076 return NILP (for_call_interactively) ? Qt : Qnil;
2077
2078 /* Lists may represent commands. */
2079 if (!CONSP (fun))
2080 return Qnil;
2081 funcar = XCAR (fun);
2082 if (EQ (funcar, Qlambda))
2083 return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop;
2084 if (EQ (funcar, Qautoload))
2085 return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop;
2086 else
2087 return Qnil;
2088 }
2089
2090 /* ARGSUSED */
2091 DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
2092 doc: /* Define FUNCTION to autoload from FILE.
2093 FUNCTION is a symbol; FILE is a file name string to pass to `load'.
2094 Third arg DOCSTRING is documentation for the function.
2095 Fourth arg INTERACTIVE if non-nil says function can be called interactively.
2096 Fifth arg TYPE indicates the type of the object:
2097 nil or omitted says FUNCTION is a function,
2098 `keymap' says FUNCTION is really a keymap, and
2099 `macro' or t says FUNCTION is really a macro.
2100 Third through fifth args give info about the real definition.
2101 They default to nil.
2102 If FUNCTION is already defined other than as an autoload,
2103 this does nothing and returns nil. */)
2104 (function, file, docstring, interactive, type)
2105 Lisp_Object function, file, docstring, interactive, type;
2106 {
2107 #ifdef NO_ARG_ARRAY
2108 Lisp_Object args[4];
2109 #endif
2110
2111 CHECK_SYMBOL (function);
2112 CHECK_STRING (file);
2113
2114 /* If function is defined and not as an autoload, don't override */
2115 if (!EQ (XSYMBOL (function)->function, Qunbound)
2116 && !(CONSP (XSYMBOL (function)->function)
2117 && EQ (XCAR (XSYMBOL (function)->function), Qautoload)))
2118 return Qnil;
2119
2120 if (NILP (Vpurify_flag))
2121 /* Only add entries after dumping, because the ones before are
2122 not useful and else we get loads of them from the loaddefs.el. */
2123 LOADHIST_ATTACH (Fcons (Qautoload, function));
2124
2125 #ifdef NO_ARG_ARRAY
2126 args[0] = file;
2127 args[1] = docstring;
2128 args[2] = interactive;
2129 args[3] = type;
2130
2131 return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
2132 #else /* NO_ARG_ARRAY */
2133 return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
2134 #endif /* not NO_ARG_ARRAY */
2135 }
2136
2137 Lisp_Object
2138 un_autoload (oldqueue)
2139 Lisp_Object oldqueue;
2140 {
2141 register Lisp_Object queue, first, second;
2142
2143 /* Queue to unwind is current value of Vautoload_queue.
2144 oldqueue is the shadowed value to leave in Vautoload_queue. */
2145 queue = Vautoload_queue;
2146 Vautoload_queue = oldqueue;
2147 while (CONSP (queue))
2148 {
2149 first = XCAR (queue);
2150 second = Fcdr (first);
2151 first = Fcar (first);
2152 if (EQ (first, make_number (0)))
2153 Vfeatures = second;
2154 else
2155 Ffset (first, second);
2156 queue = XCDR (queue);
2157 }
2158 return Qnil;
2159 }
2160
2161 /* Load an autoloaded function.
2162 FUNNAME is the symbol which is the function's name.
2163 FUNDEF is the autoload definition (a list). */
2164
2165 void
2166 do_autoload (fundef, funname)
2167 Lisp_Object fundef, funname;
2168 {
2169 int count = SPECPDL_INDEX ();
2170 Lisp_Object fun, queue, first, second;
2171 struct gcpro gcpro1, gcpro2, gcpro3;
2172
2173 /* This is to make sure that loadup.el gives a clear picture
2174 of what files are preloaded and when. */
2175 if (! NILP (Vpurify_flag))
2176 error ("Attempt to autoload %s while preparing to dump",
2177 SDATA (SYMBOL_NAME (funname)));
2178
2179 fun = funname;
2180 CHECK_SYMBOL (funname);
2181 GCPRO3 (fun, funname, fundef);
2182
2183 /* Preserve the match data. */
2184 record_unwind_save_match_data ();
2185
2186 /* Value saved here is to be restored into Vautoload_queue. */
2187 record_unwind_protect (un_autoload, Vautoload_queue);
2188 Vautoload_queue = Qt;
2189 Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil, Qt);
2190
2191 /* Save the old autoloads, in case we ever do an unload. */
2192 queue = Vautoload_queue;
2193 while (CONSP (queue))
2194 {
2195 first = XCAR (queue);
2196 second = Fcdr (first);
2197 first = Fcar (first);
2198
2199 if (SYMBOLP (first) && CONSP (second) && EQ (XCAR (second), Qautoload))
2200 Fput (first, Qautoload, (XCDR (second)));
2201
2202 queue = XCDR (queue);
2203 }
2204
2205 /* Once loading finishes, don't undo it. */
2206 Vautoload_queue = Qt;
2207 unbind_to (count, Qnil);
2208
2209 fun = Findirect_function (fun, Qnil);
2210
2211 if (!NILP (Fequal (fun, fundef)))
2212 error ("Autoloading failed to define function %s",
2213 SDATA (SYMBOL_NAME (funname)));
2214 UNGCPRO;
2215 }
2216
2217 \f
2218 DEFUN ("eval", Feval, Seval, 1, 1, 0,
2219 doc: /* Evaluate FORM and return its value. */)
2220 (form)
2221 Lisp_Object form;
2222 {
2223 Lisp_Object fun, val, original_fun, original_args;
2224 Lisp_Object funcar;
2225 struct backtrace backtrace;
2226 struct gcpro gcpro1, gcpro2, gcpro3;
2227
2228 if (handling_signal)
2229 abort ();
2230
2231 if (SYMBOLP (form))
2232 return Fsymbol_value (form);
2233 if (!CONSP (form))
2234 return form;
2235
2236 QUIT;
2237 if ((consing_since_gc > gc_cons_threshold
2238 && consing_since_gc > gc_relative_threshold)
2239 ||
2240 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
2241 {
2242 GCPRO1 (form);
2243 Fgarbage_collect ();
2244 UNGCPRO;
2245 }
2246
2247 if (++lisp_eval_depth > max_lisp_eval_depth)
2248 {
2249 if (max_lisp_eval_depth < 100)
2250 max_lisp_eval_depth = 100;
2251 if (lisp_eval_depth > max_lisp_eval_depth)
2252 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
2253 }
2254
2255 original_fun = Fcar (form);
2256 original_args = Fcdr (form);
2257
2258 backtrace.next = backtrace_list;
2259 backtrace_list = &backtrace;
2260 backtrace.function = &original_fun; /* This also protects them from gc */
2261 backtrace.args = &original_args;
2262 backtrace.nargs = UNEVALLED;
2263 backtrace.evalargs = 1;
2264 backtrace.debug_on_exit = 0;
2265
2266 if (debug_on_next_call)
2267 do_debug_on_call (Qt);
2268
2269 /* At this point, only original_fun and original_args
2270 have values that will be used below */
2271 retry:
2272
2273 /* Optimize for no indirection. */
2274 fun = original_fun;
2275 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2276 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2277 fun = indirect_function (fun);
2278
2279 if (SUBRP (fun))
2280 {
2281 Lisp_Object numargs;
2282 Lisp_Object argvals[8];
2283 Lisp_Object args_left;
2284 register int i, maxargs;
2285
2286 args_left = original_args;
2287 numargs = Flength (args_left);
2288
2289 CHECK_CONS_LIST ();
2290
2291 if (XINT (numargs) < XSUBR (fun)->min_args ||
2292 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
2293 xsignal2 (Qwrong_number_of_arguments, original_fun, numargs);
2294
2295 if (XSUBR (fun)->max_args == UNEVALLED)
2296 {
2297 backtrace.evalargs = 0;
2298 val = (*XSUBR (fun)->function) (args_left);
2299 goto done;
2300 }
2301
2302 if (XSUBR (fun)->max_args == MANY)
2303 {
2304 /* Pass a vector of evaluated arguments */
2305 Lisp_Object *vals;
2306 register int argnum = 0;
2307
2308 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2309
2310 GCPRO3 (args_left, fun, fun);
2311 gcpro3.var = vals;
2312 gcpro3.nvars = 0;
2313
2314 while (!NILP (args_left))
2315 {
2316 vals[argnum++] = Feval (Fcar (args_left));
2317 args_left = Fcdr (args_left);
2318 gcpro3.nvars = argnum;
2319 }
2320
2321 backtrace.args = vals;
2322 backtrace.nargs = XINT (numargs);
2323
2324 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
2325 UNGCPRO;
2326 goto done;
2327 }
2328
2329 GCPRO3 (args_left, fun, fun);
2330 gcpro3.var = argvals;
2331 gcpro3.nvars = 0;
2332
2333 maxargs = XSUBR (fun)->max_args;
2334 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
2335 {
2336 argvals[i] = Feval (Fcar (args_left));
2337 gcpro3.nvars = ++i;
2338 }
2339
2340 UNGCPRO;
2341
2342 backtrace.args = argvals;
2343 backtrace.nargs = XINT (numargs);
2344
2345 switch (i)
2346 {
2347 case 0:
2348 val = (*XSUBR (fun)->function) ();
2349 goto done;
2350 case 1:
2351 val = (*XSUBR (fun)->function) (argvals[0]);
2352 goto done;
2353 case 2:
2354 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
2355 goto done;
2356 case 3:
2357 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2358 argvals[2]);
2359 goto done;
2360 case 4:
2361 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2362 argvals[2], argvals[3]);
2363 goto done;
2364 case 5:
2365 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2366 argvals[3], argvals[4]);
2367 goto done;
2368 case 6:
2369 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2370 argvals[3], argvals[4], argvals[5]);
2371 goto done;
2372 case 7:
2373 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2374 argvals[3], argvals[4], argvals[5],
2375 argvals[6]);
2376 goto done;
2377
2378 case 8:
2379 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2380 argvals[3], argvals[4], argvals[5],
2381 argvals[6], argvals[7]);
2382 goto done;
2383
2384 default:
2385 /* Someone has created a subr that takes more arguments than
2386 is supported by this code. We need to either rewrite the
2387 subr to use a different argument protocol, or add more
2388 cases to this switch. */
2389 abort ();
2390 }
2391 }
2392 if (COMPILEDP (fun))
2393 val = apply_lambda (fun, original_args, 1);
2394 else
2395 {
2396 if (EQ (fun, Qunbound))
2397 xsignal1 (Qvoid_function, original_fun);
2398 if (!CONSP (fun))
2399 xsignal1 (Qinvalid_function, original_fun);
2400 funcar = XCAR (fun);
2401 if (!SYMBOLP (funcar))
2402 xsignal1 (Qinvalid_function, original_fun);
2403 if (EQ (funcar, Qautoload))
2404 {
2405 do_autoload (fun, original_fun);
2406 goto retry;
2407 }
2408 if (EQ (funcar, Qmacro))
2409 val = Feval (apply1 (Fcdr (fun), original_args));
2410 else if (EQ (funcar, Qlambda))
2411 val = apply_lambda (fun, original_args, 1);
2412 else
2413 xsignal1 (Qinvalid_function, original_fun);
2414 }
2415 done:
2416 CHECK_CONS_LIST ();
2417
2418 lisp_eval_depth--;
2419 if (backtrace.debug_on_exit)
2420 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2421 backtrace_list = backtrace.next;
2422
2423 return val;
2424 }
2425 \f
2426 DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
2427 doc: /* Call FUNCTION with our remaining args, using our last arg as list of args.
2428 Then return the value FUNCTION returns.
2429 Thus, (apply '+ 1 2 '(3 4)) returns 10.
2430 usage: (apply FUNCTION &rest ARGUMENTS) */)
2431 (nargs, args)
2432 int nargs;
2433 Lisp_Object *args;
2434 {
2435 register int i, numargs;
2436 register Lisp_Object spread_arg;
2437 register Lisp_Object *funcall_args;
2438 Lisp_Object fun;
2439 struct gcpro gcpro1;
2440
2441 fun = args [0];
2442 funcall_args = 0;
2443 spread_arg = args [nargs - 1];
2444 CHECK_LIST (spread_arg);
2445
2446 numargs = XINT (Flength (spread_arg));
2447
2448 if (numargs == 0)
2449 return Ffuncall (nargs - 1, args);
2450 else if (numargs == 1)
2451 {
2452 args [nargs - 1] = XCAR (spread_arg);
2453 return Ffuncall (nargs, args);
2454 }
2455
2456 numargs += nargs - 2;
2457
2458 /* Optimize for no indirection. */
2459 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2460 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2461 fun = indirect_function (fun);
2462 if (EQ (fun, Qunbound))
2463 {
2464 /* Let funcall get the error */
2465 fun = args[0];
2466 goto funcall;
2467 }
2468
2469 if (SUBRP (fun))
2470 {
2471 if (numargs < XSUBR (fun)->min_args
2472 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2473 goto funcall; /* Let funcall get the error */
2474 else if (XSUBR (fun)->max_args > numargs)
2475 {
2476 /* Avoid making funcall cons up a yet another new vector of arguments
2477 by explicitly supplying nil's for optional values */
2478 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
2479 * sizeof (Lisp_Object));
2480 for (i = numargs; i < XSUBR (fun)->max_args;)
2481 funcall_args[++i] = Qnil;
2482 GCPRO1 (*funcall_args);
2483 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
2484 }
2485 }
2486 funcall:
2487 /* We add 1 to numargs because funcall_args includes the
2488 function itself as well as its arguments. */
2489 if (!funcall_args)
2490 {
2491 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
2492 * sizeof (Lisp_Object));
2493 GCPRO1 (*funcall_args);
2494 gcpro1.nvars = 1 + numargs;
2495 }
2496
2497 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
2498 /* Spread the last arg we got. Its first element goes in
2499 the slot that it used to occupy, hence this value of I. */
2500 i = nargs - 1;
2501 while (!NILP (spread_arg))
2502 {
2503 funcall_args [i++] = XCAR (spread_arg);
2504 spread_arg = XCDR (spread_arg);
2505 }
2506
2507 /* By convention, the caller needs to gcpro Ffuncall's args. */
2508 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
2509 }
2510 \f
2511 /* Run hook variables in various ways. */
2512
2513 enum run_hooks_condition {to_completion, until_success, until_failure};
2514 static Lisp_Object run_hook_with_args P_ ((int, Lisp_Object *,
2515 enum run_hooks_condition));
2516
2517 DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 0, MANY, 0,
2518 doc: /* Run each hook in HOOKS.
2519 Each argument should be a symbol, a hook variable.
2520 These symbols are processed in the order specified.
2521 If a hook symbol has a non-nil value, that value may be a function
2522 or a list of functions to be called to run the hook.
2523 If the value is a function, it is called with no arguments.
2524 If it is a list, the elements are called, in order, with no arguments.
2525
2526 Major modes should not use this function directly to run their mode
2527 hook; they should use `run-mode-hooks' instead.
2528
2529 Do not use `make-local-variable' to make a hook variable buffer-local.
2530 Instead, use `add-hook' and specify t for the LOCAL argument.
2531 usage: (run-hooks &rest HOOKS) */)
2532 (nargs, args)
2533 int nargs;
2534 Lisp_Object *args;
2535 {
2536 Lisp_Object hook[1];
2537 register int i;
2538
2539 for (i = 0; i < nargs; i++)
2540 {
2541 hook[0] = args[i];
2542 run_hook_with_args (1, hook, to_completion);
2543 }
2544
2545 return Qnil;
2546 }
2547
2548 DEFUN ("run-hook-with-args", Frun_hook_with_args,
2549 Srun_hook_with_args, 1, MANY, 0,
2550 doc: /* Run HOOK with the specified arguments ARGS.
2551 HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2552 value, that value may be a function or a list of functions to be
2553 called to run the hook. If the value is a function, it is called with
2554 the given arguments and its return value is returned. If it is a list
2555 of functions, those functions are called, in order,
2556 with the given arguments ARGS.
2557 It is best not to depend on the value returned by `run-hook-with-args',
2558 as that may change.
2559
2560 Do not use `make-local-variable' to make a hook variable buffer-local.
2561 Instead, use `add-hook' and specify t for the LOCAL argument.
2562 usage: (run-hook-with-args HOOK &rest ARGS) */)
2563 (nargs, args)
2564 int nargs;
2565 Lisp_Object *args;
2566 {
2567 return run_hook_with_args (nargs, args, to_completion);
2568 }
2569
2570 DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
2571 Srun_hook_with_args_until_success, 1, MANY, 0,
2572 doc: /* Run HOOK with the specified arguments ARGS.
2573 HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2574 value, that value may be a function or a list of functions to be
2575 called to run the hook. If the value is a function, it is called with
2576 the given arguments and its return value is returned.
2577 If it is a list of functions, those functions are called, in order,
2578 with the given arguments ARGS, until one of them
2579 returns a non-nil value. Then we return that value.
2580 However, if they all return nil, we return nil.
2581
2582 Do not use `make-local-variable' to make a hook variable buffer-local.
2583 Instead, use `add-hook' and specify t for the LOCAL argument.
2584 usage: (run-hook-with-args-until-success HOOK &rest ARGS) */)
2585 (nargs, args)
2586 int nargs;
2587 Lisp_Object *args;
2588 {
2589 return run_hook_with_args (nargs, args, until_success);
2590 }
2591
2592 DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
2593 Srun_hook_with_args_until_failure, 1, MANY, 0,
2594 doc: /* Run HOOK with the specified arguments ARGS.
2595 HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2596 value, that value may be a function or a list of functions to be
2597 called to run the hook. If the value is a function, it is called with
2598 the given arguments and its return value is returned.
2599 If it is a list of functions, those functions are called, in order,
2600 with the given arguments ARGS, until one of them returns nil.
2601 Then we return nil. However, if they all return non-nil, we return non-nil.
2602
2603 Do not use `make-local-variable' to make a hook variable buffer-local.
2604 Instead, use `add-hook' and specify t for the LOCAL argument.
2605 usage: (run-hook-with-args-until-failure HOOK &rest ARGS) */)
2606 (nargs, args)
2607 int nargs;
2608 Lisp_Object *args;
2609 {
2610 return run_hook_with_args (nargs, args, until_failure);
2611 }
2612
2613 /* ARGS[0] should be a hook symbol.
2614 Call each of the functions in the hook value, passing each of them
2615 as arguments all the rest of ARGS (all NARGS - 1 elements).
2616 COND specifies a condition to test after each call
2617 to decide whether to stop.
2618 The caller (or its caller, etc) must gcpro all of ARGS,
2619 except that it isn't necessary to gcpro ARGS[0]. */
2620
2621 static Lisp_Object
2622 run_hook_with_args (nargs, args, cond)
2623 int nargs;
2624 Lisp_Object *args;
2625 enum run_hooks_condition cond;
2626 {
2627 Lisp_Object sym, val, ret;
2628 Lisp_Object globals;
2629 struct gcpro gcpro1, gcpro2, gcpro3;
2630
2631 /* If we are dying or still initializing,
2632 don't do anything--it would probably crash if we tried. */
2633 if (NILP (Vrun_hooks))
2634 return Qnil;
2635
2636 sym = args[0];
2637 val = find_symbol_value (sym);
2638 ret = (cond == until_failure ? Qt : Qnil);
2639
2640 if (EQ (val, Qunbound) || NILP (val))
2641 return ret;
2642 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
2643 {
2644 args[0] = val;
2645 return Ffuncall (nargs, args);
2646 }
2647 else
2648 {
2649 globals = Qnil;
2650 GCPRO3 (sym, val, globals);
2651
2652 for (;
2653 CONSP (val) && ((cond == to_completion)
2654 || (cond == until_success ? NILP (ret)
2655 : !NILP (ret)));
2656 val = XCDR (val))
2657 {
2658 if (EQ (XCAR (val), Qt))
2659 {
2660 /* t indicates this hook has a local binding;
2661 it means to run the global binding too. */
2662
2663 for (globals = Fdefault_value (sym);
2664 CONSP (globals) && ((cond == to_completion)
2665 || (cond == until_success ? NILP (ret)
2666 : !NILP (ret)));
2667 globals = XCDR (globals))
2668 {
2669 args[0] = XCAR (globals);
2670 /* In a global value, t should not occur. If it does, we
2671 must ignore it to avoid an endless loop. */
2672 if (!EQ (args[0], Qt))
2673 ret = Ffuncall (nargs, args);
2674 }
2675 }
2676 else
2677 {
2678 args[0] = XCAR (val);
2679 ret = Ffuncall (nargs, args);
2680 }
2681 }
2682
2683 UNGCPRO;
2684 return ret;
2685 }
2686 }
2687
2688 /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2689 present value of that symbol.
2690 Call each element of FUNLIST,
2691 passing each of them the rest of ARGS.
2692 The caller (or its caller, etc) must gcpro all of ARGS,
2693 except that it isn't necessary to gcpro ARGS[0]. */
2694
2695 Lisp_Object
2696 run_hook_list_with_args (funlist, nargs, args)
2697 Lisp_Object funlist;
2698 int nargs;
2699 Lisp_Object *args;
2700 {
2701 Lisp_Object sym;
2702 Lisp_Object val;
2703 Lisp_Object globals;
2704 struct gcpro gcpro1, gcpro2, gcpro3;
2705
2706 sym = args[0];
2707 globals = Qnil;
2708 GCPRO3 (sym, val, globals);
2709
2710 for (val = funlist; CONSP (val); val = XCDR (val))
2711 {
2712 if (EQ (XCAR (val), Qt))
2713 {
2714 /* t indicates this hook has a local binding;
2715 it means to run the global binding too. */
2716
2717 for (globals = Fdefault_value (sym);
2718 CONSP (globals);
2719 globals = XCDR (globals))
2720 {
2721 args[0] = XCAR (globals);
2722 /* In a global value, t should not occur. If it does, we
2723 must ignore it to avoid an endless loop. */
2724 if (!EQ (args[0], Qt))
2725 Ffuncall (nargs, args);
2726 }
2727 }
2728 else
2729 {
2730 args[0] = XCAR (val);
2731 Ffuncall (nargs, args);
2732 }
2733 }
2734 UNGCPRO;
2735 return Qnil;
2736 }
2737
2738 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2739
2740 void
2741 run_hook_with_args_2 (hook, arg1, arg2)
2742 Lisp_Object hook, arg1, arg2;
2743 {
2744 Lisp_Object temp[3];
2745 temp[0] = hook;
2746 temp[1] = arg1;
2747 temp[2] = arg2;
2748
2749 Frun_hook_with_args (3, temp);
2750 }
2751 \f
2752 /* Apply fn to arg */
2753 Lisp_Object
2754 apply1 (fn, arg)
2755 Lisp_Object fn, arg;
2756 {
2757 struct gcpro gcpro1;
2758
2759 GCPRO1 (fn);
2760 if (NILP (arg))
2761 RETURN_UNGCPRO (Ffuncall (1, &fn));
2762 gcpro1.nvars = 2;
2763 #ifdef NO_ARG_ARRAY
2764 {
2765 Lisp_Object args[2];
2766 args[0] = fn;
2767 args[1] = arg;
2768 gcpro1.var = args;
2769 RETURN_UNGCPRO (Fapply (2, args));
2770 }
2771 #else /* not NO_ARG_ARRAY */
2772 RETURN_UNGCPRO (Fapply (2, &fn));
2773 #endif /* not NO_ARG_ARRAY */
2774 }
2775
2776 /* Call function fn on no arguments */
2777 Lisp_Object
2778 call0 (fn)
2779 Lisp_Object fn;
2780 {
2781 struct gcpro gcpro1;
2782
2783 GCPRO1 (fn);
2784 RETURN_UNGCPRO (Ffuncall (1, &fn));
2785 }
2786
2787 /* Call function fn with 1 argument arg1 */
2788 /* ARGSUSED */
2789 Lisp_Object
2790 call1 (fn, arg1)
2791 Lisp_Object fn, arg1;
2792 {
2793 struct gcpro gcpro1;
2794 #ifdef NO_ARG_ARRAY
2795 Lisp_Object args[2];
2796
2797 args[0] = fn;
2798 args[1] = arg1;
2799 GCPRO1 (args[0]);
2800 gcpro1.nvars = 2;
2801 RETURN_UNGCPRO (Ffuncall (2, args));
2802 #else /* not NO_ARG_ARRAY */
2803 GCPRO1 (fn);
2804 gcpro1.nvars = 2;
2805 RETURN_UNGCPRO (Ffuncall (2, &fn));
2806 #endif /* not NO_ARG_ARRAY */
2807 }
2808
2809 /* Call function fn with 2 arguments arg1, arg2 */
2810 /* ARGSUSED */
2811 Lisp_Object
2812 call2 (fn, arg1, arg2)
2813 Lisp_Object fn, arg1, arg2;
2814 {
2815 struct gcpro gcpro1;
2816 #ifdef NO_ARG_ARRAY
2817 Lisp_Object args[3];
2818 args[0] = fn;
2819 args[1] = arg1;
2820 args[2] = arg2;
2821 GCPRO1 (args[0]);
2822 gcpro1.nvars = 3;
2823 RETURN_UNGCPRO (Ffuncall (3, args));
2824 #else /* not NO_ARG_ARRAY */
2825 GCPRO1 (fn);
2826 gcpro1.nvars = 3;
2827 RETURN_UNGCPRO (Ffuncall (3, &fn));
2828 #endif /* not NO_ARG_ARRAY */
2829 }
2830
2831 /* Call function fn with 3 arguments arg1, arg2, arg3 */
2832 /* ARGSUSED */
2833 Lisp_Object
2834 call3 (fn, arg1, arg2, arg3)
2835 Lisp_Object fn, arg1, arg2, arg3;
2836 {
2837 struct gcpro gcpro1;
2838 #ifdef NO_ARG_ARRAY
2839 Lisp_Object args[4];
2840 args[0] = fn;
2841 args[1] = arg1;
2842 args[2] = arg2;
2843 args[3] = arg3;
2844 GCPRO1 (args[0]);
2845 gcpro1.nvars = 4;
2846 RETURN_UNGCPRO (Ffuncall (4, args));
2847 #else /* not NO_ARG_ARRAY */
2848 GCPRO1 (fn);
2849 gcpro1.nvars = 4;
2850 RETURN_UNGCPRO (Ffuncall (4, &fn));
2851 #endif /* not NO_ARG_ARRAY */
2852 }
2853
2854 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
2855 /* ARGSUSED */
2856 Lisp_Object
2857 call4 (fn, arg1, arg2, arg3, arg4)
2858 Lisp_Object fn, arg1, arg2, arg3, arg4;
2859 {
2860 struct gcpro gcpro1;
2861 #ifdef NO_ARG_ARRAY
2862 Lisp_Object args[5];
2863 args[0] = fn;
2864 args[1] = arg1;
2865 args[2] = arg2;
2866 args[3] = arg3;
2867 args[4] = arg4;
2868 GCPRO1 (args[0]);
2869 gcpro1.nvars = 5;
2870 RETURN_UNGCPRO (Ffuncall (5, args));
2871 #else /* not NO_ARG_ARRAY */
2872 GCPRO1 (fn);
2873 gcpro1.nvars = 5;
2874 RETURN_UNGCPRO (Ffuncall (5, &fn));
2875 #endif /* not NO_ARG_ARRAY */
2876 }
2877
2878 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2879 /* ARGSUSED */
2880 Lisp_Object
2881 call5 (fn, arg1, arg2, arg3, arg4, arg5)
2882 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2883 {
2884 struct gcpro gcpro1;
2885 #ifdef NO_ARG_ARRAY
2886 Lisp_Object args[6];
2887 args[0] = fn;
2888 args[1] = arg1;
2889 args[2] = arg2;
2890 args[3] = arg3;
2891 args[4] = arg4;
2892 args[5] = arg5;
2893 GCPRO1 (args[0]);
2894 gcpro1.nvars = 6;
2895 RETURN_UNGCPRO (Ffuncall (6, args));
2896 #else /* not NO_ARG_ARRAY */
2897 GCPRO1 (fn);
2898 gcpro1.nvars = 6;
2899 RETURN_UNGCPRO (Ffuncall (6, &fn));
2900 #endif /* not NO_ARG_ARRAY */
2901 }
2902
2903 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2904 /* ARGSUSED */
2905 Lisp_Object
2906 call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2907 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2908 {
2909 struct gcpro gcpro1;
2910 #ifdef NO_ARG_ARRAY
2911 Lisp_Object args[7];
2912 args[0] = fn;
2913 args[1] = arg1;
2914 args[2] = arg2;
2915 args[3] = arg3;
2916 args[4] = arg4;
2917 args[5] = arg5;
2918 args[6] = arg6;
2919 GCPRO1 (args[0]);
2920 gcpro1.nvars = 7;
2921 RETURN_UNGCPRO (Ffuncall (7, args));
2922 #else /* not NO_ARG_ARRAY */
2923 GCPRO1 (fn);
2924 gcpro1.nvars = 7;
2925 RETURN_UNGCPRO (Ffuncall (7, &fn));
2926 #endif /* not NO_ARG_ARRAY */
2927 }
2928
2929 /* The caller should GCPRO all the elements of ARGS. */
2930
2931 DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
2932 doc: /* Call first argument as a function, passing remaining arguments to it.
2933 Return the value that function returns.
2934 Thus, (funcall 'cons 'x 'y) returns (x . y).
2935 usage: (funcall FUNCTION &rest ARGUMENTS) */)
2936 (nargs, args)
2937 int nargs;
2938 Lisp_Object *args;
2939 {
2940 Lisp_Object fun, original_fun;
2941 Lisp_Object funcar;
2942 int numargs = nargs - 1;
2943 Lisp_Object lisp_numargs;
2944 Lisp_Object val;
2945 struct backtrace backtrace;
2946 register Lisp_Object *internal_args;
2947 register int i;
2948
2949 QUIT;
2950 if ((consing_since_gc > gc_cons_threshold
2951 && consing_since_gc > gc_relative_threshold)
2952 ||
2953 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
2954 Fgarbage_collect ();
2955
2956 if (++lisp_eval_depth > max_lisp_eval_depth)
2957 {
2958 if (max_lisp_eval_depth < 100)
2959 max_lisp_eval_depth = 100;
2960 if (lisp_eval_depth > max_lisp_eval_depth)
2961 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
2962 }
2963
2964 backtrace.next = backtrace_list;
2965 backtrace_list = &backtrace;
2966 backtrace.function = &args[0];
2967 backtrace.args = &args[1];
2968 backtrace.nargs = nargs - 1;
2969 backtrace.evalargs = 0;
2970 backtrace.debug_on_exit = 0;
2971
2972 if (debug_on_next_call)
2973 do_debug_on_call (Qlambda);
2974
2975 CHECK_CONS_LIST ();
2976
2977 original_fun = args[0];
2978
2979 retry:
2980
2981 /* Optimize for no indirection. */
2982 fun = original_fun;
2983 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2984 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2985 fun = indirect_function (fun);
2986
2987 if (SUBRP (fun))
2988 {
2989 if (numargs < XSUBR (fun)->min_args
2990 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2991 {
2992 XSETFASTINT (lisp_numargs, numargs);
2993 xsignal2 (Qwrong_number_of_arguments, original_fun, lisp_numargs);
2994 }
2995
2996 if (XSUBR (fun)->max_args == UNEVALLED)
2997 xsignal1 (Qinvalid_function, original_fun);
2998
2999 if (XSUBR (fun)->max_args == MANY)
3000 {
3001 val = (*XSUBR (fun)->function) (numargs, args + 1);
3002 goto done;
3003 }
3004
3005 if (XSUBR (fun)->max_args > numargs)
3006 {
3007 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
3008 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
3009 for (i = numargs; i < XSUBR (fun)->max_args; i++)
3010 internal_args[i] = Qnil;
3011 }
3012 else
3013 internal_args = args + 1;
3014 switch (XSUBR (fun)->max_args)
3015 {
3016 case 0:
3017 val = (*XSUBR (fun)->function) ();
3018 goto done;
3019 case 1:
3020 val = (*XSUBR (fun)->function) (internal_args[0]);
3021 goto done;
3022 case 2:
3023 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1]);
3024 goto done;
3025 case 3:
3026 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3027 internal_args[2]);
3028 goto done;
3029 case 4:
3030 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3031 internal_args[2], internal_args[3]);
3032 goto done;
3033 case 5:
3034 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3035 internal_args[2], internal_args[3],
3036 internal_args[4]);
3037 goto done;
3038 case 6:
3039 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3040 internal_args[2], internal_args[3],
3041 internal_args[4], internal_args[5]);
3042 goto done;
3043 case 7:
3044 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3045 internal_args[2], internal_args[3],
3046 internal_args[4], internal_args[5],
3047 internal_args[6]);
3048 goto done;
3049
3050 case 8:
3051 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3052 internal_args[2], internal_args[3],
3053 internal_args[4], internal_args[5],
3054 internal_args[6], internal_args[7]);
3055 goto done;
3056
3057 default:
3058
3059 /* If a subr takes more than 8 arguments without using MANY
3060 or UNEVALLED, we need to extend this function to support it.
3061 Until this is done, there is no way to call the function. */
3062 abort ();
3063 }
3064 }
3065 if (COMPILEDP (fun))
3066 val = funcall_lambda (fun, numargs, args + 1);
3067 else
3068 {
3069 if (EQ (fun, Qunbound))
3070 xsignal1 (Qvoid_function, original_fun);
3071 if (!CONSP (fun))
3072 xsignal1 (Qinvalid_function, original_fun);
3073 funcar = XCAR (fun);
3074 if (!SYMBOLP (funcar))
3075 xsignal1 (Qinvalid_function, original_fun);
3076 if (EQ (funcar, Qlambda))
3077 val = funcall_lambda (fun, numargs, args + 1);
3078 else if (EQ (funcar, Qautoload))
3079 {
3080 do_autoload (fun, original_fun);
3081 CHECK_CONS_LIST ();
3082 goto retry;
3083 }
3084 else
3085 xsignal1 (Qinvalid_function, original_fun);
3086 }
3087 done:
3088 CHECK_CONS_LIST ();
3089 lisp_eval_depth--;
3090 if (backtrace.debug_on_exit)
3091 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
3092 backtrace_list = backtrace.next;
3093 return val;
3094 }
3095 \f
3096 Lisp_Object
3097 apply_lambda (fun, args, eval_flag)
3098 Lisp_Object fun, args;
3099 int eval_flag;
3100 {
3101 Lisp_Object args_left;
3102 Lisp_Object numargs;
3103 register Lisp_Object *arg_vector;
3104 struct gcpro gcpro1, gcpro2, gcpro3;
3105 register int i;
3106 register Lisp_Object tem;
3107
3108 numargs = Flength (args);
3109 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
3110 args_left = args;
3111
3112 GCPRO3 (*arg_vector, args_left, fun);
3113 gcpro1.nvars = 0;
3114
3115 for (i = 0; i < XINT (numargs);)
3116 {
3117 tem = Fcar (args_left), args_left = Fcdr (args_left);
3118 if (eval_flag) tem = Feval (tem);
3119 arg_vector[i++] = tem;
3120 gcpro1.nvars = i;
3121 }
3122
3123 UNGCPRO;
3124
3125 if (eval_flag)
3126 {
3127 backtrace_list->args = arg_vector;
3128 backtrace_list->nargs = i;
3129 }
3130 backtrace_list->evalargs = 0;
3131 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
3132
3133 /* Do the debug-on-exit now, while arg_vector still exists. */
3134 if (backtrace_list->debug_on_exit)
3135 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
3136 /* Don't do it again when we return to eval. */
3137 backtrace_list->debug_on_exit = 0;
3138 return tem;
3139 }
3140
3141 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
3142 and return the result of evaluation.
3143 FUN must be either a lambda-expression or a compiled-code object. */
3144
3145 static Lisp_Object
3146 funcall_lambda (fun, nargs, arg_vector)
3147 Lisp_Object fun;
3148 int nargs;
3149 register Lisp_Object *arg_vector;
3150 {
3151 Lisp_Object val, syms_left, next;
3152 int count = SPECPDL_INDEX ();
3153 int i, optional, rest;
3154
3155 if (CONSP (fun))
3156 {
3157 syms_left = XCDR (fun);
3158 if (CONSP (syms_left))
3159 syms_left = XCAR (syms_left);
3160 else
3161 xsignal1 (Qinvalid_function, fun);
3162 }
3163 else if (COMPILEDP (fun))
3164 syms_left = AREF (fun, COMPILED_ARGLIST);
3165 else
3166 abort ();
3167
3168 i = optional = rest = 0;
3169 for (; CONSP (syms_left); syms_left = XCDR (syms_left))
3170 {
3171 QUIT;
3172
3173 next = XCAR (syms_left);
3174 if (!SYMBOLP (next))
3175 xsignal1 (Qinvalid_function, fun);
3176
3177 if (EQ (next, Qand_rest))
3178 rest = 1;
3179 else if (EQ (next, Qand_optional))
3180 optional = 1;
3181 else if (rest)
3182 {
3183 specbind (next, Flist (nargs - i, &arg_vector[i]));
3184 i = nargs;
3185 }
3186 else if (i < nargs)
3187 specbind (next, arg_vector[i++]);
3188 else if (!optional)
3189 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
3190 else
3191 specbind (next, Qnil);
3192 }
3193
3194 if (!NILP (syms_left))
3195 xsignal1 (Qinvalid_function, fun);
3196 else if (i < nargs)
3197 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
3198
3199 if (CONSP (fun))
3200 val = Fprogn (XCDR (XCDR (fun)));
3201 else
3202 {
3203 /* If we have not actually read the bytecode string
3204 and constants vector yet, fetch them from the file. */
3205 if (CONSP (AREF (fun, COMPILED_BYTECODE)))
3206 Ffetch_bytecode (fun);
3207 val = Fbyte_code (AREF (fun, COMPILED_BYTECODE),
3208 AREF (fun, COMPILED_CONSTANTS),
3209 AREF (fun, COMPILED_STACK_DEPTH));
3210 }
3211
3212 return unbind_to (count, val);
3213 }
3214
3215 DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
3216 1, 1, 0,
3217 doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */)
3218 (object)
3219 Lisp_Object object;
3220 {
3221 Lisp_Object tem;
3222
3223 if (COMPILEDP (object) && CONSP (AREF (object, COMPILED_BYTECODE)))
3224 {
3225 tem = read_doc_string (AREF (object, COMPILED_BYTECODE));
3226 if (!CONSP (tem))
3227 {
3228 tem = AREF (object, COMPILED_BYTECODE);
3229 if (CONSP (tem) && STRINGP (XCAR (tem)))
3230 error ("Invalid byte code in %s", SDATA (XCAR (tem)));
3231 else
3232 error ("Invalid byte code");
3233 }
3234 AREF (object, COMPILED_BYTECODE) = XCAR (tem);
3235 AREF (object, COMPILED_CONSTANTS) = XCDR (tem);
3236 }
3237 return object;
3238 }
3239 \f
3240 void
3241 grow_specpdl ()
3242 {
3243 register int count = SPECPDL_INDEX ();
3244 if (specpdl_size >= max_specpdl_size)
3245 {
3246 if (max_specpdl_size < 400)
3247 max_specpdl_size = 400;
3248 if (specpdl_size >= max_specpdl_size)
3249 signal_error ("Variable binding depth exceeds max-specpdl-size", Qnil);
3250 }
3251 specpdl_size *= 2;
3252 if (specpdl_size > max_specpdl_size)
3253 specpdl_size = max_specpdl_size;
3254 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
3255 specpdl_ptr = specpdl + count;
3256 }
3257
3258 void
3259 specbind (symbol, value)
3260 Lisp_Object symbol, value;
3261 {
3262 Lisp_Object ovalue;
3263 Lisp_Object valcontents;
3264
3265 CHECK_SYMBOL (symbol);
3266 if (specpdl_ptr == specpdl + specpdl_size)
3267 grow_specpdl ();
3268
3269 /* The most common case is that of a non-constant symbol with a
3270 trivial value. Make that as fast as we can. */
3271 valcontents = SYMBOL_VALUE (symbol);
3272 if (!MISCP (valcontents) && !SYMBOL_CONSTANT_P (symbol))
3273 {
3274 specpdl_ptr->symbol = symbol;
3275 specpdl_ptr->old_value = valcontents;
3276 specpdl_ptr->func = NULL;
3277 ++specpdl_ptr;
3278 SET_SYMBOL_VALUE (symbol, value);
3279 }
3280 else
3281 {
3282 Lisp_Object valcontents;
3283
3284 ovalue = find_symbol_value (symbol);
3285 specpdl_ptr->func = 0;
3286 specpdl_ptr->old_value = ovalue;
3287
3288 valcontents = XSYMBOL (symbol)->value;
3289
3290 if (BUFFER_LOCAL_VALUEP (valcontents)
3291 || SOME_BUFFER_LOCAL_VALUEP (valcontents)
3292 || BUFFER_OBJFWDP (valcontents))
3293 {
3294 Lisp_Object where, current_buffer;
3295
3296 current_buffer = Fcurrent_buffer ();
3297
3298 /* For a local variable, record both the symbol and which
3299 buffer's or frame's value we are saving. */
3300 if (!NILP (Flocal_variable_p (symbol, Qnil)))
3301 where = current_buffer;
3302 else if (!BUFFER_OBJFWDP (valcontents)
3303 && XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
3304 where = XBUFFER_LOCAL_VALUE (valcontents)->frame;
3305 else
3306 where = Qnil;
3307
3308 /* We're not using the `unused' slot in the specbinding
3309 structure because this would mean we have to do more
3310 work for simple variables. */
3311 specpdl_ptr->symbol = Fcons (symbol, Fcons (where, current_buffer));
3312
3313 /* If SYMBOL is a per-buffer variable which doesn't have a
3314 buffer-local value here, make the `let' change the global
3315 value by changing the value of SYMBOL in all buffers not
3316 having their own value. This is consistent with what
3317 happens with other buffer-local variables. */
3318 if (NILP (where)
3319 && BUFFER_OBJFWDP (valcontents))
3320 {
3321 ++specpdl_ptr;
3322 Fset_default (symbol, value);
3323 return;
3324 }
3325 }
3326 else
3327 specpdl_ptr->symbol = symbol;
3328
3329 specpdl_ptr++;
3330 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
3331 store_symval_forwarding (symbol, ovalue, value, NULL);
3332 else
3333 set_internal (symbol, value, 0, 1);
3334 }
3335 }
3336
3337 void
3338 record_unwind_protect (function, arg)
3339 Lisp_Object (*function) P_ ((Lisp_Object));
3340 Lisp_Object arg;
3341 {
3342 eassert (!handling_signal);
3343
3344 if (specpdl_ptr == specpdl + specpdl_size)
3345 grow_specpdl ();
3346 specpdl_ptr->func = function;
3347 specpdl_ptr->symbol = Qnil;
3348 specpdl_ptr->old_value = arg;
3349 specpdl_ptr++;
3350 }
3351
3352 Lisp_Object
3353 unbind_to (count, value)
3354 int count;
3355 Lisp_Object value;
3356 {
3357 Lisp_Object quitf = Vquit_flag;
3358 struct gcpro gcpro1, gcpro2;
3359
3360 GCPRO2 (value, quitf);
3361 Vquit_flag = Qnil;
3362
3363 while (specpdl_ptr != specpdl + count)
3364 {
3365 /* Copy the binding, and decrement specpdl_ptr, before we do
3366 the work to unbind it. We decrement first
3367 so that an error in unbinding won't try to unbind
3368 the same entry again, and we copy the binding first
3369 in case more bindings are made during some of the code we run. */
3370
3371 struct specbinding this_binding;
3372 this_binding = *--specpdl_ptr;
3373
3374 if (this_binding.func != 0)
3375 (*this_binding.func) (this_binding.old_value);
3376 /* If the symbol is a list, it is really (SYMBOL WHERE
3377 . CURRENT-BUFFER) where WHERE is either nil, a buffer, or a
3378 frame. If WHERE is a buffer or frame, this indicates we
3379 bound a variable that had a buffer-local or frame-local
3380 binding. WHERE nil means that the variable had the default
3381 value when it was bound. CURRENT-BUFFER is the buffer that
3382 was current when the variable was bound. */
3383 else if (CONSP (this_binding.symbol))
3384 {
3385 Lisp_Object symbol, where;
3386
3387 symbol = XCAR (this_binding.symbol);
3388 where = XCAR (XCDR (this_binding.symbol));
3389
3390 if (NILP (where))
3391 Fset_default (symbol, this_binding.old_value);
3392 else if (BUFFERP (where))
3393 set_internal (symbol, this_binding.old_value, XBUFFER (where), 1);
3394 else
3395 set_internal (symbol, this_binding.old_value, NULL, 1);
3396 }
3397 else
3398 {
3399 /* If variable has a trivial value (no forwarding), we can
3400 just set it. No need to check for constant symbols here,
3401 since that was already done by specbind. */
3402 if (!MISCP (SYMBOL_VALUE (this_binding.symbol)))
3403 SET_SYMBOL_VALUE (this_binding.symbol, this_binding.old_value);
3404 else
3405 set_internal (this_binding.symbol, this_binding.old_value, 0, 1);
3406 }
3407 }
3408
3409 if (NILP (Vquit_flag) && !NILP (quitf))
3410 Vquit_flag = quitf;
3411
3412 UNGCPRO;
3413 return value;
3414 }
3415 \f
3416 DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
3417 doc: /* Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
3418 The debugger is entered when that frame exits, if the flag is non-nil. */)
3419 (level, flag)
3420 Lisp_Object level, flag;
3421 {
3422 register struct backtrace *backlist = backtrace_list;
3423 register int i;
3424
3425 CHECK_NUMBER (level);
3426
3427 for (i = 0; backlist && i < XINT (level); i++)
3428 {
3429 backlist = backlist->next;
3430 }
3431
3432 if (backlist)
3433 backlist->debug_on_exit = !NILP (flag);
3434
3435 return flag;
3436 }
3437
3438 DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
3439 doc: /* Print a trace of Lisp function calls currently active.
3440 Output stream used is value of `standard-output'. */)
3441 ()
3442 {
3443 register struct backtrace *backlist = backtrace_list;
3444 register int i;
3445 Lisp_Object tail;
3446 Lisp_Object tem;
3447 extern Lisp_Object Vprint_level;
3448 struct gcpro gcpro1;
3449
3450 XSETFASTINT (Vprint_level, 3);
3451
3452 tail = Qnil;
3453 GCPRO1 (tail);
3454
3455 while (backlist)
3456 {
3457 write_string (backlist->debug_on_exit ? "* " : " ", 2);
3458 if (backlist->nargs == UNEVALLED)
3459 {
3460 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
3461 write_string ("\n", -1);
3462 }
3463 else
3464 {
3465 tem = *backlist->function;
3466 Fprin1 (tem, Qnil); /* This can QUIT */
3467 write_string ("(", -1);
3468 if (backlist->nargs == MANY)
3469 {
3470 for (tail = *backlist->args, i = 0;
3471 !NILP (tail);
3472 tail = Fcdr (tail), i++)
3473 {
3474 if (i) write_string (" ", -1);
3475 Fprin1 (Fcar (tail), Qnil);
3476 }
3477 }
3478 else
3479 {
3480 for (i = 0; i < backlist->nargs; i++)
3481 {
3482 if (i) write_string (" ", -1);
3483 Fprin1 (backlist->args[i], Qnil);
3484 }
3485 }
3486 write_string (")\n", -1);
3487 }
3488 backlist = backlist->next;
3489 }
3490
3491 Vprint_level = Qnil;
3492 UNGCPRO;
3493 return Qnil;
3494 }
3495
3496 DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, NULL,
3497 doc: /* Return the function and arguments NFRAMES up from current execution point.
3498 If that frame has not evaluated the arguments yet (or is a special form),
3499 the value is (nil FUNCTION ARG-FORMS...).
3500 If that frame has evaluated its arguments and called its function already,
3501 the value is (t FUNCTION ARG-VALUES...).
3502 A &rest arg is represented as the tail of the list ARG-VALUES.
3503 FUNCTION is whatever was supplied as car of evaluated list,
3504 or a lambda expression for macro calls.
3505 If NFRAMES is more than the number of frames, the value is nil. */)
3506 (nframes)
3507 Lisp_Object nframes;
3508 {
3509 register struct backtrace *backlist = backtrace_list;
3510 register int i;
3511 Lisp_Object tem;
3512
3513 CHECK_NATNUM (nframes);
3514
3515 /* Find the frame requested. */
3516 for (i = 0; backlist && i < XFASTINT (nframes); i++)
3517 backlist = backlist->next;
3518
3519 if (!backlist)
3520 return Qnil;
3521 if (backlist->nargs == UNEVALLED)
3522 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
3523 else
3524 {
3525 if (backlist->nargs == MANY)
3526 tem = *backlist->args;
3527 else
3528 tem = Flist (backlist->nargs, backlist->args);
3529
3530 return Fcons (Qt, Fcons (*backlist->function, tem));
3531 }
3532 }
3533
3534 \f
3535 void
3536 mark_backtrace ()
3537 {
3538 register struct backtrace *backlist;
3539 register int i;
3540
3541 for (backlist = backtrace_list; backlist; backlist = backlist->next)
3542 {
3543 mark_object (*backlist->function);
3544
3545 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
3546 i = 0;
3547 else
3548 i = backlist->nargs - 1;
3549 for (; i >= 0; i--)
3550 mark_object (backlist->args[i]);
3551 }
3552 }
3553
3554 void
3555 syms_of_eval ()
3556 {
3557 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
3558 doc: /* *Limit on number of Lisp variable bindings and `unwind-protect's.
3559 If Lisp code tries to increase the total number past this amount,
3560 an error is signaled.
3561 You can safely use a value considerably larger than the default value,
3562 if that proves inconveniently small. However, if you increase it too far,
3563 Emacs could run out of memory trying to make the stack bigger. */);
3564
3565 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
3566 doc: /* *Limit on depth in `eval', `apply' and `funcall' before error.
3567
3568 This limit serves to catch infinite recursions for you before they cause
3569 actual stack overflow in C, which would be fatal for Emacs.
3570 You can safely make it considerably larger than its default value,
3571 if that proves inconveniently small. However, if you increase it too far,
3572 Emacs could overflow the real C stack, and crash. */);
3573
3574 DEFVAR_LISP ("quit-flag", &Vquit_flag,
3575 doc: /* Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
3576 If the value is t, that means do an ordinary quit.
3577 If the value equals `throw-on-input', that means quit by throwing
3578 to the tag specified in `throw-on-input'; it's for handling `while-no-input'.
3579 Typing C-g sets `quit-flag' to t, regardless of `inhibit-quit',
3580 but `inhibit-quit' non-nil prevents anything from taking notice of that. */);
3581 Vquit_flag = Qnil;
3582
3583 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
3584 doc: /* Non-nil inhibits C-g quitting from happening immediately.
3585 Note that `quit-flag' will still be set by typing C-g,
3586 so a quit will be signaled as soon as `inhibit-quit' is nil.
3587 To prevent this happening, set `quit-flag' to nil
3588 before making `inhibit-quit' nil. */);
3589 Vinhibit_quit = Qnil;
3590
3591 Qinhibit_quit = intern ("inhibit-quit");
3592 staticpro (&Qinhibit_quit);
3593
3594 Qautoload = intern ("autoload");
3595 staticpro (&Qautoload);
3596
3597 Qdebug_on_error = intern ("debug-on-error");
3598 staticpro (&Qdebug_on_error);
3599
3600 Qmacro = intern ("macro");
3601 staticpro (&Qmacro);
3602
3603 Qdeclare = intern ("declare");
3604 staticpro (&Qdeclare);
3605
3606 /* Note that the process handling also uses Qexit, but we don't want
3607 to staticpro it twice, so we just do it here. */
3608 Qexit = intern ("exit");
3609 staticpro (&Qexit);
3610
3611 Qinteractive = intern ("interactive");
3612 staticpro (&Qinteractive);
3613
3614 Qcommandp = intern ("commandp");
3615 staticpro (&Qcommandp);
3616
3617 Qdefun = intern ("defun");
3618 staticpro (&Qdefun);
3619
3620 Qand_rest = intern ("&rest");
3621 staticpro (&Qand_rest);
3622
3623 Qand_optional = intern ("&optional");
3624 staticpro (&Qand_optional);
3625
3626 Qdebug = intern ("debug");
3627 staticpro (&Qdebug);
3628
3629 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
3630 doc: /* *Non-nil means errors display a backtrace buffer.
3631 More precisely, this happens for any error that is handled
3632 by the editor command loop.
3633 If the value is a list, an error only means to display a backtrace
3634 if one of its condition symbols appears in the list. */);
3635 Vstack_trace_on_error = Qnil;
3636
3637 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
3638 doc: /* *Non-nil means enter debugger if an error is signaled.
3639 Does not apply to errors handled by `condition-case' or those
3640 matched by `debug-ignored-errors'.
3641 If the value is a list, an error only means to enter the debugger
3642 if one of its condition symbols appears in the list.
3643 When you evaluate an expression interactively, this variable
3644 is temporarily non-nil if `eval-expression-debug-on-error' is non-nil.
3645 See also variable `debug-on-quit'. */);
3646 Vdebug_on_error = Qnil;
3647
3648 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
3649 doc: /* *List of errors for which the debugger should not be called.
3650 Each element may be a condition-name or a regexp that matches error messages.
3651 If any element applies to a given error, that error skips the debugger
3652 and just returns to top level.
3653 This overrides the variable `debug-on-error'.
3654 It does not apply to errors handled by `condition-case'. */);
3655 Vdebug_ignored_errors = Qnil;
3656
3657 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
3658 doc: /* *Non-nil means enter debugger if quit is signaled (C-g, for example).
3659 Does not apply if quit is handled by a `condition-case'. */);
3660 debug_on_quit = 0;
3661
3662 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
3663 doc: /* Non-nil means enter debugger before next `eval', `apply' or `funcall'. */);
3664
3665 DEFVAR_BOOL ("debugger-may-continue", &debugger_may_continue,
3666 doc: /* Non-nil means debugger may continue execution.
3667 This is nil when the debugger is called under circumstances where it
3668 might not be safe to continue. */);
3669 debugger_may_continue = 1;
3670
3671 DEFVAR_LISP ("debugger", &Vdebugger,
3672 doc: /* Function to call to invoke debugger.
3673 If due to frame exit, args are `exit' and the value being returned;
3674 this function's value will be returned instead of that.
3675 If due to error, args are `error' and a list of the args to `signal'.
3676 If due to `apply' or `funcall' entry, one arg, `lambda'.
3677 If due to `eval' entry, one arg, t. */);
3678 Vdebugger = Qnil;
3679
3680 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
3681 doc: /* If non-nil, this is a function for `signal' to call.
3682 It receives the same arguments that `signal' was given.
3683 The Edebug package uses this to regain control. */);
3684 Vsignal_hook_function = Qnil;
3685
3686 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
3687 doc: /* *Non-nil means call the debugger regardless of condition handlers.
3688 Note that `debug-on-error', `debug-on-quit' and friends
3689 still determine whether to handle the particular condition. */);
3690 Vdebug_on_signal = Qnil;
3691
3692 DEFVAR_LISP ("macro-declaration-function", &Vmacro_declaration_function,
3693 doc: /* Function to process declarations in a macro definition.
3694 The function will be called with two args MACRO and DECL.
3695 MACRO is the name of the macro being defined.
3696 DECL is a list `(declare ...)' containing the declarations.
3697 The value the function returns is not used. */);
3698 Vmacro_declaration_function = Qnil;
3699
3700 Vrun_hooks = intern ("run-hooks");
3701 staticpro (&Vrun_hooks);
3702
3703 staticpro (&Vautoload_queue);
3704 Vautoload_queue = Qnil;
3705 staticpro (&Vsignaling_function);
3706 Vsignaling_function = Qnil;
3707
3708 defsubr (&Sor);
3709 defsubr (&Sand);
3710 defsubr (&Sif);
3711 defsubr (&Scond);
3712 defsubr (&Sprogn);
3713 defsubr (&Sprog1);
3714 defsubr (&Sprog2);
3715 defsubr (&Ssetq);
3716 defsubr (&Squote);
3717 defsubr (&Sfunction);
3718 defsubr (&Sdefun);
3719 defsubr (&Sdefmacro);
3720 defsubr (&Sdefvar);
3721 defsubr (&Sdefvaralias);
3722 defsubr (&Sdefconst);
3723 defsubr (&Suser_variable_p);
3724 defsubr (&Slet);
3725 defsubr (&SletX);
3726 defsubr (&Swhile);
3727 defsubr (&Smacroexpand);
3728 defsubr (&Scatch);
3729 defsubr (&Sthrow);
3730 defsubr (&Sunwind_protect);
3731 defsubr (&Scondition_case);
3732 defsubr (&Ssignal);
3733 defsubr (&Sinteractive_p);
3734 defsubr (&Scalled_interactively_p);
3735 defsubr (&Scommandp);
3736 defsubr (&Sautoload);
3737 defsubr (&Seval);
3738 defsubr (&Sapply);
3739 defsubr (&Sfuncall);
3740 defsubr (&Srun_hooks);
3741 defsubr (&Srun_hook_with_args);
3742 defsubr (&Srun_hook_with_args_until_success);
3743 defsubr (&Srun_hook_with_args_until_failure);
3744 defsubr (&Sfetch_bytecode);
3745 defsubr (&Sbacktrace_debug);
3746 defsubr (&Sbacktrace);
3747 defsubr (&Sbacktrace_frame);
3748 }
3749
3750 /* arch-tag: 014a07aa-33ab-4a8f-a3d2-ee8a4a9ff7fb
3751 (do not change this comment) */