various fixes and gratuitous movements.
[bpt/emacs.git] / src / eval.c
CommitLineData
db9f0278 1/* Evaluator for GNU Emacs Lisp interpreter.
68c45bf0 2 Copyright (C) 1985, 86, 87, 93, 94, 95, 1999 Free Software Foundation, Inc.
db9f0278
JB
3
4This file is part of GNU Emacs.
5
6GNU Emacs is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
96277b2d 8the Free Software Foundation; either version 2, or (at your option)
db9f0278
JB
9any later version.
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Emacs; see the file COPYING. If not, write to
3b7ad313
EN
18the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA. */
db9f0278
JB
20
21
18160b98 22#include <config.h>
dfcf069d 23
db9f0278 24#include "lisp.h"
9ac0d9e0 25#include "blockinput.h"
db9f0278
JB
26
27#ifndef standalone
28#include "commands.h"
1f98fa48 29#include "keyboard.h"
db9f0278
JB
30#else
31#define INTERACTIVE 1
32#endif
33
34#include <setjmp.h>
35
36/* This definition is duplicated in alloc.c and keyboard.c */
37/* Putting it in lisp.h makes cc bomb out! */
38
39struct backtrace
40 {
41 struct backtrace *next;
42 Lisp_Object *function;
43 Lisp_Object *args; /* Points to vector of args. */
daa37602
JB
44 int nargs; /* Length of vector.
45 If nargs is UNEVALLED, args points to slot holding
46 list of unevalled args */
db9f0278
JB
47 char evalargs;
48 /* Nonzero means call value of debugger when done with this operation. */
49 char debug_on_exit;
50 };
51
52struct backtrace *backtrace_list;
53
82da7701
JB
54/* This structure helps implement the `catch' and `throw' control
55 structure. A struct catchtag contains all the information needed
56 to restore the state of the interpreter after a non-local jump.
57
58 Handlers for error conditions (represented by `struct handler'
59 structures) just point to a catch tag to do the cleanup required
60 for their jumps.
61
62 catchtag structures are chained together in the C calling stack;
63 the `next' member points to the next outer catchtag.
64
65 A call like (throw TAG VAL) searches for a catchtag whose `tag'
66 member is TAG, and then unbinds to it. The `val' member is used to
67 hold VAL while the stack is unwound; `val' is returned as the value
68 of the catch form.
69
70 All the other members are concerned with restoring the interpreter
71 state. */
db9f0278
JB
72struct catchtag
73 {
74 Lisp_Object tag;
75 Lisp_Object val;
76 struct catchtag *next;
77 struct gcpro *gcpro;
78 jmp_buf jmp;
79 struct backtrace *backlist;
80 struct handler *handlerlist;
81 int lisp_eval_depth;
82 int pdlcount;
83 int poll_suppress_count;
bcf28080 84 struct byte_stack *byte_stack;
db9f0278
JB
85 };
86
87struct catchtag *catchlist;
88
15934ffa
RS
89#ifdef DEBUG_GCPRO
90/* Count levels of GCPRO to detect failure to UNGCPRO. */
91int gcpro_level;
92#endif
93
db9f0278 94Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
ad236261 95Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
db9f0278
JB
96Lisp_Object Qmocklisp_arguments, Vmocklisp_arguments, Qmocklisp;
97Lisp_Object Qand_rest, Qand_optional;
98Lisp_Object Qdebug_on_error;
99
6e6e9f08
RS
100/* This holds either the symbol `run-hooks' or nil.
101 It is nil at an early stage of startup, and when Emacs
102 is shutting down. */
db9f0278
JB
103Lisp_Object Vrun_hooks;
104
105/* Non-nil means record all fset's and provide's, to be undone
106 if the file being autoloaded is not fully loaded.
107 They are recorded by being consed onto the front of Vautoload_queue:
108 (FUN . ODEF) for a defun, (OFEATURES . nil) for a provide. */
109
110Lisp_Object Vautoload_queue;
111
112/* Current number of specbindings allocated in specpdl. */
113int specpdl_size;
114
115/* Pointer to beginning of specpdl. */
116struct specbinding *specpdl;
117
118/* Pointer to first unused element in specpdl. */
119struct specbinding *specpdl_ptr;
120
121/* Maximum size allowed for specpdl allocation */
122int max_specpdl_size;
123
124/* Depth in Lisp evaluations and function calls. */
125int lisp_eval_depth;
126
127/* Maximum allowed depth in Lisp evaluations and function calls. */
128int max_lisp_eval_depth;
129
130/* Nonzero means enter debugger before next function call */
131int debug_on_next_call;
132
128c0f66 133/* List of conditions (non-nil atom means all) which cause a backtrace
4de86b16 134 if an error is handled by the command loop's error handler. */
128c0f66 135Lisp_Object Vstack_trace_on_error;
db9f0278 136
128c0f66 137/* List of conditions (non-nil atom means all) which enter the debugger
4de86b16 138 if an error is handled by the command loop's error handler. */
128c0f66 139Lisp_Object Vdebug_on_error;
db9f0278 140
fc950e09
KH
141/* List of conditions and regexps specifying error messages which
142 do not enter the debugger even if Vdebug_on_errors says they should. */
143Lisp_Object Vdebug_ignored_errors;
144
61ede770 145/* Non-nil means call the debugger even if the error will be handled. */
57a6e758 146Lisp_Object Vdebug_on_signal;
61ede770
RS
147
148/* Hook for edebug to use. */
149Lisp_Object Vsignal_hook_function;
150
db9f0278 151/* Nonzero means enter debugger if a quit signal
128c0f66 152 is handled by the command loop's error handler. */
db9f0278
JB
153int debug_on_quit;
154
be857679 155/* The value of num_nonmacro_input_events as of the last time we
82da7701 156 started to enter the debugger. If we decide to enter the debugger
be857679 157 again when this is still equal to num_nonmacro_input_events, then we
82da7701
JB
158 know that the debugger itself has an error, and we should just
159 signal the error instead of entering an infinite loop of debugger
160 invocations. */
161int when_entered_debugger;
db9f0278
JB
162
163Lisp_Object Vdebugger;
164
165void specbind (), record_unwind_protect ();
166
420e60e6
RS
167Lisp_Object run_hook_with_args ();
168
db9f0278
JB
169Lisp_Object funcall_lambda ();
170extern Lisp_Object ml_apply (); /* Apply a mocklisp function to unevaluated argument list */
171
dfcf069d 172void
db9f0278
JB
173init_eval_once ()
174{
175 specpdl_size = 50;
716acfce 176 specpdl = (struct specbinding *) xmalloc (specpdl_size * sizeof (struct specbinding));
270e8074 177 specpdl_ptr = specpdl;
db9f0278 178 max_specpdl_size = 600;
969f5145 179 max_lisp_eval_depth = 300;
34d470ba
RS
180
181 Vrun_hooks = Qnil;
db9f0278
JB
182}
183
dfcf069d 184void
db9f0278
JB
185init_eval ()
186{
187 specpdl_ptr = specpdl;
188 catchlist = 0;
189 handlerlist = 0;
190 backtrace_list = 0;
191 Vquit_flag = Qnil;
192 debug_on_next_call = 0;
193 lisp_eval_depth = 0;
87e21fbd 194#ifdef DEBUG_GCPRO
15934ffa 195 gcpro_level = 0;
87e21fbd 196#endif
be857679 197 /* This is less than the initial value of num_nonmacro_input_events. */
b5b911f9 198 when_entered_debugger = -1;
db9f0278
JB
199}
200
201Lisp_Object
202call_debugger (arg)
203 Lisp_Object arg;
204{
205 if (lisp_eval_depth + 20 > max_lisp_eval_depth)
206 max_lisp_eval_depth = lisp_eval_depth + 20;
207 if (specpdl_size + 40 > max_specpdl_size)
208 max_specpdl_size = specpdl_size + 40;
209 debug_on_next_call = 0;
be857679 210 when_entered_debugger = num_nonmacro_input_events;
db9f0278
JB
211 return apply1 (Vdebugger, arg);
212}
213
dfcf069d 214void
db9f0278
JB
215do_debug_on_call (code)
216 Lisp_Object code;
217{
218 debug_on_next_call = 0;
219 backtrace_list->debug_on_exit = 1;
220 call_debugger (Fcons (code, Qnil));
221}
222\f
223/* NOTE!!! Every function that can call EVAL must protect its args
224 and temporaries from garbage collection while it needs them.
225 The definition of `For' shows what you have to do. */
226
227DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
228 "Eval args until one of them yields non-nil, then return that value.\n\
229The remaining args are not evalled at all.\n\
230If all args return nil, return nil.")
231 (args)
232 Lisp_Object args;
233{
234 register Lisp_Object val;
235 Lisp_Object args_left;
236 struct gcpro gcpro1;
237
265a9e55 238 if (NILP(args))
db9f0278
JB
239 return Qnil;
240
241 args_left = args;
242 GCPRO1 (args_left);
243
244 do
245 {
246 val = Feval (Fcar (args_left));
265a9e55 247 if (!NILP (val))
db9f0278
JB
248 break;
249 args_left = Fcdr (args_left);
250 }
265a9e55 251 while (!NILP(args_left));
db9f0278
JB
252
253 UNGCPRO;
254 return val;
255}
256
257DEFUN ("and", Fand, Sand, 0, UNEVALLED, 0,
258 "Eval args until one of them yields nil, then return nil.\n\
259The remaining args are not evalled at all.\n\
260If no arg yields nil, return the last arg's value.")
261 (args)
262 Lisp_Object args;
263{
264 register Lisp_Object val;
265 Lisp_Object args_left;
266 struct gcpro gcpro1;
267
265a9e55 268 if (NILP(args))
db9f0278
JB
269 return Qt;
270
271 args_left = args;
272 GCPRO1 (args_left);
273
274 do
275 {
276 val = Feval (Fcar (args_left));
265a9e55 277 if (NILP (val))
db9f0278
JB
278 break;
279 args_left = Fcdr (args_left);
280 }
265a9e55 281 while (!NILP(args_left));
db9f0278
JB
282
283 UNGCPRO;
284 return val;
285}
286
287DEFUN ("if", Fif, Sif, 2, UNEVALLED, 0,
288 "(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...\n\
289Returns the value of THEN or the value of the last of the ELSE's.\n\
290THEN must be one expression, but ELSE... can be zero or more expressions.\n\
291If COND yields nil, and there are no ELSE's, the value is nil.")
292 (args)
293 Lisp_Object args;
294{
295 register Lisp_Object cond;
296 struct gcpro gcpro1;
297
298 GCPRO1 (args);
299 cond = Feval (Fcar (args));
300 UNGCPRO;
301
265a9e55 302 if (!NILP (cond))
db9f0278
JB
303 return Feval (Fcar (Fcdr (args)));
304 return Fprogn (Fcdr (Fcdr (args)));
305}
306
307DEFUN ("cond", Fcond, Scond, 0, UNEVALLED, 0,
308 "(cond CLAUSES...): try each clause until one succeeds.\n\
309Each clause looks like (CONDITION BODY...). CONDITION is evaluated\n\
310and, if the value is non-nil, this clause succeeds:\n\
311then the expressions in BODY are evaluated and the last one's\n\
312value is the value of the cond-form.\n\
313If no clause succeeds, cond returns nil.\n\
314If a clause has one element, as in (CONDITION),\n\
315CONDITION's value if non-nil is returned from the cond-form.")
316 (args)
317 Lisp_Object args;
318{
319 register Lisp_Object clause, val;
320 struct gcpro gcpro1;
321
322 val = Qnil;
323 GCPRO1 (args);
265a9e55 324 while (!NILP (args))
db9f0278
JB
325 {
326 clause = Fcar (args);
327 val = Feval (Fcar (clause));
265a9e55 328 if (!NILP (val))
db9f0278 329 {
03699b14
KR
330 if (!EQ (XCDR (clause), Qnil))
331 val = Fprogn (XCDR (clause));
db9f0278
JB
332 break;
333 }
03699b14 334 args = XCDR (args);
db9f0278
JB
335 }
336 UNGCPRO;
337
338 return val;
339}
340
341DEFUN ("progn", Fprogn, Sprogn, 0, UNEVALLED, 0,
342 "(progn BODY...): eval BODY forms sequentially and return value of last one.")
343 (args)
344 Lisp_Object args;
345{
346 register Lisp_Object val, tem;
347 Lisp_Object args_left;
348 struct gcpro gcpro1;
349
350 /* In Mocklisp code, symbols at the front of the progn arglist
351 are to be bound to zero. */
352 if (!EQ (Vmocklisp_arguments, Qt))
353 {
354 val = make_number (0);
90165123 355 while (!NILP (args) && (tem = Fcar (args), SYMBOLP (tem)))
db9f0278
JB
356 {
357 QUIT;
358 specbind (tem, val), args = Fcdr (args);
359 }
360 }
361
265a9e55 362 if (NILP(args))
db9f0278
JB
363 return Qnil;
364
365 args_left = args;
366 GCPRO1 (args_left);
367
368 do
369 {
370 val = Feval (Fcar (args_left));
371 args_left = Fcdr (args_left);
372 }
265a9e55 373 while (!NILP(args_left));
db9f0278
JB
374
375 UNGCPRO;
376 return val;
377}
378
379DEFUN ("prog1", Fprog1, Sprog1, 1, UNEVALLED, 0,
380 "(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.\n\
381The value of FIRST is saved during the evaluation of the remaining args,\n\
382whose values are discarded.")
383 (args)
384 Lisp_Object args;
385{
386 Lisp_Object val;
387 register Lisp_Object args_left;
388 struct gcpro gcpro1, gcpro2;
389 register int argnum = 0;
390
265a9e55 391 if (NILP(args))
db9f0278
JB
392 return Qnil;
393
394 args_left = args;
395 val = Qnil;
396 GCPRO2 (args, val);
397
398 do
399 {
400 if (!(argnum++))
401 val = Feval (Fcar (args_left));
402 else
403 Feval (Fcar (args_left));
404 args_left = Fcdr (args_left);
405 }
265a9e55 406 while (!NILP(args_left));
db9f0278
JB
407
408 UNGCPRO;
409 return val;
410}
411
412DEFUN ("prog2", Fprog2, Sprog2, 2, UNEVALLED, 0,
877b578f 413 "(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.\n\
db9f0278
JB
414The value of Y is saved during the evaluation of the remaining args,\n\
415whose values are discarded.")
416 (args)
417 Lisp_Object args;
418{
419 Lisp_Object val;
420 register Lisp_Object args_left;
421 struct gcpro gcpro1, gcpro2;
422 register int argnum = -1;
423
424 val = Qnil;
425
87d238ba 426 if (NILP (args))
db9f0278
JB
427 return Qnil;
428
429 args_left = args;
430 val = Qnil;
431 GCPRO2 (args, val);
432
433 do
434 {
435 if (!(argnum++))
436 val = Feval (Fcar (args_left));
437 else
438 Feval (Fcar (args_left));
439 args_left = Fcdr (args_left);
440 }
87d238ba 441 while (!NILP (args_left));
db9f0278
JB
442
443 UNGCPRO;
444 return val;
445}
446
447DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0,
448 "(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.\n\
b0d75191
RS
449The symbols SYM are variables; they are literal (not evaluated).\n\
450The values VAL are expressions; they are evaluated.\n\
451Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.\n\
452The second VAL is not computed until after the first SYM is set, and so on;\n\
453each VAL can use the new value of variables set earlier in the `setq'.\n\
196e7d3f 454The return value of the `setq' form is the value of the last VAL.")
db9f0278
JB
455 (args)
456 Lisp_Object args;
457{
458 register Lisp_Object args_left;
459 register Lisp_Object val, sym;
460 struct gcpro gcpro1;
461
265a9e55 462 if (NILP(args))
db9f0278
JB
463 return Qnil;
464
465 args_left = args;
466 GCPRO1 (args);
467
468 do
469 {
470 val = Feval (Fcar (Fcdr (args_left)));
471 sym = Fcar (args_left);
472 Fset (sym, val);
473 args_left = Fcdr (Fcdr (args_left));
474 }
265a9e55 475 while (!NILP(args_left));
db9f0278
JB
476
477 UNGCPRO;
478 return val;
479}
480
481DEFUN ("quote", Fquote, Squote, 1, UNEVALLED, 0,
482 "Return the argument, without evaluating it. `(quote x)' yields `x'.")
483 (args)
484 Lisp_Object args;
485{
486 return Fcar (args);
487}
488
489DEFUN ("function", Ffunction, Sfunction, 1, UNEVALLED, 0,
490 "Like `quote', but preferred for objects which are functions.\n\
491In byte compilation, `function' causes its argument to be compiled.\n\
492`quote' cannot do that.")
493 (args)
494 Lisp_Object args;
495{
496 return Fcar (args);
497}
498
499DEFUN ("interactive-p", Finteractive_p, Sinteractive_p, 0, 0, 0,
500 "Return t if function in which this appears was called interactively.\n\
501This means that the function was called with call-interactively (which\n\
502includes being called as the binding of a key)\n\
503and input is currently coming from the keyboard (not in keyboard macro).")
504 ()
505{
506 register struct backtrace *btp;
507 register Lisp_Object fun;
508
509 if (!INTERACTIVE)
510 return Qnil;
511
db9f0278 512 btp = backtrace_list;
daa37602
JB
513
514 /* If this isn't a byte-compiled function, there may be a frame at
515 the top for Finteractive_p itself. If so, skip it. */
516 fun = Findirect_function (*btp->function);
0598f773 517 if (SUBRP (fun) && XSUBR (fun) == &Sinteractive_p)
db9f0278 518 btp = btp->next;
daa37602
JB
519
520 /* If we're running an Emacs 18-style byte-compiled function, there
521 may be a frame for Fbytecode. Now, given the strictest
522 definition, this function isn't really being called
523 interactively, but because that's the way Emacs 18 always builds
524 byte-compiled functions, we'll accept it for now. */
525 if (EQ (*btp->function, Qbytecode))
526 btp = btp->next;
527
528 /* If this isn't a byte-compiled function, then we may now be
529 looking at several frames for special forms. Skip past them. */
530 while (btp &&
531 btp->nargs == UNEVALLED)
a6e3fa71
JB
532 btp = btp->next;
533
daa37602
JB
534 /* btp now points at the frame of the innermost function that isn't
535 a special form, ignoring frames for Finteractive_p and/or
536 Fbytecode at the top. If this frame is for a built-in function
537 (such as load or eval-region) return nil. */
ffd56f97 538 fun = Findirect_function (*btp->function);
90165123 539 if (SUBRP (fun))
db9f0278
JB
540 return Qnil;
541 /* btp points to the frame of a Lisp function that called interactive-p.
542 Return t if that function was called interactively. */
543 if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively))
544 return Qt;
545 return Qnil;
546}
547
548DEFUN ("defun", Fdefun, Sdefun, 2, UNEVALLED, 0,
549 "(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.\n\
550The definition is (lambda ARGLIST [DOCSTRING] BODY...).\n\
551See also the function `interactive'.")
552 (args)
553 Lisp_Object args;
554{
555 register Lisp_Object fn_name;
556 register Lisp_Object defn;
557
558 fn_name = Fcar (args);
559 defn = Fcons (Qlambda, Fcdr (args));
265a9e55 560 if (!NILP (Vpurify_flag))
db9f0278
JB
561 defn = Fpurecopy (defn);
562 Ffset (fn_name, defn);
2a49b6e5 563 LOADHIST_ATTACH (fn_name);
db9f0278
JB
564 return fn_name;
565}
566
567DEFUN ("defmacro", Fdefmacro, Sdefmacro, 2, UNEVALLED, 0,
568 "(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.\n\
569The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).\n\
570When the macro is called, as in (NAME ARGS...),\n\
571the function (lambda ARGLIST BODY...) is applied to\n\
572the list ARGS... as it appears in the expression,\n\
573and the result should be a form to be evaluated instead of the original.")
574 (args)
575 Lisp_Object args;
576{
577 register Lisp_Object fn_name;
578 register Lisp_Object defn;
579
580 fn_name = Fcar (args);
581 defn = Fcons (Qmacro, Fcons (Qlambda, Fcdr (args)));
265a9e55 582 if (!NILP (Vpurify_flag))
db9f0278
JB
583 defn = Fpurecopy (defn);
584 Ffset (fn_name, defn);
2a49b6e5 585 LOADHIST_ATTACH (fn_name);
db9f0278
JB
586 return fn_name;
587}
588
589DEFUN ("defvar", Fdefvar, Sdefvar, 1, UNEVALLED, 0,
590 "(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.\n\
591You are not required to define a variable in order to use it,\n\
592but the definition can supply documentation and an initial value\n\
593in a way that tags can recognize.\n\n\
594INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.\n\
06ef7355
RS
595If SYMBOL is buffer-local, its default value is what is set;\n\
596 buffer-local values are not affected.\n\
db9f0278
JB
597INITVALUE and DOCSTRING are optional.\n\
598If DOCSTRING starts with *, this variable is identified as a user option.\n\
599 This means that M-x set-variable and M-x edit-options recognize it.\n\
600If INITVALUE is missing, SYMBOL's value is not set.")
601 (args)
602 Lisp_Object args;
603{
a42ba017 604 register Lisp_Object sym, tem, tail;
db9f0278
JB
605
606 sym = Fcar (args);
a42ba017
RS
607 tail = Fcdr (args);
608 if (!NILP (Fcdr (Fcdr (tail))))
609 error ("too many arguments");
610
611 if (!NILP (tail))
db9f0278
JB
612 {
613 tem = Fdefault_boundp (sym);
265a9e55 614 if (NILP (tem))
db9f0278
JB
615 Fset_default (sym, Feval (Fcar (Fcdr (args))));
616 }
a42ba017
RS
617 tail = Fcdr (Fcdr (args));
618 if (!NILP (Fcar (tail)))
db9f0278 619 {
ca248607 620 tem = Fcar (tail);
265a9e55 621 if (!NILP (Vpurify_flag))
db9f0278
JB
622 tem = Fpurecopy (tem);
623 Fput (sym, Qvariable_documentation, tem);
624 }
2a49b6e5 625 LOADHIST_ATTACH (sym);
db9f0278
JB
626 return sym;
627}
628
629DEFUN ("defconst", Fdefconst, Sdefconst, 2, UNEVALLED, 0,
630 "(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.\n\
c569512a 631The intent is that neither programs nor users should ever change this value.\n\
db9f0278 632Always sets the value of SYMBOL to the result of evalling INITVALUE.\n\
06ef7355
RS
633If SYMBOL is buffer-local, its default value is what is set;\n\
634 buffer-local values are not affected.\n\
701b1ec2 635DOCSTRING is optional.")
db9f0278
JB
636 (args)
637 Lisp_Object args;
638{
639 register Lisp_Object sym, tem;
640
641 sym = Fcar (args);
a42ba017
RS
642 if (!NILP (Fcdr (Fcdr (Fcdr (args)))))
643 error ("too many arguments");
644
db9f0278
JB
645 Fset_default (sym, Feval (Fcar (Fcdr (args))));
646 tem = Fcar (Fcdr (Fcdr (args)));
265a9e55 647 if (!NILP (tem))
db9f0278 648 {
265a9e55 649 if (!NILP (Vpurify_flag))
db9f0278
JB
650 tem = Fpurecopy (tem);
651 Fput (sym, Qvariable_documentation, tem);
652 }
2a49b6e5 653 LOADHIST_ATTACH (sym);
db9f0278
JB
654 return sym;
655}
656
657DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0,
658 "Returns t if VARIABLE is intended to be set and modified by users.\n\
659\(The alternative is a variable used internally in a Lisp program.)\n\
660Determined by whether the first character of the documentation\n\
65411977 661for the variable is `*'.")
db9f0278
JB
662 (variable)
663 Lisp_Object variable;
664{
665 Lisp_Object documentation;
666
5e78e475
RS
667 if (!SYMBOLP (variable))
668 return Qnil;
669
db9f0278 670 documentation = Fget (variable, Qvariable_documentation);
90165123 671 if (INTEGERP (documentation) && XINT (documentation) < 0)
db9f0278 672 return Qt;
65411977
RS
673 if (STRINGP (documentation)
674 && ((unsigned char) XSTRING (documentation)->data[0] == '*'))
675 return Qt;
676 /* If it is (STRING . INTEGER), a negative integer means a user variable. */
677 if (CONSP (documentation)
03699b14
KR
678 && STRINGP (XCAR (documentation))
679 && INTEGERP (XCDR (documentation))
680 && XINT (XCDR (documentation)) < 0)
db9f0278
JB
681 return Qt;
682 return Qnil;
683}
684\f
685DEFUN ("let*", FletX, SletX, 1, UNEVALLED, 0,
686 "(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
687The value of the last form in BODY is returned.\n\
688Each element of VARLIST is a symbol (which is bound to nil)\n\
689or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
690Each VALUEFORM can refer to the symbols already bound by this VARLIST.")
691 (args)
692 Lisp_Object args;
693{
694 Lisp_Object varlist, val, elt;
695 int count = specpdl_ptr - specpdl;
696 struct gcpro gcpro1, gcpro2, gcpro3;
697
698 GCPRO3 (args, elt, varlist);
699
700 varlist = Fcar (args);
265a9e55 701 while (!NILP (varlist))
db9f0278
JB
702 {
703 QUIT;
704 elt = Fcar (varlist);
90165123 705 if (SYMBOLP (elt))
db9f0278 706 specbind (elt, Qnil);
08564963
JB
707 else if (! NILP (Fcdr (Fcdr (elt))))
708 Fsignal (Qerror,
709 Fcons (build_string ("`let' bindings can have only one value-form"),
710 elt));
db9f0278
JB
711 else
712 {
713 val = Feval (Fcar (Fcdr (elt)));
714 specbind (Fcar (elt), val);
715 }
716 varlist = Fcdr (varlist);
717 }
718 UNGCPRO;
719 val = Fprogn (Fcdr (args));
720 return unbind_to (count, val);
721}
722
723DEFUN ("let", Flet, Slet, 1, UNEVALLED, 0,
724 "(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
725The value of the last form in BODY is returned.\n\
726Each element of VARLIST is a symbol (which is bound to nil)\n\
727or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
728All the VALUEFORMs are evalled before any symbols are bound.")
729 (args)
730 Lisp_Object args;
731{
732 Lisp_Object *temps, tem;
733 register Lisp_Object elt, varlist;
734 int count = specpdl_ptr - specpdl;
735 register int argnum;
736 struct gcpro gcpro1, gcpro2;
737
738 varlist = Fcar (args);
739
740 /* Make space to hold the values to give the bound variables */
741 elt = Flength (varlist);
742 temps = (Lisp_Object *) alloca (XFASTINT (elt) * sizeof (Lisp_Object));
743
744 /* Compute the values and store them in `temps' */
745
746 GCPRO2 (args, *temps);
747 gcpro2.nvars = 0;
748
265a9e55 749 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
db9f0278
JB
750 {
751 QUIT;
752 elt = Fcar (varlist);
90165123 753 if (SYMBOLP (elt))
db9f0278 754 temps [argnum++] = Qnil;
08564963
JB
755 else if (! NILP (Fcdr (Fcdr (elt))))
756 Fsignal (Qerror,
757 Fcons (build_string ("`let' bindings can have only one value-form"),
758 elt));
db9f0278
JB
759 else
760 temps [argnum++] = Feval (Fcar (Fcdr (elt)));
761 gcpro2.nvars = argnum;
762 }
763 UNGCPRO;
764
765 varlist = Fcar (args);
265a9e55 766 for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
db9f0278
JB
767 {
768 elt = Fcar (varlist);
769 tem = temps[argnum++];
90165123 770 if (SYMBOLP (elt))
db9f0278
JB
771 specbind (elt, tem);
772 else
773 specbind (Fcar (elt), tem);
774 }
775
776 elt = Fprogn (Fcdr (args));
777 return unbind_to (count, elt);
778}
779
780DEFUN ("while", Fwhile, Swhile, 1, UNEVALLED, 0,
781 "(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.\n\
782The order of execution is thus TEST, BODY, TEST, BODY and so on\n\
783until TEST returns nil.")
784 (args)
785 Lisp_Object args;
786{
787 Lisp_Object test, body, tem;
788 struct gcpro gcpro1, gcpro2;
789
790 GCPRO2 (test, body);
791
792 test = Fcar (args);
793 body = Fcdr (args);
e3c24a74
RS
794 while (tem = Feval (test),
795 (!EQ (Vmocklisp_arguments, Qt) ? XINT (tem) : !NILP (tem)))
db9f0278
JB
796 {
797 QUIT;
798 Fprogn (body);
799 }
800
801 UNGCPRO;
802 return Qnil;
803}
804
805DEFUN ("macroexpand", Fmacroexpand, Smacroexpand, 1, 2, 0,
806 "Return result of expanding macros at top level of FORM.\n\
807If FORM is not a macro call, it is returned unchanged.\n\
808Otherwise, the macro is expanded and the expansion is considered\n\
809in place of FORM. When a non-macro-call results, it is returned.\n\n\
810The second optional arg ENVIRONMENT species an environment of macro\n\
811definitions to shadow the loaded ones for use in file byte-compilation.")
79e8bfbf 812 (form, environment)
2e267a2e 813 Lisp_Object form;
79e8bfbf 814 Lisp_Object environment;
db9f0278 815{
23d6b5a6 816 /* With cleanups from Hallvard Furuseth. */
db9f0278
JB
817 register Lisp_Object expander, sym, def, tem;
818
819 while (1)
820 {
821 /* Come back here each time we expand a macro call,
822 in case it expands into another macro call. */
90165123 823 if (!CONSP (form))
db9f0278 824 break;
23d6b5a6 825 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
03699b14 826 def = sym = XCAR (form);
23d6b5a6 827 tem = Qnil;
db9f0278
JB
828 /* Trace symbols aliases to other symbols
829 until we get a symbol that is not an alias. */
90165123 830 while (SYMBOLP (def))
db9f0278
JB
831 {
832 QUIT;
23d6b5a6 833 sym = def;
79e8bfbf 834 tem = Fassq (sym, environment);
265a9e55 835 if (NILP (tem))
db9f0278
JB
836 {
837 def = XSYMBOL (sym)->function;
23d6b5a6
JB
838 if (!EQ (def, Qunbound))
839 continue;
db9f0278 840 }
23d6b5a6 841 break;
db9f0278 842 }
79e8bfbf 843 /* Right now TEM is the result from SYM in ENVIRONMENT,
db9f0278 844 and if TEM is nil then DEF is SYM's function definition. */
265a9e55 845 if (NILP (tem))
db9f0278 846 {
79e8bfbf 847 /* SYM is not mentioned in ENVIRONMENT.
db9f0278 848 Look at its function definition. */
90165123 849 if (EQ (def, Qunbound) || !CONSP (def))
db9f0278
JB
850 /* Not defined or definition not suitable */
851 break;
03699b14 852 if (EQ (XCAR (def), Qautoload))
db9f0278
JB
853 {
854 /* Autoloading function: will it be a macro when loaded? */
ee9ee63c 855 tem = Fnth (make_number (4), def);
47ccd8b6 856 if (EQ (tem, Qt) || EQ (tem, Qmacro))
ee9ee63c
JB
857 /* Yes, load it and try again. */
858 {
ca20916b
RS
859 struct gcpro gcpro1;
860 GCPRO1 (form);
ee9ee63c 861 do_autoload (def, sym);
ca20916b 862 UNGCPRO;
ee9ee63c
JB
863 continue;
864 }
865 else
db9f0278 866 break;
db9f0278 867 }
03699b14 868 else if (!EQ (XCAR (def), Qmacro))
db9f0278 869 break;
03699b14 870 else expander = XCDR (def);
db9f0278
JB
871 }
872 else
873 {
03699b14 874 expander = XCDR (tem);
265a9e55 875 if (NILP (expander))
db9f0278
JB
876 break;
877 }
03699b14 878 form = apply1 (expander, XCDR (form));
db9f0278
JB
879 }
880 return form;
881}
882\f
883DEFUN ("catch", Fcatch, Scatch, 1, UNEVALLED, 0,
884 "(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.\n\
4e306308
RS
885TAG is evalled to get the tag to use; it must not be nil.\n\
886\n\
887Then the BODY is executed.\n\
db9f0278
JB
888Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.\n\
889If no throw happens, `catch' returns the value of the last BODY form.\n\
890If a throw happens, it specifies the value to return from `catch'.")
891 (args)
892 Lisp_Object args;
893{
894 register Lisp_Object tag;
895 struct gcpro gcpro1;
896
897 GCPRO1 (args);
898 tag = Feval (Fcar (args));
899 UNGCPRO;
900 return internal_catch (tag, Fprogn, Fcdr (args));
901}
902
903/* Set up a catch, then call C function FUNC on argument ARG.
904 FUNC should return a Lisp_Object.
905 This is how catches are done from within C code. */
906
907Lisp_Object
908internal_catch (tag, func, arg)
909 Lisp_Object tag;
910 Lisp_Object (*func) ();
911 Lisp_Object arg;
912{
913 /* This structure is made part of the chain `catchlist'. */
914 struct catchtag c;
915
916 /* Fill in the components of c, and put it on the list. */
917 c.next = catchlist;
918 c.tag = tag;
919 c.val = Qnil;
920 c.backlist = backtrace_list;
921 c.handlerlist = handlerlist;
922 c.lisp_eval_depth = lisp_eval_depth;
923 c.pdlcount = specpdl_ptr - specpdl;
924 c.poll_suppress_count = poll_suppress_count;
925 c.gcpro = gcprolist;
bcf28080 926 c.byte_stack = byte_stack_list;
db9f0278
JB
927 catchlist = &c;
928
929 /* Call FUNC. */
930 if (! _setjmp (c.jmp))
931 c.val = (*func) (arg);
932
933 /* Throw works by a longjmp that comes right here. */
934 catchlist = c.next;
935 return c.val;
936}
937
ba410f40
JB
938/* Unwind the specbind, catch, and handler stacks back to CATCH, and
939 jump to that CATCH, returning VALUE as the value of that catch.
db9f0278 940
ba410f40
JB
941 This is the guts Fthrow and Fsignal; they differ only in the way
942 they choose the catch tag to throw to. A catch tag for a
943 condition-case form has a TAG of Qnil.
db9f0278 944
ba410f40
JB
945 Before each catch is discarded, unbind all special bindings and
946 execute all unwind-protect clauses made above that catch. Unwind
947 the handler stack as we go, so that the proper handlers are in
948 effect for each unwind-protect clause we run. At the end, restore
949 some static info saved in CATCH, and longjmp to the location
950 specified in the
951
952 This is used for correct unwinding in Fthrow and Fsignal. */
db9f0278
JB
953
954static void
ba410f40 955unwind_to_catch (catch, value)
db9f0278 956 struct catchtag *catch;
ba410f40 957 Lisp_Object value;
db9f0278
JB
958{
959 register int last_time;
960
ba410f40
JB
961 /* Save the value in the tag. */
962 catch->val = value;
963
82da7701 964 /* Restore the polling-suppression count. */
1cdc3155 965 set_poll_suppress_count (catch->poll_suppress_count);
82da7701 966
db9f0278
JB
967 do
968 {
969 last_time = catchlist == catch;
82da7701
JB
970
971 /* Unwind the specpdl stack, and then restore the proper set of
972 handlers. */
db9f0278
JB
973 unbind_to (catchlist->pdlcount, Qnil);
974 handlerlist = catchlist->handlerlist;
975 catchlist = catchlist->next;
976 }
977 while (! last_time);
978
bcf28080 979 byte_stack_list = catch->byte_stack;
db9f0278 980 gcprolist = catch->gcpro;
15934ffa
RS
981#ifdef DEBUG_GCPRO
982 if (gcprolist != 0)
983 gcpro_level = gcprolist->level + 1;
984 else
985 gcpro_level = 0;
986#endif
db9f0278
JB
987 backtrace_list = catch->backlist;
988 lisp_eval_depth = catch->lisp_eval_depth;
ba410f40
JB
989
990 _longjmp (catch->jmp, 1);
db9f0278
JB
991}
992
993DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
994 "(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.\n\
995Both TAG and VALUE are evalled.")
79e8bfbf
EN
996 (tag, value)
997 register Lisp_Object tag, value;
db9f0278
JB
998{
999 register struct catchtag *c;
1000
1001 while (1)
1002 {
265a9e55 1003 if (!NILP (tag))
db9f0278
JB
1004 for (c = catchlist; c; c = c->next)
1005 {
1006 if (EQ (c->tag, tag))
79e8bfbf 1007 unwind_to_catch (c, value);
db9f0278 1008 }
79e8bfbf 1009 tag = Fsignal (Qno_catch, Fcons (tag, Fcons (value, Qnil)));
db9f0278
JB
1010 }
1011}
1012
1013
1014DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
1015 "Do BODYFORM, protecting with UNWINDFORMS.\n\
1016Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).\n\
1017If BODYFORM completes normally, its value is returned\n\
1018after executing the UNWINDFORMS.\n\
1019If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.")
1020 (args)
1021 Lisp_Object args;
1022{
1023 Lisp_Object val;
1024 int count = specpdl_ptr - specpdl;
1025
1026 record_unwind_protect (0, Fcdr (args));
1027 val = Feval (Fcar (args));
1028 return unbind_to (count, val);
1029}
1030\f
1031/* Chain of condition handlers currently in effect.
1032 The elements of this chain are contained in the stack frames
1033 of Fcondition_case and internal_condition_case.
1034 When an error is signaled (by calling Fsignal, below),
1035 this chain is searched for an element that applies. */
1036
1037struct handler *handlerlist;
1038
1039DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
1040 "Regain control when an error is signaled.\n\
1041Usage looks like (condition-case VAR BODYFORM HANDLERS...).\n\
1042executes BODYFORM and returns its value if no error happens.\n\
1043Each element of HANDLERS looks like (CONDITION-NAME BODY...)\n\
1044where the BODY is made of Lisp expressions.\n\n\
1045A handler is applicable to an error\n\
1046if CONDITION-NAME is one of the error's condition names.\n\
1047If an error happens, the first applicable handler is run.\n\
1048\n\
633357d4
RS
1049The car of a handler may be a list of condition names\n\
1050instead of a single condition name.\n\
1051\n\
db9f0278
JB
1052When a handler handles an error,\n\
1053control returns to the condition-case and the handler BODY... is executed\n\
1054with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).\n\
1055VAR may be nil; then you do not get access to the signal information.\n\
1056\n\
1057The value of the last BODY form is returned from the condition-case.\n\
1058See also the function `signal' for more info.")
1059 (args)
1060 Lisp_Object args;
1061{
1062 Lisp_Object val;
1063 struct catchtag c;
1064 struct handler h;
82da7701 1065 register Lisp_Object var, bodyform, handlers;
db9f0278 1066
82da7701
JB
1067 var = Fcar (args);
1068 bodyform = Fcar (Fcdr (args));
1069 handlers = Fcdr (Fcdr (args));
1070 CHECK_SYMBOL (var, 0);
1071
1072 for (val = handlers; ! NILP (val); val = Fcdr (val))
1073 {
1074 Lisp_Object tem;
1075 tem = Fcar (val);
5f96776a
RS
1076 if (! (NILP (tem)
1077 || (CONSP (tem)
03699b14
KR
1078 && (SYMBOLP (XCAR (tem))
1079 || CONSP (XCAR (tem))))))
82da7701
JB
1080 error ("Invalid condition handler", tem);
1081 }
db9f0278
JB
1082
1083 c.tag = Qnil;
1084 c.val = Qnil;
1085 c.backlist = backtrace_list;
1086 c.handlerlist = handlerlist;
1087 c.lisp_eval_depth = lisp_eval_depth;
1088 c.pdlcount = specpdl_ptr - specpdl;
1089 c.poll_suppress_count = poll_suppress_count;
1090 c.gcpro = gcprolist;
bcf28080 1091 c.byte_stack = byte_stack_list;
db9f0278
JB
1092 if (_setjmp (c.jmp))
1093 {
265a9e55 1094 if (!NILP (h.var))
9d58218c
RS
1095 specbind (h.var, c.val);
1096 val = Fprogn (Fcdr (h.chosen_clause));
82da7701
JB
1097
1098 /* Note that this just undoes the binding of h.var; whoever
1099 longjumped to us unwound the stack to c.pdlcount before
1100 throwing. */
db9f0278
JB
1101 unbind_to (c.pdlcount, Qnil);
1102 return val;
1103 }
1104 c.next = catchlist;
1105 catchlist = &c;
db9f0278 1106
82da7701
JB
1107 h.var = var;
1108 h.handler = handlers;
db9f0278 1109 h.next = handlerlist;
db9f0278
JB
1110 h.tag = &c;
1111 handlerlist = &h;
1112
82da7701 1113 val = Feval (bodyform);
db9f0278
JB
1114 catchlist = c.next;
1115 handlerlist = h.next;
1116 return val;
1117}
1118
f029ca5f
RS
1119/* Call the function BFUN with no arguments, catching errors within it
1120 according to HANDLERS. If there is an error, call HFUN with
1121 one argument which is the data that describes the error:
1122 (SIGNALNAME . DATA)
1123
1124 HANDLERS can be a list of conditions to catch.
1125 If HANDLERS is Qt, catch all errors.
1126 If HANDLERS is Qerror, catch all errors
1127 but allow the debugger to run if that is enabled. */
1128
db9f0278
JB
1129Lisp_Object
1130internal_condition_case (bfun, handlers, hfun)
1131 Lisp_Object (*bfun) ();
1132 Lisp_Object handlers;
1133 Lisp_Object (*hfun) ();
1134{
1135 Lisp_Object val;
1136 struct catchtag c;
1137 struct handler h;
1138
01591d17
RS
1139 /* Since Fsignal resets this to 0, it had better be 0 now
1140 or else we have a potential bug. */
1141 if (interrupt_input_blocked != 0)
1142 abort ();
1143
db9f0278
JB
1144 c.tag = Qnil;
1145 c.val = Qnil;
1146 c.backlist = backtrace_list;
1147 c.handlerlist = handlerlist;
1148 c.lisp_eval_depth = lisp_eval_depth;
1149 c.pdlcount = specpdl_ptr - specpdl;
1150 c.poll_suppress_count = poll_suppress_count;
1151 c.gcpro = gcprolist;
bcf28080 1152 c.byte_stack = byte_stack_list;
db9f0278
JB
1153 if (_setjmp (c.jmp))
1154 {
9d58218c 1155 return (*hfun) (c.val);
db9f0278
JB
1156 }
1157 c.next = catchlist;
1158 catchlist = &c;
1159 h.handler = handlers;
1160 h.var = Qnil;
db9f0278
JB
1161 h.next = handlerlist;
1162 h.tag = &c;
1163 handlerlist = &h;
1164
1165 val = (*bfun) ();
1166 catchlist = c.next;
1167 handlerlist = h.next;
1168 return val;
1169}
1170
f029ca5f
RS
1171/* Like internal_condition_case but call HFUN with ARG as its argument. */
1172
d227775c
RS
1173Lisp_Object
1174internal_condition_case_1 (bfun, arg, handlers, hfun)
1175 Lisp_Object (*bfun) ();
1176 Lisp_Object arg;
1177 Lisp_Object handlers;
1178 Lisp_Object (*hfun) ();
1179{
1180 Lisp_Object val;
1181 struct catchtag c;
1182 struct handler h;
1183
1184 c.tag = Qnil;
1185 c.val = Qnil;
1186 c.backlist = backtrace_list;
1187 c.handlerlist = handlerlist;
1188 c.lisp_eval_depth = lisp_eval_depth;
1189 c.pdlcount = specpdl_ptr - specpdl;
1190 c.poll_suppress_count = poll_suppress_count;
1191 c.gcpro = gcprolist;
bcf28080 1192 c.byte_stack = byte_stack_list;
d227775c
RS
1193 if (_setjmp (c.jmp))
1194 {
9d58218c 1195 return (*hfun) (c.val);
d227775c
RS
1196 }
1197 c.next = catchlist;
1198 catchlist = &c;
1199 h.handler = handlers;
1200 h.var = Qnil;
1201 h.next = handlerlist;
1202 h.tag = &c;
1203 handlerlist = &h;
1204
1205 val = (*bfun) (arg);
1206 catchlist = c.next;
1207 handlerlist = h.next;
1208 return val;
1209}
1210\f
db9f0278
JB
1211static Lisp_Object find_handler_clause ();
1212
1213DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
4200e719 1214 "Signal an error. Args are ERROR-SYMBOL and associated DATA.\n\
db9f0278 1215This function does not return.\n\n\
4200e719 1216An error symbol is a symbol with an `error-conditions' property\n\
db9f0278
JB
1217that is a list of condition names.\n\
1218A handler for any of those names will get to handle this signal.\n\
1219The symbol `error' should normally be one of them.\n\
1220\n\
1221DATA should be a list. Its elements are printed as part of the error message.\n\
1222If the signal is handled, DATA is made available to the handler.\n\
1223See also the function `condition-case'.")
4200e719
RS
1224 (error_symbol, data)
1225 Lisp_Object error_symbol, data;
db9f0278 1226{
bfa8ca43
AS
1227 /* When memory is full, ERROR-SYMBOL is nil,
1228 and DATA is (REAL-ERROR-SYMBOL . REAL-DATA). */
db9f0278
JB
1229 register struct handler *allhandlers = handlerlist;
1230 Lisp_Object conditions;
1231 extern int gc_in_progress;
1232 extern int waiting_for_input;
1233 Lisp_Object debugger_value;
c11d3d17 1234 Lisp_Object string;
1ea9dec4 1235 Lisp_Object real_error_symbol;
48f8dfa3 1236 extern int display_busy_cursor_p;
db9f0278 1237
db9f0278
JB
1238 immediate_quit = 0;
1239 if (gc_in_progress || waiting_for_input)
1240 abort ();
1241
1242 TOTALLY_UNBLOCK_INPUT;
1243
1ea9dec4
RS
1244 if (NILP (error_symbol))
1245 real_error_symbol = Fcar (data);
1246 else
1247 real_error_symbol = error_symbol;
1248
48f8dfa3
GM
1249#ifdef HAVE_X_WINDOWS
1250 if (display_busy_cursor_p)
1251 Fx_hide_busy_cursor (Qt);
1252#endif
48f8dfa3 1253
61ede770
RS
1254 /* This hook is used by edebug. */
1255 if (! NILP (Vsignal_hook_function))
f01a9c5b 1256 call2 (Vsignal_hook_function, error_symbol, data);
61ede770 1257
1ea9dec4 1258 conditions = Fget (real_error_symbol, Qerror_conditions);
db9f0278
JB
1259
1260 for (; handlerlist; handlerlist = handlerlist->next)
1261 {
1262 register Lisp_Object clause;
1263 clause = find_handler_clause (handlerlist->handler, conditions,
4200e719 1264 error_symbol, data, &debugger_value);
db9f0278
JB
1265
1266#if 0 /* Most callers are not prepared to handle gc if this returns.
1267 So, since this feature is not very useful, take it out. */
1268 /* If have called debugger and user wants to continue,
1269 just return nil. */
1270 if (EQ (clause, Qlambda))
1271 return debugger_value;
1272#else
1273 if (EQ (clause, Qlambda))
82da7701 1274 {
690337b7
KH
1275 /* We can't return values to code which signaled an error, but we
1276 can continue code which has signaled a quit. */
1ea9dec4 1277 if (EQ (real_error_symbol, Qquit))
82da7701
JB
1278 return Qnil;
1279 else
d3e6f8be 1280 error ("Cannot return from the debugger in an error");
82da7701 1281 }
db9f0278
JB
1282#endif
1283
265a9e55 1284 if (!NILP (clause))
db9f0278 1285 {
9d58218c 1286 Lisp_Object unwind_data;
db9f0278 1287 struct handler *h = handlerlist;
9d58218c 1288
db9f0278 1289 handlerlist = allhandlers;
1ea9dec4
RS
1290
1291 if (NILP (error_symbol))
1292 unwind_data = data;
9d58218c
RS
1293 else
1294 unwind_data = Fcons (error_symbol, data);
1295 h->chosen_clause = clause;
1296 unwind_to_catch (h->tag, unwind_data);
db9f0278
JB
1297 }
1298 }
1299
1300 handlerlist = allhandlers;
1301 /* If no handler is present now, try to run the debugger,
1302 and if that fails, throw to top level. */
4200e719 1303 find_handler_clause (Qerror, conditions, error_symbol, data, &debugger_value);
c11d3d17
RS
1304 if (catchlist != 0)
1305 Fthrow (Qtop_level, Qt);
1306
1ea9dec4 1307 if (! NILP (error_symbol))
c11d3d17
RS
1308 data = Fcons (error_symbol, data);
1309
1310 string = Ferror_message_string (data);
377127ce 1311 fatal ("%s", XSTRING (string)->data, 0);
db9f0278
JB
1312}
1313
128c0f66
RM
1314/* Return nonzero iff LIST is a non-nil atom or
1315 a list containing one of CONDITIONS. */
1316
1317static int
1318wants_debugger (list, conditions)
1319 Lisp_Object list, conditions;
1320{
4de86b16 1321 if (NILP (list))
128c0f66
RM
1322 return 0;
1323 if (! CONSP (list))
1324 return 1;
1325
ab67260b 1326 while (CONSP (conditions))
128c0f66 1327 {
ab67260b 1328 Lisp_Object this, tail;
03699b14
KR
1329 this = XCAR (conditions);
1330 for (tail = list; CONSP (tail); tail = XCDR (tail))
1331 if (EQ (XCAR (tail), this))
128c0f66 1332 return 1;
03699b14 1333 conditions = XCDR (conditions);
128c0f66 1334 }
ab67260b 1335 return 0;
128c0f66
RM
1336}
1337
fc950e09
KH
1338/* Return 1 if an error with condition-symbols CONDITIONS,
1339 and described by SIGNAL-DATA, should skip the debugger
1340 according to debugger-ignore-errors. */
1341
1342static int
1343skip_debugger (conditions, data)
1344 Lisp_Object conditions, data;
1345{
1346 Lisp_Object tail;
1347 int first_string = 1;
1348 Lisp_Object error_message;
1349
1350 for (tail = Vdebug_ignored_errors; CONSP (tail);
03699b14 1351 tail = XCDR (tail))
fc950e09 1352 {
03699b14 1353 if (STRINGP (XCAR (tail)))
fc950e09
KH
1354 {
1355 if (first_string)
1356 {
1357 error_message = Ferror_message_string (data);
1358 first_string = 0;
1359 }
03699b14 1360 if (fast_string_match (XCAR (tail), error_message) >= 0)
fc950e09
KH
1361 return 1;
1362 }
1363 else
1364 {
1365 Lisp_Object contail;
1366
1367 for (contail = conditions; CONSP (contail);
03699b14
KR
1368 contail = XCDR (contail))
1369 if (EQ (XCAR (tail), XCAR (contail)))
fc950e09
KH
1370 return 1;
1371 }
1372 }
1373
1374 return 0;
1375}
1376
128c0f66 1377/* Value of Qlambda means we have called debugger and user has continued.
1ea9dec4 1378 There are two ways to pass SIG and DATA:
9b942ebd 1379 = SIG is the error symbol, and DATA is the rest of the data.
1ea9dec4 1380 = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
9b942ebd 1381 This is for memory-full errors only.
1ea9dec4 1382
128c0f66 1383 Store value returned from debugger into *DEBUGGER_VALUE_PTR. */
db9f0278
JB
1384
1385static Lisp_Object
1386find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
1387 Lisp_Object handlers, conditions, sig, data;
1388 Lisp_Object *debugger_value_ptr;
1389{
1390 register Lisp_Object h;
1391 register Lisp_Object tem;
db9f0278
JB
1392
1393 if (EQ (handlers, Qt)) /* t is used by handlers for all conditions, set up by C code. */
1394 return Qt;
61ede770
RS
1395 /* error is used similarly, but means print an error message
1396 and run the debugger if that is enabled. */
1397 if (EQ (handlers, Qerror)
57a6e758
RS
1398 || !NILP (Vdebug_on_signal)) /* This says call debugger even if
1399 there is a handler. */
db9f0278 1400 {
61ede770
RS
1401 int count = specpdl_ptr - specpdl;
1402 int debugger_called = 0;
1ea9dec4 1403 Lisp_Object sig_symbol, combined_data;
9b942ebd
RS
1404 /* This is set to 1 if we are handling a memory-full error,
1405 because these must not run the debugger.
1406 (There is no room in memory to do that!) */
1407 int no_debugger = 0;
1ea9dec4
RS
1408
1409 if (NILP (sig))
1410 {
1411 combined_data = data;
1412 sig_symbol = Fcar (data);
9b942ebd 1413 no_debugger = 1;
1ea9dec4
RS
1414 }
1415 else
1416 {
1417 combined_data = Fcons (sig, data);
1418 sig_symbol = sig;
1419 }
61ede770 1420
128c0f66 1421 if (wants_debugger (Vstack_trace_on_error, conditions))
88817f3b
RS
1422 {
1423#ifdef __STDC__
1424 internal_with_output_to_temp_buffer ("*Backtrace*",
1425 (Lisp_Object (*) (Lisp_Object)) Fbacktrace,
1426 Qnil);
1427#else
1428 internal_with_output_to_temp_buffer ("*Backtrace*",
1429 Fbacktrace, Qnil);
1430#endif
1431 }
9b942ebd
RS
1432 if (! no_debugger
1433 && (EQ (sig_symbol, Qquit)
1434 ? debug_on_quit
1435 : wants_debugger (Vdebug_on_error, conditions))
1ea9dec4 1436 && ! skip_debugger (conditions, combined_data)
be857679 1437 && when_entered_debugger < num_nonmacro_input_events)
db9f0278 1438 {
db9f0278 1439 specbind (Qdebug_on_error, Qnil);
fc950e09
KH
1440 *debugger_value_ptr
1441 = call_debugger (Fcons (Qerror,
1ea9dec4 1442 Fcons (combined_data, Qnil)));
61ede770
RS
1443 debugger_called = 1;
1444 }
1445 /* If there is no handler, return saying whether we ran the debugger. */
1446 if (EQ (handlers, Qerror))
1447 {
1448 if (debugger_called)
1449 return unbind_to (count, Qlambda);
1450 return Qt;
db9f0278 1451 }
db9f0278
JB
1452 }
1453 for (h = handlers; CONSP (h); h = Fcdr (h))
1454 {
5f96776a
RS
1455 Lisp_Object handler, condit;
1456
1457 handler = Fcar (h);
1458 if (!CONSP (handler))
db9f0278 1459 continue;
5f96776a
RS
1460 condit = Fcar (handler);
1461 /* Handle a single condition name in handler HANDLER. */
1462 if (SYMBOLP (condit))
1463 {
1464 tem = Fmemq (Fcar (handler), conditions);
1465 if (!NILP (tem))
1466 return handler;
1467 }
1468 /* Handle a list of condition names in handler HANDLER. */
1469 else if (CONSP (condit))
1470 {
1471 while (CONSP (condit))
1472 {
1473 tem = Fmemq (Fcar (condit), conditions);
1474 if (!NILP (tem))
1475 return handler;
03699b14 1476 condit = XCDR (condit);
5f96776a
RS
1477 }
1478 }
db9f0278
JB
1479 }
1480 return Qnil;
1481}
1482
1483/* dump an error message; called like printf */
1484
1485/* VARARGS 1 */
1486void
1487error (m, a1, a2, a3)
1488 char *m;
9125da08 1489 char *a1, *a2, *a3;
db9f0278
JB
1490{
1491 char buf[200];
9125da08
RS
1492 int size = 200;
1493 int mlen;
1494 char *buffer = buf;
1495 char *args[3];
1496 int allocated = 0;
1497 Lisp_Object string;
1498
1499 args[0] = a1;
1500 args[1] = a2;
1501 args[2] = a3;
1502
1503 mlen = strlen (m);
db9f0278
JB
1504
1505 while (1)
9125da08 1506 {
955f3ff9 1507 int used = doprnt (buffer, size, m, m + mlen, 3, args);
9125da08
RS
1508 if (used < size)
1509 break;
1510 size *= 2;
1511 if (allocated)
1512 buffer = (char *) xrealloc (buffer, size);
5ece1728
RS
1513 else
1514 {
1515 buffer = (char *) xmalloc (size);
1516 allocated = 1;
1517 }
9125da08
RS
1518 }
1519
955f3ff9 1520 string = build_string (buffer);
9125da08
RS
1521 if (allocated)
1522 free (buffer);
1523
1524 Fsignal (Qerror, Fcons (string, Qnil));
db9f0278
JB
1525}
1526\f
1527DEFUN ("commandp", Fcommandp, Scommandp, 1, 1, 0,
1528 "T if FUNCTION makes provisions for interactive calling.\n\
1529This means it contains a description for how to read arguments to give it.\n\
1530The value is nil for an invalid function or a symbol with no function\n\
1531definition.\n\
1532\n\
1533Interactively callable functions include strings and vectors (treated\n\
1534as keyboard macros), lambda-expressions that contain a top-level call\n\
1535to `interactive', autoload definitions made by `autoload' with non-nil\n\
1536fourth argument, and some of the built-in functions of Lisp.\n\
1537\n\
1538Also, a symbol satisfies `commandp' if its function definition does so.")
1539 (function)
1540 Lisp_Object function;
1541{
1542 register Lisp_Object fun;
1543 register Lisp_Object funcar;
db9f0278
JB
1544
1545 fun = function;
1546
ffd56f97
JB
1547 fun = indirect_function (fun);
1548 if (EQ (fun, Qunbound))
1549 return Qnil;
db9f0278
JB
1550
1551 /* Emacs primitives are interactive if their DEFUN specifies an
1552 interactive spec. */
90165123 1553 if (SUBRP (fun))
db9f0278
JB
1554 {
1555 if (XSUBR (fun)->prompt)
1556 return Qt;
1557 else
1558 return Qnil;
1559 }
1560
1561 /* Bytecode objects are interactive if they are long enough to
1562 have an element whose index is COMPILED_INTERACTIVE, which is
1563 where the interactive spec is stored. */
90165123 1564 else if (COMPILEDP (fun))
f9b4aacf 1565 return ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
db9f0278
JB
1566 ? Qt : Qnil);
1567
1568 /* Strings and vectors are keyboard macros. */
90165123 1569 if (STRINGP (fun) || VECTORP (fun))
db9f0278
JB
1570 return Qt;
1571
1572 /* Lists may represent commands. */
1573 if (!CONSP (fun))
1574 return Qnil;
1575 funcar = Fcar (fun);
90165123 1576 if (!SYMBOLP (funcar))
db9f0278
JB
1577 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1578 if (EQ (funcar, Qlambda))
1579 return Fassq (Qinteractive, Fcdr (Fcdr (fun)));
1580 if (EQ (funcar, Qmocklisp))
1581 return Qt; /* All mocklisp functions can be called interactively */
1582 if (EQ (funcar, Qautoload))
1583 return Fcar (Fcdr (Fcdr (Fcdr (fun))));
1584 else
1585 return Qnil;
1586}
1587
1588/* ARGSUSED */
1589DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
1590 "Define FUNCTION to autoload from FILE.\n\
1591FUNCTION is a symbol; FILE is a file name string to pass to `load'.\n\
1592Third arg DOCSTRING is documentation for the function.\n\
1593Fourth arg INTERACTIVE if non-nil says function can be called interactively.\n\
ee9ee63c
JB
1594Fifth arg TYPE indicates the type of the object:\n\
1595 nil or omitted says FUNCTION is a function,\n\
1596 `keymap' says FUNCTION is really a keymap, and\n\
1597 `macro' or t says FUNCTION is really a macro.\n\
db9f0278
JB
1598Third through fifth args give info about the real definition.\n\
1599They default to nil.\n\
1600If FUNCTION is already defined other than as an autoload,\n\
1601this does nothing and returns nil.")
ee9ee63c
JB
1602 (function, file, docstring, interactive, type)
1603 Lisp_Object function, file, docstring, interactive, type;
db9f0278
JB
1604{
1605#ifdef NO_ARG_ARRAY
1606 Lisp_Object args[4];
1607#endif
1608
1609 CHECK_SYMBOL (function, 0);
1610 CHECK_STRING (file, 1);
1611
1612 /* If function is defined and not as an autoload, don't override */
1613 if (!EQ (XSYMBOL (function)->function, Qunbound)
90165123 1614 && !(CONSP (XSYMBOL (function)->function)
03699b14 1615 && EQ (XCAR (XSYMBOL (function)->function), Qautoload)))
db9f0278
JB
1616 return Qnil;
1617
1618#ifdef NO_ARG_ARRAY
1619 args[0] = file;
1620 args[1] = docstring;
1621 args[2] = interactive;
ee9ee63c 1622 args[3] = type;
db9f0278
JB
1623
1624 return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
1625#else /* NO_ARG_ARRAY */
1626 return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
1627#endif /* not NO_ARG_ARRAY */
1628}
1629
1630Lisp_Object
1631un_autoload (oldqueue)
1632 Lisp_Object oldqueue;
1633{
1634 register Lisp_Object queue, first, second;
1635
1636 /* Queue to unwind is current value of Vautoload_queue.
1637 oldqueue is the shadowed value to leave in Vautoload_queue. */
1638 queue = Vautoload_queue;
1639 Vautoload_queue = oldqueue;
1640 while (CONSP (queue))
1641 {
1642 first = Fcar (queue);
1643 second = Fcdr (first);
1644 first = Fcar (first);
1645 if (EQ (second, Qnil))
1646 Vfeatures = first;
1647 else
1648 Ffset (first, second);
1649 queue = Fcdr (queue);
1650 }
1651 return Qnil;
1652}
1653
ca20916b
RS
1654/* Load an autoloaded function.
1655 FUNNAME is the symbol which is the function's name.
1656 FUNDEF is the autoload definition (a list). */
1657
045ba794 1658void
db9f0278
JB
1659do_autoload (fundef, funname)
1660 Lisp_Object fundef, funname;
1661{
1662 int count = specpdl_ptr - specpdl;
cb81ac97 1663 Lisp_Object fun, queue, first, second;
ca20916b 1664 struct gcpro gcpro1, gcpro2, gcpro3;
db9f0278
JB
1665
1666 fun = funname;
1667 CHECK_SYMBOL (funname, 0);
ca20916b 1668 GCPRO3 (fun, funname, fundef);
db9f0278 1669
f87740dc
RS
1670 /* Preserve the match data. */
1671 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
1672
1673 /* Value saved here is to be restored into Vautoload_queue. */
db9f0278
JB
1674 record_unwind_protect (un_autoload, Vautoload_queue);
1675 Vautoload_queue = Qt;
4aac2302 1676 Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil, Qt);
2a49b6e5 1677
f87740dc 1678 /* Save the old autoloads, in case we ever do an unload. */
2a49b6e5
RS
1679 queue = Vautoload_queue;
1680 while (CONSP (queue))
1681 {
1682 first = Fcar (queue);
1683 second = Fcdr (first);
1684 first = Fcar (first);
5739ce6b
ER
1685
1686 /* Note: This test is subtle. The cdr of an autoload-queue entry
1687 may be an atom if the autoload entry was generated by a defalias
f87740dc 1688 or fset. */
5739ce6b 1689 if (CONSP (second))
03e267c2 1690 Fput (first, Qautoload, (Fcdr (second)));
5739ce6b 1691
2a49b6e5
RS
1692 queue = Fcdr (queue);
1693 }
1694
db9f0278
JB
1695 /* Once loading finishes, don't undo it. */
1696 Vautoload_queue = Qt;
1697 unbind_to (count, Qnil);
1698
ffd56f97
JB
1699 fun = Findirect_function (fun);
1700
76c2b0cc 1701 if (!NILP (Fequal (fun, fundef)))
db9f0278
JB
1702 error ("Autoloading failed to define function %s",
1703 XSYMBOL (funname)->name->data);
ca20916b 1704 UNGCPRO;
db9f0278
JB
1705}
1706\f
1707DEFUN ("eval", Feval, Seval, 1, 1, 0,
1708 "Evaluate FORM and return its value.")
1709 (form)
1710 Lisp_Object form;
1711{
1712 Lisp_Object fun, val, original_fun, original_args;
1713 Lisp_Object funcar;
1714 struct backtrace backtrace;
1715 struct gcpro gcpro1, gcpro2, gcpro3;
1716
48f8dfa3
GM
1717 /* Since Fsignal resets this to 0, it had better be 0 now
1718 or else we have a potential bug. */
1719 if (interrupt_input_blocked != 0)
1720 abort ();
1721
90165123 1722 if (SYMBOLP (form))
db9f0278
JB
1723 {
1724 if (EQ (Vmocklisp_arguments, Qt))
1725 return Fsymbol_value (form);
1726 val = Fsymbol_value (form);
265a9e55 1727 if (NILP (val))
a631e24c 1728 XSETFASTINT (val, 0);
db9f0278 1729 else if (EQ (val, Qt))
a631e24c 1730 XSETFASTINT (val, 1);
db9f0278
JB
1731 return val;
1732 }
1733 if (!CONSP (form))
1734 return form;
1735
1736 QUIT;
1737 if (consing_since_gc > gc_cons_threshold)
1738 {
1739 GCPRO1 (form);
1740 Fgarbage_collect ();
1741 UNGCPRO;
1742 }
1743
1744 if (++lisp_eval_depth > max_lisp_eval_depth)
1745 {
1746 if (max_lisp_eval_depth < 100)
1747 max_lisp_eval_depth = 100;
1748 if (lisp_eval_depth > max_lisp_eval_depth)
1749 error ("Lisp nesting exceeds max-lisp-eval-depth");
1750 }
1751
1752 original_fun = Fcar (form);
1753 original_args = Fcdr (form);
1754
1755 backtrace.next = backtrace_list;
1756 backtrace_list = &backtrace;
1757 backtrace.function = &original_fun; /* This also protects them from gc */
1758 backtrace.args = &original_args;
1759 backtrace.nargs = UNEVALLED;
1760 backtrace.evalargs = 1;
1761 backtrace.debug_on_exit = 0;
1762
1763 if (debug_on_next_call)
1764 do_debug_on_call (Qt);
1765
1766 /* At this point, only original_fun and original_args
1767 have values that will be used below */
1768 retry:
ffd56f97 1769 fun = Findirect_function (original_fun);
db9f0278 1770
90165123 1771 if (SUBRP (fun))
db9f0278
JB
1772 {
1773 Lisp_Object numargs;
166c822d 1774 Lisp_Object argvals[8];
db9f0278
JB
1775 Lisp_Object args_left;
1776 register int i, maxargs;
1777
1778 args_left = original_args;
1779 numargs = Flength (args_left);
1780
1781 if (XINT (numargs) < XSUBR (fun)->min_args ||
1782 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
1783 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
1784
1785 if (XSUBR (fun)->max_args == UNEVALLED)
1786 {
1787 backtrace.evalargs = 0;
1788 val = (*XSUBR (fun)->function) (args_left);
1789 goto done;
1790 }
1791
1792 if (XSUBR (fun)->max_args == MANY)
1793 {
1794 /* Pass a vector of evaluated arguments */
1795 Lisp_Object *vals;
1796 register int argnum = 0;
1797
1798 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
1799
1800 GCPRO3 (args_left, fun, fun);
1801 gcpro3.var = vals;
1802 gcpro3.nvars = 0;
1803
265a9e55 1804 while (!NILP (args_left))
db9f0278
JB
1805 {
1806 vals[argnum++] = Feval (Fcar (args_left));
1807 args_left = Fcdr (args_left);
1808 gcpro3.nvars = argnum;
1809 }
db9f0278
JB
1810
1811 backtrace.args = vals;
1812 backtrace.nargs = XINT (numargs);
1813
1814 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
a6e3fa71 1815 UNGCPRO;
db9f0278
JB
1816 goto done;
1817 }
1818
1819 GCPRO3 (args_left, fun, fun);
1820 gcpro3.var = argvals;
1821 gcpro3.nvars = 0;
1822
1823 maxargs = XSUBR (fun)->max_args;
1824 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
1825 {
1826 argvals[i] = Feval (Fcar (args_left));
1827 gcpro3.nvars = ++i;
1828 }
1829
1830 UNGCPRO;
1831
1832 backtrace.args = argvals;
1833 backtrace.nargs = XINT (numargs);
1834
1835 switch (i)
1836 {
1837 case 0:
1838 val = (*XSUBR (fun)->function) ();
1839 goto done;
1840 case 1:
1841 val = (*XSUBR (fun)->function) (argvals[0]);
1842 goto done;
1843 case 2:
1844 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
1845 goto done;
1846 case 3:
1847 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1848 argvals[2]);
1849 goto done;
1850 case 4:
1851 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1852 argvals[2], argvals[3]);
1853 goto done;
1854 case 5:
1855 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1856 argvals[3], argvals[4]);
1857 goto done;
1858 case 6:
1859 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1860 argvals[3], argvals[4], argvals[5]);
1861 goto done;
15c65264
RS
1862 case 7:
1863 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1864 argvals[3], argvals[4], argvals[5],
1865 argvals[6]);
1866 goto done;
db9f0278 1867
166c822d
KH
1868 case 8:
1869 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1870 argvals[3], argvals[4], argvals[5],
1871 argvals[6], argvals[7]);
1872 goto done;
1873
db9f0278 1874 default:
08564963
JB
1875 /* Someone has created a subr that takes more arguments than
1876 is supported by this code. We need to either rewrite the
1877 subr to use a different argument protocol, or add more
1878 cases to this switch. */
1879 abort ();
db9f0278
JB
1880 }
1881 }
90165123 1882 if (COMPILEDP (fun))
db9f0278
JB
1883 val = apply_lambda (fun, original_args, 1);
1884 else
1885 {
1886 if (!CONSP (fun))
1887 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1888 funcar = Fcar (fun);
90165123 1889 if (!SYMBOLP (funcar))
db9f0278
JB
1890 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1891 if (EQ (funcar, Qautoload))
1892 {
1893 do_autoload (fun, original_fun);
1894 goto retry;
1895 }
1896 if (EQ (funcar, Qmacro))
1897 val = Feval (apply1 (Fcdr (fun), original_args));
1898 else if (EQ (funcar, Qlambda))
1899 val = apply_lambda (fun, original_args, 1);
1900 else if (EQ (funcar, Qmocklisp))
1901 val = ml_apply (fun, original_args);
1902 else
1903 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1904 }
1905 done:
1906 if (!EQ (Vmocklisp_arguments, Qt))
1907 {
265a9e55 1908 if (NILP (val))
a631e24c 1909 XSETFASTINT (val, 0);
db9f0278 1910 else if (EQ (val, Qt))
a631e24c 1911 XSETFASTINT (val, 1);
db9f0278
JB
1912 }
1913 lisp_eval_depth--;
1914 if (backtrace.debug_on_exit)
1915 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
1916 backtrace_list = backtrace.next;
1917 return val;
1918}
1919\f
1920DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
1921 "Call FUNCTION with our remaining args, using our last arg as list of args.\n\
fd7fe9a1 1922Then return the value FUNCTION returns.\n\
db9f0278
JB
1923Thus, (apply '+ 1 2 '(3 4)) returns 10.")
1924 (nargs, args)
1925 int nargs;
1926 Lisp_Object *args;
1927{
1928 register int i, numargs;
1929 register Lisp_Object spread_arg;
1930 register Lisp_Object *funcall_args;
db9f0278 1931 Lisp_Object fun;
a6e3fa71 1932 struct gcpro gcpro1;
db9f0278
JB
1933
1934 fun = args [0];
1935 funcall_args = 0;
1936 spread_arg = args [nargs - 1];
1937 CHECK_LIST (spread_arg, nargs);
1938
1939 numargs = XINT (Flength (spread_arg));
1940
1941 if (numargs == 0)
1942 return Ffuncall (nargs - 1, args);
1943 else if (numargs == 1)
1944 {
03699b14 1945 args [nargs - 1] = XCAR (spread_arg);
db9f0278
JB
1946 return Ffuncall (nargs, args);
1947 }
1948
a6e3fa71 1949 numargs += nargs - 2;
db9f0278 1950
ffd56f97
JB
1951 fun = indirect_function (fun);
1952 if (EQ (fun, Qunbound))
db9f0278 1953 {
ffd56f97
JB
1954 /* Let funcall get the error */
1955 fun = args[0];
1956 goto funcall;
db9f0278
JB
1957 }
1958
90165123 1959 if (SUBRP (fun))
db9f0278
JB
1960 {
1961 if (numargs < XSUBR (fun)->min_args
1962 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
1963 goto funcall; /* Let funcall get the error */
1964 else if (XSUBR (fun)->max_args > numargs)
1965 {
1966 /* Avoid making funcall cons up a yet another new vector of arguments
1967 by explicitly supplying nil's for optional values */
1968 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
1969 * sizeof (Lisp_Object));
1970 for (i = numargs; i < XSUBR (fun)->max_args;)
1971 funcall_args[++i] = Qnil;
a6e3fa71
JB
1972 GCPRO1 (*funcall_args);
1973 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
db9f0278
JB
1974 }
1975 }
1976 funcall:
1977 /* We add 1 to numargs because funcall_args includes the
1978 function itself as well as its arguments. */
1979 if (!funcall_args)
a6e3fa71
JB
1980 {
1981 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
1982 * sizeof (Lisp_Object));
1983 GCPRO1 (*funcall_args);
1984 gcpro1.nvars = 1 + numargs;
1985 }
1986
db9f0278
JB
1987 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
1988 /* Spread the last arg we got. Its first element goes in
1989 the slot that it used to occupy, hence this value of I. */
1990 i = nargs - 1;
265a9e55 1991 while (!NILP (spread_arg))
db9f0278 1992 {
03699b14
KR
1993 funcall_args [i++] = XCAR (spread_arg);
1994 spread_arg = XCDR (spread_arg);
db9f0278 1995 }
a6e3fa71
JB
1996
1997 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
db9f0278
JB
1998}
1999\f
ff936e53
SM
2000/* Run hook variables in various ways. */
2001
2002enum run_hooks_condition {to_completion, until_success, until_failure};
2003
2004DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 1, MANY, 0,
2005 "Run each hook in HOOKS. Major mode functions use this.\n\
2006Each argument should be a symbol, a hook variable.\n\
2007These symbols are processed in the order specified.\n\
2008If a hook symbol has a non-nil value, that value may be a function\n\
2009or a list of functions to be called to run the hook.\n\
2010If the value is a function, it is called with no arguments.\n\
2011If it is a list, the elements are called, in order, with no arguments.\n\
2012\n\
2013To make a hook variable buffer-local, use `make-local-hook',\n\
2014not `make-local-variable'.")
2015 (nargs, args)
2016 int nargs;
2017 Lisp_Object *args;
2018{
2019 Lisp_Object hook[1];
2020 register int i;
2021
2022 for (i = 0; i < nargs; i++)
2023 {
2024 hook[0] = args[i];
2025 run_hook_with_args (1, hook, to_completion);
2026 }
2027
2028 return Qnil;
2029}
2030
a0d76c27
EN
2031DEFUN ("run-hook-with-args", Frun_hook_with_args,
2032 Srun_hook_with_args, 1, MANY, 0,
b0b667cb
KH
2033 "Run HOOK with the specified arguments ARGS.\n\
2034HOOK should be a symbol, a hook variable. If HOOK has a non-nil\n\
2035value, that value may be a function or a list of functions to be\n\
2036called to run the hook. If the value is a function, it is called with\n\
2037the given arguments and its return value is returned. If it is a list\n\
2038of functions, those functions are called, in order,\n\
2039with the given arguments ARGS.\n\
2040It is best not to depend on the value return by `run-hook-with-args',\n\
2041as that may change.\n\
2042\n\
ff936e53
SM
2043To make a hook variable buffer-local, use `make-local-hook',\n\
2044not `make-local-variable'.")
2045 (nargs, args)
2046 int nargs;
2047 Lisp_Object *args;
2048{
2049 return run_hook_with_args (nargs, args, to_completion);
2050}
2051
a0d76c27
EN
2052DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
2053 Srun_hook_with_args_until_success, 1, MANY, 0,
ff936e53
SM
2054 "Run HOOK with the specified arguments ARGS.\n\
2055HOOK should be a symbol, a hook variable. Its value should\n\
2056be a list of functions. We call those functions, one by one,\n\
2057passing arguments ARGS to each of them, until one of them\n\
2058returns a non-nil value. Then we return that value.\n\
2059If all the functions return nil, we return nil.\n\
2060\n\
2061To make a hook variable buffer-local, use `make-local-hook',\n\
2062not `make-local-variable'.")
b0b667cb
KH
2063 (nargs, args)
2064 int nargs;
2065 Lisp_Object *args;
2066{
ff936e53
SM
2067 return run_hook_with_args (nargs, args, until_success);
2068}
2069
a0d76c27
EN
2070DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
2071 Srun_hook_with_args_until_failure, 1, MANY, 0,
ff936e53
SM
2072 "Run HOOK with the specified arguments ARGS.\n\
2073HOOK should be a symbol, a hook variable. Its value should\n\
2074be a list of functions. We call those functions, one by one,\n\
2075passing arguments ARGS to each of them, until one of them\n\
2076returns nil. Then we return nil.\n\
2077If all the functions return non-nil, we return non-nil.\n\
2078\n\
2079To make a hook variable buffer-local, use `make-local-hook',\n\
2080not `make-local-variable'.")
2081 (nargs, args)
2082 int nargs;
2083 Lisp_Object *args;
2084{
2085 return run_hook_with_args (nargs, args, until_failure);
2086}
2087
c933ea05
RS
2088/* ARGS[0] should be a hook symbol.
2089 Call each of the functions in the hook value, passing each of them
2090 as arguments all the rest of ARGS (all NARGS - 1 elements).
2091 COND specifies a condition to test after each call
2092 to decide whether to stop.
2093 The caller (or its caller, etc) must gcpro all of ARGS,
2094 except that it isn't necessary to gcpro ARGS[0]. */
2095
ff936e53
SM
2096Lisp_Object
2097run_hook_with_args (nargs, args, cond)
2098 int nargs;
2099 Lisp_Object *args;
2100 enum run_hooks_condition cond;
2101{
2102 Lisp_Object sym, val, ret;
fada05d6
KH
2103 Lisp_Object globals;
2104 struct gcpro gcpro1, gcpro2, gcpro3;
b0b667cb 2105
f029ca5f
RS
2106 /* If we are dying or still initializing,
2107 don't do anything--it would probably crash if we tried. */
2108 if (NILP (Vrun_hooks))
2109 return;
2110
b0b667cb 2111 sym = args[0];
aa681b51 2112 val = find_symbol_value (sym);
ff936e53
SM
2113 ret = (cond == until_failure ? Qt : Qnil);
2114
b0b667cb 2115 if (EQ (val, Qunbound) || NILP (val))
ff936e53 2116 return ret;
03699b14 2117 else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
b0b667cb
KH
2118 {
2119 args[0] = val;
2120 return Ffuncall (nargs, args);
2121 }
2122 else
2123 {
fada05d6
KH
2124 globals = Qnil;
2125 GCPRO3 (sym, val, globals);
cb9d21f8 2126
ff936e53
SM
2127 for (;
2128 CONSP (val) && ((cond == to_completion)
2129 || (cond == until_success ? NILP (ret)
2130 : !NILP (ret)));
03699b14 2131 val = XCDR (val))
b0b667cb 2132 {
03699b14 2133 if (EQ (XCAR (val), Qt))
b0b667cb
KH
2134 {
2135 /* t indicates this hook has a local binding;
2136 it means to run the global binding too. */
b0b667cb 2137
ff936e53
SM
2138 for (globals = Fdefault_value (sym);
2139 CONSP (globals) && ((cond == to_completion)
2140 || (cond == until_success ? NILP (ret)
2141 : !NILP (ret)));
03699b14 2142 globals = XCDR (globals))
b0b667cb 2143 {
03699b14 2144 args[0] = XCAR (globals);
77d92e05
RS
2145 /* In a global value, t should not occur. If it does, we
2146 must ignore it to avoid an endless loop. */
2147 if (!EQ (args[0], Qt))
2148 ret = Ffuncall (nargs, args);
b0b667cb
KH
2149 }
2150 }
2151 else
2152 {
03699b14 2153 args[0] = XCAR (val);
ff936e53 2154 ret = Ffuncall (nargs, args);
b0b667cb
KH
2155 }
2156 }
cb9d21f8
RS
2157
2158 UNGCPRO;
ff936e53 2159 return ret;
b0b667cb
KH
2160 }
2161}
c933ea05
RS
2162
2163/* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2164 present value of that symbol.
2165 Call each element of FUNLIST,
2166 passing each of them the rest of ARGS.
2167 The caller (or its caller, etc) must gcpro all of ARGS,
2168 except that it isn't necessary to gcpro ARGS[0]. */
2169
2170Lisp_Object
2171run_hook_list_with_args (funlist, nargs, args)
2172 Lisp_Object funlist;
2173 int nargs;
2174 Lisp_Object *args;
2175{
2176 Lisp_Object sym;
2177 Lisp_Object val;
fada05d6
KH
2178 Lisp_Object globals;
2179 struct gcpro gcpro1, gcpro2, gcpro3;
c933ea05
RS
2180
2181 sym = args[0];
fada05d6
KH
2182 globals = Qnil;
2183 GCPRO3 (sym, val, globals);
c933ea05 2184
03699b14 2185 for (val = funlist; CONSP (val); val = XCDR (val))
c933ea05 2186 {
03699b14 2187 if (EQ (XCAR (val), Qt))
c933ea05
RS
2188 {
2189 /* t indicates this hook has a local binding;
2190 it means to run the global binding too. */
c933ea05
RS
2191
2192 for (globals = Fdefault_value (sym);
2193 CONSP (globals);
03699b14 2194 globals = XCDR (globals))
c933ea05 2195 {
03699b14 2196 args[0] = XCAR (globals);
77d92e05
RS
2197 /* In a global value, t should not occur. If it does, we
2198 must ignore it to avoid an endless loop. */
2199 if (!EQ (args[0], Qt))
2200 Ffuncall (nargs, args);
c933ea05
RS
2201 }
2202 }
2203 else
2204 {
03699b14 2205 args[0] = XCAR (val);
c933ea05
RS
2206 Ffuncall (nargs, args);
2207 }
2208 }
2209 UNGCPRO;
2210 return Qnil;
2211}
7d48558f
RS
2212
2213/* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2214
2215void
2216run_hook_with_args_2 (hook, arg1, arg2)
2217 Lisp_Object hook, arg1, arg2;
2218{
2219 Lisp_Object temp[3];
2220 temp[0] = hook;
2221 temp[1] = arg1;
2222 temp[2] = arg2;
2223
2224 Frun_hook_with_args (3, temp);
2225}
ff936e53 2226\f
db9f0278
JB
2227/* Apply fn to arg */
2228Lisp_Object
2229apply1 (fn, arg)
2230 Lisp_Object fn, arg;
2231{
a6e3fa71
JB
2232 struct gcpro gcpro1;
2233
2234 GCPRO1 (fn);
265a9e55 2235 if (NILP (arg))
a6e3fa71
JB
2236 RETURN_UNGCPRO (Ffuncall (1, &fn));
2237 gcpro1.nvars = 2;
db9f0278
JB
2238#ifdef NO_ARG_ARRAY
2239 {
2240 Lisp_Object args[2];
2241 args[0] = fn;
2242 args[1] = arg;
a6e3fa71
JB
2243 gcpro1.var = args;
2244 RETURN_UNGCPRO (Fapply (2, args));
db9f0278
JB
2245 }
2246#else /* not NO_ARG_ARRAY */
a6e3fa71 2247 RETURN_UNGCPRO (Fapply (2, &fn));
db9f0278
JB
2248#endif /* not NO_ARG_ARRAY */
2249}
2250
2251/* Call function fn on no arguments */
2252Lisp_Object
2253call0 (fn)
2254 Lisp_Object fn;
2255{
a6e3fa71
JB
2256 struct gcpro gcpro1;
2257
2258 GCPRO1 (fn);
2259 RETURN_UNGCPRO (Ffuncall (1, &fn));
db9f0278
JB
2260}
2261
15285f9f 2262/* Call function fn with 1 argument arg1 */
db9f0278
JB
2263/* ARGSUSED */
2264Lisp_Object
15285f9f
RS
2265call1 (fn, arg1)
2266 Lisp_Object fn, arg1;
db9f0278 2267{
a6e3fa71 2268 struct gcpro gcpro1;
db9f0278 2269#ifdef NO_ARG_ARRAY
a6e3fa71
JB
2270 Lisp_Object args[2];
2271
db9f0278 2272 args[0] = fn;
15285f9f 2273 args[1] = arg1;
a6e3fa71
JB
2274 GCPRO1 (args[0]);
2275 gcpro1.nvars = 2;
2276 RETURN_UNGCPRO (Ffuncall (2, args));
db9f0278 2277#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2278 GCPRO1 (fn);
2279 gcpro1.nvars = 2;
2280 RETURN_UNGCPRO (Ffuncall (2, &fn));
db9f0278
JB
2281#endif /* not NO_ARG_ARRAY */
2282}
2283
15285f9f 2284/* Call function fn with 2 arguments arg1, arg2 */
db9f0278
JB
2285/* ARGSUSED */
2286Lisp_Object
15285f9f
RS
2287call2 (fn, arg1, arg2)
2288 Lisp_Object fn, arg1, arg2;
db9f0278 2289{
a6e3fa71 2290 struct gcpro gcpro1;
db9f0278
JB
2291#ifdef NO_ARG_ARRAY
2292 Lisp_Object args[3];
2293 args[0] = fn;
15285f9f
RS
2294 args[1] = arg1;
2295 args[2] = arg2;
a6e3fa71
JB
2296 GCPRO1 (args[0]);
2297 gcpro1.nvars = 3;
2298 RETURN_UNGCPRO (Ffuncall (3, args));
db9f0278 2299#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2300 GCPRO1 (fn);
2301 gcpro1.nvars = 3;
2302 RETURN_UNGCPRO (Ffuncall (3, &fn));
db9f0278
JB
2303#endif /* not NO_ARG_ARRAY */
2304}
2305
15285f9f 2306/* Call function fn with 3 arguments arg1, arg2, arg3 */
db9f0278
JB
2307/* ARGSUSED */
2308Lisp_Object
15285f9f
RS
2309call3 (fn, arg1, arg2, arg3)
2310 Lisp_Object fn, arg1, arg2, arg3;
db9f0278 2311{
a6e3fa71 2312 struct gcpro gcpro1;
db9f0278
JB
2313#ifdef NO_ARG_ARRAY
2314 Lisp_Object args[4];
2315 args[0] = fn;
15285f9f
RS
2316 args[1] = arg1;
2317 args[2] = arg2;
2318 args[3] = arg3;
a6e3fa71
JB
2319 GCPRO1 (args[0]);
2320 gcpro1.nvars = 4;
2321 RETURN_UNGCPRO (Ffuncall (4, args));
db9f0278 2322#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2323 GCPRO1 (fn);
2324 gcpro1.nvars = 4;
2325 RETURN_UNGCPRO (Ffuncall (4, &fn));
db9f0278
JB
2326#endif /* not NO_ARG_ARRAY */
2327}
2328
15285f9f 2329/* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
a5a44b91
JB
2330/* ARGSUSED */
2331Lisp_Object
15285f9f
RS
2332call4 (fn, arg1, arg2, arg3, arg4)
2333 Lisp_Object fn, arg1, arg2, arg3, arg4;
a5a44b91
JB
2334{
2335 struct gcpro gcpro1;
2336#ifdef NO_ARG_ARRAY
2337 Lisp_Object args[5];
2338 args[0] = fn;
15285f9f
RS
2339 args[1] = arg1;
2340 args[2] = arg2;
2341 args[3] = arg3;
2342 args[4] = arg4;
a5a44b91
JB
2343 GCPRO1 (args[0]);
2344 gcpro1.nvars = 5;
2345 RETURN_UNGCPRO (Ffuncall (5, args));
2346#else /* not NO_ARG_ARRAY */
2347 GCPRO1 (fn);
2348 gcpro1.nvars = 5;
2349 RETURN_UNGCPRO (Ffuncall (5, &fn));
2350#endif /* not NO_ARG_ARRAY */
2351}
2352
15285f9f
RS
2353/* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2354/* ARGSUSED */
2355Lisp_Object
2356call5 (fn, arg1, arg2, arg3, arg4, arg5)
2357 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2358{
2359 struct gcpro gcpro1;
2360#ifdef NO_ARG_ARRAY
2361 Lisp_Object args[6];
2362 args[0] = fn;
2363 args[1] = arg1;
2364 args[2] = arg2;
2365 args[3] = arg3;
2366 args[4] = arg4;
2367 args[5] = arg5;
2368 GCPRO1 (args[0]);
2369 gcpro1.nvars = 6;
2370 RETURN_UNGCPRO (Ffuncall (6, args));
2371#else /* not NO_ARG_ARRAY */
2372 GCPRO1 (fn);
2373 gcpro1.nvars = 6;
2374 RETURN_UNGCPRO (Ffuncall (6, &fn));
2375#endif /* not NO_ARG_ARRAY */
2376}
2377
2378/* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2379/* ARGSUSED */
2380Lisp_Object
2381call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2382 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2383{
2384 struct gcpro gcpro1;
2385#ifdef NO_ARG_ARRAY
2386 Lisp_Object args[7];
2387 args[0] = fn;
2388 args[1] = arg1;
2389 args[2] = arg2;
2390 args[3] = arg3;
2391 args[4] = arg4;
2392 args[5] = arg5;
2393 args[6] = arg6;
2394 GCPRO1 (args[0]);
2395 gcpro1.nvars = 7;
2396 RETURN_UNGCPRO (Ffuncall (7, args));
2397#else /* not NO_ARG_ARRAY */
2398 GCPRO1 (fn);
2399 gcpro1.nvars = 7;
2400 RETURN_UNGCPRO (Ffuncall (7, &fn));
2401#endif /* not NO_ARG_ARRAY */
2402}
2403
db9f0278
JB
2404DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
2405 "Call first argument as a function, passing remaining arguments to it.\n\
fd7fe9a1 2406Return the value that function returns.\n\
db9f0278
JB
2407Thus, (funcall 'cons 'x 'y) returns (x . y).")
2408 (nargs, args)
2409 int nargs;
2410 Lisp_Object *args;
2411{
2412 Lisp_Object fun;
2413 Lisp_Object funcar;
2414 int numargs = nargs - 1;
2415 Lisp_Object lisp_numargs;
2416 Lisp_Object val;
2417 struct backtrace backtrace;
2418 register Lisp_Object *internal_args;
2419 register int i;
2420
2421 QUIT;
2422 if (consing_since_gc > gc_cons_threshold)
a6e3fa71 2423 Fgarbage_collect ();
db9f0278
JB
2424
2425 if (++lisp_eval_depth > max_lisp_eval_depth)
2426 {
2427 if (max_lisp_eval_depth < 100)
2428 max_lisp_eval_depth = 100;
2429 if (lisp_eval_depth > max_lisp_eval_depth)
2430 error ("Lisp nesting exceeds max-lisp-eval-depth");
2431 }
2432
2433 backtrace.next = backtrace_list;
2434 backtrace_list = &backtrace;
2435 backtrace.function = &args[0];
2436 backtrace.args = &args[1];
2437 backtrace.nargs = nargs - 1;
2438 backtrace.evalargs = 0;
2439 backtrace.debug_on_exit = 0;
2440
2441 if (debug_on_next_call)
2442 do_debug_on_call (Qlambda);
2443
2444 retry:
2445
2446 fun = args[0];
ffd56f97
JB
2447
2448 fun = Findirect_function (fun);
db9f0278 2449
90165123 2450 if (SUBRP (fun))
db9f0278
JB
2451 {
2452 if (numargs < XSUBR (fun)->min_args
2453 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2454 {
a631e24c 2455 XSETFASTINT (lisp_numargs, numargs);
db9f0278
JB
2456 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (lisp_numargs, Qnil)));
2457 }
2458
2459 if (XSUBR (fun)->max_args == UNEVALLED)
2460 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2461
2462 if (XSUBR (fun)->max_args == MANY)
2463 {
2464 val = (*XSUBR (fun)->function) (numargs, args + 1);
2465 goto done;
2466 }
2467
2468 if (XSUBR (fun)->max_args > numargs)
2469 {
2470 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
2471 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
2472 for (i = numargs; i < XSUBR (fun)->max_args; i++)
2473 internal_args[i] = Qnil;
2474 }
2475 else
2476 internal_args = args + 1;
2477 switch (XSUBR (fun)->max_args)
2478 {
2479 case 0:
2480 val = (*XSUBR (fun)->function) ();
2481 goto done;
2482 case 1:
2483 val = (*XSUBR (fun)->function) (internal_args[0]);
2484 goto done;
2485 case 2:
2486 val = (*XSUBR (fun)->function) (internal_args[0],
2487 internal_args[1]);
2488 goto done;
2489 case 3:
2490 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2491 internal_args[2]);
2492 goto done;
2493 case 4:
2494 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2495 internal_args[2],
2496 internal_args[3]);
2497 goto done;
2498 case 5:
2499 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2500 internal_args[2], internal_args[3],
2501 internal_args[4]);
2502 goto done;
2503 case 6:
2504 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2505 internal_args[2], internal_args[3],
2506 internal_args[4], internal_args[5]);
2507 goto done;
15c65264
RS
2508 case 7:
2509 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2510 internal_args[2], internal_args[3],
2511 internal_args[4], internal_args[5],
2512 internal_args[6]);
2513 goto done;
db9f0278 2514
166c822d
KH
2515 case 8:
2516 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2517 internal_args[2], internal_args[3],
2518 internal_args[4], internal_args[5],
2519 internal_args[6], internal_args[7]);
2520 goto done;
2521
db9f0278 2522 default:
70ee42f7 2523
166c822d 2524 /* If a subr takes more than 8 arguments without using MANY
70ee42f7
JB
2525 or UNEVALLED, we need to extend this function to support it.
2526 Until this is done, there is no way to call the function. */
2527 abort ();
db9f0278
JB
2528 }
2529 }
90165123 2530 if (COMPILEDP (fun))
db9f0278
JB
2531 val = funcall_lambda (fun, numargs, args + 1);
2532 else
2533 {
2534 if (!CONSP (fun))
2535 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2536 funcar = Fcar (fun);
90165123 2537 if (!SYMBOLP (funcar))
db9f0278
JB
2538 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2539 if (EQ (funcar, Qlambda))
2540 val = funcall_lambda (fun, numargs, args + 1);
2541 else if (EQ (funcar, Qmocklisp))
2542 val = ml_apply (fun, Flist (numargs, args + 1));
2543 else if (EQ (funcar, Qautoload))
2544 {
2545 do_autoload (fun, args[0]);
2546 goto retry;
2547 }
2548 else
2549 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2550 }
2551 done:
2552 lisp_eval_depth--;
2553 if (backtrace.debug_on_exit)
2554 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2555 backtrace_list = backtrace.next;
2556 return val;
2557}
2558\f
2559Lisp_Object
2560apply_lambda (fun, args, eval_flag)
2561 Lisp_Object fun, args;
2562 int eval_flag;
2563{
2564 Lisp_Object args_left;
2565 Lisp_Object numargs;
2566 register Lisp_Object *arg_vector;
2567 struct gcpro gcpro1, gcpro2, gcpro3;
2568 register int i;
2569 register Lisp_Object tem;
2570
2571 numargs = Flength (args);
2572 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2573 args_left = args;
2574
2575 GCPRO3 (*arg_vector, args_left, fun);
2576 gcpro1.nvars = 0;
2577
2578 for (i = 0; i < XINT (numargs);)
2579 {
2580 tem = Fcar (args_left), args_left = Fcdr (args_left);
2581 if (eval_flag) tem = Feval (tem);
2582 arg_vector[i++] = tem;
2583 gcpro1.nvars = i;
2584 }
2585
2586 UNGCPRO;
2587
2588 if (eval_flag)
2589 {
2590 backtrace_list->args = arg_vector;
2591 backtrace_list->nargs = i;
2592 }
2593 backtrace_list->evalargs = 0;
2594 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
2595
2596 /* Do the debug-on-exit now, while arg_vector still exists. */
2597 if (backtrace_list->debug_on_exit)
2598 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
2599 /* Don't do it again when we return to eval. */
2600 backtrace_list->debug_on_exit = 0;
2601 return tem;
2602}
2603
2604/* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2605 and return the result of evaluation.
2606 FUN must be either a lambda-expression or a compiled-code object. */
2607
2608Lisp_Object
2609funcall_lambda (fun, nargs, arg_vector)
2610 Lisp_Object fun;
2611 int nargs;
2612 register Lisp_Object *arg_vector;
2613{
2614 Lisp_Object val, tem;
2615 register Lisp_Object syms_left;
2616 Lisp_Object numargs;
2617 register Lisp_Object next;
2618 int count = specpdl_ptr - specpdl;
2619 register int i;
2620 int optional = 0, rest = 0;
2621
2622 specbind (Qmocklisp_arguments, Qt); /* t means NOT mocklisp! */
2623
a631e24c 2624 XSETFASTINT (numargs, nargs);
db9f0278 2625
90165123 2626 if (CONSP (fun))
db9f0278 2627 syms_left = Fcar (Fcdr (fun));
90165123 2628 else if (COMPILEDP (fun))
db9f0278
JB
2629 syms_left = XVECTOR (fun)->contents[COMPILED_ARGLIST];
2630 else abort ();
2631
2632 i = 0;
265a9e55 2633 for (; !NILP (syms_left); syms_left = Fcdr (syms_left))
db9f0278
JB
2634 {
2635 QUIT;
2636 next = Fcar (syms_left);
90165123 2637 while (!SYMBOLP (next))
9ffa21d4 2638 next = Fsignal (Qinvalid_function, Fcons (fun, Qnil));
db9f0278
JB
2639 if (EQ (next, Qand_rest))
2640 rest = 1;
2641 else if (EQ (next, Qand_optional))
2642 optional = 1;
2643 else if (rest)
2644 {
9ffa21d4 2645 specbind (next, Flist (nargs - i, &arg_vector[i]));
db9f0278
JB
2646 i = nargs;
2647 }
2648 else if (i < nargs)
2649 {
2650 tem = arg_vector[i++];
2651 specbind (next, tem);
2652 }
2653 else if (!optional)
2654 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2655 else
2656 specbind (next, Qnil);
2657 }
2658
2659 if (i < nargs)
2660 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2661
90165123 2662 if (CONSP (fun))
db9f0278
JB
2663 val = Fprogn (Fcdr (Fcdr (fun)));
2664 else
ca248607
RS
2665 {
2666 /* If we have not actually read the bytecode string
2667 and constants vector yet, fetch them from the file. */
2668 if (CONSP (XVECTOR (fun)->contents[COMPILED_BYTECODE]))
661c7d6e 2669 Ffetch_bytecode (fun);
ca248607
RS
2670 val = Fbyte_code (XVECTOR (fun)->contents[COMPILED_BYTECODE],
2671 XVECTOR (fun)->contents[COMPILED_CONSTANTS],
2672 XVECTOR (fun)->contents[COMPILED_STACK_DEPTH]);
2673 }
db9f0278
JB
2674 return unbind_to (count, val);
2675}
661c7d6e
KH
2676
2677DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
2678 1, 1, 0,
2679 "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
2680 (object)
2681 Lisp_Object object;
2682{
2683 Lisp_Object tem;
2684
2685 if (COMPILEDP (object)
2686 && CONSP (XVECTOR (object)->contents[COMPILED_BYTECODE]))
2687 {
2688 tem = read_doc_string (XVECTOR (object)->contents[COMPILED_BYTECODE]);
5bbdb090
RS
2689 if (!CONSP (tem))
2690 error ("invalid byte code");
03699b14
KR
2691 XVECTOR (object)->contents[COMPILED_BYTECODE] = XCAR (tem);
2692 XVECTOR (object)->contents[COMPILED_CONSTANTS] = XCDR (tem);
661c7d6e
KH
2693 }
2694 return object;
2695}
db9f0278
JB
2696\f
2697void
2698grow_specpdl ()
2699{
2700 register int count = specpdl_ptr - specpdl;
2701 if (specpdl_size >= max_specpdl_size)
2702 {
2703 if (max_specpdl_size < 400)
2704 max_specpdl_size = 400;
2705 if (specpdl_size >= max_specpdl_size)
2706 {
debee8fe
RS
2707 if (!NILP (Vdebug_on_error))
2708 /* Leave room for some specpdl in the debugger. */
2709 max_specpdl_size = specpdl_size + 100;
db9f0278
JB
2710 Fsignal (Qerror,
2711 Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil));
db9f0278
JB
2712 }
2713 }
2714 specpdl_size *= 2;
2715 if (specpdl_size > max_specpdl_size)
2716 specpdl_size = max_specpdl_size;
2717 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
2718 specpdl_ptr = specpdl + count;
2719}
2720
2721void
2722specbind (symbol, value)
2723 Lisp_Object symbol, value;
2724{
db9f0278
JB
2725 Lisp_Object ovalue;
2726
9ffa21d4
JB
2727 CHECK_SYMBOL (symbol, 0);
2728
db9f0278
JB
2729 if (specpdl_ptr == specpdl + specpdl_size)
2730 grow_specpdl ();
2731 specpdl_ptr->symbol = symbol;
2732 specpdl_ptr->func = 0;
d0f7cdc8 2733 specpdl_ptr->old_value = ovalue = find_symbol_value (symbol);
db9f0278 2734 specpdl_ptr++;
3d8585a1 2735 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
db9f0278
JB
2736 store_symval_forwarding (symbol, ovalue, value);
2737 else
ab07bca0 2738 set_internal (symbol, value, 1);
db9f0278
JB
2739}
2740
2741void
2742record_unwind_protect (function, arg)
1d159538 2743 Lisp_Object (*function) P_ ((Lisp_Object));
db9f0278
JB
2744 Lisp_Object arg;
2745{
2746 if (specpdl_ptr == specpdl + specpdl_size)
2747 grow_specpdl ();
2748 specpdl_ptr->func = function;
2749 specpdl_ptr->symbol = Qnil;
2750 specpdl_ptr->old_value = arg;
2751 specpdl_ptr++;
2752}
2753
2754Lisp_Object
2755unbind_to (count, value)
2756 int count;
2757 Lisp_Object value;
2758{
265a9e55 2759 int quitf = !NILP (Vquit_flag);
db9f0278
JB
2760 struct gcpro gcpro1;
2761
2762 GCPRO1 (value);
2763
2764 Vquit_flag = Qnil;
2765
2766 while (specpdl_ptr != specpdl + count)
2767 {
2768 --specpdl_ptr;
2769 if (specpdl_ptr->func != 0)
2770 (*specpdl_ptr->func) (specpdl_ptr->old_value);
2771 /* Note that a "binding" of nil is really an unwind protect,
2772 so in that case the "old value" is a list of forms to evaluate. */
265a9e55 2773 else if (NILP (specpdl_ptr->symbol))
db9f0278
JB
2774 Fprogn (specpdl_ptr->old_value);
2775 else
ab07bca0 2776 set_internal (specpdl_ptr->symbol, specpdl_ptr->old_value, 1);
db9f0278 2777 }
265a9e55 2778 if (NILP (Vquit_flag) && quitf) Vquit_flag = Qt;
db9f0278
JB
2779
2780 UNGCPRO;
2781
2782 return value;
2783}
2784\f
2785#if 0
2786
2787/* Get the value of symbol's global binding, even if that binding
2788 is not now dynamically visible. */
2789
2790Lisp_Object
2791top_level_value (symbol)
2792 Lisp_Object symbol;
2793{
2794 register struct specbinding *ptr = specpdl;
2795
2796 CHECK_SYMBOL (symbol, 0);
2797 for (; ptr != specpdl_ptr; ptr++)
2798 {
2799 if (EQ (ptr->symbol, symbol))
2800 return ptr->old_value;
2801 }
2802 return Fsymbol_value (symbol);
2803}
2804
2805Lisp_Object
2806top_level_set (symbol, newval)
2807 Lisp_Object symbol, newval;
2808{
2809 register struct specbinding *ptr = specpdl;
2810
2811 CHECK_SYMBOL (symbol, 0);
2812 for (; ptr != specpdl_ptr; ptr++)
2813 {
2814 if (EQ (ptr->symbol, symbol))
2815 {
2816 ptr->old_value = newval;
2817 return newval;
2818 }
2819 }
2820 return Fset (symbol, newval);
2821}
2822
2823#endif /* 0 */
2824\f
2825DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
2826 "Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.\n\
2827The debugger is entered when that frame exits, if the flag is non-nil.")
2828 (level, flag)
2829 Lisp_Object level, flag;
2830{
2831 register struct backtrace *backlist = backtrace_list;
2832 register int i;
2833
2834 CHECK_NUMBER (level, 0);
2835
2836 for (i = 0; backlist && i < XINT (level); i++)
2837 {
2838 backlist = backlist->next;
2839 }
2840
2841 if (backlist)
265a9e55 2842 backlist->debug_on_exit = !NILP (flag);
db9f0278
JB
2843
2844 return flag;
2845}
2846
2847DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
2848 "Print a trace of Lisp function calls currently active.\n\
2849Output stream used is value of `standard-output'.")
2850 ()
2851{
2852 register struct backtrace *backlist = backtrace_list;
2853 register int i;
2854 Lisp_Object tail;
2855 Lisp_Object tem;
2856 extern Lisp_Object Vprint_level;
2857 struct gcpro gcpro1;
2858
a631e24c 2859 XSETFASTINT (Vprint_level, 3);
db9f0278
JB
2860
2861 tail = Qnil;
2862 GCPRO1 (tail);
2863
2864 while (backlist)
2865 {
2866 write_string (backlist->debug_on_exit ? "* " : " ", 2);
2867 if (backlist->nargs == UNEVALLED)
2868 {
2869 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
b6703b02 2870 write_string ("\n", -1);
db9f0278
JB
2871 }
2872 else
2873 {
2874 tem = *backlist->function;
2875 Fprin1 (tem, Qnil); /* This can QUIT */
2876 write_string ("(", -1);
2877 if (backlist->nargs == MANY)
2878 {
2879 for (tail = *backlist->args, i = 0;
265a9e55 2880 !NILP (tail);
db9f0278
JB
2881 tail = Fcdr (tail), i++)
2882 {
2883 if (i) write_string (" ", -1);
2884 Fprin1 (Fcar (tail), Qnil);
2885 }
2886 }
2887 else
2888 {
2889 for (i = 0; i < backlist->nargs; i++)
2890 {
2891 if (i) write_string (" ", -1);
2892 Fprin1 (backlist->args[i], Qnil);
2893 }
2894 }
b6703b02 2895 write_string (")\n", -1);
db9f0278 2896 }
db9f0278
JB
2897 backlist = backlist->next;
2898 }
2899
2900 Vprint_level = Qnil;
2901 UNGCPRO;
2902 return Qnil;
2903}
2904
2905DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, "",
79e8bfbf 2906 "Return the function and arguments NFRAMES up from current execution point.\n\
db9f0278
JB
2907If that frame has not evaluated the arguments yet (or is a special form),\n\
2908the value is (nil FUNCTION ARG-FORMS...).\n\
2909If that frame has evaluated its arguments and called its function already,\n\
2910the value is (t FUNCTION ARG-VALUES...).\n\
2911A &rest arg is represented as the tail of the list ARG-VALUES.\n\
2912FUNCTION is whatever was supplied as car of evaluated list,\n\
2913or a lambda expression for macro calls.\n\
79e8bfbf 2914If NFRAMES is more than the number of frames, the value is nil.")
db9f0278
JB
2915 (nframes)
2916 Lisp_Object nframes;
2917{
2918 register struct backtrace *backlist = backtrace_list;
2919 register int i;
2920 Lisp_Object tem;
2921
2922 CHECK_NATNUM (nframes, 0);
2923
2924 /* Find the frame requested. */
b6703b02 2925 for (i = 0; backlist && i < XFASTINT (nframes); i++)
db9f0278
JB
2926 backlist = backlist->next;
2927
2928 if (!backlist)
2929 return Qnil;
2930 if (backlist->nargs == UNEVALLED)
2931 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
2932 else
2933 {
2934 if (backlist->nargs == MANY)
2935 tem = *backlist->args;
2936 else
2937 tem = Flist (backlist->nargs, backlist->args);
2938
2939 return Fcons (Qt, Fcons (*backlist->function, tem));
2940 }
2941}
2942\f
dfcf069d 2943void
db9f0278
JB
2944syms_of_eval ()
2945{
2946 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
7eaada67
RS
2947 "*Limit on number of Lisp variable bindings & unwind-protects.\n\
2948If Lisp code tries to make more than this many at once,\n\
2949an error is signaled.");
db9f0278
JB
2950
2951 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
7eaada67 2952 "*Limit on depth in `eval', `apply' and `funcall' before error.\n\
db9f0278
JB
2953This limit is to catch infinite recursions for you before they cause\n\
2954actual stack overflow in C, which would be fatal for Emacs.\n\
2955You can safely make it considerably larger than its default value,\n\
2956if that proves inconveniently small.");
2957
2958 DEFVAR_LISP ("quit-flag", &Vquit_flag,
2959 "Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.\n\
d0b68896 2960Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.");
db9f0278
JB
2961 Vquit_flag = Qnil;
2962
2963 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
2964 "Non-nil inhibits C-g quitting from happening immediately.\n\
2965Note that `quit-flag' will still be set by typing C-g,\n\
690337b7 2966so a quit will be signaled as soon as `inhibit-quit' is nil.\n\
db9f0278
JB
2967To prevent this happening, set `quit-flag' to nil\n\
2968before making `inhibit-quit' nil.");
2969 Vinhibit_quit = Qnil;
2970
ad236261
JB
2971 Qinhibit_quit = intern ("inhibit-quit");
2972 staticpro (&Qinhibit_quit);
2973
db9f0278
JB
2974 Qautoload = intern ("autoload");
2975 staticpro (&Qautoload);
2976
2977 Qdebug_on_error = intern ("debug-on-error");
2978 staticpro (&Qdebug_on_error);
2979
2980 Qmacro = intern ("macro");
2981 staticpro (&Qmacro);
2982
2983 /* Note that the process handling also uses Qexit, but we don't want
2984 to staticpro it twice, so we just do it here. */
2985 Qexit = intern ("exit");
2986 staticpro (&Qexit);
2987
2988 Qinteractive = intern ("interactive");
2989 staticpro (&Qinteractive);
2990
2991 Qcommandp = intern ("commandp");
2992 staticpro (&Qcommandp);
2993
2994 Qdefun = intern ("defun");
2995 staticpro (&Qdefun);
2996
2997 Qand_rest = intern ("&rest");
2998 staticpro (&Qand_rest);
2999
3000 Qand_optional = intern ("&optional");
3001 staticpro (&Qand_optional);
3002
128c0f66 3003 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
db9f0278 3004 "*Non-nil means automatically display a backtrace buffer\n\
128c0f66
RM
3005after any error that is handled by the editor command loop.\n\
3006If the value is a list, an error only means to display a backtrace\n\
3007if one of its condition symbols appears in the list.");
3008 Vstack_trace_on_error = Qnil;
db9f0278 3009
128c0f66 3010 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
db9f0278
JB
3011 "*Non-nil means enter debugger if an error is signaled.\n\
3012Does not apply to errors handled by `condition-case'.\n\
128c0f66
RM
3013If the value is a list, an error only means to enter the debugger\n\
3014if one of its condition symbols appears in the list.\n\
db9f0278 3015See also variable `debug-on-quit'.");
128c0f66 3016 Vdebug_on_error = Qnil;
db9f0278 3017
fc950e09
KH
3018 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
3019 "*List of errors for which the debugger should not be called.\n\
3020Each element may be a condition-name or a regexp that matches error messages.\n\
3021If any element applies to a given error, that error skips the debugger\n\
3022and just returns to top level.\n\
3023This overrides the variable `debug-on-error'.\n\
3024It does not apply to errors handled by `condition-case'.");
3025 Vdebug_ignored_errors = Qnil;
3026
db9f0278 3027 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
d0b68896 3028 "*Non-nil means enter debugger if quit is signaled (C-g, for example).\n\
1b7d8239 3029Does not apply if quit is handled by a `condition-case'.");
db9f0278
JB
3030 debug_on_quit = 0;
3031
3032 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
3033 "Non-nil means enter debugger before next `eval', `apply' or `funcall'.");
3034
3035 DEFVAR_LISP ("debugger", &Vdebugger,
3036 "Function to call to invoke debugger.\n\
3037If due to frame exit, args are `exit' and the value being returned;\n\
3038 this function's value will be returned instead of that.\n\
3039If due to error, args are `error' and a list of the args to `signal'.\n\
3040If due to `apply' or `funcall' entry, one arg, `lambda'.\n\
3041If due to `eval' entry, one arg, t.");
3042 Vdebugger = Qnil;
3043
61ede770
RS
3044 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
3045 "If non-nil, this is a function for `signal' to call.\n\
3046It receives the same arguments that `signal' was given.\n\
3047The Edebug package uses this to regain control.");
3048 Vsignal_hook_function = Qnil;
3049
db9f0278
JB
3050 Qmocklisp_arguments = intern ("mocklisp-arguments");
3051 staticpro (&Qmocklisp_arguments);
3052 DEFVAR_LISP ("mocklisp-arguments", &Vmocklisp_arguments,
3053 "While in a mocklisp function, the list of its unevaluated args.");
3054 Vmocklisp_arguments = Qt;
3055
57a6e758 3056 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
61ede770
RS
3057 "*Non-nil means call the debugger regardless of condition handlers.\n\
3058Note that `debug-on-error', `debug-on-quit' and friends\n\
3059still determine whether to handle the particular condition.");
57a6e758 3060 Vdebug_on_signal = Qnil;
61ede770 3061
6e6e9f08
RS
3062 Vrun_hooks = intern ("run-hooks");
3063 staticpro (&Vrun_hooks);
db9f0278
JB
3064
3065 staticpro (&Vautoload_queue);
3066 Vautoload_queue = Qnil;
3067
3068 defsubr (&Sor);
3069 defsubr (&Sand);
3070 defsubr (&Sif);
3071 defsubr (&Scond);
3072 defsubr (&Sprogn);
3073 defsubr (&Sprog1);
3074 defsubr (&Sprog2);
3075 defsubr (&Ssetq);
3076 defsubr (&Squote);
3077 defsubr (&Sfunction);
3078 defsubr (&Sdefun);
3079 defsubr (&Sdefmacro);
3080 defsubr (&Sdefvar);
3081 defsubr (&Sdefconst);
3082 defsubr (&Suser_variable_p);
3083 defsubr (&Slet);
3084 defsubr (&SletX);
3085 defsubr (&Swhile);
3086 defsubr (&Smacroexpand);
3087 defsubr (&Scatch);
3088 defsubr (&Sthrow);
3089 defsubr (&Sunwind_protect);
3090 defsubr (&Scondition_case);
3091 defsubr (&Ssignal);
3092 defsubr (&Sinteractive_p);
3093 defsubr (&Scommandp);
3094 defsubr (&Sautoload);
3095 defsubr (&Seval);
3096 defsubr (&Sapply);
3097 defsubr (&Sfuncall);
ff936e53
SM
3098 defsubr (&Srun_hooks);
3099 defsubr (&Srun_hook_with_args);
3100 defsubr (&Srun_hook_with_args_until_success);
3101 defsubr (&Srun_hook_with_args_until_failure);
661c7d6e 3102 defsubr (&Sfetch_bytecode);
db9f0278
JB
3103 defsubr (&Sbacktrace_debug);
3104 defsubr (&Sbacktrace);
3105 defsubr (&Sbacktrace_frame);
3106}