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