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