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