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