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