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