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