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