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