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