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