Add 2011 to FSF/AIST copyright years.
[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,
5df4f04c 3 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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;
3a7a9129 1031 USE_SAFE_ALLOCA;
db9f0278
JB
1032
1033 varlist = Fcar (args);
1034
1035 /* Make space to hold the values to give the bound variables */
1036 elt = Flength (varlist);
b72e0717 1037 SAFE_ALLOCA_LISP (temps, XFASTINT (elt));
db9f0278
JB
1038
1039 /* Compute the values and store them in `temps' */
1040
1041 GCPRO2 (args, *temps);
1042 gcpro2.nvars = 0;
1043
67ee9f6e 1044 for (argnum = 0; CONSP (varlist); varlist = XCDR (varlist))
db9f0278
JB
1045 {
1046 QUIT;
67ee9f6e 1047 elt = XCAR (varlist);
90165123 1048 if (SYMBOLP (elt))
db9f0278 1049 temps [argnum++] = Qnil;
08564963 1050 else if (! NILP (Fcdr (Fcdr (elt))))
734d55a2 1051 signal_error ("`let' bindings can have only one value-form", elt);
db9f0278
JB
1052 else
1053 temps [argnum++] = Feval (Fcar (Fcdr (elt)));
1054 gcpro2.nvars = argnum;
1055 }
1056 UNGCPRO;
1057
1058 varlist = Fcar (args);
67ee9f6e 1059 for (argnum = 0; CONSP (varlist); varlist = XCDR (varlist))
db9f0278 1060 {
67ee9f6e 1061 elt = XCAR (varlist);
db9f0278 1062 tem = temps[argnum++];
90165123 1063 if (SYMBOLP (elt))
db9f0278
JB
1064 specbind (elt, tem);
1065 else
1066 specbind (Fcar (elt), tem);
1067 }
1068
1069 elt = Fprogn (Fcdr (args));
3a7a9129 1070 SAFE_FREE ();
db9f0278
JB
1071 return unbind_to (count, elt);
1072}
1073
1074DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0,
9dbc9081
PJ
1075 doc: /* If TEST yields non-nil, eval BODY... and repeat.
1076The order of execution is thus TEST, BODY, TEST, BODY and so on
1077until TEST returns nil.
7a25dc6d 1078usage: (while TEST BODY...) */)
9dbc9081 1079 (args)
db9f0278
JB
1080 Lisp_Object args;
1081{
2b9bde76 1082 Lisp_Object test, body;
db9f0278
JB
1083 struct gcpro gcpro1, gcpro2;
1084
1085 GCPRO2 (test, body);
1086
1087 test = Fcar (args);
1088 body = Fcdr (args);
2b9bde76 1089 while (!NILP (Feval (test)))
db9f0278
JB
1090 {
1091 QUIT;
1092 Fprogn (body);
1093 }
1094
1095 UNGCPRO;
1096 return Qnil;
1097}
1098
1099DEFUN ("macroexpand", Fmacroexpand, Smacroexpand, 1, 2, 0,
9dbc9081
PJ
1100 doc: /* Return result of expanding macros at top level of FORM.
1101If FORM is not a macro call, it is returned unchanged.
1102Otherwise, the macro is expanded and the expansion is considered
1103in place of FORM. When a non-macro-call results, it is returned.
1104
1105The second optional arg ENVIRONMENT specifies an environment of macro
1106definitions to shadow the loaded ones for use in file byte-compilation. */)
1107 (form, environment)
2e267a2e 1108 Lisp_Object form;
79e8bfbf 1109 Lisp_Object environment;
db9f0278 1110{
23d6b5a6 1111 /* With cleanups from Hallvard Furuseth. */
db9f0278
JB
1112 register Lisp_Object expander, sym, def, tem;
1113
1114 while (1)
1115 {
1116 /* Come back here each time we expand a macro call,
1117 in case it expands into another macro call. */
90165123 1118 if (!CONSP (form))
db9f0278 1119 break;
23d6b5a6 1120 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
03699b14 1121 def = sym = XCAR (form);
23d6b5a6 1122 tem = Qnil;
db9f0278
JB
1123 /* Trace symbols aliases to other symbols
1124 until we get a symbol that is not an alias. */
90165123 1125 while (SYMBOLP (def))
db9f0278
JB
1126 {
1127 QUIT;
23d6b5a6 1128 sym = def;
79e8bfbf 1129 tem = Fassq (sym, environment);
265a9e55 1130 if (NILP (tem))
db9f0278
JB
1131 {
1132 def = XSYMBOL (sym)->function;
23d6b5a6
JB
1133 if (!EQ (def, Qunbound))
1134 continue;
db9f0278 1135 }
23d6b5a6 1136 break;
db9f0278 1137 }
79e8bfbf 1138 /* Right now TEM is the result from SYM in ENVIRONMENT,
db9f0278 1139 and if TEM is nil then DEF is SYM's function definition. */
265a9e55 1140 if (NILP (tem))
db9f0278 1141 {
79e8bfbf 1142 /* SYM is not mentioned in ENVIRONMENT.
db9f0278 1143 Look at its function definition. */
90165123 1144 if (EQ (def, Qunbound) || !CONSP (def))
db9f0278
JB
1145 /* Not defined or definition not suitable */
1146 break;
03699b14 1147 if (EQ (XCAR (def), Qautoload))
db9f0278
JB
1148 {
1149 /* Autoloading function: will it be a macro when loaded? */
ee9ee63c 1150 tem = Fnth (make_number (4), def);
47ccd8b6 1151 if (EQ (tem, Qt) || EQ (tem, Qmacro))
ee9ee63c
JB
1152 /* Yes, load it and try again. */
1153 {
ca20916b
RS
1154 struct gcpro gcpro1;
1155 GCPRO1 (form);
ee9ee63c 1156 do_autoload (def, sym);
ca20916b 1157 UNGCPRO;
ee9ee63c
JB
1158 continue;
1159 }
1160 else
db9f0278 1161 break;
db9f0278 1162 }
03699b14 1163 else if (!EQ (XCAR (def), Qmacro))
db9f0278 1164 break;
03699b14 1165 else expander = XCDR (def);
db9f0278
JB
1166 }
1167 else
1168 {
03699b14 1169 expander = XCDR (tem);
265a9e55 1170 if (NILP (expander))
db9f0278
JB
1171 break;
1172 }
03699b14 1173 form = apply1 (expander, XCDR (form));
db9f0278
JB
1174 }
1175 return form;
1176}
1177\f
1178DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
9dbc9081
PJ
1179 doc: /* Eval BODY allowing nonlocal exits using `throw'.
1180TAG is evalled to get the tag to use; it must not be nil.
1181
1182Then the BODY is executed.
1d632ccf 1183Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
9dbc9081
PJ
1184If no throw happens, `catch' returns the value of the last BODY form.
1185If a throw happens, it specifies the value to return from `catch'.
7a25dc6d 1186usage: (catch TAG BODY...) */)
9dbc9081 1187 (args)
db9f0278
JB
1188 Lisp_Object args;
1189{
1190 register Lisp_Object tag;
1191 struct gcpro gcpro1;
1192
1193 GCPRO1 (args);
1194 tag = Feval (Fcar (args));
1195 UNGCPRO;
1196 return internal_catch (tag, Fprogn, Fcdr (args));
1197}
1198
1199/* Set up a catch, then call C function FUNC on argument ARG.
1200 FUNC should return a Lisp_Object.
1201 This is how catches are done from within C code. */
1202
1203Lisp_Object
1204internal_catch (tag, func, arg)
1205 Lisp_Object tag;
1206 Lisp_Object (*func) ();
1207 Lisp_Object arg;
1208{
1209 /* This structure is made part of the chain `catchlist'. */
1210 struct catchtag c;
1211
1212 /* Fill in the components of c, and put it on the list. */
1213 c.next = catchlist;
1214 c.tag = tag;
1215 c.val = Qnil;
1216 c.backlist = backtrace_list;
1217 c.handlerlist = handlerlist;
1218 c.lisp_eval_depth = lisp_eval_depth;
aed13378 1219 c.pdlcount = SPECPDL_INDEX ();
db9f0278 1220 c.poll_suppress_count = poll_suppress_count;
2659a09f 1221 c.interrupt_input_blocked = interrupt_input_blocked;
db9f0278 1222 c.gcpro = gcprolist;
bcf28080 1223 c.byte_stack = byte_stack_list;
db9f0278
JB
1224 catchlist = &c;
1225
1226 /* Call FUNC. */
1227 if (! _setjmp (c.jmp))
1228 c.val = (*func) (arg);
1229
1230 /* Throw works by a longjmp that comes right here. */
1231 catchlist = c.next;
1232 return c.val;
1233}
1234
ba410f40
JB
1235/* Unwind the specbind, catch, and handler stacks back to CATCH, and
1236 jump to that CATCH, returning VALUE as the value of that catch.
db9f0278 1237
ba410f40
JB
1238 This is the guts Fthrow and Fsignal; they differ only in the way
1239 they choose the catch tag to throw to. A catch tag for a
1240 condition-case form has a TAG of Qnil.
db9f0278 1241
ba410f40
JB
1242 Before each catch is discarded, unbind all special bindings and
1243 execute all unwind-protect clauses made above that catch. Unwind
1244 the handler stack as we go, so that the proper handlers are in
1245 effect for each unwind-protect clause we run. At the end, restore
1246 some static info saved in CATCH, and longjmp to the location
1247 specified in the
1248
1249 This is used for correct unwinding in Fthrow and Fsignal. */
db9f0278
JB
1250
1251static void
ba410f40 1252unwind_to_catch (catch, value)
db9f0278 1253 struct catchtag *catch;
ba410f40 1254 Lisp_Object value;
db9f0278
JB
1255{
1256 register int last_time;
1257
ba410f40
JB
1258 /* Save the value in the tag. */
1259 catch->val = value;
1260
0b31741c 1261 /* Restore certain special C variables. */
1cdc3155 1262 set_poll_suppress_count (catch->poll_suppress_count);
c1788fbc 1263 UNBLOCK_INPUT_TO (catch->interrupt_input_blocked);
0b31741c 1264 handling_signal = 0;
69bbd6bd 1265 immediate_quit = 0;
82da7701 1266
db9f0278
JB
1267 do
1268 {
1269 last_time = catchlist == catch;
82da7701
JB
1270
1271 /* Unwind the specpdl stack, and then restore the proper set of
1272 handlers. */
db9f0278
JB
1273 unbind_to (catchlist->pdlcount, Qnil);
1274 handlerlist = catchlist->handlerlist;
1275 catchlist = catchlist->next;
1276 }
1277 while (! last_time);
1278
a2a103bb 1279#if HAVE_X_WINDOWS
88019a63
RS
1280 /* If x_catch_errors was done, turn it off now.
1281 (First we give unbind_to a chance to do that.) */
e6aee454
KL
1282#if 0 /* This would disable x_catch_errors after x_connection_closed.
1283 * The catch must remain in effect during that delicate
1284 * state. --lorentey */
88019a63 1285 x_fully_uncatch_errors ();
e6aee454 1286#endif
a2a103bb 1287#endif
88019a63 1288
bcf28080 1289 byte_stack_list = catch->byte_stack;
db9f0278 1290 gcprolist = catch->gcpro;
15934ffa
RS
1291#ifdef DEBUG_GCPRO
1292 if (gcprolist != 0)
1293 gcpro_level = gcprolist->level + 1;
1294 else
1295 gcpro_level = 0;
1296#endif
db9f0278
JB
1297 backtrace_list = catch->backlist;
1298 lisp_eval_depth = catch->lisp_eval_depth;
177c0ea7 1299
ba410f40 1300 _longjmp (catch->jmp, 1);
db9f0278
JB
1301}
1302
1303DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
9dbc9081
PJ
1304 doc: /* Throw to the catch for TAG and return VALUE from it.
1305Both TAG and VALUE are evalled. */)
1306 (tag, value)
79e8bfbf 1307 register Lisp_Object tag, value;
db9f0278
JB
1308{
1309 register struct catchtag *c;
1310
8788120f
KS
1311 if (!NILP (tag))
1312 for (c = catchlist; c; c = c->next)
1313 {
1314 if (EQ (c->tag, tag))
1315 unwind_to_catch (c, value);
1316 }
734d55a2 1317 xsignal2 (Qno_catch, tag, value);
db9f0278
JB
1318}
1319
1320
1321DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
9dbc9081
PJ
1322 doc: /* Do BODYFORM, protecting with UNWINDFORMS.
1323If BODYFORM completes normally, its value is returned
1324after executing the UNWINDFORMS.
1325If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.
7a25dc6d 1326usage: (unwind-protect BODYFORM UNWINDFORMS...) */)
9dbc9081 1327 (args)
db9f0278
JB
1328 Lisp_Object args;
1329{
1330 Lisp_Object val;
aed13378 1331 int count = SPECPDL_INDEX ();
db9f0278 1332
04b28167 1333 record_unwind_protect (Fprogn, Fcdr (args));
db9f0278 1334 val = Feval (Fcar (args));
177c0ea7 1335 return unbind_to (count, val);
db9f0278
JB
1336}
1337\f
1338/* Chain of condition handlers currently in effect.
1339 The elements of this chain are contained in the stack frames
1340 of Fcondition_case and internal_condition_case.
1341 When an error is signaled (by calling Fsignal, below),
1342 this chain is searched for an element that applies. */
1343
1344struct handler *handlerlist;
1345
1346DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
9dbc9081 1347 doc: /* Regain control when an error is signaled.
1b1acc13 1348Executes BODYFORM and returns its value if no error happens.
9dbc9081
PJ
1349Each element of HANDLERS looks like (CONDITION-NAME BODY...)
1350where the BODY is made of Lisp expressions.
1351
1352A handler is applicable to an error
1353if CONDITION-NAME is one of the error's condition names.
1354If an error happens, the first applicable handler is run.
1355
1356The car of a handler may be a list of condition names
c997bb25 1357instead of a single condition name. Then it handles all of them.
9dbc9081 1358
c997bb25
RS
1359When a handler handles an error, control returns to the `condition-case'
1360and it executes the handler's BODY...
d0acbbaf 1361with VAR bound to (ERROR-SYMBOL . SIGNAL-DATA) from the error.
c997bb25
RS
1362(If VAR is nil, the handler can't access that information.)
1363Then the value of the last BODY form is returned from the `condition-case'
1364expression.
9dbc9081 1365
9dbc9081 1366See also the function `signal' for more info.
2b47b74d 1367usage: (condition-case VAR BODYFORM &rest HANDLERS) */)
9dbc9081 1368 (args)
db9f0278
JB
1369 Lisp_Object args;
1370{
17401c97
GM
1371 register Lisp_Object bodyform, handlers;
1372 volatile Lisp_Object var;
db9f0278 1373
82da7701
JB
1374 var = Fcar (args);
1375 bodyform = Fcar (Fcdr (args));
1376 handlers = Fcdr (Fcdr (args));
ee830945
RS
1377
1378 return internal_lisp_condition_case (var, bodyform, handlers);
1379}
1380
1381/* Like Fcondition_case, but the args are separate
1382 rather than passed in a list. Used by Fbyte_code. */
1383
1384Lisp_Object
1385internal_lisp_condition_case (var, bodyform, handlers)
1386 volatile Lisp_Object var;
1387 Lisp_Object bodyform, handlers;
1388{
1389 Lisp_Object val;
1390 struct catchtag c;
1391 struct handler h;
1392
b7826503 1393 CHECK_SYMBOL (var);
82da7701 1394
2b47b74d 1395 for (val = handlers; CONSP (val); val = XCDR (val))
82da7701
JB
1396 {
1397 Lisp_Object tem;
2b47b74d 1398 tem = XCAR (val);
5f96776a
RS
1399 if (! (NILP (tem)
1400 || (CONSP (tem)
03699b14
KR
1401 && (SYMBOLP (XCAR (tem))
1402 || CONSP (XCAR (tem))))))
82da7701
JB
1403 error ("Invalid condition handler", tem);
1404 }
db9f0278
JB
1405
1406 c.tag = Qnil;
1407 c.val = Qnil;
1408 c.backlist = backtrace_list;
1409 c.handlerlist = handlerlist;
1410 c.lisp_eval_depth = lisp_eval_depth;
aed13378 1411 c.pdlcount = SPECPDL_INDEX ();
db9f0278 1412 c.poll_suppress_count = poll_suppress_count;
2659a09f 1413 c.interrupt_input_blocked = interrupt_input_blocked;
db9f0278 1414 c.gcpro = gcprolist;
bcf28080 1415 c.byte_stack = byte_stack_list;
db9f0278
JB
1416 if (_setjmp (c.jmp))
1417 {
265a9e55 1418 if (!NILP (h.var))
9d58218c
RS
1419 specbind (h.var, c.val);
1420 val = Fprogn (Fcdr (h.chosen_clause));
82da7701
JB
1421
1422 /* Note that this just undoes the binding of h.var; whoever
1423 longjumped to us unwound the stack to c.pdlcount before
1424 throwing. */
db9f0278
JB
1425 unbind_to (c.pdlcount, Qnil);
1426 return val;
1427 }
1428 c.next = catchlist;
1429 catchlist = &c;
177c0ea7 1430
82da7701
JB
1431 h.var = var;
1432 h.handler = handlers;
db9f0278 1433 h.next = handlerlist;
db9f0278
JB
1434 h.tag = &c;
1435 handlerlist = &h;
1436
82da7701 1437 val = Feval (bodyform);
db9f0278
JB
1438 catchlist = c.next;
1439 handlerlist = h.next;
1440 return val;
1441}
1442
f029ca5f
RS
1443/* Call the function BFUN with no arguments, catching errors within it
1444 according to HANDLERS. If there is an error, call HFUN with
1445 one argument which is the data that describes the error:
1446 (SIGNALNAME . DATA)
1447
1448 HANDLERS can be a list of conditions to catch.
1449 If HANDLERS is Qt, catch all errors.
1450 If HANDLERS is Qerror, catch all errors
1451 but allow the debugger to run if that is enabled. */
1452
db9f0278
JB
1453Lisp_Object
1454internal_condition_case (bfun, handlers, hfun)
1455 Lisp_Object (*bfun) ();
1456 Lisp_Object handlers;
1457 Lisp_Object (*hfun) ();
1458{
1459 Lisp_Object val;
1460 struct catchtag c;
1461 struct handler h;
1462
88019a63
RS
1463 /* Since Fsignal will close off all calls to x_catch_errors,
1464 we will get the wrong results if some are not closed now. */
a2a103bb 1465#if HAVE_X_WINDOWS
88019a63 1466 if (x_catching_errors ())
01591d17 1467 abort ();
a2a103bb 1468#endif
01591d17 1469
db9f0278
JB
1470 c.tag = Qnil;
1471 c.val = Qnil;
1472 c.backlist = backtrace_list;
1473 c.handlerlist = handlerlist;
1474 c.lisp_eval_depth = lisp_eval_depth;
aed13378 1475 c.pdlcount = SPECPDL_INDEX ();
db9f0278 1476 c.poll_suppress_count = poll_suppress_count;
2659a09f 1477 c.interrupt_input_blocked = interrupt_input_blocked;
db9f0278 1478 c.gcpro = gcprolist;
bcf28080 1479 c.byte_stack = byte_stack_list;
db9f0278
JB
1480 if (_setjmp (c.jmp))
1481 {
9d58218c 1482 return (*hfun) (c.val);
db9f0278
JB
1483 }
1484 c.next = catchlist;
1485 catchlist = &c;
1486 h.handler = handlers;
1487 h.var = Qnil;
db9f0278
JB
1488 h.next = handlerlist;
1489 h.tag = &c;
1490 handlerlist = &h;
1491
1492 val = (*bfun) ();
1493 catchlist = c.next;
1494 handlerlist = h.next;
1495 return val;
1496}
1497
2659a09f 1498/* Like internal_condition_case but call BFUN with ARG as its argument. */
f029ca5f 1499
d227775c
RS
1500Lisp_Object
1501internal_condition_case_1 (bfun, arg, handlers, hfun)
1502 Lisp_Object (*bfun) ();
1503 Lisp_Object arg;
1504 Lisp_Object handlers;
1505 Lisp_Object (*hfun) ();
1506{
1507 Lisp_Object val;
1508 struct catchtag c;
1509 struct handler h;
1510
88019a63
RS
1511 /* Since Fsignal will close off all calls to x_catch_errors,
1512 we will get the wrong results if some are not closed now. */
a2a103bb 1513#if HAVE_X_WINDOWS
88019a63
RS
1514 if (x_catching_errors ())
1515 abort ();
a2a103bb 1516#endif
88019a63 1517
d227775c
RS
1518 c.tag = Qnil;
1519 c.val = Qnil;
1520 c.backlist = backtrace_list;
1521 c.handlerlist = handlerlist;
1522 c.lisp_eval_depth = lisp_eval_depth;
aed13378 1523 c.pdlcount = SPECPDL_INDEX ();
d227775c 1524 c.poll_suppress_count = poll_suppress_count;
2659a09f 1525 c.interrupt_input_blocked = interrupt_input_blocked;
d227775c 1526 c.gcpro = gcprolist;
bcf28080 1527 c.byte_stack = byte_stack_list;
d227775c
RS
1528 if (_setjmp (c.jmp))
1529 {
9d58218c 1530 return (*hfun) (c.val);
d227775c
RS
1531 }
1532 c.next = catchlist;
1533 catchlist = &c;
1534 h.handler = handlers;
1535 h.var = Qnil;
1536 h.next = handlerlist;
1537 h.tag = &c;
1538 handlerlist = &h;
1539
1540 val = (*bfun) (arg);
1541 catchlist = c.next;
1542 handlerlist = h.next;
1543 return val;
1544}
10b29d41
GM
1545
1546
2659a09f 1547/* Like internal_condition_case but call BFUN with NARGS as first,
10b29d41
GM
1548 and ARGS as second argument. */
1549
1550Lisp_Object
1551internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
1552 Lisp_Object (*bfun) ();
1553 int nargs;
1554 Lisp_Object *args;
1555 Lisp_Object handlers;
1556 Lisp_Object (*hfun) ();
1557{
1558 Lisp_Object val;
1559 struct catchtag c;
1560 struct handler h;
1561
88019a63
RS
1562 /* Since Fsignal will close off all calls to x_catch_errors,
1563 we will get the wrong results if some are not closed now. */
a2a103bb 1564#if HAVE_X_WINDOWS
88019a63
RS
1565 if (x_catching_errors ())
1566 abort ();
a2a103bb 1567#endif
88019a63 1568
10b29d41
GM
1569 c.tag = Qnil;
1570 c.val = Qnil;
1571 c.backlist = backtrace_list;
1572 c.handlerlist = handlerlist;
1573 c.lisp_eval_depth = lisp_eval_depth;
aed13378 1574 c.pdlcount = SPECPDL_INDEX ();
10b29d41 1575 c.poll_suppress_count = poll_suppress_count;
2659a09f 1576 c.interrupt_input_blocked = interrupt_input_blocked;
10b29d41
GM
1577 c.gcpro = gcprolist;
1578 c.byte_stack = byte_stack_list;
1579 if (_setjmp (c.jmp))
1580 {
1581 return (*hfun) (c.val);
1582 }
1583 c.next = catchlist;
1584 catchlist = &c;
1585 h.handler = handlers;
1586 h.var = Qnil;
1587 h.next = handlerlist;
1588 h.tag = &c;
1589 handlerlist = &h;
1590
1591 val = (*bfun) (nargs, args);
1592 catchlist = c.next;
1593 handlerlist = h.next;
1594 return val;
1595}
1596
d227775c 1597\f
2901f1d1 1598static Lisp_Object find_handler_clause P_ ((Lisp_Object, Lisp_Object,
f01cbfdd 1599 Lisp_Object, Lisp_Object));
db9f0278
JB
1600
1601DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
9dbc9081
PJ
1602 doc: /* Signal an error. Args are ERROR-SYMBOL and associated DATA.
1603This function does not return.
1604
1605An error symbol is a symbol with an `error-conditions' property
1606that is a list of condition names.
1607A handler for any of those names will get to handle this signal.
1608The symbol `error' should normally be one of them.
1609
1610DATA should be a list. Its elements are printed as part of the error message.
3297ec22
LT
1611See Info anchor `(elisp)Definition of signal' for some details on how this
1612error message is constructed.
9dbc9081
PJ
1613If the signal is handled, DATA is made available to the handler.
1614See also the function `condition-case'. */)
1615 (error_symbol, data)
4200e719 1616 Lisp_Object error_symbol, data;
db9f0278 1617{
bfa8ca43 1618 /* When memory is full, ERROR-SYMBOL is nil,
26631f2b
RS
1619 and DATA is (REAL-ERROR-SYMBOL . REAL-DATA).
1620 That is a special case--don't do this in other situations. */
db9f0278
JB
1621 register struct handler *allhandlers = handlerlist;
1622 Lisp_Object conditions;
1623 extern int gc_in_progress;
1624 extern int waiting_for_input;
c11d3d17 1625 Lisp_Object string;
1ea9dec4 1626 Lisp_Object real_error_symbol;
a2ff3819 1627 struct backtrace *bp;
db9f0278 1628
346598f1 1629 immediate_quit = handling_signal = 0;
d063129f 1630 abort_on_gc = 0;
db9f0278
JB
1631 if (gc_in_progress || waiting_for_input)
1632 abort ();
1633
1ea9dec4
RS
1634 if (NILP (error_symbol))
1635 real_error_symbol = Fcar (data);
1636 else
1637 real_error_symbol = error_symbol;
1638
26631f2b
RS
1639#if 0 /* rms: I don't know why this was here,
1640 but it is surely wrong for an error that is handled. */
d148e14d 1641#ifdef HAVE_WINDOW_SYSTEM
df6c90d8
GM
1642 if (display_hourglass_p)
1643 cancel_hourglass ();
48f8dfa3 1644#endif
177c0ea7 1645#endif
48f8dfa3 1646
61ede770 1647 /* This hook is used by edebug. */
26631f2b
RS
1648 if (! NILP (Vsignal_hook_function)
1649 && ! NILP (error_symbol))
9f5903bb
RS
1650 {
1651 /* Edebug takes care of restoring these variables when it exits. */
1652 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
1653 max_lisp_eval_depth = lisp_eval_depth + 20;
1654
1655 if (SPECPDL_INDEX () + 40 > max_specpdl_size)
1656 max_specpdl_size = SPECPDL_INDEX () + 40;
1657
1658 call2 (Vsignal_hook_function, error_symbol, data);
1659 }
61ede770 1660
1ea9dec4 1661 conditions = Fget (real_error_symbol, Qerror_conditions);
db9f0278 1662
a2ff3819
GM
1663 /* Remember from where signal was called. Skip over the frame for
1664 `signal' itself. If a frame for `error' follows, skip that,
26631f2b
RS
1665 too. Don't do this when ERROR_SYMBOL is nil, because that
1666 is a memory-full error. */
090a072f 1667 Vsignaling_function = Qnil;
26631f2b 1668 if (backtrace_list && !NILP (error_symbol))
090a072f
GM
1669 {
1670 bp = backtrace_list->next;
1671 if (bp && bp->function && EQ (*bp->function, Qerror))
1672 bp = bp->next;
1673 if (bp && bp->function)
1674 Vsignaling_function = *bp->function;
1675 }
a2ff3819 1676
db9f0278
JB
1677 for (; handlerlist; handlerlist = handlerlist->next)
1678 {
1679 register Lisp_Object clause;
177c0ea7 1680
db9f0278 1681 clause = find_handler_clause (handlerlist->handler, conditions,
f01cbfdd 1682 error_symbol, data);
db9f0278 1683
db9f0278 1684 if (EQ (clause, Qlambda))
82da7701 1685 {
690337b7
KH
1686 /* We can't return values to code which signaled an error, but we
1687 can continue code which has signaled a quit. */
1ea9dec4 1688 if (EQ (real_error_symbol, Qquit))
82da7701
JB
1689 return Qnil;
1690 else
d3e6f8be 1691 error ("Cannot return from the debugger in an error");
82da7701 1692 }
db9f0278 1693
265a9e55 1694 if (!NILP (clause))
db9f0278 1695 {
9d58218c 1696 Lisp_Object unwind_data;
db9f0278 1697 struct handler *h = handlerlist;
9d58218c 1698
db9f0278 1699 handlerlist = allhandlers;
1ea9dec4
RS
1700
1701 if (NILP (error_symbol))
1702 unwind_data = data;
9d58218c
RS
1703 else
1704 unwind_data = Fcons (error_symbol, data);
1705 h->chosen_clause = clause;
1706 unwind_to_catch (h->tag, unwind_data);
db9f0278
JB
1707 }
1708 }
1709
1710 handlerlist = allhandlers;
1711 /* If no handler is present now, try to run the debugger,
1712 and if that fails, throw to top level. */
f01cbfdd 1713 find_handler_clause (Qerror, conditions, error_symbol, data);
c11d3d17
RS
1714 if (catchlist != 0)
1715 Fthrow (Qtop_level, Qt);
1716
1ea9dec4 1717 if (! NILP (error_symbol))
c11d3d17
RS
1718 data = Fcons (error_symbol, data);
1719
1720 string = Ferror_message_string (data);
d5db4077 1721 fatal ("%s", SDATA (string), 0);
db9f0278
JB
1722}
1723
734d55a2
KS
1724/* Internal version of Fsignal that never returns.
1725 Used for anything but Qquit (which can return from Fsignal). */
1726
1727void
1728xsignal (error_symbol, data)
1729 Lisp_Object error_symbol, data;
1730{
1731 Fsignal (error_symbol, data);
1732 abort ();
1733}
1734
1735/* Like xsignal, but takes 0, 1, 2, or 3 args instead of a list. */
1736
1737void
1738xsignal0 (error_symbol)
1739 Lisp_Object error_symbol;
1740{
1741 xsignal (error_symbol, Qnil);
1742}
1743
1744void
1745xsignal1 (error_symbol, arg)
1746 Lisp_Object error_symbol, arg;
1747{
1748 xsignal (error_symbol, list1 (arg));
1749}
1750
1751void
1752xsignal2 (error_symbol, arg1, arg2)
1753 Lisp_Object error_symbol, arg1, arg2;
1754{
1755 xsignal (error_symbol, list2 (arg1, arg2));
1756}
1757
1758void
1759xsignal3 (error_symbol, arg1, arg2, arg3)
1760 Lisp_Object error_symbol, arg1, arg2, arg3;
1761{
1762 xsignal (error_symbol, list3 (arg1, arg2, arg3));
1763}
1764
1765/* Signal `error' with message S, and additional arg ARG.
1766 If ARG is not a genuine list, make it a one-element list. */
1767
1768void
1769signal_error (s, arg)
1770 char *s;
1771 Lisp_Object arg;
1772{
1773 Lisp_Object tortoise, hare;
1774
1775 hare = tortoise = arg;
1776 while (CONSP (hare))
1777 {
1778 hare = XCDR (hare);
1779 if (!CONSP (hare))
1780 break;
1781
1782 hare = XCDR (hare);
1783 tortoise = XCDR (tortoise);
1784
1785 if (EQ (hare, tortoise))
1786 break;
1787 }
1788
1789 if (!NILP (hare))
1790 arg = Fcons (arg, Qnil); /* Make it a list. */
1791
1792 xsignal (Qerror, Fcons (build_string (s), arg));
1793}
1794
1795
e0f24100 1796/* Return nonzero if LIST is a non-nil atom or
128c0f66
RM
1797 a list containing one of CONDITIONS. */
1798
1799static int
1800wants_debugger (list, conditions)
1801 Lisp_Object list, conditions;
1802{
4de86b16 1803 if (NILP (list))
128c0f66
RM
1804 return 0;
1805 if (! CONSP (list))
1806 return 1;
1807
ab67260b 1808 while (CONSP (conditions))
128c0f66 1809 {
ab67260b 1810 Lisp_Object this, tail;
03699b14
KR
1811 this = XCAR (conditions);
1812 for (tail = list; CONSP (tail); tail = XCDR (tail))
1813 if (EQ (XCAR (tail), this))
128c0f66 1814 return 1;
03699b14 1815 conditions = XCDR (conditions);
128c0f66 1816 }
ab67260b 1817 return 0;
128c0f66
RM
1818}
1819
fc950e09
KH
1820/* Return 1 if an error with condition-symbols CONDITIONS,
1821 and described by SIGNAL-DATA, should skip the debugger
1b1acc13 1822 according to debugger-ignored-errors. */
fc950e09
KH
1823
1824static int
1825skip_debugger (conditions, data)
1826 Lisp_Object conditions, data;
1827{
1828 Lisp_Object tail;
1829 int first_string = 1;
1830 Lisp_Object error_message;
1831
17401c97
GM
1832 error_message = Qnil;
1833 for (tail = Vdebug_ignored_errors; CONSP (tail); tail = XCDR (tail))
fc950e09 1834 {
03699b14 1835 if (STRINGP (XCAR (tail)))
fc950e09
KH
1836 {
1837 if (first_string)
1838 {
1839 error_message = Ferror_message_string (data);
1840 first_string = 0;
1841 }
177c0ea7 1842
03699b14 1843 if (fast_string_match (XCAR (tail), error_message) >= 0)
fc950e09
KH
1844 return 1;
1845 }
1846 else
1847 {
1848 Lisp_Object contail;
1849
17401c97 1850 for (contail = conditions; CONSP (contail); contail = XCDR (contail))
03699b14 1851 if (EQ (XCAR (tail), XCAR (contail)))
fc950e09
KH
1852 return 1;
1853 }
1854 }
1855
1856 return 0;
1857}
1858
ddaa36e1
AS
1859/* Call the debugger if calling it is currently enabled for CONDITIONS.
1860 SIG and DATA describe the signal, as in find_handler_clause. */
1861
1862static int
1863maybe_call_debugger (conditions, sig, data)
1864 Lisp_Object conditions, sig, data;
1865{
1866 Lisp_Object combined_data;
1867
1868 combined_data = Fcons (sig, data);
1869
1870 if (
1871 /* Don't try to run the debugger with interrupts blocked.
1872 The editing loop would return anyway. */
1873 ! INPUT_BLOCKED_P
1874 /* Does user want to enter debugger for this kind of error? */
1875 && (EQ (sig, Qquit)
1876 ? debug_on_quit
1877 : wants_debugger (Vdebug_on_error, conditions))
1878 && ! skip_debugger (conditions, combined_data)
1879 /* rms: what's this for? */
1880 && when_entered_debugger < num_nonmacro_input_events)
1881 {
1882 call_debugger (Fcons (Qerror, Fcons (combined_data, Qnil)));
1883 return 1;
1884 }
1885
1886 return 0;
1887}
1888
128c0f66 1889/* Value of Qlambda means we have called debugger and user has continued.
1ea9dec4 1890 There are two ways to pass SIG and DATA:
9b942ebd 1891 = SIG is the error symbol, and DATA is the rest of the data.
1ea9dec4 1892 = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
9b942ebd 1893 This is for memory-full errors only.
1ea9dec4 1894
9f5903bb
RS
1895 We need to increase max_specpdl_size temporarily around
1896 anything we do that can push on the specpdl, so as not to get
1897 a second error here in case we're handling specpdl overflow. */
db9f0278
JB
1898
1899static Lisp_Object
f01cbfdd 1900find_handler_clause (handlers, conditions, sig, data)
db9f0278 1901 Lisp_Object handlers, conditions, sig, data;
db9f0278
JB
1902{
1903 register Lisp_Object h;
1904 register Lisp_Object tem;
f01cbfdd
RS
1905 int debugger_called = 0;
1906 int debugger_considered = 0;
db9f0278 1907
f01cbfdd
RS
1908 /* t is used by handlers for all conditions, set up by C code. */
1909 if (EQ (handlers, Qt))
db9f0278 1910 return Qt;
f01cbfdd
RS
1911
1912 /* Don't run the debugger for a memory-full error.
1913 (There is no room in memory to do that!) */
1914 if (NILP (sig))
1915 debugger_considered = 1;
1916
61ede770
RS
1917 /* error is used similarly, but means print an error message
1918 and run the debugger if that is enabled. */
1919 if (EQ (handlers, Qerror)
57a6e758
RS
1920 || !NILP (Vdebug_on_signal)) /* This says call debugger even if
1921 there is a handler. */
db9f0278 1922 {
f01cbfdd 1923 if (!NILP (sig) && wants_debugger (Vstack_trace_on_error, conditions))
88817f3b 1924 {
48ce8ca7 1925 max_lisp_eval_depth += 15;
9f5903bb 1926 max_specpdl_size++;
5b650faa
SM
1927 if (noninteractive)
1928 Fbacktrace ();
1929 else
1930 internal_with_output_to_temp_buffer
1931 ("*Backtrace*",
1932 (Lisp_Object (*) (Lisp_Object)) Fbacktrace,
1933 Qnil);
9f5903bb 1934 max_specpdl_size--;
48ce8ca7 1935 max_lisp_eval_depth -= 15;
88817f3b 1936 }
f01cbfdd
RS
1937
1938 if (!debugger_considered)
db9f0278 1939 {
f01cbfdd
RS
1940 debugger_considered = 1;
1941 debugger_called = maybe_call_debugger (conditions, sig, data);
61ede770 1942 }
f01cbfdd 1943
61ede770
RS
1944 /* If there is no handler, return saying whether we ran the debugger. */
1945 if (EQ (handlers, Qerror))
1946 {
1947 if (debugger_called)
9f5903bb 1948 return Qlambda;
61ede770 1949 return Qt;
db9f0278 1950 }
db9f0278 1951 }
f01cbfdd 1952
db9f0278
JB
1953 for (h = handlers; CONSP (h); h = Fcdr (h))
1954 {
5f96776a
RS
1955 Lisp_Object handler, condit;
1956
1957 handler = Fcar (h);
1958 if (!CONSP (handler))
db9f0278 1959 continue;
5f96776a
RS
1960 condit = Fcar (handler);
1961 /* Handle a single condition name in handler HANDLER. */
1962 if (SYMBOLP (condit))
1963 {
1964 tem = Fmemq (Fcar (handler), conditions);
1965 if (!NILP (tem))
1966 return handler;
1967 }
1968 /* Handle a list of condition names in handler HANDLER. */
1969 else if (CONSP (condit))
1970 {
f01cbfdd
RS
1971 Lisp_Object tail;
1972 for (tail = condit; CONSP (tail); tail = XCDR (tail))
5f96776a 1973 {
f01cbfdd 1974 tem = Fmemq (Fcar (tail), conditions);
5f96776a 1975 if (!NILP (tem))
f01cbfdd
RS
1976 {
1977 /* This handler is going to apply.
1978 Does it allow the debugger to run first? */
1979 if (! debugger_considered && !NILP (Fmemq (Qdebug, condit)))
1980 maybe_call_debugger (conditions, sig, data);
1981 return handler;
1982 }
5f96776a
RS
1983 }
1984 }
db9f0278 1985 }
f01cbfdd 1986
db9f0278
JB
1987 return Qnil;
1988}
1989
1990/* dump an error message; called like printf */
1991
1992/* VARARGS 1 */
1993void
1994error (m, a1, a2, a3)
1995 char *m;
9125da08 1996 char *a1, *a2, *a3;
db9f0278
JB
1997{
1998 char buf[200];
9125da08
RS
1999 int size = 200;
2000 int mlen;
2001 char *buffer = buf;
2002 char *args[3];
2003 int allocated = 0;
2004 Lisp_Object string;
2005
2006 args[0] = a1;
2007 args[1] = a2;
2008 args[2] = a3;
2009
2010 mlen = strlen (m);
db9f0278
JB
2011
2012 while (1)
9125da08 2013 {
955f3ff9 2014 int used = doprnt (buffer, size, m, m + mlen, 3, args);
9125da08
RS
2015 if (used < size)
2016 break;
2017 size *= 2;
2018 if (allocated)
2019 buffer = (char *) xrealloc (buffer, size);
5ece1728
RS
2020 else
2021 {
2022 buffer = (char *) xmalloc (size);
2023 allocated = 1;
2024 }
9125da08
RS
2025 }
2026
955f3ff9 2027 string = build_string (buffer);
9125da08 2028 if (allocated)
9ae6734f 2029 xfree (buffer);
9125da08 2030
734d55a2 2031 xsignal1 (Qerror, string);
db9f0278
JB
2032}
2033\f
e72706be 2034DEFUN ("commandp", Fcommandp, Scommandp, 1, 2, 0,
9dbc9081
PJ
2035 doc: /* Non-nil if FUNCTION makes provisions for interactive calling.
2036This means it contains a description for how to read arguments to give it.
2037The value is nil for an invalid function or a symbol with no function
2038definition.
2039
2040Interactively callable functions include strings and vectors (treated
2041as keyboard macros), lambda-expressions that contain a top-level call
2042to `interactive', autoload definitions made by `autoload' with non-nil
2043fourth argument, and some of the built-in functions of Lisp.
2044
e72706be
RS
2045Also, a symbol satisfies `commandp' if its function definition does so.
2046
2047If the optional argument FOR-CALL-INTERACTIVELY is non-nil,
769b4fb2 2048then strings and vectors are not accepted. */)
e72706be
RS
2049 (function, for_call_interactively)
2050 Lisp_Object function, for_call_interactively;
db9f0278
JB
2051{
2052 register Lisp_Object fun;
2053 register Lisp_Object funcar;
52b71f49 2054 Lisp_Object if_prop = Qnil;
db9f0278
JB
2055
2056 fun = function;
2057
52b71f49
SM
2058 fun = indirect_function (fun); /* Check cycles. */
2059 if (NILP (fun) || EQ (fun, Qunbound))
ffd56f97 2060 return Qnil;
db9f0278 2061
52b71f49
SM
2062 /* Check an `interactive-form' property if present, analogous to the
2063 function-documentation property. */
2064 fun = function;
2065 while (SYMBOLP (fun))
2066 {
2b9aa051 2067 Lisp_Object tmp = Fget (fun, Qinteractive_form);
52b71f49
SM
2068 if (!NILP (tmp))
2069 if_prop = Qt;
2070 fun = Fsymbol_function (fun);
2071 }
2072
db9f0278
JB
2073 /* Emacs primitives are interactive if their DEFUN specifies an
2074 interactive spec. */
90165123 2075 if (SUBRP (fun))
04724b69 2076 return XSUBR (fun)->intspec ? Qt : if_prop;
db9f0278
JB
2077
2078 /* Bytecode objects are interactive if they are long enough to
2079 have an element whose index is COMPILED_INTERACTIVE, which is
2080 where the interactive spec is stored. */
90165123 2081 else if (COMPILEDP (fun))
845975f5 2082 return ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
52b71f49 2083 ? Qt : if_prop);
db9f0278
JB
2084
2085 /* Strings and vectors are keyboard macros. */
52b71f49 2086 if (STRINGP (fun) || VECTORP (fun))
6e33efc4 2087 return (NILP (for_call_interactively) ? Qt : Qnil);
db9f0278
JB
2088
2089 /* Lists may represent commands. */
2090 if (!CONSP (fun))
2091 return Qnil;
ed16fb98 2092 funcar = XCAR (fun);
db9f0278 2093 if (EQ (funcar, Qlambda))
52b71f49 2094 return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop;
db9f0278 2095 if (EQ (funcar, Qautoload))
52b71f49 2096 return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop;
db9f0278
JB
2097 else
2098 return Qnil;
2099}
2100
db9f0278 2101DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
9dbc9081
PJ
2102 doc: /* Define FUNCTION to autoload from FILE.
2103FUNCTION is a symbol; FILE is a file name string to pass to `load'.
2104Third arg DOCSTRING is documentation for the function.
2105Fourth arg INTERACTIVE if non-nil says function can be called interactively.
2106Fifth arg TYPE indicates the type of the object:
2107 nil or omitted says FUNCTION is a function,
2108 `keymap' says FUNCTION is really a keymap, and
2109 `macro' or t says FUNCTION is really a macro.
2110Third through fifth args give info about the real definition.
2111They default to nil.
2112If FUNCTION is already defined other than as an autoload,
2113this does nothing and returns nil. */)
2114 (function, file, docstring, interactive, type)
ee9ee63c 2115 Lisp_Object function, file, docstring, interactive, type;
db9f0278 2116{
db9f0278 2117 Lisp_Object args[4];
db9f0278 2118
b7826503
PJ
2119 CHECK_SYMBOL (function);
2120 CHECK_STRING (file);
db9f0278
JB
2121
2122 /* If function is defined and not as an autoload, don't override */
2123 if (!EQ (XSYMBOL (function)->function, Qunbound)
90165123 2124 && !(CONSP (XSYMBOL (function)->function)
03699b14 2125 && EQ (XCAR (XSYMBOL (function)->function), Qautoload)))
db9f0278
JB
2126 return Qnil;
2127
7973e637
SM
2128 if (NILP (Vpurify_flag))
2129 /* Only add entries after dumping, because the ones before are
2130 not useful and else we get loads of them from the loaddefs.el. */
2131 LOADHIST_ATTACH (Fcons (Qautoload, function));
905a9ed3 2132 else
a56eaaef
DN
2133 /* We don't want the docstring in purespace (instead,
2134 Snarf-documentation should (hopefully) overwrite it). */
2135 docstring = make_number (0);
2136 return Ffset (function,
2137 Fpurecopy (list5 (Qautoload, file, docstring,
2138 interactive, type)));
db9f0278
JB
2139}
2140
2141Lisp_Object
2142un_autoload (oldqueue)
2143 Lisp_Object oldqueue;
2144{
2145 register Lisp_Object queue, first, second;
2146
2147 /* Queue to unwind is current value of Vautoload_queue.
2148 oldqueue is the shadowed value to leave in Vautoload_queue. */
2149 queue = Vautoload_queue;
2150 Vautoload_queue = oldqueue;
2151 while (CONSP (queue))
2152 {
e509f168 2153 first = XCAR (queue);
db9f0278
JB
2154 second = Fcdr (first);
2155 first = Fcar (first);
47b82df9
RS
2156 if (EQ (first, make_number (0)))
2157 Vfeatures = second;
db9f0278
JB
2158 else
2159 Ffset (first, second);
e509f168 2160 queue = XCDR (queue);
db9f0278
JB
2161 }
2162 return Qnil;
2163}
2164
ca20916b
RS
2165/* Load an autoloaded function.
2166 FUNNAME is the symbol which is the function's name.
2167 FUNDEF is the autoload definition (a list). */
2168
045ba794 2169void
db9f0278
JB
2170do_autoload (fundef, funname)
2171 Lisp_Object fundef, funname;
2172{
aed13378 2173 int count = SPECPDL_INDEX ();
d945992e 2174 Lisp_Object fun;
ca20916b 2175 struct gcpro gcpro1, gcpro2, gcpro3;
db9f0278 2176
aea6173f
RS
2177 /* This is to make sure that loadup.el gives a clear picture
2178 of what files are preloaded and when. */
ab4db096
RS
2179 if (! NILP (Vpurify_flag))
2180 error ("Attempt to autoload %s while preparing to dump",
d5db4077 2181 SDATA (SYMBOL_NAME (funname)));
ab4db096 2182
db9f0278 2183 fun = funname;
b7826503 2184 CHECK_SYMBOL (funname);
ca20916b 2185 GCPRO3 (fun, funname, fundef);
db9f0278 2186
f87740dc 2187 /* Preserve the match data. */
89f2614d 2188 record_unwind_save_match_data ();
177c0ea7 2189
a04ee161
RS
2190 /* If autoloading gets an error (which includes the error of failing
2191 to define the function being called), we use Vautoload_queue
2192 to undo function definitions and `provide' calls made by
2193 the function. We do this in the specific case of autoloading
2194 because autoloading is not an explicit request "load this file",
2195 but rather a request to "call this function".
2196
2197 The value saved here is to be restored into Vautoload_queue. */
db9f0278
JB
2198 record_unwind_protect (un_autoload, Vautoload_queue);
2199 Vautoload_queue = Qt;
7351b242 2200 Fload (Fcar (Fcdr (fundef)), Qnil, Qt, Qnil, Qt);
2a49b6e5 2201
db9f0278
JB
2202 /* Once loading finishes, don't undo it. */
2203 Vautoload_queue = Qt;
2204 unbind_to (count, Qnil);
2205
a7f96a35 2206 fun = Findirect_function (fun, Qnil);
ffd56f97 2207
76c2b0cc 2208 if (!NILP (Fequal (fun, fundef)))
db9f0278 2209 error ("Autoloading failed to define function %s",
d5db4077 2210 SDATA (SYMBOL_NAME (funname)));
ca20916b 2211 UNGCPRO;
db9f0278 2212}
4c576a83 2213
db9f0278
JB
2214\f
2215DEFUN ("eval", Feval, Seval, 1, 1, 0,
9dbc9081
PJ
2216 doc: /* Evaluate FORM and return its value. */)
2217 (form)
db9f0278
JB
2218 Lisp_Object form;
2219{
2220 Lisp_Object fun, val, original_fun, original_args;
2221 Lisp_Object funcar;
2222 struct backtrace backtrace;
2223 struct gcpro gcpro1, gcpro2, gcpro3;
2224
df470e3b 2225 if (handling_signal)
48f8dfa3 2226 abort ();
177c0ea7 2227
90165123 2228 if (SYMBOLP (form))
2b9bde76 2229 return Fsymbol_value (form);
db9f0278
JB
2230 if (!CONSP (form))
2231 return form;
2232
2233 QUIT;
ee830945
RS
2234 if ((consing_since_gc > gc_cons_threshold
2235 && consing_since_gc > gc_relative_threshold)
2236 ||
2237 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
db9f0278
JB
2238 {
2239 GCPRO1 (form);
2240 Fgarbage_collect ();
2241 UNGCPRO;
2242 }
2243
2244 if (++lisp_eval_depth > max_lisp_eval_depth)
2245 {
2246 if (max_lisp_eval_depth < 100)
2247 max_lisp_eval_depth = 100;
2248 if (lisp_eval_depth > max_lisp_eval_depth)
921baa95 2249 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
db9f0278
JB
2250 }
2251
2252 original_fun = Fcar (form);
2253 original_args = Fcdr (form);
2254
2255 backtrace.next = backtrace_list;
2256 backtrace_list = &backtrace;
2257 backtrace.function = &original_fun; /* This also protects them from gc */
2258 backtrace.args = &original_args;
2259 backtrace.nargs = UNEVALLED;
2260 backtrace.evalargs = 1;
2261 backtrace.debug_on_exit = 0;
2262
2263 if (debug_on_next_call)
2264 do_debug_on_call (Qt);
2265
2266 /* At this point, only original_fun and original_args
2267 have values that will be used below */
2268 retry:
8788120f
KS
2269
2270 /* Optimize for no indirection. */
2271 fun = original_fun;
2272 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2273 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2274 fun = indirect_function (fun);
db9f0278 2275
90165123 2276 if (SUBRP (fun))
db9f0278
JB
2277 {
2278 Lisp_Object numargs;
166c822d 2279 Lisp_Object argvals[8];
db9f0278
JB
2280 Lisp_Object args_left;
2281 register int i, maxargs;
2282
2283 args_left = original_args;
2284 numargs = Flength (args_left);
2285
c1788fbc
RS
2286 CHECK_CONS_LIST ();
2287
db9f0278
JB
2288 if (XINT (numargs) < XSUBR (fun)->min_args ||
2289 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
734d55a2 2290 xsignal2 (Qwrong_number_of_arguments, original_fun, numargs);
db9f0278
JB
2291
2292 if (XSUBR (fun)->max_args == UNEVALLED)
2293 {
2294 backtrace.evalargs = 0;
2295 val = (*XSUBR (fun)->function) (args_left);
2296 goto done;
2297 }
2298
2299 if (XSUBR (fun)->max_args == MANY)
2300 {
2301 /* Pass a vector of evaluated arguments */
2302 Lisp_Object *vals;
2303 register int argnum = 0;
3a7a9129 2304 USE_SAFE_ALLOCA;
db9f0278 2305
b72e0717 2306 SAFE_ALLOCA_LISP (vals, XINT (numargs));
db9f0278
JB
2307
2308 GCPRO3 (args_left, fun, fun);
2309 gcpro3.var = vals;
2310 gcpro3.nvars = 0;
2311
265a9e55 2312 while (!NILP (args_left))
db9f0278
JB
2313 {
2314 vals[argnum++] = Feval (Fcar (args_left));
2315 args_left = Fcdr (args_left);
2316 gcpro3.nvars = argnum;
2317 }
db9f0278
JB
2318
2319 backtrace.args = vals;
2320 backtrace.nargs = XINT (numargs);
2321
2322 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
a6e3fa71 2323 UNGCPRO;
3a7a9129 2324 SAFE_FREE ();
db9f0278
JB
2325 goto done;
2326 }
2327
2328 GCPRO3 (args_left, fun, fun);
2329 gcpro3.var = argvals;
2330 gcpro3.nvars = 0;
2331
2332 maxargs = XSUBR (fun)->max_args;
2333 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
2334 {
2335 argvals[i] = Feval (Fcar (args_left));
2336 gcpro3.nvars = ++i;
2337 }
2338
2339 UNGCPRO;
2340
2341 backtrace.args = argvals;
2342 backtrace.nargs = XINT (numargs);
2343
2344 switch (i)
2345 {
2346 case 0:
2347 val = (*XSUBR (fun)->function) ();
2348 goto done;
2349 case 1:
2350 val = (*XSUBR (fun)->function) (argvals[0]);
2351 goto done;
2352 case 2:
2353 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
2354 goto done;
2355 case 3:
2356 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2357 argvals[2]);
2358 goto done;
2359 case 4:
2360 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
2361 argvals[2], argvals[3]);
2362 goto done;
2363 case 5:
2364 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2365 argvals[3], argvals[4]);
2366 goto done;
2367 case 6:
2368 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2369 argvals[3], argvals[4], argvals[5]);
2370 goto done;
15c65264
RS
2371 case 7:
2372 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2373 argvals[3], argvals[4], argvals[5],
2374 argvals[6]);
2375 goto done;
db9f0278 2376
166c822d
KH
2377 case 8:
2378 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
2379 argvals[3], argvals[4], argvals[5],
2380 argvals[6], argvals[7]);
2381 goto done;
2382
db9f0278 2383 default:
08564963
JB
2384 /* Someone has created a subr that takes more arguments than
2385 is supported by this code. We need to either rewrite the
2386 subr to use a different argument protocol, or add more
2387 cases to this switch. */
2388 abort ();
db9f0278
JB
2389 }
2390 }
90165123 2391 if (COMPILEDP (fun))
db9f0278
JB
2392 val = apply_lambda (fun, original_args, 1);
2393 else
2394 {
8788120f 2395 if (EQ (fun, Qunbound))
734d55a2 2396 xsignal1 (Qvoid_function, original_fun);
db9f0278 2397 if (!CONSP (fun))
734d55a2
KS
2398 xsignal1 (Qinvalid_function, original_fun);
2399 funcar = XCAR (fun);
90165123 2400 if (!SYMBOLP (funcar))
734d55a2 2401 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
2402 if (EQ (funcar, Qautoload))
2403 {
2404 do_autoload (fun, original_fun);
2405 goto retry;
2406 }
2407 if (EQ (funcar, Qmacro))
2408 val = Feval (apply1 (Fcdr (fun), original_args));
2409 else if (EQ (funcar, Qlambda))
2410 val = apply_lambda (fun, original_args, 1);
db9f0278 2411 else
734d55a2 2412 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
2413 }
2414 done:
c1788fbc
RS
2415 CHECK_CONS_LIST ();
2416
db9f0278
JB
2417 lisp_eval_depth--;
2418 if (backtrace.debug_on_exit)
2419 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2420 backtrace_list = backtrace.next;
824eb35e 2421
db9f0278
JB
2422 return val;
2423}
2424\f
2425DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
9dbc9081
PJ
2426 doc: /* Call FUNCTION with our remaining args, using our last arg as list of args.
2427Then return the value FUNCTION returns.
2428Thus, (apply '+ 1 2 '(3 4)) returns 10.
2429usage: (apply FUNCTION &rest ARGUMENTS) */)
2430 (nargs, args)
db9f0278
JB
2431 int nargs;
2432 Lisp_Object *args;
2433{
2434 register int i, numargs;
2435 register Lisp_Object spread_arg;
2436 register Lisp_Object *funcall_args;
3a7a9129 2437 Lisp_Object fun, retval;
96d44c64 2438 struct gcpro gcpro1;
3a7a9129 2439 USE_SAFE_ALLOCA;
db9f0278
JB
2440
2441 fun = args [0];
2442 funcall_args = 0;
2443 spread_arg = args [nargs - 1];
b7826503 2444 CHECK_LIST (spread_arg);
177c0ea7 2445
db9f0278
JB
2446 numargs = XINT (Flength (spread_arg));
2447
2448 if (numargs == 0)
2449 return Ffuncall (nargs - 1, args);
2450 else if (numargs == 1)
2451 {
03699b14 2452 args [nargs - 1] = XCAR (spread_arg);
db9f0278
JB
2453 return Ffuncall (nargs, args);
2454 }
2455
a6e3fa71 2456 numargs += nargs - 2;
db9f0278 2457
8788120f
KS
2458 /* Optimize for no indirection. */
2459 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2460 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2461 fun = indirect_function (fun);
ffd56f97 2462 if (EQ (fun, Qunbound))
db9f0278 2463 {
ffd56f97
JB
2464 /* Let funcall get the error */
2465 fun = args[0];
2466 goto funcall;
db9f0278
JB
2467 }
2468
90165123 2469 if (SUBRP (fun))
db9f0278
JB
2470 {
2471 if (numargs < XSUBR (fun)->min_args
2472 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2473 goto funcall; /* Let funcall get the error */
2474 else if (XSUBR (fun)->max_args > numargs)
2475 {
2476 /* Avoid making funcall cons up a yet another new vector of arguments
2477 by explicitly supplying nil's for optional values */
b72e0717 2478 SAFE_ALLOCA_LISP (funcall_args, 1 + XSUBR (fun)->max_args);
db9f0278
JB
2479 for (i = numargs; i < XSUBR (fun)->max_args;)
2480 funcall_args[++i] = Qnil;
96d44c64
SM
2481 GCPRO1 (*funcall_args);
2482 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
db9f0278
JB
2483 }
2484 }
2485 funcall:
2486 /* We add 1 to numargs because funcall_args includes the
2487 function itself as well as its arguments. */
2488 if (!funcall_args)
a6e3fa71 2489 {
b72e0717 2490 SAFE_ALLOCA_LISP (funcall_args, 1 + numargs);
96d44c64
SM
2491 GCPRO1 (*funcall_args);
2492 gcpro1.nvars = 1 + numargs;
a6e3fa71
JB
2493 }
2494
db9f0278
JB
2495 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
2496 /* Spread the last arg we got. Its first element goes in
2497 the slot that it used to occupy, hence this value of I. */
2498 i = nargs - 1;
265a9e55 2499 while (!NILP (spread_arg))
db9f0278 2500 {
03699b14
KR
2501 funcall_args [i++] = XCAR (spread_arg);
2502 spread_arg = XCDR (spread_arg);
db9f0278 2503 }
a6e3fa71 2504
96d44c64 2505 /* By convention, the caller needs to gcpro Ffuncall's args. */
3a7a9129
CY
2506 retval = Ffuncall (gcpro1.nvars, funcall_args);
2507 UNGCPRO;
2508 SAFE_FREE ();
2509
2510 return retval;
db9f0278
JB
2511}
2512\f
ff936e53
SM
2513/* Run hook variables in various ways. */
2514
2515enum run_hooks_condition {to_completion, until_success, until_failure};
2901f1d1
SM
2516static Lisp_Object run_hook_with_args P_ ((int, Lisp_Object *,
2517 enum run_hooks_condition));
ff936e53 2518
8b5176cd 2519DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 0, MANY, 0,
9f685258 2520 doc: /* Run each hook in HOOKS.
9dbc9081
PJ
2521Each argument should be a symbol, a hook variable.
2522These symbols are processed in the order specified.
2523If a hook symbol has a non-nil value, that value may be a function
2524or a list of functions to be called to run the hook.
2525If the value is a function, it is called with no arguments.
2526If it is a list, the elements are called, in order, with no arguments.
2527
9f685258
LK
2528Major modes should not use this function directly to run their mode
2529hook; they should use `run-mode-hooks' instead.
2530
72e85d5d
RS
2531Do not use `make-local-variable' to make a hook variable buffer-local.
2532Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2533usage: (run-hooks &rest HOOKS) */)
2534 (nargs, args)
ff936e53
SM
2535 int nargs;
2536 Lisp_Object *args;
2537{
2538 Lisp_Object hook[1];
2539 register int i;
2540
2541 for (i = 0; i < nargs; i++)
2542 {
2543 hook[0] = args[i];
2544 run_hook_with_args (1, hook, to_completion);
2545 }
2546
2547 return Qnil;
2548}
177c0ea7 2549
a0d76c27 2550DEFUN ("run-hook-with-args", Frun_hook_with_args,
9dbc9081
PJ
2551 Srun_hook_with_args, 1, MANY, 0,
2552 doc: /* Run HOOK with the specified arguments ARGS.
2553HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2554value, that value may be a function or a list of functions to be
2555called to run the hook. If the value is a function, it is called with
2556the given arguments and its return value is returned. If it is a list
2557of functions, those functions are called, in order,
2558with the given arguments ARGS.
d5e2c90c 2559It is best not to depend on the value returned by `run-hook-with-args',
9dbc9081
PJ
2560as that may change.
2561
72e85d5d
RS
2562Do not use `make-local-variable' to make a hook variable buffer-local.
2563Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2564usage: (run-hook-with-args HOOK &rest ARGS) */)
2565 (nargs, args)
ff936e53
SM
2566 int nargs;
2567 Lisp_Object *args;
2568{
2569 return run_hook_with_args (nargs, args, to_completion);
2570}
2571
a0d76c27 2572DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
9dbc9081
PJ
2573 Srun_hook_with_args_until_success, 1, MANY, 0,
2574 doc: /* Run HOOK with the specified arguments ARGS.
d5e2c90c
RS
2575HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2576value, that value may be a function or a list of functions to be
2577called to run the hook. If the value is a function, it is called with
2578the given arguments and its return value is returned.
2579If it is a list of functions, those functions are called, in order,
2580with the given arguments ARGS, until one of them
9dbc9081 2581returns a non-nil value. Then we return that value.
d5e2c90c 2582However, if they all return nil, we return nil.
9dbc9081 2583
72e85d5d
RS
2584Do not use `make-local-variable' to make a hook variable buffer-local.
2585Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2586usage: (run-hook-with-args-until-success HOOK &rest ARGS) */)
2587 (nargs, args)
b0b667cb
KH
2588 int nargs;
2589 Lisp_Object *args;
2590{
ff936e53
SM
2591 return run_hook_with_args (nargs, args, until_success);
2592}
2593
a0d76c27 2594DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
9dbc9081
PJ
2595 Srun_hook_with_args_until_failure, 1, MANY, 0,
2596 doc: /* Run HOOK with the specified arguments ARGS.
d5e2c90c
RS
2597HOOK should be a symbol, a hook variable. If HOOK has a non-nil
2598value, that value may be a function or a list of functions to be
2599called to run the hook. If the value is a function, it is called with
2600the given arguments and its return value is returned.
2601If it is a list of functions, those functions are called, in order,
2602with the given arguments ARGS, until one of them returns nil.
2603Then we return nil. However, if they all return non-nil, we return non-nil.
9dbc9081 2604
72e85d5d
RS
2605Do not use `make-local-variable' to make a hook variable buffer-local.
2606Instead, use `add-hook' and specify t for the LOCAL argument.
9dbc9081
PJ
2607usage: (run-hook-with-args-until-failure HOOK &rest ARGS) */)
2608 (nargs, args)
ff936e53
SM
2609 int nargs;
2610 Lisp_Object *args;
2611{
2612 return run_hook_with_args (nargs, args, until_failure);
2613}
2614
c933ea05
RS
2615/* ARGS[0] should be a hook symbol.
2616 Call each of the functions in the hook value, passing each of them
2617 as arguments all the rest of ARGS (all NARGS - 1 elements).
2618 COND specifies a condition to test after each call
2619 to decide whether to stop.
2620 The caller (or its caller, etc) must gcpro all of ARGS,
2621 except that it isn't necessary to gcpro ARGS[0]. */
2622
2901f1d1 2623static Lisp_Object
ff936e53
SM
2624run_hook_with_args (nargs, args, cond)
2625 int nargs;
2626 Lisp_Object *args;
2627 enum run_hooks_condition cond;
2628{
2629 Lisp_Object sym, val, ret;
fada05d6 2630 struct gcpro gcpro1, gcpro2, gcpro3;
b0b667cb 2631
f029ca5f
RS
2632 /* If we are dying or still initializing,
2633 don't do anything--it would probably crash if we tried. */
2634 if (NILP (Vrun_hooks))
caff32a7 2635 return Qnil;
f029ca5f 2636
b0b667cb 2637 sym = args[0];
aa681b51 2638 val = find_symbol_value (sym);
ff936e53
SM
2639 ret = (cond == until_failure ? Qt : Qnil);
2640
b0b667cb 2641 if (EQ (val, Qunbound) || NILP (val))
ff936e53 2642 return ret;
03699b14 2643 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
b0b667cb
KH
2644 {
2645 args[0] = val;
2646 return Ffuncall (nargs, args);
2647 }
2648 else
2649 {
8932b1c2 2650 Lisp_Object globals = Qnil;
fada05d6 2651 GCPRO3 (sym, val, globals);
cb9d21f8 2652
ff936e53
SM
2653 for (;
2654 CONSP (val) && ((cond == to_completion)
2655 || (cond == until_success ? NILP (ret)
2656 : !NILP (ret)));
03699b14 2657 val = XCDR (val))
b0b667cb 2658 {
03699b14 2659 if (EQ (XCAR (val), Qt))
b0b667cb
KH
2660 {
2661 /* t indicates this hook has a local binding;
2662 it means to run the global binding too. */
8932b1c2
CY
2663 globals = Fdefault_value (sym);
2664 if (NILP (globals)) continue;
b0b667cb 2665
8932b1c2 2666 if (!CONSP (globals) || EQ (XCAR (globals), Qlambda))
b0b667cb 2667 {
8932b1c2
CY
2668 args[0] = globals;
2669 ret = Ffuncall (nargs, args);
2670 }
2671 else
2672 {
2673 for (;
2674 CONSP (globals) && ((cond == to_completion)
2675 || (cond == until_success ? NILP (ret)
2676 : !NILP (ret)));
2677 globals = XCDR (globals))
2678 {
2679 args[0] = XCAR (globals);
2680 /* In a global value, t should not occur. If it does, we
2681 must ignore it to avoid an endless loop. */
2682 if (!EQ (args[0], Qt))
2683 ret = Ffuncall (nargs, args);
2684 }
b0b667cb
KH
2685 }
2686 }
2687 else
2688 {
03699b14 2689 args[0] = XCAR (val);
ff936e53 2690 ret = Ffuncall (nargs, args);
b0b667cb
KH
2691 }
2692 }
cb9d21f8
RS
2693
2694 UNGCPRO;
ff936e53 2695 return ret;
b0b667cb
KH
2696 }
2697}
c933ea05
RS
2698
2699/* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2700 present value of that symbol.
2701 Call each element of FUNLIST,
2702 passing each of them the rest of ARGS.
2703 The caller (or its caller, etc) must gcpro all of ARGS,
2704 except that it isn't necessary to gcpro ARGS[0]. */
2705
2706Lisp_Object
2707run_hook_list_with_args (funlist, nargs, args)
2708 Lisp_Object funlist;
2709 int nargs;
2710 Lisp_Object *args;
2711{
2712 Lisp_Object sym;
2713 Lisp_Object val;
fada05d6
KH
2714 Lisp_Object globals;
2715 struct gcpro gcpro1, gcpro2, gcpro3;
c933ea05
RS
2716
2717 sym = args[0];
fada05d6
KH
2718 globals = Qnil;
2719 GCPRO3 (sym, val, globals);
c933ea05 2720
03699b14 2721 for (val = funlist; CONSP (val); val = XCDR (val))
c933ea05 2722 {
03699b14 2723 if (EQ (XCAR (val), Qt))
c933ea05
RS
2724 {
2725 /* t indicates this hook has a local binding;
2726 it means to run the global binding too. */
c933ea05
RS
2727
2728 for (globals = Fdefault_value (sym);
2729 CONSP (globals);
03699b14 2730 globals = XCDR (globals))
c933ea05 2731 {
03699b14 2732 args[0] = XCAR (globals);
77d92e05
RS
2733 /* In a global value, t should not occur. If it does, we
2734 must ignore it to avoid an endless loop. */
2735 if (!EQ (args[0], Qt))
2736 Ffuncall (nargs, args);
c933ea05
RS
2737 }
2738 }
2739 else
2740 {
03699b14 2741 args[0] = XCAR (val);
c933ea05
RS
2742 Ffuncall (nargs, args);
2743 }
2744 }
2745 UNGCPRO;
2746 return Qnil;
2747}
7d48558f
RS
2748
2749/* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2750
2751void
2752run_hook_with_args_2 (hook, arg1, arg2)
2753 Lisp_Object hook, arg1, arg2;
2754{
2755 Lisp_Object temp[3];
2756 temp[0] = hook;
2757 temp[1] = arg1;
2758 temp[2] = arg2;
2759
2760 Frun_hook_with_args (3, temp);
2761}
ff936e53 2762\f
db9f0278
JB
2763/* Apply fn to arg */
2764Lisp_Object
2765apply1 (fn, arg)
2766 Lisp_Object fn, arg;
2767{
a6e3fa71
JB
2768 struct gcpro gcpro1;
2769
2770 GCPRO1 (fn);
265a9e55 2771 if (NILP (arg))
a6e3fa71
JB
2772 RETURN_UNGCPRO (Ffuncall (1, &fn));
2773 gcpro1.nvars = 2;
db9f0278
JB
2774#ifdef NO_ARG_ARRAY
2775 {
2776 Lisp_Object args[2];
2777 args[0] = fn;
2778 args[1] = arg;
a6e3fa71
JB
2779 gcpro1.var = args;
2780 RETURN_UNGCPRO (Fapply (2, args));
db9f0278
JB
2781 }
2782#else /* not NO_ARG_ARRAY */
a6e3fa71 2783 RETURN_UNGCPRO (Fapply (2, &fn));
db9f0278
JB
2784#endif /* not NO_ARG_ARRAY */
2785}
2786
2787/* Call function fn on no arguments */
2788Lisp_Object
2789call0 (fn)
2790 Lisp_Object fn;
2791{
a6e3fa71
JB
2792 struct gcpro gcpro1;
2793
2794 GCPRO1 (fn);
2795 RETURN_UNGCPRO (Ffuncall (1, &fn));
db9f0278
JB
2796}
2797
15285f9f 2798/* Call function fn with 1 argument arg1 */
db9f0278
JB
2799/* ARGSUSED */
2800Lisp_Object
15285f9f
RS
2801call1 (fn, arg1)
2802 Lisp_Object fn, arg1;
db9f0278 2803{
a6e3fa71 2804 struct gcpro gcpro1;
db9f0278 2805#ifdef NO_ARG_ARRAY
177c0ea7 2806 Lisp_Object args[2];
a6e3fa71 2807
db9f0278 2808 args[0] = fn;
15285f9f 2809 args[1] = arg1;
a6e3fa71
JB
2810 GCPRO1 (args[0]);
2811 gcpro1.nvars = 2;
2812 RETURN_UNGCPRO (Ffuncall (2, args));
db9f0278 2813#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2814 GCPRO1 (fn);
2815 gcpro1.nvars = 2;
2816 RETURN_UNGCPRO (Ffuncall (2, &fn));
db9f0278
JB
2817#endif /* not NO_ARG_ARRAY */
2818}
2819
15285f9f 2820/* Call function fn with 2 arguments arg1, arg2 */
db9f0278
JB
2821/* ARGSUSED */
2822Lisp_Object
15285f9f
RS
2823call2 (fn, arg1, arg2)
2824 Lisp_Object fn, arg1, arg2;
db9f0278 2825{
a6e3fa71 2826 struct gcpro gcpro1;
db9f0278
JB
2827#ifdef NO_ARG_ARRAY
2828 Lisp_Object args[3];
2829 args[0] = fn;
15285f9f
RS
2830 args[1] = arg1;
2831 args[2] = arg2;
a6e3fa71
JB
2832 GCPRO1 (args[0]);
2833 gcpro1.nvars = 3;
2834 RETURN_UNGCPRO (Ffuncall (3, args));
db9f0278 2835#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2836 GCPRO1 (fn);
2837 gcpro1.nvars = 3;
2838 RETURN_UNGCPRO (Ffuncall (3, &fn));
db9f0278
JB
2839#endif /* not NO_ARG_ARRAY */
2840}
2841
15285f9f 2842/* Call function fn with 3 arguments arg1, arg2, arg3 */
db9f0278
JB
2843/* ARGSUSED */
2844Lisp_Object
15285f9f
RS
2845call3 (fn, arg1, arg2, arg3)
2846 Lisp_Object fn, arg1, arg2, arg3;
db9f0278 2847{
a6e3fa71 2848 struct gcpro gcpro1;
db9f0278
JB
2849#ifdef NO_ARG_ARRAY
2850 Lisp_Object args[4];
2851 args[0] = fn;
15285f9f
RS
2852 args[1] = arg1;
2853 args[2] = arg2;
2854 args[3] = arg3;
a6e3fa71
JB
2855 GCPRO1 (args[0]);
2856 gcpro1.nvars = 4;
2857 RETURN_UNGCPRO (Ffuncall (4, args));
db9f0278 2858#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2859 GCPRO1 (fn);
2860 gcpro1.nvars = 4;
2861 RETURN_UNGCPRO (Ffuncall (4, &fn));
db9f0278
JB
2862#endif /* not NO_ARG_ARRAY */
2863}
2864
15285f9f 2865/* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
a5a44b91
JB
2866/* ARGSUSED */
2867Lisp_Object
15285f9f
RS
2868call4 (fn, arg1, arg2, arg3, arg4)
2869 Lisp_Object fn, arg1, arg2, arg3, arg4;
a5a44b91
JB
2870{
2871 struct gcpro gcpro1;
2872#ifdef NO_ARG_ARRAY
2873 Lisp_Object args[5];
2874 args[0] = fn;
15285f9f
RS
2875 args[1] = arg1;
2876 args[2] = arg2;
2877 args[3] = arg3;
2878 args[4] = arg4;
a5a44b91
JB
2879 GCPRO1 (args[0]);
2880 gcpro1.nvars = 5;
2881 RETURN_UNGCPRO (Ffuncall (5, args));
2882#else /* not NO_ARG_ARRAY */
2883 GCPRO1 (fn);
2884 gcpro1.nvars = 5;
2885 RETURN_UNGCPRO (Ffuncall (5, &fn));
2886#endif /* not NO_ARG_ARRAY */
2887}
2888
15285f9f
RS
2889/* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2890/* ARGSUSED */
2891Lisp_Object
2892call5 (fn, arg1, arg2, arg3, arg4, arg5)
2893 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2894{
2895 struct gcpro gcpro1;
2896#ifdef NO_ARG_ARRAY
2897 Lisp_Object args[6];
2898 args[0] = fn;
2899 args[1] = arg1;
2900 args[2] = arg2;
2901 args[3] = arg3;
2902 args[4] = arg4;
2903 args[5] = arg5;
2904 GCPRO1 (args[0]);
2905 gcpro1.nvars = 6;
2906 RETURN_UNGCPRO (Ffuncall (6, args));
2907#else /* not NO_ARG_ARRAY */
2908 GCPRO1 (fn);
2909 gcpro1.nvars = 6;
2910 RETURN_UNGCPRO (Ffuncall (6, &fn));
2911#endif /* not NO_ARG_ARRAY */
2912}
2913
2914/* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2915/* ARGSUSED */
2916Lisp_Object
2917call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2918 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2919{
2920 struct gcpro gcpro1;
2921#ifdef NO_ARG_ARRAY
2922 Lisp_Object args[7];
2923 args[0] = fn;
2924 args[1] = arg1;
2925 args[2] = arg2;
2926 args[3] = arg3;
2927 args[4] = arg4;
2928 args[5] = arg5;
2929 args[6] = arg6;
2930 GCPRO1 (args[0]);
2931 gcpro1.nvars = 7;
2932 RETURN_UNGCPRO (Ffuncall (7, args));
2933#else /* not NO_ARG_ARRAY */
2934 GCPRO1 (fn);
2935 gcpro1.nvars = 7;
2936 RETURN_UNGCPRO (Ffuncall (7, &fn));
2937#endif /* not NO_ARG_ARRAY */
2938}
2939
6c2ef893
RS
2940/* The caller should GCPRO all the elements of ARGS. */
2941
db9f0278 2942DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
9dbc9081
PJ
2943 doc: /* Call first argument as a function, passing remaining arguments to it.
2944Return the value that function returns.
2945Thus, (funcall 'cons 'x 'y) returns (x . y).
2946usage: (funcall FUNCTION &rest ARGUMENTS) */)
2947 (nargs, args)
db9f0278
JB
2948 int nargs;
2949 Lisp_Object *args;
2950{
8788120f 2951 Lisp_Object fun, original_fun;
db9f0278
JB
2952 Lisp_Object funcar;
2953 int numargs = nargs - 1;
2954 Lisp_Object lisp_numargs;
2955 Lisp_Object val;
2956 struct backtrace backtrace;
2957 register Lisp_Object *internal_args;
2958 register int i;
2959
2960 QUIT;
ee830945
RS
2961 if ((consing_since_gc > gc_cons_threshold
2962 && consing_since_gc > gc_relative_threshold)
2963 ||
2964 (!NILP (Vmemory_full) && consing_since_gc > memory_full_cons_threshold))
a6e3fa71 2965 Fgarbage_collect ();
db9f0278
JB
2966
2967 if (++lisp_eval_depth > max_lisp_eval_depth)
2968 {
2969 if (max_lisp_eval_depth < 100)
2970 max_lisp_eval_depth = 100;
2971 if (lisp_eval_depth > max_lisp_eval_depth)
921baa95 2972 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
db9f0278
JB
2973 }
2974
2975 backtrace.next = backtrace_list;
2976 backtrace_list = &backtrace;
2977 backtrace.function = &args[0];
2978 backtrace.args = &args[1];
2979 backtrace.nargs = nargs - 1;
2980 backtrace.evalargs = 0;
2981 backtrace.debug_on_exit = 0;
2982
2983 if (debug_on_next_call)
2984 do_debug_on_call (Qlambda);
2985
fff3ff9c
KS
2986 CHECK_CONS_LIST ();
2987
8788120f
KS
2988 original_fun = args[0];
2989
db9f0278
JB
2990 retry:
2991
8788120f
KS
2992 /* Optimize for no indirection. */
2993 fun = original_fun;
2994 if (SYMBOLP (fun) && !EQ (fun, Qunbound)
2995 && (fun = XSYMBOL (fun)->function, SYMBOLP (fun)))
2996 fun = indirect_function (fun);
db9f0278 2997
90165123 2998 if (SUBRP (fun))
db9f0278 2999 {
fff3ff9c 3000 if (numargs < XSUBR (fun)->min_args
db9f0278
JB
3001 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
3002 {
a631e24c 3003 XSETFASTINT (lisp_numargs, numargs);
734d55a2 3004 xsignal2 (Qwrong_number_of_arguments, original_fun, lisp_numargs);
db9f0278
JB
3005 }
3006
3007 if (XSUBR (fun)->max_args == UNEVALLED)
734d55a2 3008 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
3009
3010 if (XSUBR (fun)->max_args == MANY)
3011 {
3012 val = (*XSUBR (fun)->function) (numargs, args + 1);
3013 goto done;
3014 }
3015
3016 if (XSUBR (fun)->max_args > numargs)
3017 {
3018 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
3019 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
3020 for (i = numargs; i < XSUBR (fun)->max_args; i++)
3021 internal_args[i] = Qnil;
3022 }
3023 else
3024 internal_args = args + 1;
3025 switch (XSUBR (fun)->max_args)
3026 {
3027 case 0:
3028 val = (*XSUBR (fun)->function) ();
3029 goto done;
3030 case 1:
3031 val = (*XSUBR (fun)->function) (internal_args[0]);
3032 goto done;
3033 case 2:
82fc29a1 3034 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1]);
db9f0278
JB
3035 goto done;
3036 case 3:
3037 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3038 internal_args[2]);
3039 goto done;
3040 case 4:
3041 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
82fc29a1 3042 internal_args[2], internal_args[3]);
db9f0278
JB
3043 goto done;
3044 case 5:
3045 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3046 internal_args[2], internal_args[3],
3047 internal_args[4]);
3048 goto done;
3049 case 6:
3050 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3051 internal_args[2], internal_args[3],
3052 internal_args[4], internal_args[5]);
3053 goto done;
15c65264
RS
3054 case 7:
3055 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3056 internal_args[2], internal_args[3],
3057 internal_args[4], internal_args[5],
3058 internal_args[6]);
3059 goto done;
db9f0278 3060
166c822d
KH
3061 case 8:
3062 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
3063 internal_args[2], internal_args[3],
3064 internal_args[4], internal_args[5],
3065 internal_args[6], internal_args[7]);
3066 goto done;
3067
db9f0278 3068 default:
70ee42f7 3069
166c822d 3070 /* If a subr takes more than 8 arguments without using MANY
177c0ea7 3071 or UNEVALLED, we need to extend this function to support it.
70ee42f7
JB
3072 Until this is done, there is no way to call the function. */
3073 abort ();
db9f0278
JB
3074 }
3075 }
90165123 3076 if (COMPILEDP (fun))
db9f0278
JB
3077 val = funcall_lambda (fun, numargs, args + 1);
3078 else
3079 {
8788120f 3080 if (EQ (fun, Qunbound))
734d55a2 3081 xsignal1 (Qvoid_function, original_fun);
db9f0278 3082 if (!CONSP (fun))
734d55a2
KS
3083 xsignal1 (Qinvalid_function, original_fun);
3084 funcar = XCAR (fun);
90165123 3085 if (!SYMBOLP (funcar))
734d55a2 3086 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
3087 if (EQ (funcar, Qlambda))
3088 val = funcall_lambda (fun, numargs, args + 1);
db9f0278
JB
3089 else if (EQ (funcar, Qautoload))
3090 {
8788120f 3091 do_autoload (fun, original_fun);
fff3ff9c 3092 CHECK_CONS_LIST ();
db9f0278
JB
3093 goto retry;
3094 }
3095 else
734d55a2 3096 xsignal1 (Qinvalid_function, original_fun);
db9f0278
JB
3097 }
3098 done:
c1788fbc 3099 CHECK_CONS_LIST ();
db9f0278
JB
3100 lisp_eval_depth--;
3101 if (backtrace.debug_on_exit)
3102 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
3103 backtrace_list = backtrace.next;
3104 return val;
3105}
3106\f
3107Lisp_Object
3108apply_lambda (fun, args, eval_flag)
3109 Lisp_Object fun, args;
3110 int eval_flag;
3111{
3112 Lisp_Object args_left;
3113 Lisp_Object numargs;
3114 register Lisp_Object *arg_vector;
3115 struct gcpro gcpro1, gcpro2, gcpro3;
3116 register int i;
3117 register Lisp_Object tem;
3a7a9129 3118 USE_SAFE_ALLOCA;
db9f0278
JB
3119
3120 numargs = Flength (args);
b72e0717 3121 SAFE_ALLOCA_LISP (arg_vector, XINT (numargs));
db9f0278
JB
3122 args_left = args;
3123
3124 GCPRO3 (*arg_vector, args_left, fun);
3125 gcpro1.nvars = 0;
3126
3127 for (i = 0; i < XINT (numargs);)
3128 {
3129 tem = Fcar (args_left), args_left = Fcdr (args_left);
3130 if (eval_flag) tem = Feval (tem);
3131 arg_vector[i++] = tem;
3132 gcpro1.nvars = i;
3133 }
3134
3135 UNGCPRO;
3136
3137 if (eval_flag)
3138 {
3139 backtrace_list->args = arg_vector;
3140 backtrace_list->nargs = i;
3141 }
3142 backtrace_list->evalargs = 0;
3143 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
3144
3145 /* Do the debug-on-exit now, while arg_vector still exists. */
3146 if (backtrace_list->debug_on_exit)
3147 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
3148 /* Don't do it again when we return to eval. */
3149 backtrace_list->debug_on_exit = 0;
3a7a9129 3150 SAFE_FREE ();
db9f0278
JB
3151 return tem;
3152}
3153
3154/* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
3155 and return the result of evaluation.
3156 FUN must be either a lambda-expression or a compiled-code object. */
3157
2901f1d1 3158static Lisp_Object
db9f0278
JB
3159funcall_lambda (fun, nargs, arg_vector)
3160 Lisp_Object fun;
3161 int nargs;
3162 register Lisp_Object *arg_vector;
3163{
9ab90667 3164 Lisp_Object val, syms_left, next;
aed13378 3165 int count = SPECPDL_INDEX ();
9ab90667 3166 int i, optional, rest;
db9f0278 3167
90165123 3168 if (CONSP (fun))
9ab90667
GM
3169 {
3170 syms_left = XCDR (fun);
3171 if (CONSP (syms_left))
3172 syms_left = XCAR (syms_left);
3173 else
734d55a2 3174 xsignal1 (Qinvalid_function, fun);
9ab90667 3175 }
90165123 3176 else if (COMPILEDP (fun))
845975f5 3177 syms_left = AREF (fun, COMPILED_ARGLIST);
9ab90667
GM
3178 else
3179 abort ();
db9f0278 3180
9ab90667
GM
3181 i = optional = rest = 0;
3182 for (; CONSP (syms_left); syms_left = XCDR (syms_left))
db9f0278
JB
3183 {
3184 QUIT;
177c0ea7 3185
9ab90667 3186 next = XCAR (syms_left);
8788120f 3187 if (!SYMBOLP (next))
734d55a2 3188 xsignal1 (Qinvalid_function, fun);
177c0ea7 3189
db9f0278
JB
3190 if (EQ (next, Qand_rest))
3191 rest = 1;
3192 else if (EQ (next, Qand_optional))
3193 optional = 1;
3194 else if (rest)
3195 {
9ffa21d4 3196 specbind (next, Flist (nargs - i, &arg_vector[i]));
db9f0278
JB
3197 i = nargs;
3198 }
3199 else if (i < nargs)
9ab90667 3200 specbind (next, arg_vector[i++]);
db9f0278 3201 else if (!optional)
734d55a2 3202 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
db9f0278
JB
3203 else
3204 specbind (next, Qnil);
3205 }
3206
9ab90667 3207 if (!NILP (syms_left))
734d55a2 3208 xsignal1 (Qinvalid_function, fun);
9ab90667 3209 else if (i < nargs)
734d55a2 3210 xsignal2 (Qwrong_number_of_arguments, fun, make_number (nargs));
db9f0278 3211
90165123 3212 if (CONSP (fun))
9ab90667 3213 val = Fprogn (XCDR (XCDR (fun)));
db9f0278 3214 else
ca248607
RS
3215 {
3216 /* If we have not actually read the bytecode string
3217 and constants vector yet, fetch them from the file. */
845975f5 3218 if (CONSP (AREF (fun, COMPILED_BYTECODE)))
661c7d6e 3219 Ffetch_bytecode (fun);
845975f5
SM
3220 val = Fbyte_code (AREF (fun, COMPILED_BYTECODE),
3221 AREF (fun, COMPILED_CONSTANTS),
3222 AREF (fun, COMPILED_STACK_DEPTH));
ca248607 3223 }
177c0ea7 3224
db9f0278
JB
3225 return unbind_to (count, val);
3226}
661c7d6e
KH
3227
3228DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
9dbc9081
PJ
3229 1, 1, 0,
3230 doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */)
3231 (object)
661c7d6e
KH
3232 Lisp_Object object;
3233{
3234 Lisp_Object tem;
3235
845975f5 3236 if (COMPILEDP (object) && CONSP (AREF (object, COMPILED_BYTECODE)))
661c7d6e 3237 {
845975f5 3238 tem = read_doc_string (AREF (object, COMPILED_BYTECODE));
5bbdb090 3239 if (!CONSP (tem))
845975f5
SM
3240 {
3241 tem = AREF (object, COMPILED_BYTECODE);
3242 if (CONSP (tem) && STRINGP (XCAR (tem)))
d5db4077 3243 error ("Invalid byte code in %s", SDATA (XCAR (tem)));
845975f5
SM
3244 else
3245 error ("Invalid byte code");
3246 }
3ae565b3
SM
3247 ASET (object, COMPILED_BYTECODE, XCAR (tem));
3248 ASET (object, COMPILED_CONSTANTS, XCDR (tem));
661c7d6e
KH
3249 }
3250 return object;
3251}
db9f0278
JB
3252\f
3253void
3254grow_specpdl ()
3255{
aed13378 3256 register int count = SPECPDL_INDEX ();
db9f0278
JB
3257 if (specpdl_size >= max_specpdl_size)
3258 {
3259 if (max_specpdl_size < 400)
3260 max_specpdl_size = 400;
3261 if (specpdl_size >= max_specpdl_size)
734d55a2 3262 signal_error ("Variable binding depth exceeds max-specpdl-size", Qnil);
db9f0278
JB
3263 }
3264 specpdl_size *= 2;
3265 if (specpdl_size > max_specpdl_size)
3266 specpdl_size = max_specpdl_size;
3267 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
3268 specpdl_ptr = specpdl + count;
3269}
3270
3271void
3272specbind (symbol, value)
3273 Lisp_Object symbol, value;
3274{
19cebf5a 3275 Lisp_Object valcontents;
db9f0278 3276
b7826503 3277 CHECK_SYMBOL (symbol);
db9f0278
JB
3278 if (specpdl_ptr == specpdl + specpdl_size)
3279 grow_specpdl ();
719177b3 3280
19cebf5a
GM
3281 /* The most common case is that of a non-constant symbol with a
3282 trivial value. Make that as fast as we can. */
3283 valcontents = SYMBOL_VALUE (symbol);
3284 if (!MISCP (valcontents) && !SYMBOL_CONSTANT_P (symbol))
719177b3 3285 {
9ab90667 3286 specpdl_ptr->symbol = symbol;
19cebf5a 3287 specpdl_ptr->old_value = valcontents;
9ab90667
GM
3288 specpdl_ptr->func = NULL;
3289 ++specpdl_ptr;
19cebf5a 3290 SET_SYMBOL_VALUE (symbol, value);
719177b3
RS
3291 }
3292 else
9ab90667 3293 {
136eb6ed 3294 Lisp_Object ovalue = find_symbol_value (symbol);
9ab90667
GM
3295 specpdl_ptr->func = 0;
3296 specpdl_ptr->old_value = ovalue;
719177b3 3297
eb700b82
GM
3298 valcontents = XSYMBOL (symbol)->value;
3299
3300 if (BUFFER_LOCAL_VALUEP (valcontents)
eb700b82 3301 || BUFFER_OBJFWDP (valcontents))
9ab90667 3302 {
0967b4b0
GM
3303 Lisp_Object where, current_buffer;
3304
3305 current_buffer = Fcurrent_buffer ();
177c0ea7 3306
9ab90667 3307 /* For a local variable, record both the symbol and which
eb700b82
GM
3308 buffer's or frame's value we are saving. */
3309 if (!NILP (Flocal_variable_p (symbol, Qnil)))
0967b4b0 3310 where = current_buffer;
67ee9f6e 3311 else if (BUFFER_LOCAL_VALUEP (valcontents)
eb700b82
GM
3312 && XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
3313 where = XBUFFER_LOCAL_VALUE (valcontents)->frame;
3314 else
3315 where = Qnil;
3316
3317 /* We're not using the `unused' slot in the specbinding
3318 structure because this would mean we have to do more
3319 work for simple variables. */
0967b4b0 3320 specpdl_ptr->symbol = Fcons (symbol, Fcons (where, current_buffer));
06bccf8e
GM
3321
3322 /* If SYMBOL is a per-buffer variable which doesn't have a
3323 buffer-local value here, make the `let' change the global
3324 value by changing the value of SYMBOL in all buffers not
3325 having their own value. This is consistent with what
3326 happens with other buffer-local variables. */
eb700b82
GM
3327 if (NILP (where)
3328 && BUFFER_OBJFWDP (valcontents))
06bccf8e
GM
3329 {
3330 ++specpdl_ptr;
3331 Fset_default (symbol, value);
3332 return;
3333 }
9ab90667
GM
3334 }
3335 else
3336 specpdl_ptr->symbol = symbol;
3337
3338 specpdl_ptr++;
136eb6ed
SM
3339 /* We used to do
3340 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
3341 store_symval_forwarding (symbol, ovalue, value, NULL);
3342 else
3343 but ovalue comes from find_symbol_value which should never return
3344 such an internal value. */
3345 eassert (!(BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue)));
3346 set_internal (symbol, value, 0, 1);
9ab90667 3347 }
db9f0278
JB
3348}
3349
3350void
3351record_unwind_protect (function, arg)
1d159538 3352 Lisp_Object (*function) P_ ((Lisp_Object));
db9f0278
JB
3353 Lisp_Object arg;
3354{
9ba8e10d
CY
3355 eassert (!handling_signal);
3356
db9f0278
JB
3357 if (specpdl_ptr == specpdl + specpdl_size)
3358 grow_specpdl ();
3359 specpdl_ptr->func = function;
3360 specpdl_ptr->symbol = Qnil;
3361 specpdl_ptr->old_value = arg;
3362 specpdl_ptr++;
3363}
3364
3365Lisp_Object
3366unbind_to (count, value)
3367 int count;
3368 Lisp_Object value;
3369{
5a073f50
KS
3370 Lisp_Object quitf = Vquit_flag;
3371 struct gcpro gcpro1, gcpro2;
db9f0278 3372
5a073f50 3373 GCPRO2 (value, quitf);
db9f0278
JB
3374 Vquit_flag = Qnil;
3375
3376 while (specpdl_ptr != specpdl + count)
3377 {
611a8f8c
RS
3378 /* Copy the binding, and decrement specpdl_ptr, before we do
3379 the work to unbind it. We decrement first
3380 so that an error in unbinding won't try to unbind
3381 the same entry again, and we copy the binding first
3382 in case more bindings are made during some of the code we run. */
eb700b82 3383
45f266dc
DL
3384 struct specbinding this_binding;
3385 this_binding = *--specpdl_ptr;
611a8f8c
RS
3386
3387 if (this_binding.func != 0)
3388 (*this_binding.func) (this_binding.old_value);
0967b4b0
GM
3389 /* If the symbol is a list, it is really (SYMBOL WHERE
3390 . CURRENT-BUFFER) where WHERE is either nil, a buffer, or a
3391 frame. If WHERE is a buffer or frame, this indicates we
1b1acc13
PJ
3392 bound a variable that had a buffer-local or frame-local
3393 binding. WHERE nil means that the variable had the default
0967b4b0
GM
3394 value when it was bound. CURRENT-BUFFER is the buffer that
3395 was current when the variable was bound. */
611a8f8c 3396 else if (CONSP (this_binding.symbol))
719177b3 3397 {
eb700b82 3398 Lisp_Object symbol, where;
719177b3 3399
611a8f8c
RS
3400 symbol = XCAR (this_binding.symbol);
3401 where = XCAR (XCDR (this_binding.symbol));
719177b3 3402
eb700b82 3403 if (NILP (where))
611a8f8c 3404 Fset_default (symbol, this_binding.old_value);
eb700b82 3405 else if (BUFFERP (where))
611a8f8c 3406 set_internal (symbol, this_binding.old_value, XBUFFER (where), 1);
177c0ea7 3407 else
611a8f8c 3408 set_internal (symbol, this_binding.old_value, NULL, 1);
719177b3 3409 }
db9f0278 3410 else
9ab90667
GM
3411 {
3412 /* If variable has a trivial value (no forwarding), we can
3413 just set it. No need to check for constant symbols here,
3414 since that was already done by specbind. */
611a8f8c
RS
3415 if (!MISCP (SYMBOL_VALUE (this_binding.symbol)))
3416 SET_SYMBOL_VALUE (this_binding.symbol, this_binding.old_value);
9ab90667 3417 else
611a8f8c 3418 set_internal (this_binding.symbol, this_binding.old_value, 0, 1);
9ab90667 3419 }
db9f0278 3420 }
177c0ea7 3421
5a073f50
KS
3422 if (NILP (Vquit_flag) && !NILP (quitf))
3423 Vquit_flag = quitf;
db9f0278
JB
3424
3425 UNGCPRO;
db9f0278
JB
3426 return value;
3427}
3428\f
db9f0278 3429DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
9dbc9081
PJ
3430 doc: /* Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
3431The debugger is entered when that frame exits, if the flag is non-nil. */)
3432 (level, flag)
db9f0278
JB
3433 Lisp_Object level, flag;
3434{
3435 register struct backtrace *backlist = backtrace_list;
3436 register int i;
3437
b7826503 3438 CHECK_NUMBER (level);
db9f0278
JB
3439
3440 for (i = 0; backlist && i < XINT (level); i++)
3441 {
3442 backlist = backlist->next;
3443 }
3444
3445 if (backlist)
265a9e55 3446 backlist->debug_on_exit = !NILP (flag);
db9f0278
JB
3447
3448 return flag;
3449}
3450
3451DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
9dbc9081
PJ
3452 doc: /* Print a trace of Lisp function calls currently active.
3453Output stream used is value of `standard-output'. */)
3454 ()
db9f0278
JB
3455{
3456 register struct backtrace *backlist = backtrace_list;
3457 register int i;
3458 Lisp_Object tail;
3459 Lisp_Object tem;
3460 extern Lisp_Object Vprint_level;
3461 struct gcpro gcpro1;
3462
a631e24c 3463 XSETFASTINT (Vprint_level, 3);
db9f0278
JB
3464
3465 tail = Qnil;
3466 GCPRO1 (tail);
3467
3468 while (backlist)
3469 {
3470 write_string (backlist->debug_on_exit ? "* " : " ", 2);
3471 if (backlist->nargs == UNEVALLED)
3472 {
3473 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
b6703b02 3474 write_string ("\n", -1);
db9f0278
JB
3475 }
3476 else
3477 {
3478 tem = *backlist->function;
3479 Fprin1 (tem, Qnil); /* This can QUIT */
3480 write_string ("(", -1);
3481 if (backlist->nargs == MANY)
3482 {
3483 for (tail = *backlist->args, i = 0;
265a9e55 3484 !NILP (tail);
db9f0278
JB
3485 tail = Fcdr (tail), i++)
3486 {
3487 if (i) write_string (" ", -1);
3488 Fprin1 (Fcar (tail), Qnil);
3489 }
3490 }
3491 else
3492 {
3493 for (i = 0; i < backlist->nargs; i++)
3494 {
3495 if (i) write_string (" ", -1);
3496 Fprin1 (backlist->args[i], Qnil);
3497 }
3498 }
b6703b02 3499 write_string (")\n", -1);
db9f0278 3500 }
db9f0278
JB
3501 backlist = backlist->next;
3502 }
3503
3504 Vprint_level = Qnil;
3505 UNGCPRO;
3506 return Qnil;
3507}
3508
17401c97 3509DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, NULL,
9dbc9081
PJ
3510 doc: /* Return the function and arguments NFRAMES up from current execution point.
3511If that frame has not evaluated the arguments yet (or is a special form),
3512the value is (nil FUNCTION ARG-FORMS...).
3513If that frame has evaluated its arguments and called its function already,
3514the value is (t FUNCTION ARG-VALUES...).
3515A &rest arg is represented as the tail of the list ARG-VALUES.
3516FUNCTION is whatever was supplied as car of evaluated list,
3517or a lambda expression for macro calls.
3518If NFRAMES is more than the number of frames, the value is nil. */)
3519 (nframes)
db9f0278
JB
3520 Lisp_Object nframes;
3521{
3522 register struct backtrace *backlist = backtrace_list;
3523 register int i;
3524 Lisp_Object tem;
3525
b7826503 3526 CHECK_NATNUM (nframes);
db9f0278
JB
3527
3528 /* Find the frame requested. */
b6703b02 3529 for (i = 0; backlist && i < XFASTINT (nframes); i++)
db9f0278
JB
3530 backlist = backlist->next;
3531
3532 if (!backlist)
3533 return Qnil;
3534 if (backlist->nargs == UNEVALLED)
3535 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
3536 else
3537 {
3538 if (backlist->nargs == MANY)
3539 tem = *backlist->args;
3540 else
3541 tem = Flist (backlist->nargs, backlist->args);
3542
3543 return Fcons (Qt, Fcons (*backlist->function, tem));
3544 }
3545}
a2ff3819 3546
db9f0278 3547\f
4ce0541e
SM
3548void
3549mark_backtrace ()
3550{
3551 register struct backtrace *backlist;
3552 register int i;
3553
3554 for (backlist = backtrace_list; backlist; backlist = backlist->next)
3555 {
3556 mark_object (*backlist->function);
3557
3558 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
3559 i = 0;
3560 else
3561 i = backlist->nargs - 1;
3562 for (; i >= 0; i--)
3563 mark_object (backlist->args[i]);
3564 }
3565}
3566
dfcf069d 3567void
db9f0278
JB
3568syms_of_eval ()
3569{
3570 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
82fc29a1 3571 doc: /* *Limit on number of Lisp variable bindings and `unwind-protect's.
9f5903bb 3572If Lisp code tries to increase the total number past this amount,
2520dc0c
RS
3573an error is signaled.
3574You can safely use a value considerably larger than the default value,
3575if that proves inconveniently small. However, if you increase it too far,
3576Emacs could run out of memory trying to make the stack bigger. */);
db9f0278
JB
3577
3578 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
9dbc9081 3579 doc: /* *Limit on depth in `eval', `apply' and `funcall' before error.
2520dc0c
RS
3580
3581This limit serves to catch infinite recursions for you before they cause
9dbc9081
PJ
3582actual stack overflow in C, which would be fatal for Emacs.
3583You can safely make it considerably larger than its default value,
2520dc0c
RS
3584if that proves inconveniently small. However, if you increase it too far,
3585Emacs could overflow the real C stack, and crash. */);
db9f0278
JB
3586
3587 DEFVAR_LISP ("quit-flag", &Vquit_flag,
9dbc9081 3588 doc: /* Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
42ed718e
RS
3589If the value is t, that means do an ordinary quit.
3590If the value equals `throw-on-input', that means quit by throwing
3591to the tag specified in `throw-on-input'; it's for handling `while-no-input'.
3592Typing C-g sets `quit-flag' to t, regardless of `inhibit-quit',
3593but `inhibit-quit' non-nil prevents anything from taking notice of that. */);
db9f0278
JB
3594 Vquit_flag = Qnil;
3595
3596 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
9dbc9081
PJ
3597 doc: /* Non-nil inhibits C-g quitting from happening immediately.
3598Note that `quit-flag' will still be set by typing C-g,
3599so a quit will be signaled as soon as `inhibit-quit' is nil.
3600To prevent this happening, set `quit-flag' to nil
3601before making `inhibit-quit' nil. */);
db9f0278
JB
3602 Vinhibit_quit = Qnil;
3603
d67b4f80 3604 Qinhibit_quit = intern_c_string ("inhibit-quit");
ad236261
JB
3605 staticpro (&Qinhibit_quit);
3606
d67b4f80 3607 Qautoload = intern_c_string ("autoload");
db9f0278
JB
3608 staticpro (&Qautoload);
3609
d67b4f80 3610 Qdebug_on_error = intern_c_string ("debug-on-error");
db9f0278
JB
3611 staticpro (&Qdebug_on_error);
3612
d67b4f80 3613 Qmacro = intern_c_string ("macro");
db9f0278
JB
3614 staticpro (&Qmacro);
3615
d67b4f80 3616 Qdeclare = intern_c_string ("declare");
d6edd563 3617 staticpro (&Qdeclare);
177c0ea7 3618
db9f0278
JB
3619 /* Note that the process handling also uses Qexit, but we don't want
3620 to staticpro it twice, so we just do it here. */
d67b4f80 3621 Qexit = intern_c_string ("exit");
db9f0278
JB
3622 staticpro (&Qexit);
3623
d67b4f80 3624 Qinteractive = intern_c_string ("interactive");
db9f0278
JB
3625 staticpro (&Qinteractive);
3626
d67b4f80 3627 Qcommandp = intern_c_string ("commandp");
db9f0278
JB
3628 staticpro (&Qcommandp);
3629
d67b4f80 3630 Qdefun = intern_c_string ("defun");
db9f0278
JB
3631 staticpro (&Qdefun);
3632
d67b4f80 3633 Qand_rest = intern_c_string ("&rest");
db9f0278
JB
3634 staticpro (&Qand_rest);
3635
d67b4f80 3636 Qand_optional = intern_c_string ("&optional");
db9f0278
JB
3637 staticpro (&Qand_optional);
3638
d67b4f80 3639 Qdebug = intern_c_string ("debug");
f01cbfdd
RS
3640 staticpro (&Qdebug);
3641
128c0f66 3642 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
704788b3
RS
3643 doc: /* *Non-nil means errors display a backtrace buffer.
3644More precisely, this happens for any error that is handled
3645by the editor command loop.
9dbc9081
PJ
3646If the value is a list, an error only means to display a backtrace
3647if one of its condition symbols appears in the list. */);
128c0f66 3648 Vstack_trace_on_error = Qnil;
db9f0278 3649
128c0f66 3650 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
9dbc9081
PJ
3651 doc: /* *Non-nil means enter debugger if an error is signaled.
3652Does not apply to errors handled by `condition-case' or those
3653matched by `debug-ignored-errors'.
3654If the value is a list, an error only means to enter the debugger
3655if one of its condition symbols appears in the list.
3656When you evaluate an expression interactively, this variable
3657is temporarily non-nil if `eval-expression-debug-on-error' is non-nil.
fbbdcf2f
CY
3658The command `toggle-debug-on-error' toggles this.
3659See also the variable `debug-on-quit'. */);
128c0f66 3660 Vdebug_on_error = Qnil;
db9f0278 3661
fc950e09 3662 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
9dbc9081
PJ
3663 doc: /* *List of errors for which the debugger should not be called.
3664Each element may be a condition-name or a regexp that matches error messages.
3665If any element applies to a given error, that error skips the debugger
3666and just returns to top level.
3667This overrides the variable `debug-on-error'.
3668It does not apply to errors handled by `condition-case'. */);
fc950e09
KH
3669 Vdebug_ignored_errors = Qnil;
3670
db9f0278 3671 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
82fc29a1
JB
3672 doc: /* *Non-nil means enter debugger if quit is signaled (C-g, for example).
3673Does not apply if quit is handled by a `condition-case'. */);
db9f0278
JB
3674 debug_on_quit = 0;
3675
3676 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
9dbc9081 3677 doc: /* Non-nil means enter debugger before next `eval', `apply' or `funcall'. */);
db9f0278 3678
556d7314 3679 DEFVAR_BOOL ("debugger-may-continue", &debugger_may_continue,
9dbc9081
PJ
3680 doc: /* Non-nil means debugger may continue execution.
3681This is nil when the debugger is called under circumstances where it
3682might not be safe to continue. */);
dac204bc 3683 debugger_may_continue = 1;
556d7314 3684
db9f0278 3685 DEFVAR_LISP ("debugger", &Vdebugger,
9dbc9081
PJ
3686 doc: /* Function to call to invoke debugger.
3687If due to frame exit, args are `exit' and the value being returned;
3688 this function's value will be returned instead of that.
3689If due to error, args are `error' and a list of the args to `signal'.
3690If due to `apply' or `funcall' entry, one arg, `lambda'.
3691If due to `eval' entry, one arg, t. */);
db9f0278
JB
3692 Vdebugger = Qnil;
3693
61ede770 3694 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
9dbc9081
PJ
3695 doc: /* If non-nil, this is a function for `signal' to call.
3696It receives the same arguments that `signal' was given.
3697The Edebug package uses this to regain control. */);
61ede770
RS
3698 Vsignal_hook_function = Qnil;
3699
57a6e758 3700 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
9dbc9081
PJ
3701 doc: /* *Non-nil means call the debugger regardless of condition handlers.
3702Note that `debug-on-error', `debug-on-quit' and friends
3703still determine whether to handle the particular condition. */);
57a6e758 3704 Vdebug_on_signal = Qnil;
61ede770 3705
d6edd563
GM
3706 DEFVAR_LISP ("macro-declaration-function", &Vmacro_declaration_function,
3707 doc: /* Function to process declarations in a macro definition.
3708The function will be called with two args MACRO and DECL.
3709MACRO is the name of the macro being defined.
3710DECL is a list `(declare ...)' containing the declarations.
3711The value the function returns is not used. */);
3712 Vmacro_declaration_function = Qnil;
3713
d67b4f80 3714 Vrun_hooks = intern_c_string ("run-hooks");
6e6e9f08 3715 staticpro (&Vrun_hooks);
db9f0278
JB
3716
3717 staticpro (&Vautoload_queue);
3718 Vautoload_queue = Qnil;
a2ff3819
GM
3719 staticpro (&Vsignaling_function);
3720 Vsignaling_function = Qnil;
db9f0278
JB
3721
3722 defsubr (&Sor);
3723 defsubr (&Sand);
3724 defsubr (&Sif);
3725 defsubr (&Scond);
3726 defsubr (&Sprogn);
3727 defsubr (&Sprog1);
3728 defsubr (&Sprog2);
3729 defsubr (&Ssetq);
3730 defsubr (&Squote);
3731 defsubr (&Sfunction);
3732 defsubr (&Sdefun);
3733 defsubr (&Sdefmacro);
3734 defsubr (&Sdefvar);
19cebf5a 3735 defsubr (&Sdefvaralias);
db9f0278
JB
3736 defsubr (&Sdefconst);
3737 defsubr (&Suser_variable_p);
3738 defsubr (&Slet);
3739 defsubr (&SletX);
3740 defsubr (&Swhile);
3741 defsubr (&Smacroexpand);
3742 defsubr (&Scatch);
3743 defsubr (&Sthrow);
3744 defsubr (&Sunwind_protect);
3745 defsubr (&Scondition_case);
3746 defsubr (&Ssignal);
3747 defsubr (&Sinteractive_p);
4b664e76 3748 defsubr (&Scalled_interactively_p);
db9f0278
JB
3749 defsubr (&Scommandp);
3750 defsubr (&Sautoload);
3751 defsubr (&Seval);
3752 defsubr (&Sapply);
3753 defsubr (&Sfuncall);
ff936e53
SM
3754 defsubr (&Srun_hooks);
3755 defsubr (&Srun_hook_with_args);
3756 defsubr (&Srun_hook_with_args_until_success);
3757 defsubr (&Srun_hook_with_args_until_failure);
661c7d6e 3758 defsubr (&Sfetch_bytecode);
db9f0278
JB
3759 defsubr (&Sbacktrace_debug);
3760 defsubr (&Sbacktrace);
3761 defsubr (&Sbacktrace_frame);
3762}
ab5796a9
MB
3763
3764/* arch-tag: 014a07aa-33ab-4a8f-a3d2-ee8a4a9ff7fb
3765 (do not change this comment) */