Regenerated
[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));
905a9ed3 2130 else
a56eaaef
DN
2131 /* We don't want the docstring in purespace (instead,
2132 Snarf-documentation should (hopefully) overwrite it). */
2133 docstring = make_number (0);
2134 return Ffset (function,
2135 Fpurecopy (list5 (Qautoload, file, docstring,
2136 interactive, type)));
db9f0278
JB
2137}
2138
2139Lisp_Object
2140un_autoload (oldqueue)
2141 Lisp_Object oldqueue;
2142{
2143 register Lisp_Object queue, first, second;
2144
2145 /* Queue to unwind is current value of Vautoload_queue.
2146 oldqueue is the shadowed value to leave in Vautoload_queue. */
2147 queue = Vautoload_queue;
2148 Vautoload_queue = oldqueue;
2149 while (CONSP (queue))
2150 {
e509f168 2151 first = XCAR (queue);
db9f0278
JB
2152 second = Fcdr (first);
2153 first = Fcar (first);
47b82df9
RS
2154 if (EQ (first, make_number (0)))
2155 Vfeatures = second;
db9f0278
JB
2156 else
2157 Ffset (first, second);
e509f168 2158 queue = XCDR (queue);
db9f0278
JB
2159 }
2160 return Qnil;
2161}
2162
ca20916b
RS
2163/* Load an autoloaded function.
2164 FUNNAME is the symbol which is the function's name.
2165 FUNDEF is the autoload definition (a list). */
2166
045ba794 2167void
db9f0278
JB
2168do_autoload (fundef, funname)
2169 Lisp_Object fundef, funname;
2170{
aed13378 2171 int count = SPECPDL_INDEX ();
d945992e 2172 Lisp_Object fun;
ca20916b 2173 struct gcpro gcpro1, gcpro2, gcpro3;
db9f0278 2174
aea6173f
RS
2175 /* This is to make sure that loadup.el gives a clear picture
2176 of what files are preloaded and when. */
ab4db096
RS
2177 if (! NILP (Vpurify_flag))
2178 error ("Attempt to autoload %s while preparing to dump",
d5db4077 2179 SDATA (SYMBOL_NAME (funname)));
ab4db096 2180
db9f0278 2181 fun = funname;
b7826503 2182 CHECK_SYMBOL (funname);
ca20916b 2183 GCPRO3 (fun, funname, fundef);
db9f0278 2184
f87740dc 2185 /* Preserve the match data. */
89f2614d 2186 record_unwind_save_match_data ();
177c0ea7 2187
a04ee161
RS
2188 /* If autoloading gets an error (which includes the error of failing
2189 to define the function being called), we use Vautoload_queue
2190 to undo function definitions and `provide' calls made by
2191 the function. We do this in the specific case of autoloading
2192 because autoloading is not an explicit request "load this file",
2193 but rather a request to "call this function".
2194
2195 The value saved here is to be restored into Vautoload_queue. */
db9f0278
JB
2196 record_unwind_protect (un_autoload, Vautoload_queue);
2197 Vautoload_queue = Qt;
7351b242 2198 Fload (Fcar (Fcdr (fundef)), Qnil, Qt, Qnil, Qt);
2a49b6e5 2199
db9f0278
JB
2200 /* Once loading finishes, don't undo it. */
2201 Vautoload_queue = Qt;
2202 unbind_to (count, Qnil);
2203
a7f96a35 2204 fun = Findirect_function (fun, Qnil);
ffd56f97 2205
76c2b0cc 2206 if (!NILP (Fequal (fun, fundef)))
db9f0278 2207 error ("Autoloading failed to define function %s",
d5db4077 2208 SDATA (SYMBOL_NAME (funname)));
ca20916b 2209 UNGCPRO;
db9f0278 2210}
4c576a83 2211
db9f0278
JB
2212\f
2213DEFUN ("eval", Feval, Seval, 1, 1, 0,
9dbc9081
PJ
2214 doc: /* Evaluate FORM and return its value. */)
2215 (form)
db9f0278
JB
2216 Lisp_Object form;
2217{
2218 Lisp_Object fun, val, original_fun, original_args;
2219 Lisp_Object funcar;
2220 struct backtrace backtrace;
2221 struct gcpro gcpro1, gcpro2, gcpro3;
2222
df470e3b 2223 if (handling_signal)
48f8dfa3 2224 abort ();
177c0ea7 2225
90165123 2226 if (SYMBOLP (form))
2b9bde76 2227 return Fsymbol_value (form);
db9f0278
JB
2228 if (!CONSP (form))
2229 return form;
2230
2231 QUIT;
ee830945
RS
2232 if ((consing_since_gc > gc_cons_threshold
2233 && consing_since_gc > gc_relative_threshold)
2234 ||
2235 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
db9f0278
JB
2236 {
2237 GCPRO1 (form);
2238 Fgarbage_collect ();
2239 UNGCPRO;
2240 }
2241
2242 if (++lisp_eval_depth > max_lisp_eval_depth)
2243 {
2244 if (max_lisp_eval_depth < 100)
2245 max_lisp_eval_depth = 100;
2246 if (lisp_eval_depth > max_lisp_eval_depth)
921baa95 2247 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
db9f0278
JB
2248 }
2249
2250 original_fun = Fcar (form);
2251 original_args = Fcdr (form);
2252
2253 backtrace.next = backtrace_list;
2254 backtrace_list = &backtrace;
2255 backtrace.function = &original_fun; /* This also protects them from gc */
2256 backtrace.args = &original_args;
2257 backtrace.nargs = UNEVALLED;
2258 backtrace.evalargs = 1;
2259 backtrace.debug_on_exit = 0;
2260
2261 if (debug_on_next_call)
2262 do_debug_on_call (Qt);
2263
2264 /* At this point, only original_fun and original_args
2265 have values that will be used below */
2266 retry:
8788120f
KS
2267
2268 /* Optimize for no indirection. */
2269 fun = original_fun;
2270 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2271 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2272 fun = indirect_function (fun);
db9f0278 2273
90165123 2274 if (SUBRP (fun))
db9f0278
JB
2275 {
2276 Lisp_Object numargs;
166c822d 2277 Lisp_Object argvals[8];
db9f0278
JB
2278 Lisp_Object args_left;
2279 register int i, maxargs;
2280
2281 args_left = original_args;
2282 numargs = Flength (args_left);
2283
c1788fbc
RS
2284 CHECK_CONS_LIST ();
2285
db9f0278
JB
2286 if (XINT (numargs) < XSUBR (fun)->min_args ||
2287 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
734d55a2 2288 xsignal2 (Qwrong_number_of_arguments, original_fun, numargs);
db9f0278
JB
2289
2290 if (XSUBR (fun)->max_args == UNEVALLED)
2291 {
2292 backtrace.evalargs = 0;
2293 val = (*XSUBR (fun)->function) (args_left);
2294 goto done;
2295 }
2296
2297 if (XSUBR (fun)->max_args == MANY)
2298 {
2299 /* Pass a vector of evaluated arguments */
2300 Lisp_Object *vals;
2301 register int argnum = 0;
2302
2303 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2304
2305 GCPRO3 (args_left, fun, fun);
2306 gcpro3.var = vals;
2307 gcpro3.nvars = 0;
2308
265a9e55 2309 while (!NILP (args_left))
db9f0278
JB
2310 {
2311 vals[argnum++] = Feval (Fcar (args_left));
2312 args_left = Fcdr (args_left);
2313 gcpro3.nvars = argnum;
2314 }
db9f0278
JB
2315
2316 backtrace.args = vals;
2317 backtrace.nargs = XINT (numargs);
2318
2319 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
a6e3fa71 2320 UNGCPRO;
db9f0278
JB
2321 goto done;
2322 }
2323
2324 GCPRO3 (args_left, fun, fun);
2325 gcpro3.var = argvals;
2326 gcpro3.nvars = 0;
2327
2328 maxargs = XSUBR (fun)->max_args;
2329 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
2330 {
2331 argvals[i] = Feval (Fcar (args_left));
2332 gcpro3.nvars = ++i;
2333 }
2334
2335 UNGCPRO;
2336
2337 backtrace.args = argvals;
2338 backtrace.nargs = XINT (numargs);
2339
2340 switch (i)
2341 {
2342 case 0:
2343 val = (*XSUBR (fun)->function) ();
2344 goto done;
2345 case 1:
2346 val = (*XSUBR (fun)->function) (argvals[0]);
2347 goto done;
2348 case 2:
2349 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
2350 goto done;
2351 case 3:
2352 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2353 argvals[2]);
2354 goto done;
2355 case 4:
2356 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2357 argvals[2], argvals[3]);
2358 goto done;
2359 case 5:
2360 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2361 argvals[3], argvals[4]);
2362 goto done;
2363 case 6:
2364 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2365 argvals[3], argvals[4], argvals[5]);
2366 goto done;
15c65264
RS
2367 case 7:
2368 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2369 argvals[3], argvals[4], argvals[5],
2370 argvals[6]);
2371 goto done;
db9f0278 2372
166c822d
KH
2373 case 8:
2374 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2375 argvals[3], argvals[4], argvals[5],
2376 argvals[6], argvals[7]);
2377 goto done;
2378
db9f0278 2379 default:
08564963
JB
2380 /* Someone has created a subr that takes more arguments than
2381 is supported by this code. We need to either rewrite the
2382 subr to use a different argument protocol, or add more
2383 cases to this switch. */
2384 abort ();
db9f0278
JB
2385 }
2386 }
90165123 2387 if (COMPILEDP (fun))
db9f0278
JB
2388 val = apply_lambda (fun, original_args, 1);
2389 else
2390 {
8788120f 2391 if (EQ (fun, Qunbound))
734d55a2 2392 xsignal1 (Qvoid_function, original_fun);
db9f0278 2393 if (!CONSP (fun))
734d55a2
KS
2394 xsignal1 (Qinvalid_function, original_fun);
2395 funcar = XCAR (fun);
90165123 2396 if (!SYMBOLP (funcar))
734d55a2 2397 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
2398 if (EQ (funcar, Qautoload))
2399 {
2400 do_autoload (fun, original_fun);
2401 goto retry;
2402 }
2403 if (EQ (funcar, Qmacro))
2404 val = Feval (apply1 (Fcdr (fun), original_args));
2405 else if (EQ (funcar, Qlambda))
2406 val = apply_lambda (fun, original_args, 1);
db9f0278 2407 else
734d55a2 2408 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
2409 }
2410 done:
c1788fbc
RS
2411 CHECK_CONS_LIST ();
2412
db9f0278
JB
2413 lisp_eval_depth--;
2414 if (backtrace.debug_on_exit)
2415 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2416 backtrace_list = backtrace.next;
824eb35e 2417
db9f0278
JB
2418 return val;
2419}
2420\f
2421DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
9dbc9081
PJ
2422 doc: /* Call FUNCTION with our remaining args, using our last arg as list of args.
2423Then return the value FUNCTION returns.
2424Thus, (apply '+ 1 2 '(3 4)) returns 10.
2425usage: (apply FUNCTION &rest ARGUMENTS) */)
2426 (nargs, args)
db9f0278
JB
2427 int nargs;
2428 Lisp_Object *args;
2429{
2430 register int i, numargs;
2431 register Lisp_Object spread_arg;
2432 register Lisp_Object *funcall_args;
db9f0278 2433 Lisp_Object fun;
96d44c64 2434 struct gcpro gcpro1;
db9f0278
JB
2435
2436 fun = args [0];
2437 funcall_args = 0;
2438 spread_arg = args [nargs - 1];
b7826503 2439 CHECK_LIST (spread_arg);
177c0ea7 2440
db9f0278
JB
2441 numargs = XINT (Flength (spread_arg));
2442
2443 if (numargs == 0)
2444 return Ffuncall (nargs - 1, args);
2445 else if (numargs == 1)
2446 {
03699b14 2447 args [nargs - 1] = XCAR (spread_arg);
db9f0278
JB
2448 return Ffuncall (nargs, args);
2449 }
2450
a6e3fa71 2451 numargs += nargs - 2;
db9f0278 2452
8788120f
KS
2453 /* Optimize for no indirection. */
2454 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2455 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2456 fun = indirect_function (fun);
ffd56f97 2457 if (EQ (fun, Qunbound))
db9f0278 2458 {
ffd56f97
JB
2459 /* Let funcall get the error */
2460 fun = args[0];
2461 goto funcall;
db9f0278
JB
2462 }
2463
90165123 2464 if (SUBRP (fun))
db9f0278
JB
2465 {
2466 if (numargs < XSUBR (fun)->min_args
2467 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2468 goto funcall; /* Let funcall get the error */
2469 else if (XSUBR (fun)->max_args > numargs)
2470 {
2471 /* Avoid making funcall cons up a yet another new vector of arguments
2472 by explicitly supplying nil's for optional values */
2473 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
2474 * sizeof (Lisp_Object));
2475 for (i = numargs; i < XSUBR (fun)->max_args;)
2476 funcall_args[++i] = Qnil;
96d44c64
SM
2477 GCPRO1 (*funcall_args);
2478 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
db9f0278
JB
2479 }
2480 }
2481 funcall:
2482 /* We add 1 to numargs because funcall_args includes the
2483 function itself as well as its arguments. */
2484 if (!funcall_args)
a6e3fa71
JB
2485 {
2486 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
2487 * sizeof (Lisp_Object));
96d44c64
SM
2488 GCPRO1 (*funcall_args);
2489 gcpro1.nvars = 1 + numargs;
a6e3fa71
JB
2490 }
2491
db9f0278
JB
2492 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
2493 /* Spread the last arg we got. Its first element goes in
2494 the slot that it used to occupy, hence this value of I. */
2495 i = nargs - 1;
265a9e55 2496 while (!NILP (spread_arg))
db9f0278 2497 {
03699b14
KR
2498 funcall_args [i++] = XCAR (spread_arg);
2499 spread_arg = XCDR (spread_arg);
db9f0278 2500 }
a6e3fa71 2501
96d44c64
SM
2502 /* By convention, the caller needs to gcpro Ffuncall's args. */
2503 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
db9f0278
JB
2504}
2505\f
ff936e53
SM
2506/* Run hook variables in various ways. */
2507
2508enum run_hooks_condition {to_completion, until_success, until_failure};
2901f1d1
SM
2509static Lisp_Object run_hook_with_args P_ ((int, Lisp_Object *,
2510 enum run_hooks_condition));
ff936e53 2511
8b5176cd 2512DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 0, MANY, 0,
9f685258 2513 doc: /* Run each hook in HOOKS.
9dbc9081
PJ
2514Each argument should be a symbol, a hook variable.
2515These symbols are processed in the order specified.
2516If a hook symbol has a non-nil value, that value may be a function
2517or a list of functions to be called to run the hook.
2518If the value is a function, it is called with no arguments.
2519If it is a list, the elements are called, in order, with no arguments.
2520
9f685258
LK
2521Major modes should not use this function directly to run their mode
2522hook; they should use `run-mode-hooks' instead.
2523
72e85d5d
RS
2524Do not use `make-local-variable' to make a hook variable buffer-local.
2525Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2526usage: (run-hooks &rest HOOKS) */)
2527 (nargs, args)
ff936e53
SM
2528 int nargs;
2529 Lisp_Object *args;
2530{
2531 Lisp_Object hook[1];
2532 register int i;
2533
2534 for (i = 0; i < nargs; i++)
2535 {
2536 hook[0] = args[i];
2537 run_hook_with_args (1, hook, to_completion);
2538 }
2539
2540 return Qnil;
2541}
177c0ea7 2542
a0d76c27 2543DEFUN ("run-hook-with-args", Frun_hook_with_args,
9dbc9081
PJ
2544 Srun_hook_with_args, 1, MANY, 0,
2545 doc: /* Run HOOK with the specified arguments ARGS.
2546HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2547value, that value may be a function or a list of functions to be
2548called to run the hook. If the value is a function, it is called with
2549the given arguments and its return value is returned. If it is a list
2550of functions, those functions are called, in order,
2551with the given arguments ARGS.
d5e2c90c 2552It is best not to depend on the value returned by `run-hook-with-args',
9dbc9081
PJ
2553as that may change.
2554
72e85d5d
RS
2555Do not use `make-local-variable' to make a hook variable buffer-local.
2556Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2557usage: (run-hook-with-args HOOK &rest ARGS) */)
2558 (nargs, args)
ff936e53
SM
2559 int nargs;
2560 Lisp_Object *args;
2561{
2562 return run_hook_with_args (nargs, args, to_completion);
2563}
2564
a0d76c27 2565DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
9dbc9081
PJ
2566 Srun_hook_with_args_until_success, 1, MANY, 0,
2567 doc: /* Run HOOK with the specified arguments ARGS.
d5e2c90c
RS
2568HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2569value, that value may be a function or a list of functions to be
2570called to run the hook. If the value is a function, it is called with
2571the given arguments and its return value is returned.
2572If it is a list of functions, those functions are called, in order,
2573with the given arguments ARGS, until one of them
9dbc9081 2574returns a non-nil value. Then we return that value.
d5e2c90c 2575However, if they all return nil, we return nil.
9dbc9081 2576
72e85d5d
RS
2577Do not use `make-local-variable' to make a hook variable buffer-local.
2578Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2579usage: (run-hook-with-args-until-success HOOK &rest ARGS) */)
2580 (nargs, args)
b0b667cb
KH
2581 int nargs;
2582 Lisp_Object *args;
2583{
ff936e53
SM
2584 return run_hook_with_args (nargs, args, until_success);
2585}
2586
a0d76c27 2587DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
9dbc9081
PJ
2588 Srun_hook_with_args_until_failure, 1, MANY, 0,
2589 doc: /* Run HOOK with the specified arguments ARGS.
d5e2c90c
RS
2590HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2591value, that value may be a function or a list of functions to be
2592called to run the hook. If the value is a function, it is called with
2593the given arguments and its return value is returned.
2594If it is a list of functions, those functions are called, in order,
2595with the given arguments ARGS, until one of them returns nil.
2596Then we return nil. However, if they all return non-nil, we return non-nil.
9dbc9081 2597
72e85d5d
RS
2598Do not use `make-local-variable' to make a hook variable buffer-local.
2599Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2600usage: (run-hook-with-args-until-failure HOOK &rest ARGS) */)
2601 (nargs, args)
ff936e53
SM
2602 int nargs;
2603 Lisp_Object *args;
2604{
2605 return run_hook_with_args (nargs, args, until_failure);
2606}
2607
c933ea05
RS
2608/* ARGS[0] should be a hook symbol.
2609 Call each of the functions in the hook value, passing each of them
2610 as arguments all the rest of ARGS (all NARGS - 1 elements).
2611 COND specifies a condition to test after each call
2612 to decide whether to stop.
2613 The caller (or its caller, etc) must gcpro all of ARGS,
2614 except that it isn't necessary to gcpro ARGS[0]. */
2615
2901f1d1 2616static Lisp_Object
ff936e53
SM
2617run_hook_with_args (nargs, args, cond)
2618 int nargs;
2619 Lisp_Object *args;
2620 enum run_hooks_condition cond;
2621{
2622 Lisp_Object sym, val, ret;
fada05d6
KH
2623 Lisp_Object globals;
2624 struct gcpro gcpro1, gcpro2, gcpro3;
b0b667cb 2625
f029ca5f
RS
2626 /* If we are dying or still initializing,
2627 don't do anything--it would probably crash if we tried. */
2628 if (NILP (Vrun_hooks))
caff32a7 2629 return Qnil;
f029ca5f 2630
b0b667cb 2631 sym = args[0];
aa681b51 2632 val = find_symbol_value (sym);
ff936e53
SM
2633 ret = (cond == until_failure ? Qt : Qnil);
2634
b0b667cb 2635 if (EQ (val, Qunbound) || NILP (val))
ff936e53 2636 return ret;
03699b14 2637 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
b0b667cb
KH
2638 {
2639 args[0] = val;
2640 return Ffuncall (nargs, args);
2641 }
2642 else
2643 {
fada05d6
KH
2644 globals = Qnil;
2645 GCPRO3 (sym, val, globals);
cb9d21f8 2646
ff936e53
SM
2647 for (;
2648 CONSP (val) && ((cond == to_completion)
2649 || (cond == until_success ? NILP (ret)
2650 : !NILP (ret)));
03699b14 2651 val = XCDR (val))
b0b667cb 2652 {
03699b14 2653 if (EQ (XCAR (val), Qt))
b0b667cb
KH
2654 {
2655 /* t indicates this hook has a local binding;
2656 it means to run the global binding too. */
b0b667cb 2657
ff936e53
SM
2658 for (globals = Fdefault_value (sym);
2659 CONSP (globals) && ((cond == to_completion)
2660 || (cond == until_success ? NILP (ret)
2661 : !NILP (ret)));
03699b14 2662 globals = XCDR (globals))
b0b667cb 2663 {
03699b14 2664 args[0] = XCAR (globals);
77d92e05
RS
2665 /* In a global value, t should not occur. If it does, we
2666 must ignore it to avoid an endless loop. */
2667 if (!EQ (args[0], Qt))
2668 ret = Ffuncall (nargs, args);
b0b667cb
KH
2669 }
2670 }
2671 else
2672 {
03699b14 2673 args[0] = XCAR (val);
ff936e53 2674 ret = Ffuncall (nargs, args);
b0b667cb
KH
2675 }
2676 }
cb9d21f8
RS
2677
2678 UNGCPRO;
ff936e53 2679 return ret;
b0b667cb
KH
2680 }
2681}
c933ea05
RS
2682
2683/* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2684 present value of that symbol.
2685 Call each element of FUNLIST,
2686 passing each of them the rest of ARGS.
2687 The caller (or its caller, etc) must gcpro all of ARGS,
2688 except that it isn't necessary to gcpro ARGS[0]. */
2689
2690Lisp_Object
2691run_hook_list_with_args (funlist, nargs, args)
2692 Lisp_Object funlist;
2693 int nargs;
2694 Lisp_Object *args;
2695{
2696 Lisp_Object sym;
2697 Lisp_Object val;
fada05d6
KH
2698 Lisp_Object globals;
2699 struct gcpro gcpro1, gcpro2, gcpro3;
c933ea05
RS
2700
2701 sym = args[0];
fada05d6
KH
2702 globals = Qnil;
2703 GCPRO3 (sym, val, globals);
c933ea05 2704
03699b14 2705 for (val = funlist; CONSP (val); val = XCDR (val))
c933ea05 2706 {
03699b14 2707 if (EQ (XCAR (val), Qt))
c933ea05
RS
2708 {
2709 /* t indicates this hook has a local binding;
2710 it means to run the global binding too. */
c933ea05
RS
2711
2712 for (globals = Fdefault_value (sym);
2713 CONSP (globals);
03699b14 2714 globals = XCDR (globals))
c933ea05 2715 {
03699b14 2716 args[0] = XCAR (globals);
77d92e05
RS
2717 /* In a global value, t should not occur. If it does, we
2718 must ignore it to avoid an endless loop. */
2719 if (!EQ (args[0], Qt))
2720 Ffuncall (nargs, args);
c933ea05
RS
2721 }
2722 }
2723 else
2724 {
03699b14 2725 args[0] = XCAR (val);
c933ea05
RS
2726 Ffuncall (nargs, args);
2727 }
2728 }
2729 UNGCPRO;
2730 return Qnil;
2731}
7d48558f
RS
2732
2733/* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2734
2735void
2736run_hook_with_args_2 (hook, arg1, arg2)
2737 Lisp_Object hook, arg1, arg2;
2738{
2739 Lisp_Object temp[3];
2740 temp[0] = hook;
2741 temp[1] = arg1;
2742 temp[2] = arg2;
2743
2744 Frun_hook_with_args (3, temp);
2745}
ff936e53 2746\f
db9f0278
JB
2747/* Apply fn to arg */
2748Lisp_Object
2749apply1 (fn, arg)
2750 Lisp_Object fn, arg;
2751{
a6e3fa71
JB
2752 struct gcpro gcpro1;
2753
2754 GCPRO1 (fn);
265a9e55 2755 if (NILP (arg))
a6e3fa71
JB
2756 RETURN_UNGCPRO (Ffuncall (1, &fn));
2757 gcpro1.nvars = 2;
db9f0278
JB
2758#ifdef NO_ARG_ARRAY
2759 {
2760 Lisp_Object args[2];
2761 args[0] = fn;
2762 args[1] = arg;
a6e3fa71
JB
2763 gcpro1.var = args;
2764 RETURN_UNGCPRO (Fapply (2, args));
db9f0278
JB
2765 }
2766#else /* not NO_ARG_ARRAY */
a6e3fa71 2767 RETURN_UNGCPRO (Fapply (2, &fn));
db9f0278
JB
2768#endif /* not NO_ARG_ARRAY */
2769}
2770
2771/* Call function fn on no arguments */
2772Lisp_Object
2773call0 (fn)
2774 Lisp_Object fn;
2775{
a6e3fa71
JB
2776 struct gcpro gcpro1;
2777
2778 GCPRO1 (fn);
2779 RETURN_UNGCPRO (Ffuncall (1, &fn));
db9f0278
JB
2780}
2781
15285f9f 2782/* Call function fn with 1 argument arg1 */
db9f0278
JB
2783/* ARGSUSED */
2784Lisp_Object
15285f9f
RS
2785call1 (fn, arg1)
2786 Lisp_Object fn, arg1;
db9f0278 2787{
a6e3fa71 2788 struct gcpro gcpro1;
db9f0278 2789#ifdef NO_ARG_ARRAY
177c0ea7 2790 Lisp_Object args[2];
a6e3fa71 2791
db9f0278 2792 args[0] = fn;
15285f9f 2793 args[1] = arg1;
a6e3fa71
JB
2794 GCPRO1 (args[0]);
2795 gcpro1.nvars = 2;
2796 RETURN_UNGCPRO (Ffuncall (2, args));
db9f0278 2797#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2798 GCPRO1 (fn);
2799 gcpro1.nvars = 2;
2800 RETURN_UNGCPRO (Ffuncall (2, &fn));
db9f0278
JB
2801#endif /* not NO_ARG_ARRAY */
2802}
2803
15285f9f 2804/* Call function fn with 2 arguments arg1, arg2 */
db9f0278
JB
2805/* ARGSUSED */
2806Lisp_Object
15285f9f
RS
2807call2 (fn, arg1, arg2)
2808 Lisp_Object fn, arg1, arg2;
db9f0278 2809{
a6e3fa71 2810 struct gcpro gcpro1;
db9f0278
JB
2811#ifdef NO_ARG_ARRAY
2812 Lisp_Object args[3];
2813 args[0] = fn;
15285f9f
RS
2814 args[1] = arg1;
2815 args[2] = arg2;
a6e3fa71
JB
2816 GCPRO1 (args[0]);
2817 gcpro1.nvars = 3;
2818 RETURN_UNGCPRO (Ffuncall (3, args));
db9f0278 2819#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2820 GCPRO1 (fn);
2821 gcpro1.nvars = 3;
2822 RETURN_UNGCPRO (Ffuncall (3, &fn));
db9f0278
JB
2823#endif /* not NO_ARG_ARRAY */
2824}
2825
15285f9f 2826/* Call function fn with 3 arguments arg1, arg2, arg3 */
db9f0278
JB
2827/* ARGSUSED */
2828Lisp_Object
15285f9f
RS
2829call3 (fn, arg1, arg2, arg3)
2830 Lisp_Object fn, arg1, arg2, arg3;
db9f0278 2831{
a6e3fa71 2832 struct gcpro gcpro1;
db9f0278
JB
2833#ifdef NO_ARG_ARRAY
2834 Lisp_Object args[4];
2835 args[0] = fn;
15285f9f
RS
2836 args[1] = arg1;
2837 args[2] = arg2;
2838 args[3] = arg3;
a6e3fa71
JB
2839 GCPRO1 (args[0]);
2840 gcpro1.nvars = 4;
2841 RETURN_UNGCPRO (Ffuncall (4, args));
db9f0278 2842#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2843 GCPRO1 (fn);
2844 gcpro1.nvars = 4;
2845 RETURN_UNGCPRO (Ffuncall (4, &fn));
db9f0278
JB
2846#endif /* not NO_ARG_ARRAY */
2847}
2848
15285f9f 2849/* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
a5a44b91
JB
2850/* ARGSUSED */
2851Lisp_Object
15285f9f
RS
2852call4 (fn, arg1, arg2, arg3, arg4)
2853 Lisp_Object fn, arg1, arg2, arg3, arg4;
a5a44b91
JB
2854{
2855 struct gcpro gcpro1;
2856#ifdef NO_ARG_ARRAY
2857 Lisp_Object args[5];
2858 args[0] = fn;
15285f9f
RS
2859 args[1] = arg1;
2860 args[2] = arg2;
2861 args[3] = arg3;
2862 args[4] = arg4;
a5a44b91
JB
2863 GCPRO1 (args[0]);
2864 gcpro1.nvars = 5;
2865 RETURN_UNGCPRO (Ffuncall (5, args));
2866#else /* not NO_ARG_ARRAY */
2867 GCPRO1 (fn);
2868 gcpro1.nvars = 5;
2869 RETURN_UNGCPRO (Ffuncall (5, &fn));
2870#endif /* not NO_ARG_ARRAY */
2871}
2872
15285f9f
RS
2873/* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2874/* ARGSUSED */
2875Lisp_Object
2876call5 (fn, arg1, arg2, arg3, arg4, arg5)
2877 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2878{
2879 struct gcpro gcpro1;
2880#ifdef NO_ARG_ARRAY
2881 Lisp_Object args[6];
2882 args[0] = fn;
2883 args[1] = arg1;
2884 args[2] = arg2;
2885 args[3] = arg3;
2886 args[4] = arg4;
2887 args[5] = arg5;
2888 GCPRO1 (args[0]);
2889 gcpro1.nvars = 6;
2890 RETURN_UNGCPRO (Ffuncall (6, args));
2891#else /* not NO_ARG_ARRAY */
2892 GCPRO1 (fn);
2893 gcpro1.nvars = 6;
2894 RETURN_UNGCPRO (Ffuncall (6, &fn));
2895#endif /* not NO_ARG_ARRAY */
2896}
2897
2898/* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2899/* ARGSUSED */
2900Lisp_Object
2901call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2902 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2903{
2904 struct gcpro gcpro1;
2905#ifdef NO_ARG_ARRAY
2906 Lisp_Object args[7];
2907 args[0] = fn;
2908 args[1] = arg1;
2909 args[2] = arg2;
2910 args[3] = arg3;
2911 args[4] = arg4;
2912 args[5] = arg5;
2913 args[6] = arg6;
2914 GCPRO1 (args[0]);
2915 gcpro1.nvars = 7;
2916 RETURN_UNGCPRO (Ffuncall (7, args));
2917#else /* not NO_ARG_ARRAY */
2918 GCPRO1 (fn);
2919 gcpro1.nvars = 7;
2920 RETURN_UNGCPRO (Ffuncall (7, &fn));
2921#endif /* not NO_ARG_ARRAY */
2922}
2923
6c2ef893
RS
2924/* The caller should GCPRO all the elements of ARGS. */
2925
db9f0278 2926DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
9dbc9081
PJ
2927 doc: /* Call first argument as a function, passing remaining arguments to it.
2928Return the value that function returns.
2929Thus, (funcall 'cons 'x 'y) returns (x . y).
2930usage: (funcall FUNCTION &rest ARGUMENTS) */)
2931 (nargs, args)
db9f0278
JB
2932 int nargs;
2933 Lisp_Object *args;
2934{
8788120f 2935 Lisp_Object fun, original_fun;
db9f0278
JB
2936 Lisp_Object funcar;
2937 int numargs = nargs - 1;
2938 Lisp_Object lisp_numargs;
2939 Lisp_Object val;
2940 struct backtrace backtrace;
2941 register Lisp_Object *internal_args;
2942 register int i;
2943
2944 QUIT;
ee830945
RS
2945 if ((consing_since_gc > gc_cons_threshold
2946 && consing_since_gc > gc_relative_threshold)
2947 ||
2948 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
a6e3fa71 2949 Fgarbage_collect ();
db9f0278
JB
2950
2951 if (++lisp_eval_depth > max_lisp_eval_depth)
2952 {
2953 if (max_lisp_eval_depth < 100)
2954 max_lisp_eval_depth = 100;
2955 if (lisp_eval_depth > max_lisp_eval_depth)
921baa95 2956 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
db9f0278
JB
2957 }
2958
2959 backtrace.next = backtrace_list;
2960 backtrace_list = &backtrace;
2961 backtrace.function = &args[0];
2962 backtrace.args = &args[1];
2963 backtrace.nargs = nargs - 1;
2964 backtrace.evalargs = 0;
2965 backtrace.debug_on_exit = 0;
2966
2967 if (debug_on_next_call)
2968 do_debug_on_call (Qlambda);
2969
fff3ff9c
KS
2970 CHECK_CONS_LIST ();
2971
8788120f
KS
2972 original_fun = args[0];
2973
db9f0278
JB
2974 retry:
2975
8788120f
KS
2976 /* Optimize for no indirection. */
2977 fun = original_fun;
2978 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2979 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2980 fun = indirect_function (fun);
db9f0278 2981
90165123 2982 if (SUBRP (fun))
db9f0278 2983 {
fff3ff9c 2984 if (numargs < XSUBR (fun)->min_args
db9f0278
JB
2985 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2986 {
a631e24c 2987 XSETFASTINT (lisp_numargs, numargs);
734d55a2 2988 xsignal2 (Qwrong_number_of_arguments, original_fun, lisp_numargs);
db9f0278
JB
2989 }
2990
2991 if (XSUBR (fun)->max_args == UNEVALLED)
734d55a2 2992 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
2993
2994 if (XSUBR (fun)->max_args == MANY)
2995 {
2996 val = (*XSUBR (fun)->function) (numargs, args + 1);
2997 goto done;
2998 }
2999
3000 if (XSUBR (fun)->max_args > numargs)
3001 {
3002 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
3003 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
3004 for (i = numargs; i < XSUBR (fun)->max_args; i++)
3005 internal_args[i] = Qnil;
3006 }
3007 else
3008 internal_args = args + 1;
3009 switch (XSUBR (fun)->max_args)
3010 {
3011 case 0:
3012 val = (*XSUBR (fun)->function) ();
3013 goto done;
3014 case 1:
3015 val = (*XSUBR (fun)->function) (internal_args[0]);
3016 goto done;
3017 case 2:
82fc29a1 3018 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1]);
db9f0278
JB
3019 goto done;
3020 case 3:
3021 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3022 internal_args[2]);
3023 goto done;
3024 case 4:
3025 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
82fc29a1 3026 internal_args[2], internal_args[3]);
db9f0278
JB
3027 goto done;
3028 case 5:
3029 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3030 internal_args[2], internal_args[3],
3031 internal_args[4]);
3032 goto done;
3033 case 6:
3034 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3035 internal_args[2], internal_args[3],
3036 internal_args[4], internal_args[5]);
3037 goto done;
15c65264
RS
3038 case 7:
3039 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3040 internal_args[2], internal_args[3],
3041 internal_args[4], internal_args[5],
3042 internal_args[6]);
3043 goto done;
db9f0278 3044
166c822d
KH
3045 case 8:
3046 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3047 internal_args[2], internal_args[3],
3048 internal_args[4], internal_args[5],
3049 internal_args[6], internal_args[7]);
3050 goto done;
3051
db9f0278 3052 default:
70ee42f7 3053
166c822d 3054 /* If a subr takes more than 8 arguments without using MANY
177c0ea7 3055 or UNEVALLED, we need to extend this function to support it.
70ee42f7
JB
3056 Until this is done, there is no way to call the function. */
3057 abort ();
db9f0278
JB
3058 }
3059 }
90165123 3060 if (COMPILEDP (fun))
db9f0278
JB
3061 val = funcall_lambda (fun, numargs, args + 1);
3062 else
3063 {
8788120f 3064 if (EQ (fun, Qunbound))
734d55a2 3065 xsignal1 (Qvoid_function, original_fun);
db9f0278 3066 if (!CONSP (fun))
734d55a2
KS
3067 xsignal1 (Qinvalid_function, original_fun);
3068 funcar = XCAR (fun);
90165123 3069 if (!SYMBOLP (funcar))
734d55a2 3070 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
3071 if (EQ (funcar, Qlambda))
3072 val = funcall_lambda (fun, numargs, args + 1);
db9f0278
JB
3073 else if (EQ (funcar, Qautoload))
3074 {
8788120f 3075 do_autoload (fun, original_fun);
fff3ff9c 3076 CHECK_CONS_LIST ();
db9f0278
JB
3077 goto retry;
3078 }
3079 else
734d55a2 3080 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
3081 }
3082 done:
c1788fbc 3083 CHECK_CONS_LIST ();
db9f0278
JB
3084 lisp_eval_depth--;
3085 if (backtrace.debug_on_exit)
3086 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
3087 backtrace_list = backtrace.next;
3088 return val;
3089}
3090\f
3091Lisp_Object
3092apply_lambda (fun, args, eval_flag)
3093 Lisp_Object fun, args;
3094 int eval_flag;
3095{
3096 Lisp_Object args_left;
3097 Lisp_Object numargs;
3098 register Lisp_Object *arg_vector;
3099 struct gcpro gcpro1, gcpro2, gcpro3;
3100 register int i;
3101 register Lisp_Object tem;
3102
3103 numargs = Flength (args);
3104 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
3105 args_left = args;
3106
3107 GCPRO3 (*arg_vector, args_left, fun);
3108 gcpro1.nvars = 0;
3109
3110 for (i = 0; i < XINT (numargs);)
3111 {
3112 tem = Fcar (args_left), args_left = Fcdr (args_left);
3113 if (eval_flag) tem = Feval (tem);
3114 arg_vector[i++] = tem;
3115 gcpro1.nvars = i;
3116 }
3117
3118 UNGCPRO;
3119
3120 if (eval_flag)
3121 {
3122 backtrace_list->args = arg_vector;
3123 backtrace_list->nargs = i;
3124 }
3125 backtrace_list->evalargs = 0;
3126 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
3127
3128 /* Do the debug-on-exit now, while arg_vector still exists. */
3129 if (backtrace_list->debug_on_exit)
3130 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
3131 /* Don't do it again when we return to eval. */
3132 backtrace_list->debug_on_exit = 0;
3133 return tem;
3134}
3135
3136/* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
3137 and return the result of evaluation.
3138 FUN must be either a lambda-expression or a compiled-code object. */
3139
2901f1d1 3140static Lisp_Object
db9f0278
JB
3141funcall_lambda (fun, nargs, arg_vector)
3142 Lisp_Object fun;
3143 int nargs;
3144 register Lisp_Object *arg_vector;
3145{
9ab90667 3146 Lisp_Object val, syms_left, next;
aed13378 3147 int count = SPECPDL_INDEX ();
9ab90667 3148 int i, optional, rest;
db9f0278 3149
90165123 3150 if (CONSP (fun))
9ab90667
GM
3151 {
3152 syms_left = XCDR (fun);
3153 if (CONSP (syms_left))
3154 syms_left = XCAR (syms_left);
3155 else
734d55a2 3156 xsignal1 (Qinvalid_function, fun);
9ab90667 3157 }
90165123 3158 else if (COMPILEDP (fun))
845975f5 3159 syms_left = AREF (fun, COMPILED_ARGLIST);
9ab90667
GM
3160 else
3161 abort ();
db9f0278 3162
9ab90667
GM
3163 i = optional = rest = 0;
3164 for (; CONSP (syms_left); syms_left = XCDR (syms_left))
db9f0278
JB
3165 {
3166 QUIT;
177c0ea7 3167
9ab90667 3168 next = XCAR (syms_left);
8788120f 3169 if (!SYMBOLP (next))
734d55a2 3170 xsignal1 (Qinvalid_function, fun);
177c0ea7 3171
db9f0278
JB
3172 if (EQ (next, Qand_rest))
3173 rest = 1;
3174 else if (EQ (next, Qand_optional))
3175 optional = 1;
3176 else if (rest)
3177 {
9ffa21d4 3178 specbind (next, Flist (nargs - i, &arg_vector[i]));
db9f0278
JB
3179 i = nargs;
3180 }
3181 else if (i < nargs)
9ab90667 3182 specbind (next, arg_vector[i++]);
db9f0278 3183 else if (!optional)
734d55a2 3184 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
db9f0278
JB
3185 else
3186 specbind (next, Qnil);
3187 }
3188
9ab90667 3189 if (!NILP (syms_left))
734d55a2 3190 xsignal1 (Qinvalid_function, fun);
9ab90667 3191 else if (i < nargs)
734d55a2 3192 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
db9f0278 3193
90165123 3194 if (CONSP (fun))
9ab90667 3195 val = Fprogn (XCDR (XCDR (fun)));
db9f0278 3196 else
ca248607
RS
3197 {
3198 /* If we have not actually read the bytecode string
3199 and constants vector yet, fetch them from the file. */
845975f5 3200 if (CONSP (AREF (fun, COMPILED_BYTECODE)))
661c7d6e 3201 Ffetch_bytecode (fun);
845975f5
SM
3202 val = Fbyte_code (AREF (fun, COMPILED_BYTECODE),
3203 AREF (fun, COMPILED_CONSTANTS),
3204 AREF (fun, COMPILED_STACK_DEPTH));
ca248607 3205 }
177c0ea7 3206
db9f0278
JB
3207 return unbind_to (count, val);
3208}
661c7d6e
KH
3209
3210DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
9dbc9081
PJ
3211 1, 1, 0,
3212 doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */)
3213 (object)
661c7d6e
KH
3214 Lisp_Object object;
3215{
3216 Lisp_Object tem;
3217
845975f5 3218 if (COMPILEDP (object) && CONSP (AREF (object, COMPILED_BYTECODE)))
661c7d6e 3219 {
845975f5 3220 tem = read_doc_string (AREF (object, COMPILED_BYTECODE));
5bbdb090 3221 if (!CONSP (tem))
845975f5
SM
3222 {
3223 tem = AREF (object, COMPILED_BYTECODE);
3224 if (CONSP (tem) && STRINGP (XCAR (tem)))
d5db4077 3225 error ("Invalid byte code in %s", SDATA (XCAR (tem)));
845975f5
SM
3226 else
3227 error ("Invalid byte code");
3228 }
3ae565b3
SM
3229 ASET (object, COMPILED_BYTECODE, XCAR (tem));
3230 ASET (object, COMPILED_CONSTANTS, XCDR (tem));
661c7d6e
KH
3231 }
3232 return object;
3233}
db9f0278
JB
3234\f
3235void
3236grow_specpdl ()
3237{
aed13378 3238 register int count = SPECPDL_INDEX ();
db9f0278
JB
3239 if (specpdl_size >= max_specpdl_size)
3240 {
3241 if (max_specpdl_size < 400)
3242 max_specpdl_size = 400;
3243 if (specpdl_size >= max_specpdl_size)
734d55a2 3244 signal_error ("Variable binding depth exceeds max-specpdl-size", Qnil);
db9f0278
JB
3245 }
3246 specpdl_size *= 2;
3247 if (specpdl_size > max_specpdl_size)
3248 specpdl_size = max_specpdl_size;
3249 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
3250 specpdl_ptr = specpdl + count;
3251}
3252
3253void
3254specbind (symbol, value)
3255 Lisp_Object symbol, value;
3256{
19cebf5a 3257 Lisp_Object valcontents;
db9f0278 3258
b7826503 3259 CHECK_SYMBOL (symbol);
db9f0278
JB
3260 if (specpdl_ptr == specpdl + specpdl_size)
3261 grow_specpdl ();
719177b3 3262
19cebf5a
GM
3263 /* The most common case is that of a non-constant symbol with a
3264 trivial value. Make that as fast as we can. */
3265 valcontents = SYMBOL_VALUE (symbol);
3266 if (!MISCP (valcontents) && !SYMBOL_CONSTANT_P (symbol))
719177b3 3267 {
9ab90667 3268 specpdl_ptr->symbol = symbol;
19cebf5a 3269 specpdl_ptr->old_value = valcontents;
9ab90667
GM
3270 specpdl_ptr->func = NULL;
3271 ++specpdl_ptr;
19cebf5a 3272 SET_SYMBOL_VALUE (symbol, value);
719177b3
RS
3273 }
3274 else
9ab90667 3275 {
136eb6ed 3276 Lisp_Object ovalue = find_symbol_value (symbol);
9ab90667
GM
3277 specpdl_ptr->func = 0;
3278 specpdl_ptr->old_value = ovalue;
719177b3 3279
eb700b82
GM
3280 valcontents = XSYMBOL (symbol)->value;
3281
3282 if (BUFFER_LOCAL_VALUEP (valcontents)
eb700b82 3283 || BUFFER_OBJFWDP (valcontents))
9ab90667 3284 {
0967b4b0
GM
3285 Lisp_Object where, current_buffer;
3286
3287 current_buffer = Fcurrent_buffer ();
177c0ea7 3288
9ab90667 3289 /* For a local variable, record both the symbol and which
eb700b82
GM
3290 buffer's or frame's value we are saving. */
3291 if (!NILP (Flocal_variable_p (symbol, Qnil)))
0967b4b0 3292 where = current_buffer;
67ee9f6e 3293 else if (BUFFER_LOCAL_VALUEP (valcontents)
eb700b82
GM
3294 && XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
3295 where = XBUFFER_LOCAL_VALUE (valcontents)->frame;
3296 else
3297 where = Qnil;
3298
3299 /* We're not using the `unused' slot in the specbinding
3300 structure because this would mean we have to do more
3301 work for simple variables. */
0967b4b0 3302 specpdl_ptr->symbol = Fcons (symbol, Fcons (where, current_buffer));
06bccf8e
GM
3303
3304 /* If SYMBOL is a per-buffer variable which doesn't have a
3305 buffer-local value here, make the `let' change the global
3306 value by changing the value of SYMBOL in all buffers not
3307 having their own value. This is consistent with what
3308 happens with other buffer-local variables. */
eb700b82
GM
3309 if (NILP (where)
3310 && BUFFER_OBJFWDP (valcontents))
06bccf8e
GM
3311 {
3312 ++specpdl_ptr;
3313 Fset_default (symbol, value);
3314 return;
3315 }
9ab90667
GM
3316 }
3317 else
3318 specpdl_ptr->symbol = symbol;
3319
3320 specpdl_ptr++;
136eb6ed
SM
3321 /* We used to do
3322 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
3323 store_symval_forwarding (symbol, ovalue, value, NULL);
3324 else
3325 but ovalue comes from find_symbol_value which should never return
3326 such an internal value. */
3327 eassert (!(BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue)));
3328 set_internal (symbol, value, 0, 1);
9ab90667 3329 }
db9f0278
JB
3330}
3331
3332void
3333record_unwind_protect (function, arg)
1d159538 3334 Lisp_Object (*function) P_ ((Lisp_Object));
db9f0278
JB
3335 Lisp_Object arg;
3336{
9ba8e10d
CY
3337 eassert (!handling_signal);
3338
db9f0278
JB
3339 if (specpdl_ptr == specpdl + specpdl_size)
3340 grow_specpdl ();
3341 specpdl_ptr->func = function;
3342 specpdl_ptr->symbol = Qnil;
3343 specpdl_ptr->old_value = arg;
3344 specpdl_ptr++;
3345}
3346
3347Lisp_Object
3348unbind_to (count, value)
3349 int count;
3350 Lisp_Object value;
3351{
5a073f50
KS
3352 Lisp_Object quitf = Vquit_flag;
3353 struct gcpro gcpro1, gcpro2;
db9f0278 3354
5a073f50 3355 GCPRO2 (value, quitf);
db9f0278
JB
3356 Vquit_flag = Qnil;
3357
3358 while (specpdl_ptr != specpdl + count)
3359 {
611a8f8c
RS
3360 /* Copy the binding, and decrement specpdl_ptr, before we do
3361 the work to unbind it. We decrement first
3362 so that an error in unbinding won't try to unbind
3363 the same entry again, and we copy the binding first
3364 in case more bindings are made during some of the code we run. */
eb700b82 3365
45f266dc
DL
3366 struct specbinding this_binding;
3367 this_binding = *--specpdl_ptr;
611a8f8c
RS
3368
3369 if (this_binding.func != 0)
3370 (*this_binding.func) (this_binding.old_value);
0967b4b0
GM
3371 /* If the symbol is a list, it is really (SYMBOL WHERE
3372 . CURRENT-BUFFER) where WHERE is either nil, a buffer, or a
3373 frame. If WHERE is a buffer or frame, this indicates we
1b1acc13
PJ
3374 bound a variable that had a buffer-local or frame-local
3375 binding. WHERE nil means that the variable had the default
0967b4b0
GM
3376 value when it was bound. CURRENT-BUFFER is the buffer that
3377 was current when the variable was bound. */
611a8f8c 3378 else if (CONSP (this_binding.symbol))
719177b3 3379 {
eb700b82 3380 Lisp_Object symbol, where;
719177b3 3381
611a8f8c
RS
3382 symbol = XCAR (this_binding.symbol);
3383 where = XCAR (XCDR (this_binding.symbol));
719177b3 3384
eb700b82 3385 if (NILP (where))
611a8f8c 3386 Fset_default (symbol, this_binding.old_value);
eb700b82 3387 else if (BUFFERP (where))
611a8f8c 3388 set_internal (symbol, this_binding.old_value, XBUFFER (where), 1);
177c0ea7 3389 else
611a8f8c 3390 set_internal (symbol, this_binding.old_value, NULL, 1);
719177b3 3391 }
db9f0278 3392 else
9ab90667
GM
3393 {
3394 /* If variable has a trivial value (no forwarding), we can
3395 just set it. No need to check for constant symbols here,
3396 since that was already done by specbind. */
611a8f8c
RS
3397 if (!MISCP (SYMBOL_VALUE (this_binding.symbol)))
3398 SET_SYMBOL_VALUE (this_binding.symbol, this_binding.old_value);
9ab90667 3399 else
611a8f8c 3400 set_internal (this_binding.symbol, this_binding.old_value, 0, 1);
9ab90667 3401 }
db9f0278 3402 }
177c0ea7 3403
5a073f50
KS
3404 if (NILP (Vquit_flag) && !NILP (quitf))
3405 Vquit_flag = quitf;
db9f0278
JB
3406
3407 UNGCPRO;
db9f0278
JB
3408 return value;
3409}
3410\f
db9f0278 3411DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
9dbc9081
PJ
3412 doc: /* Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
3413The debugger is entered when that frame exits, if the flag is non-nil. */)
3414 (level, flag)
db9f0278
JB
3415 Lisp_Object level, flag;
3416{
3417 register struct backtrace *backlist = backtrace_list;
3418 register int i;
3419
b7826503 3420 CHECK_NUMBER (level);
db9f0278
JB
3421
3422 for (i = 0; backlist && i < XINT (level); i++)
3423 {
3424 backlist = backlist->next;
3425 }
3426
3427 if (backlist)
265a9e55 3428 backlist->debug_on_exit = !NILP (flag);
db9f0278
JB
3429
3430 return flag;
3431}
3432
3433DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
9dbc9081
PJ
3434 doc: /* Print a trace of Lisp function calls currently active.
3435Output stream used is value of `standard-output'. */)
3436 ()
db9f0278
JB
3437{
3438 register struct backtrace *backlist = backtrace_list;
3439 register int i;
3440 Lisp_Object tail;
3441 Lisp_Object tem;
3442 extern Lisp_Object Vprint_level;
3443 struct gcpro gcpro1;
3444
a631e24c 3445 XSETFASTINT (Vprint_level, 3);
db9f0278
JB
3446
3447 tail = Qnil;
3448 GCPRO1 (tail);
3449
3450 while (backlist)
3451 {
3452 write_string (backlist->debug_on_exit ? "* " : " ", 2);
3453 if (backlist->nargs == UNEVALLED)
3454 {
3455 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
b6703b02 3456 write_string ("\n", -1);
db9f0278
JB
3457 }
3458 else
3459 {
3460 tem = *backlist->function;
3461 Fprin1 (tem, Qnil); /* This can QUIT */
3462 write_string ("(", -1);
3463 if (backlist->nargs == MANY)
3464 {
3465 for (tail = *backlist->args, i = 0;
265a9e55 3466 !NILP (tail);
db9f0278
JB
3467 tail = Fcdr (tail), i++)
3468 {
3469 if (i) write_string (" ", -1);
3470 Fprin1 (Fcar (tail), Qnil);
3471 }
3472 }
3473 else
3474 {
3475 for (i = 0; i < backlist->nargs; i++)
3476 {
3477 if (i) write_string (" ", -1);
3478 Fprin1 (backlist->args[i], Qnil);
3479 }
3480 }
b6703b02 3481 write_string (")\n", -1);
db9f0278 3482 }
db9f0278
JB
3483 backlist = backlist->next;
3484 }
3485
3486 Vprint_level = Qnil;
3487 UNGCPRO;
3488 return Qnil;
3489}
3490
17401c97 3491DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, NULL,
9dbc9081
PJ
3492 doc: /* Return the function and arguments NFRAMES up from current execution point.
3493If that frame has not evaluated the arguments yet (or is a special form),
3494the value is (nil FUNCTION ARG-FORMS...).
3495If that frame has evaluated its arguments and called its function already,
3496the value is (t FUNCTION ARG-VALUES...).
3497A &rest arg is represented as the tail of the list ARG-VALUES.
3498FUNCTION is whatever was supplied as car of evaluated list,
3499or a lambda expression for macro calls.
3500If NFRAMES is more than the number of frames, the value is nil. */)
3501 (nframes)
db9f0278
JB
3502 Lisp_Object nframes;
3503{
3504 register struct backtrace *backlist = backtrace_list;
3505 register int i;
3506 Lisp_Object tem;
3507
b7826503 3508 CHECK_NATNUM (nframes);
db9f0278
JB
3509
3510 /* Find the frame requested. */
b6703b02 3511 for (i = 0; backlist && i < XFASTINT (nframes); i++)
db9f0278
JB
3512 backlist = backlist->next;
3513
3514 if (!backlist)
3515 return Qnil;
3516 if (backlist->nargs == UNEVALLED)
3517 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
3518 else
3519 {
3520 if (backlist->nargs == MANY)
3521 tem = *backlist->args;
3522 else
3523 tem = Flist (backlist->nargs, backlist->args);
3524
3525 return Fcons (Qt, Fcons (*backlist->function, tem));
3526 }
3527}
a2ff3819 3528
db9f0278 3529\f
4ce0541e
SM
3530void
3531mark_backtrace ()
3532{
3533 register struct backtrace *backlist;
3534 register int i;
3535
3536 for (backlist = backtrace_list; backlist; backlist = backlist->next)
3537 {
3538 mark_object (*backlist->function);
3539
3540 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
3541 i = 0;
3542 else
3543 i = backlist->nargs - 1;
3544 for (; i >= 0; i--)
3545 mark_object (backlist->args[i]);
3546 }
3547}
3548
dfcf069d 3549void
db9f0278
JB
3550syms_of_eval ()
3551{
3552 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
82fc29a1 3553 doc: /* *Limit on number of Lisp variable bindings and `unwind-protect's.
9f5903bb 3554If Lisp code tries to increase the total number past this amount,
2520dc0c
RS
3555an error is signaled.
3556You can safely use a value considerably larger than the default value,
3557if that proves inconveniently small. However, if you increase it too far,
3558Emacs could run out of memory trying to make the stack bigger. */);
db9f0278
JB
3559
3560 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
9dbc9081 3561 doc: /* *Limit on depth in `eval', `apply' and `funcall' before error.
2520dc0c
RS
3562
3563This limit serves to catch infinite recursions for you before they cause
9dbc9081
PJ
3564actual stack overflow in C, which would be fatal for Emacs.
3565You can safely make it considerably larger than its default value,
2520dc0c
RS
3566if that proves inconveniently small. However, if you increase it too far,
3567Emacs could overflow the real C stack, and crash. */);
db9f0278
JB
3568
3569 DEFVAR_LISP ("quit-flag", &Vquit_flag,
9dbc9081 3570 doc: /* Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
42ed718e
RS
3571If the value is t, that means do an ordinary quit.
3572If the value equals `throw-on-input', that means quit by throwing
3573to the tag specified in `throw-on-input'; it's for handling `while-no-input'.
3574Typing C-g sets `quit-flag' to t, regardless of `inhibit-quit',
3575but `inhibit-quit' non-nil prevents anything from taking notice of that. */);
db9f0278
JB
3576 Vquit_flag = Qnil;
3577
3578 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
9dbc9081
PJ
3579 doc: /* Non-nil inhibits C-g quitting from happening immediately.
3580Note that `quit-flag' will still be set by typing C-g,
3581so a quit will be signaled as soon as `inhibit-quit' is nil.
3582To prevent this happening, set `quit-flag' to nil
3583before making `inhibit-quit' nil. */);
db9f0278
JB
3584 Vinhibit_quit = Qnil;
3585
ad236261
JB
3586 Qinhibit_quit = intern ("inhibit-quit");
3587 staticpro (&Qinhibit_quit);
3588
db9f0278
JB
3589 Qautoload = intern ("autoload");
3590 staticpro (&Qautoload);
3591
3592 Qdebug_on_error = intern ("debug-on-error");
3593 staticpro (&Qdebug_on_error);
3594
3595 Qmacro = intern ("macro");
3596 staticpro (&Qmacro);
3597
d6edd563
GM
3598 Qdeclare = intern ("declare");
3599 staticpro (&Qdeclare);
177c0ea7 3600
db9f0278
JB
3601 /* Note that the process handling also uses Qexit, but we don't want
3602 to staticpro it twice, so we just do it here. */
3603 Qexit = intern ("exit");
3604 staticpro (&Qexit);
3605
3606 Qinteractive = intern ("interactive");
3607 staticpro (&Qinteractive);
3608
3609 Qcommandp = intern ("commandp");
3610 staticpro (&Qcommandp);
3611
3612 Qdefun = intern ("defun");
3613 staticpro (&Qdefun);
3614
3615 Qand_rest = intern ("&rest");
3616 staticpro (&Qand_rest);
3617
3618 Qand_optional = intern ("&optional");
3619 staticpro (&Qand_optional);
3620
f01cbfdd
RS
3621 Qdebug = intern ("debug");
3622 staticpro (&Qdebug);
3623
128c0f66 3624 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
704788b3
RS
3625 doc: /* *Non-nil means errors display a backtrace buffer.
3626More precisely, this happens for any error that is handled
3627by the editor command loop.
9dbc9081
PJ
3628If the value is a list, an error only means to display a backtrace
3629if one of its condition symbols appears in the list. */);
128c0f66 3630 Vstack_trace_on_error = Qnil;
db9f0278 3631
128c0f66 3632 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
9dbc9081
PJ
3633 doc: /* *Non-nil means enter debugger if an error is signaled.
3634Does not apply to errors handled by `condition-case' or those
3635matched by `debug-ignored-errors'.
3636If the value is a list, an error only means to enter the debugger
3637if one of its condition symbols appears in the list.
3638When you evaluate an expression interactively, this variable
3639is temporarily non-nil if `eval-expression-debug-on-error' is non-nil.
fbbdcf2f
CY
3640The command `toggle-debug-on-error' toggles this.
3641See also the variable `debug-on-quit'. */);
128c0f66 3642 Vdebug_on_error = Qnil;
db9f0278 3643
fc950e09 3644 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
9dbc9081
PJ
3645 doc: /* *List of errors for which the debugger should not be called.
3646Each element may be a condition-name or a regexp that matches error messages.
3647If any element applies to a given error, that error skips the debugger
3648and just returns to top level.
3649This overrides the variable `debug-on-error'.
3650It does not apply to errors handled by `condition-case'. */);
fc950e09
KH
3651 Vdebug_ignored_errors = Qnil;
3652
db9f0278 3653 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
82fc29a1
JB
3654 doc: /* *Non-nil means enter debugger if quit is signaled (C-g, for example).
3655Does not apply if quit is handled by a `condition-case'. */);
db9f0278
JB
3656 debug_on_quit = 0;
3657
3658 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
9dbc9081 3659 doc: /* Non-nil means enter debugger before next `eval', `apply' or `funcall'. */);
db9f0278 3660
556d7314 3661 DEFVAR_BOOL ("debugger-may-continue", &debugger_may_continue,
9dbc9081
PJ
3662 doc: /* Non-nil means debugger may continue execution.
3663This is nil when the debugger is called under circumstances where it
3664might not be safe to continue. */);
dac204bc 3665 debugger_may_continue = 1;
556d7314 3666
db9f0278 3667 DEFVAR_LISP ("debugger", &Vdebugger,
9dbc9081
PJ
3668 doc: /* Function to call to invoke debugger.
3669If due to frame exit, args are `exit' and the value being returned;
3670 this function's value will be returned instead of that.
3671If due to error, args are `error' and a list of the args to `signal'.
3672If due to `apply' or `funcall' entry, one arg, `lambda'.
3673If due to `eval' entry, one arg, t. */);
db9f0278
JB
3674 Vdebugger = Qnil;
3675
61ede770 3676 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
9dbc9081
PJ
3677 doc: /* If non-nil, this is a function for `signal' to call.
3678It receives the same arguments that `signal' was given.
3679The Edebug package uses this to regain control. */);
61ede770
RS
3680 Vsignal_hook_function = Qnil;
3681
57a6e758 3682 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
9dbc9081
PJ
3683 doc: /* *Non-nil means call the debugger regardless of condition handlers.
3684Note that `debug-on-error', `debug-on-quit' and friends
3685still determine whether to handle the particular condition. */);
57a6e758 3686 Vdebug_on_signal = Qnil;
61ede770 3687
d6edd563
GM
3688 DEFVAR_LISP ("macro-declaration-function", &Vmacro_declaration_function,
3689 doc: /* Function to process declarations in a macro definition.
3690The function will be called with two args MACRO and DECL.
3691MACRO is the name of the macro being defined.
3692DECL is a list `(declare ...)' containing the declarations.
3693The value the function returns is not used. */);
3694 Vmacro_declaration_function = Qnil;
3695
6e6e9f08
RS
3696 Vrun_hooks = intern ("run-hooks");
3697 staticpro (&Vrun_hooks);
db9f0278
JB
3698
3699 staticpro (&Vautoload_queue);
3700 Vautoload_queue = Qnil;
a2ff3819
GM
3701 staticpro (&Vsignaling_function);
3702 Vsignaling_function = Qnil;
db9f0278
JB
3703
3704 defsubr (&Sor);
3705 defsubr (&Sand);
3706 defsubr (&Sif);
3707 defsubr (&Scond);
3708 defsubr (&Sprogn);
3709 defsubr (&Sprog1);
3710 defsubr (&Sprog2);
3711 defsubr (&Ssetq);
3712 defsubr (&Squote);
3713 defsubr (&Sfunction);
3714 defsubr (&Sdefun);
3715 defsubr (&Sdefmacro);
3716 defsubr (&Sdefvar);
19cebf5a 3717 defsubr (&Sdefvaralias);
db9f0278
JB
3718 defsubr (&Sdefconst);
3719 defsubr (&Suser_variable_p);
3720 defsubr (&Slet);
3721 defsubr (&SletX);
3722 defsubr (&Swhile);
3723 defsubr (&Smacroexpand);
3724 defsubr (&Scatch);
3725 defsubr (&Sthrow);
3726 defsubr (&Sunwind_protect);
3727 defsubr (&Scondition_case);
3728 defsubr (&Ssignal);
3729 defsubr (&Sinteractive_p);
4b664e76 3730 defsubr (&Scalled_interactively_p);
db9f0278
JB
3731 defsubr (&Scommandp);
3732 defsubr (&Sautoload);
3733 defsubr (&Seval);
3734 defsubr (&Sapply);
3735 defsubr (&Sfuncall);
ff936e53
SM
3736 defsubr (&Srun_hooks);
3737 defsubr (&Srun_hook_with_args);
3738 defsubr (&Srun_hook_with_args_until_success);
3739 defsubr (&Srun_hook_with_args_until_failure);
661c7d6e 3740 defsubr (&Sfetch_bytecode);
db9f0278
JB
3741 defsubr (&Sbacktrace_debug);
3742 defsubr (&Sbacktrace);
3743 defsubr (&Sbacktrace_frame);
3744}
ab5796a9
MB
3745
3746/* arch-tag: 014a07aa-33ab-4a8f-a3d2-ee8a4a9ff7fb
3747 (do not change this comment) */