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