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