(Fchar_after): Fix type clashes.
[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\
4e306308
RS
887TAG is evalled to get the tag to use; it must not be nil.\n\
888\n\
889Then the BODY is executed.\n\
db9f0278
JB
890Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.\n\
891If no throw happens, `catch' returns the value of the last BODY form.\n\
892If a throw happens, it specifies the value to return from `catch'.")
893 (args)
894 Lisp_Object args;
895{
896 register Lisp_Object tag;
897 struct gcpro gcpro1;
898
899 GCPRO1 (args);
900 tag = Feval (Fcar (args));
901 UNGCPRO;
902 return internal_catch (tag, Fprogn, Fcdr (args));
903}
904
905/* Set up a catch, then call C function FUNC on argument ARG.
906 FUNC should return a Lisp_Object.
907 This is how catches are done from within C code. */
908
909Lisp_Object
910internal_catch (tag, func, arg)
911 Lisp_Object tag;
912 Lisp_Object (*func) ();
913 Lisp_Object arg;
914{
915 /* This structure is made part of the chain `catchlist'. */
916 struct catchtag c;
917
918 /* Fill in the components of c, and put it on the list. */
919 c.next = catchlist;
920 c.tag = tag;
921 c.val = Qnil;
922 c.backlist = backtrace_list;
923 c.handlerlist = handlerlist;
924 c.lisp_eval_depth = lisp_eval_depth;
925 c.pdlcount = specpdl_ptr - specpdl;
926 c.poll_suppress_count = poll_suppress_count;
927 c.gcpro = gcprolist;
928 catchlist = &c;
929
930 /* Call FUNC. */
931 if (! _setjmp (c.jmp))
932 c.val = (*func) (arg);
933
934 /* Throw works by a longjmp that comes right here. */
935 catchlist = c.next;
936 return c.val;
937}
938
ba410f40
JB
939/* Unwind the specbind, catch, and handler stacks back to CATCH, and
940 jump to that CATCH, returning VALUE as the value of that catch.
db9f0278 941
ba410f40
JB
942 This is the guts Fthrow and Fsignal; they differ only in the way
943 they choose the catch tag to throw to. A catch tag for a
944 condition-case form has a TAG of Qnil.
db9f0278 945
ba410f40
JB
946 Before each catch is discarded, unbind all special bindings and
947 execute all unwind-protect clauses made above that catch. Unwind
948 the handler stack as we go, so that the proper handlers are in
949 effect for each unwind-protect clause we run. At the end, restore
950 some static info saved in CATCH, and longjmp to the location
951 specified in the
952
953 This is used for correct unwinding in Fthrow and Fsignal. */
db9f0278
JB
954
955static void
ba410f40 956unwind_to_catch (catch, value)
db9f0278 957 struct catchtag *catch;
ba410f40 958 Lisp_Object value;
db9f0278
JB
959{
960 register int last_time;
961
ba410f40
JB
962 /* Save the value in the tag. */
963 catch->val = value;
964
82da7701 965 /* Restore the polling-suppression count. */
1cdc3155 966 set_poll_suppress_count (catch->poll_suppress_count);
82da7701 967
db9f0278
JB
968 do
969 {
970 last_time = catchlist == catch;
82da7701
JB
971
972 /* Unwind the specpdl stack, and then restore the proper set of
973 handlers. */
db9f0278
JB
974 unbind_to (catchlist->pdlcount, Qnil);
975 handlerlist = catchlist->handlerlist;
976 catchlist = catchlist->next;
977 }
978 while (! last_time);
979
980 gcprolist = catch->gcpro;
981 backtrace_list = catch->backlist;
982 lisp_eval_depth = catch->lisp_eval_depth;
ba410f40
JB
983
984 _longjmp (catch->jmp, 1);
db9f0278
JB
985}
986
987DEFUN ("throw", Fthrow, Sthrow, 2, 2, 0,
988 "(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.\n\
989Both TAG and VALUE are evalled.")
79e8bfbf
EN
990 (tag, value)
991 register Lisp_Object tag, value;
db9f0278
JB
992{
993 register struct catchtag *c;
994
995 while (1)
996 {
265a9e55 997 if (!NILP (tag))
db9f0278
JB
998 for (c = catchlist; c; c = c->next)
999 {
1000 if (EQ (c->tag, tag))
79e8bfbf 1001 unwind_to_catch (c, value);
db9f0278 1002 }
79e8bfbf 1003 tag = Fsignal (Qno_catch, Fcons (tag, Fcons (value, Qnil)));
db9f0278
JB
1004 }
1005}
1006
1007
1008DEFUN ("unwind-protect", Funwind_protect, Sunwind_protect, 1, UNEVALLED, 0,
1009 "Do BODYFORM, protecting with UNWINDFORMS.\n\
1010Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).\n\
1011If BODYFORM completes normally, its value is returned\n\
1012after executing the UNWINDFORMS.\n\
1013If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.")
1014 (args)
1015 Lisp_Object args;
1016{
1017 Lisp_Object val;
1018 int count = specpdl_ptr - specpdl;
1019
1020 record_unwind_protect (0, Fcdr (args));
1021 val = Feval (Fcar (args));
1022 return unbind_to (count, val);
1023}
1024\f
1025/* Chain of condition handlers currently in effect.
1026 The elements of this chain are contained in the stack frames
1027 of Fcondition_case and internal_condition_case.
1028 When an error is signaled (by calling Fsignal, below),
1029 this chain is searched for an element that applies. */
1030
1031struct handler *handlerlist;
1032
1033DEFUN ("condition-case", Fcondition_case, Scondition_case, 2, UNEVALLED, 0,
1034 "Regain control when an error is signaled.\n\
1035Usage looks like (condition-case VAR BODYFORM HANDLERS...).\n\
1036executes BODYFORM and returns its value if no error happens.\n\
1037Each element of HANDLERS looks like (CONDITION-NAME BODY...)\n\
1038where the BODY is made of Lisp expressions.\n\n\
1039A handler is applicable to an error\n\
1040if CONDITION-NAME is one of the error's condition names.\n\
1041If an error happens, the first applicable handler is run.\n\
1042\n\
633357d4
RS
1043The car of a handler may be a list of condition names\n\
1044instead of a single condition name.\n\
1045\n\
db9f0278
JB
1046When a handler handles an error,\n\
1047control returns to the condition-case and the handler BODY... is executed\n\
1048with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).\n\
1049VAR may be nil; then you do not get access to the signal information.\n\
1050\n\
1051The value of the last BODY form is returned from the condition-case.\n\
1052See also the function `signal' for more info.")
1053 (args)
1054 Lisp_Object args;
1055{
1056 Lisp_Object val;
1057 struct catchtag c;
1058 struct handler h;
82da7701 1059 register Lisp_Object var, bodyform, handlers;
db9f0278 1060
82da7701
JB
1061 var = Fcar (args);
1062 bodyform = Fcar (Fcdr (args));
1063 handlers = Fcdr (Fcdr (args));
1064 CHECK_SYMBOL (var, 0);
1065
1066 for (val = handlers; ! NILP (val); val = Fcdr (val))
1067 {
1068 Lisp_Object tem;
1069 tem = Fcar (val);
5f96776a
RS
1070 if (! (NILP (tem)
1071 || (CONSP (tem)
1072 && (SYMBOLP (XCONS (tem)->car)
1073 || CONSP (XCONS (tem)->car)))))
82da7701
JB
1074 error ("Invalid condition handler", tem);
1075 }
db9f0278
JB
1076
1077 c.tag = Qnil;
1078 c.val = Qnil;
1079 c.backlist = backtrace_list;
1080 c.handlerlist = handlerlist;
1081 c.lisp_eval_depth = lisp_eval_depth;
1082 c.pdlcount = specpdl_ptr - specpdl;
1083 c.poll_suppress_count = poll_suppress_count;
1084 c.gcpro = gcprolist;
1085 if (_setjmp (c.jmp))
1086 {
265a9e55 1087 if (!NILP (h.var))
9d58218c
RS
1088 specbind (h.var, c.val);
1089 val = Fprogn (Fcdr (h.chosen_clause));
82da7701
JB
1090
1091 /* Note that this just undoes the binding of h.var; whoever
1092 longjumped to us unwound the stack to c.pdlcount before
1093 throwing. */
db9f0278
JB
1094 unbind_to (c.pdlcount, Qnil);
1095 return val;
1096 }
1097 c.next = catchlist;
1098 catchlist = &c;
db9f0278 1099
82da7701
JB
1100 h.var = var;
1101 h.handler = handlers;
db9f0278 1102 h.next = handlerlist;
db9f0278
JB
1103 h.tag = &c;
1104 handlerlist = &h;
1105
82da7701 1106 val = Feval (bodyform);
db9f0278
JB
1107 catchlist = c.next;
1108 handlerlist = h.next;
1109 return val;
1110}
1111
f029ca5f
RS
1112/* Call the function BFUN with no arguments, catching errors within it
1113 according to HANDLERS. If there is an error, call HFUN with
1114 one argument which is the data that describes the error:
1115 (SIGNALNAME . DATA)
1116
1117 HANDLERS can be a list of conditions to catch.
1118 If HANDLERS is Qt, catch all errors.
1119 If HANDLERS is Qerror, catch all errors
1120 but allow the debugger to run if that is enabled. */
1121
db9f0278
JB
1122Lisp_Object
1123internal_condition_case (bfun, handlers, hfun)
1124 Lisp_Object (*bfun) ();
1125 Lisp_Object handlers;
1126 Lisp_Object (*hfun) ();
1127{
1128 Lisp_Object val;
1129 struct catchtag c;
1130 struct handler h;
1131
01591d17
RS
1132 /* Since Fsignal resets this to 0, it had better be 0 now
1133 or else we have a potential bug. */
1134 if (interrupt_input_blocked != 0)
1135 abort ();
1136
db9f0278
JB
1137 c.tag = Qnil;
1138 c.val = Qnil;
1139 c.backlist = backtrace_list;
1140 c.handlerlist = handlerlist;
1141 c.lisp_eval_depth = lisp_eval_depth;
1142 c.pdlcount = specpdl_ptr - specpdl;
1143 c.poll_suppress_count = poll_suppress_count;
1144 c.gcpro = gcprolist;
1145 if (_setjmp (c.jmp))
1146 {
9d58218c 1147 return (*hfun) (c.val);
db9f0278
JB
1148 }
1149 c.next = catchlist;
1150 catchlist = &c;
1151 h.handler = handlers;
1152 h.var = Qnil;
db9f0278
JB
1153 h.next = handlerlist;
1154 h.tag = &c;
1155 handlerlist = &h;
1156
1157 val = (*bfun) ();
1158 catchlist = c.next;
1159 handlerlist = h.next;
1160 return val;
1161}
1162
f029ca5f
RS
1163/* Like internal_condition_case but call HFUN with ARG as its argument. */
1164
d227775c
RS
1165Lisp_Object
1166internal_condition_case_1 (bfun, arg, handlers, hfun)
1167 Lisp_Object (*bfun) ();
1168 Lisp_Object arg;
1169 Lisp_Object handlers;
1170 Lisp_Object (*hfun) ();
1171{
1172 Lisp_Object val;
1173 struct catchtag c;
1174 struct handler h;
1175
1176 c.tag = Qnil;
1177 c.val = Qnil;
1178 c.backlist = backtrace_list;
1179 c.handlerlist = handlerlist;
1180 c.lisp_eval_depth = lisp_eval_depth;
1181 c.pdlcount = specpdl_ptr - specpdl;
1182 c.poll_suppress_count = poll_suppress_count;
1183 c.gcpro = gcprolist;
1184 if (_setjmp (c.jmp))
1185 {
9d58218c 1186 return (*hfun) (c.val);
d227775c
RS
1187 }
1188 c.next = catchlist;
1189 catchlist = &c;
1190 h.handler = handlers;
1191 h.var = Qnil;
1192 h.next = handlerlist;
1193 h.tag = &c;
1194 handlerlist = &h;
1195
1196 val = (*bfun) (arg);
1197 catchlist = c.next;
1198 handlerlist = h.next;
1199 return val;
1200}
1201\f
db9f0278
JB
1202static Lisp_Object find_handler_clause ();
1203
1204DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
4200e719 1205 "Signal an error. Args are ERROR-SYMBOL and associated DATA.\n\
db9f0278 1206This function does not return.\n\n\
4200e719 1207An error symbol is a symbol with an `error-conditions' property\n\
db9f0278
JB
1208that is a list of condition names.\n\
1209A handler for any of those names will get to handle this signal.\n\
1210The symbol `error' should normally be one of them.\n\
1211\n\
1212DATA should be a list. Its elements are printed as part of the error message.\n\
1213If the signal is handled, DATA is made available to the handler.\n\
1214See also the function `condition-case'.")
4200e719
RS
1215 (error_symbol, data)
1216 Lisp_Object error_symbol, data;
db9f0278
JB
1217{
1218 register struct handler *allhandlers = handlerlist;
1219 Lisp_Object conditions;
1220 extern int gc_in_progress;
1221 extern int waiting_for_input;
1222 Lisp_Object debugger_value;
c11d3d17 1223 Lisp_Object string;
1ea9dec4
RS
1224 Lisp_Object real_error_symbol;
1225 Lisp_Object combined_data;
db9f0278
JB
1226
1227 quit_error_check ();
1228 immediate_quit = 0;
1229 if (gc_in_progress || waiting_for_input)
1230 abort ();
1231
1232 TOTALLY_UNBLOCK_INPUT;
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))
88817f3b
RS
1401 {
1402#ifdef __STDC__
1403 internal_with_output_to_temp_buffer ("*Backtrace*",
1404 (Lisp_Object (*) (Lisp_Object)) Fbacktrace,
1405 Qnil);
1406#else
1407 internal_with_output_to_temp_buffer ("*Backtrace*",
1408 Fbacktrace, Qnil);
1409#endif
1410 }
1ea9dec4 1411 if ((EQ (sig_symbol, Qquit)
ba410f40
JB
1412 ? debug_on_quit
1413 : wants_debugger (Vdebug_on_error, conditions))
1ea9dec4 1414 && ! skip_debugger (conditions, combined_data)
be857679 1415 && when_entered_debugger < num_nonmacro_input_events)
db9f0278 1416 {
db9f0278 1417 specbind (Qdebug_on_error, Qnil);
fc950e09
KH
1418 *debugger_value_ptr
1419 = call_debugger (Fcons (Qerror,
1ea9dec4 1420 Fcons (combined_data, Qnil)));
61ede770
RS
1421 debugger_called = 1;
1422 }
1423 /* If there is no handler, return saying whether we ran the debugger. */
1424 if (EQ (handlers, Qerror))
1425 {
1426 if (debugger_called)
1427 return unbind_to (count, Qlambda);
1428 return Qt;
db9f0278 1429 }
db9f0278
JB
1430 }
1431 for (h = handlers; CONSP (h); h = Fcdr (h))
1432 {
5f96776a
RS
1433 Lisp_Object handler, condit;
1434
1435 handler = Fcar (h);
1436 if (!CONSP (handler))
db9f0278 1437 continue;
5f96776a
RS
1438 condit = Fcar (handler);
1439 /* Handle a single condition name in handler HANDLER. */
1440 if (SYMBOLP (condit))
1441 {
1442 tem = Fmemq (Fcar (handler), conditions);
1443 if (!NILP (tem))
1444 return handler;
1445 }
1446 /* Handle a list of condition names in handler HANDLER. */
1447 else if (CONSP (condit))
1448 {
1449 while (CONSP (condit))
1450 {
1451 tem = Fmemq (Fcar (condit), conditions);
1452 if (!NILP (tem))
1453 return handler;
1454 condit = XCONS (condit)->cdr;
1455 }
1456 }
db9f0278
JB
1457 }
1458 return Qnil;
1459}
1460
1461/* dump an error message; called like printf */
1462
1463/* VARARGS 1 */
1464void
1465error (m, a1, a2, a3)
1466 char *m;
9125da08 1467 char *a1, *a2, *a3;
db9f0278
JB
1468{
1469 char buf[200];
9125da08
RS
1470 int size = 200;
1471 int mlen;
1472 char *buffer = buf;
1473 char *args[3];
1474 int allocated = 0;
1475 Lisp_Object string;
1476
1477 args[0] = a1;
1478 args[1] = a2;
1479 args[2] = a3;
1480
1481 mlen = strlen (m);
db9f0278
JB
1482
1483 while (1)
9125da08 1484 {
955f3ff9 1485 int used = doprnt (buffer, size, m, m + mlen, 3, args);
9125da08
RS
1486 if (used < size)
1487 break;
1488 size *= 2;
1489 if (allocated)
1490 buffer = (char *) xrealloc (buffer, size);
5ece1728
RS
1491 else
1492 {
1493 buffer = (char *) xmalloc (size);
1494 allocated = 1;
1495 }
9125da08
RS
1496 }
1497
955f3ff9 1498 string = build_string (buffer);
9125da08
RS
1499 if (allocated)
1500 free (buffer);
1501
1502 Fsignal (Qerror, Fcons (string, Qnil));
db9f0278
JB
1503}
1504\f
1505DEFUN ("commandp", Fcommandp, Scommandp, 1, 1, 0,
1506 "T if FUNCTION makes provisions for interactive calling.\n\
1507This means it contains a description for how to read arguments to give it.\n\
1508The value is nil for an invalid function or a symbol with no function\n\
1509definition.\n\
1510\n\
1511Interactively callable functions include strings and vectors (treated\n\
1512as keyboard macros), lambda-expressions that contain a top-level call\n\
1513to `interactive', autoload definitions made by `autoload' with non-nil\n\
1514fourth argument, and some of the built-in functions of Lisp.\n\
1515\n\
1516Also, a symbol satisfies `commandp' if its function definition does so.")
1517 (function)
1518 Lisp_Object function;
1519{
1520 register Lisp_Object fun;
1521 register Lisp_Object funcar;
1522 register Lisp_Object tem;
1523 register int i = 0;
1524
1525 fun = function;
1526
ffd56f97
JB
1527 fun = indirect_function (fun);
1528 if (EQ (fun, Qunbound))
1529 return Qnil;
db9f0278
JB
1530
1531 /* Emacs primitives are interactive if their DEFUN specifies an
1532 interactive spec. */
90165123 1533 if (SUBRP (fun))
db9f0278
JB
1534 {
1535 if (XSUBR (fun)->prompt)
1536 return Qt;
1537 else
1538 return Qnil;
1539 }
1540
1541 /* Bytecode objects are interactive if they are long enough to
1542 have an element whose index is COMPILED_INTERACTIVE, which is
1543 where the interactive spec is stored. */
90165123 1544 else if (COMPILEDP (fun))
f9b4aacf 1545 return ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
db9f0278
JB
1546 ? Qt : Qnil);
1547
1548 /* Strings and vectors are keyboard macros. */
90165123 1549 if (STRINGP (fun) || VECTORP (fun))
db9f0278
JB
1550 return Qt;
1551
1552 /* Lists may represent commands. */
1553 if (!CONSP (fun))
1554 return Qnil;
1555 funcar = Fcar (fun);
90165123 1556 if (!SYMBOLP (funcar))
db9f0278
JB
1557 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1558 if (EQ (funcar, Qlambda))
1559 return Fassq (Qinteractive, Fcdr (Fcdr (fun)));
1560 if (EQ (funcar, Qmocklisp))
1561 return Qt; /* All mocklisp functions can be called interactively */
1562 if (EQ (funcar, Qautoload))
1563 return Fcar (Fcdr (Fcdr (Fcdr (fun))));
1564 else
1565 return Qnil;
1566}
1567
1568/* ARGSUSED */
1569DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
1570 "Define FUNCTION to autoload from FILE.\n\
1571FUNCTION is a symbol; FILE is a file name string to pass to `load'.\n\
1572Third arg DOCSTRING is documentation for the function.\n\
1573Fourth arg INTERACTIVE if non-nil says function can be called interactively.\n\
ee9ee63c
JB
1574Fifth arg TYPE indicates the type of the object:\n\
1575 nil or omitted says FUNCTION is a function,\n\
1576 `keymap' says FUNCTION is really a keymap, and\n\
1577 `macro' or t says FUNCTION is really a macro.\n\
db9f0278
JB
1578Third through fifth args give info about the real definition.\n\
1579They default to nil.\n\
1580If FUNCTION is already defined other than as an autoload,\n\
1581this does nothing and returns nil.")
ee9ee63c
JB
1582 (function, file, docstring, interactive, type)
1583 Lisp_Object function, file, docstring, interactive, type;
db9f0278
JB
1584{
1585#ifdef NO_ARG_ARRAY
1586 Lisp_Object args[4];
1587#endif
1588
1589 CHECK_SYMBOL (function, 0);
1590 CHECK_STRING (file, 1);
1591
1592 /* If function is defined and not as an autoload, don't override */
1593 if (!EQ (XSYMBOL (function)->function, Qunbound)
90165123 1594 && !(CONSP (XSYMBOL (function)->function)
db9f0278
JB
1595 && EQ (XCONS (XSYMBOL (function)->function)->car, Qautoload)))
1596 return Qnil;
1597
1598#ifdef NO_ARG_ARRAY
1599 args[0] = file;
1600 args[1] = docstring;
1601 args[2] = interactive;
ee9ee63c 1602 args[3] = type;
db9f0278
JB
1603
1604 return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
1605#else /* NO_ARG_ARRAY */
1606 return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
1607#endif /* not NO_ARG_ARRAY */
1608}
1609
1610Lisp_Object
1611un_autoload (oldqueue)
1612 Lisp_Object oldqueue;
1613{
1614 register Lisp_Object queue, first, second;
1615
1616 /* Queue to unwind is current value of Vautoload_queue.
1617 oldqueue is the shadowed value to leave in Vautoload_queue. */
1618 queue = Vautoload_queue;
1619 Vautoload_queue = oldqueue;
1620 while (CONSP (queue))
1621 {
1622 first = Fcar (queue);
1623 second = Fcdr (first);
1624 first = Fcar (first);
1625 if (EQ (second, Qnil))
1626 Vfeatures = first;
1627 else
1628 Ffset (first, second);
1629 queue = Fcdr (queue);
1630 }
1631 return Qnil;
1632}
1633
ca20916b
RS
1634/* Load an autoloaded function.
1635 FUNNAME is the symbol which is the function's name.
1636 FUNDEF is the autoload definition (a list). */
1637
045ba794 1638void
db9f0278
JB
1639do_autoload (fundef, funname)
1640 Lisp_Object fundef, funname;
1641{
1642 int count = specpdl_ptr - specpdl;
2a49b6e5 1643 Lisp_Object fun, val, queue, first, second;
ca20916b 1644 struct gcpro gcpro1, gcpro2, gcpro3;
db9f0278
JB
1645
1646 fun = funname;
1647 CHECK_SYMBOL (funname, 0);
ca20916b 1648 GCPRO3 (fun, funname, fundef);
db9f0278
JB
1649
1650 /* Value saved here is to be restored into Vautoload_queue */
1651 record_unwind_protect (un_autoload, Vautoload_queue);
1652 Vautoload_queue = Qt;
4aac2302 1653 Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil, Qt);
2a49b6e5
RS
1654
1655 /* Save the old autoloads, in case we ever do an unload. */
1656 queue = Vautoload_queue;
1657 while (CONSP (queue))
1658 {
1659 first = Fcar (queue);
1660 second = Fcdr (first);
1661 first = Fcar (first);
5739ce6b
ER
1662
1663 /* Note: This test is subtle. The cdr of an autoload-queue entry
1664 may be an atom if the autoload entry was generated by a defalias
1665 or fset. */
1666 if (CONSP (second))
03e267c2 1667 Fput (first, Qautoload, (Fcdr (second)));
5739ce6b 1668
2a49b6e5
RS
1669 queue = Fcdr (queue);
1670 }
1671
db9f0278
JB
1672 /* Once loading finishes, don't undo it. */
1673 Vautoload_queue = Qt;
1674 unbind_to (count, Qnil);
1675
ffd56f97
JB
1676 fun = Findirect_function (fun);
1677
76c2b0cc 1678 if (!NILP (Fequal (fun, fundef)))
db9f0278
JB
1679 error ("Autoloading failed to define function %s",
1680 XSYMBOL (funname)->name->data);
ca20916b 1681 UNGCPRO;
db9f0278
JB
1682}
1683\f
1684DEFUN ("eval", Feval, Seval, 1, 1, 0,
1685 "Evaluate FORM and return its value.")
1686 (form)
1687 Lisp_Object form;
1688{
1689 Lisp_Object fun, val, original_fun, original_args;
1690 Lisp_Object funcar;
1691 struct backtrace backtrace;
1692 struct gcpro gcpro1, gcpro2, gcpro3;
1693
90165123 1694 if (SYMBOLP (form))
db9f0278
JB
1695 {
1696 if (EQ (Vmocklisp_arguments, Qt))
1697 return Fsymbol_value (form);
1698 val = Fsymbol_value (form);
265a9e55 1699 if (NILP (val))
a631e24c 1700 XSETFASTINT (val, 0);
db9f0278 1701 else if (EQ (val, Qt))
a631e24c 1702 XSETFASTINT (val, 1);
db9f0278
JB
1703 return val;
1704 }
1705 if (!CONSP (form))
1706 return form;
1707
1708 QUIT;
1709 if (consing_since_gc > gc_cons_threshold)
1710 {
1711 GCPRO1 (form);
1712 Fgarbage_collect ();
1713 UNGCPRO;
1714 }
1715
1716 if (++lisp_eval_depth > max_lisp_eval_depth)
1717 {
1718 if (max_lisp_eval_depth < 100)
1719 max_lisp_eval_depth = 100;
1720 if (lisp_eval_depth > max_lisp_eval_depth)
1721 error ("Lisp nesting exceeds max-lisp-eval-depth");
1722 }
1723
1724 original_fun = Fcar (form);
1725 original_args = Fcdr (form);
1726
1727 backtrace.next = backtrace_list;
1728 backtrace_list = &backtrace;
1729 backtrace.function = &original_fun; /* This also protects them from gc */
1730 backtrace.args = &original_args;
1731 backtrace.nargs = UNEVALLED;
1732 backtrace.evalargs = 1;
1733 backtrace.debug_on_exit = 0;
1734
1735 if (debug_on_next_call)
1736 do_debug_on_call (Qt);
1737
1738 /* At this point, only original_fun and original_args
1739 have values that will be used below */
1740 retry:
ffd56f97 1741 fun = Findirect_function (original_fun);
db9f0278 1742
90165123 1743 if (SUBRP (fun))
db9f0278
JB
1744 {
1745 Lisp_Object numargs;
166c822d 1746 Lisp_Object argvals[8];
db9f0278
JB
1747 Lisp_Object args_left;
1748 register int i, maxargs;
1749
1750 args_left = original_args;
1751 numargs = Flength (args_left);
1752
1753 if (XINT (numargs) < XSUBR (fun)->min_args ||
1754 (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < XINT (numargs)))
1755 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
1756
1757 if (XSUBR (fun)->max_args == UNEVALLED)
1758 {
1759 backtrace.evalargs = 0;
1760 val = (*XSUBR (fun)->function) (args_left);
1761 goto done;
1762 }
1763
1764 if (XSUBR (fun)->max_args == MANY)
1765 {
1766 /* Pass a vector of evaluated arguments */
1767 Lisp_Object *vals;
1768 register int argnum = 0;
1769
1770 vals = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
1771
1772 GCPRO3 (args_left, fun, fun);
1773 gcpro3.var = vals;
1774 gcpro3.nvars = 0;
1775
265a9e55 1776 while (!NILP (args_left))
db9f0278
JB
1777 {
1778 vals[argnum++] = Feval (Fcar (args_left));
1779 args_left = Fcdr (args_left);
1780 gcpro3.nvars = argnum;
1781 }
db9f0278
JB
1782
1783 backtrace.args = vals;
1784 backtrace.nargs = XINT (numargs);
1785
1786 val = (*XSUBR (fun)->function) (XINT (numargs), vals);
a6e3fa71 1787 UNGCPRO;
db9f0278
JB
1788 goto done;
1789 }
1790
1791 GCPRO3 (args_left, fun, fun);
1792 gcpro3.var = argvals;
1793 gcpro3.nvars = 0;
1794
1795 maxargs = XSUBR (fun)->max_args;
1796 for (i = 0; i < maxargs; args_left = Fcdr (args_left))
1797 {
1798 argvals[i] = Feval (Fcar (args_left));
1799 gcpro3.nvars = ++i;
1800 }
1801
1802 UNGCPRO;
1803
1804 backtrace.args = argvals;
1805 backtrace.nargs = XINT (numargs);
1806
1807 switch (i)
1808 {
1809 case 0:
1810 val = (*XSUBR (fun)->function) ();
1811 goto done;
1812 case 1:
1813 val = (*XSUBR (fun)->function) (argvals[0]);
1814 goto done;
1815 case 2:
1816 val = (*XSUBR (fun)->function) (argvals[0], argvals[1]);
1817 goto done;
1818 case 3:
1819 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1820 argvals[2]);
1821 goto done;
1822 case 4:
1823 val = (*XSUBR (fun)->function) (argvals[0], argvals[1],
1824 argvals[2], argvals[3]);
1825 goto done;
1826 case 5:
1827 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1828 argvals[3], argvals[4]);
1829 goto done;
1830 case 6:
1831 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1832 argvals[3], argvals[4], argvals[5]);
1833 goto done;
15c65264
RS
1834 case 7:
1835 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1836 argvals[3], argvals[4], argvals[5],
1837 argvals[6]);
1838 goto done;
db9f0278 1839
166c822d
KH
1840 case 8:
1841 val = (*XSUBR (fun)->function) (argvals[0], argvals[1], argvals[2],
1842 argvals[3], argvals[4], argvals[5],
1843 argvals[6], argvals[7]);
1844 goto done;
1845
db9f0278 1846 default:
08564963
JB
1847 /* Someone has created a subr that takes more arguments than
1848 is supported by this code. We need to either rewrite the
1849 subr to use a different argument protocol, or add more
1850 cases to this switch. */
1851 abort ();
db9f0278
JB
1852 }
1853 }
90165123 1854 if (COMPILEDP (fun))
db9f0278
JB
1855 val = apply_lambda (fun, original_args, 1);
1856 else
1857 {
1858 if (!CONSP (fun))
1859 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1860 funcar = Fcar (fun);
90165123 1861 if (!SYMBOLP (funcar))
db9f0278
JB
1862 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1863 if (EQ (funcar, Qautoload))
1864 {
1865 do_autoload (fun, original_fun);
1866 goto retry;
1867 }
1868 if (EQ (funcar, Qmacro))
1869 val = Feval (apply1 (Fcdr (fun), original_args));
1870 else if (EQ (funcar, Qlambda))
1871 val = apply_lambda (fun, original_args, 1);
1872 else if (EQ (funcar, Qmocklisp))
1873 val = ml_apply (fun, original_args);
1874 else
1875 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
1876 }
1877 done:
1878 if (!EQ (Vmocklisp_arguments, Qt))
1879 {
265a9e55 1880 if (NILP (val))
a631e24c 1881 XSETFASTINT (val, 0);
db9f0278 1882 else if (EQ (val, Qt))
a631e24c 1883 XSETFASTINT (val, 1);
db9f0278
JB
1884 }
1885 lisp_eval_depth--;
1886 if (backtrace.debug_on_exit)
1887 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
1888 backtrace_list = backtrace.next;
1889 return val;
1890}
1891\f
1892DEFUN ("apply", Fapply, Sapply, 2, MANY, 0,
1893 "Call FUNCTION with our remaining args, using our last arg as list of args.\n\
fd7fe9a1 1894Then return the value FUNCTION returns.\n\
db9f0278
JB
1895Thus, (apply '+ 1 2 '(3 4)) returns 10.")
1896 (nargs, args)
1897 int nargs;
1898 Lisp_Object *args;
1899{
1900 register int i, numargs;
1901 register Lisp_Object spread_arg;
1902 register Lisp_Object *funcall_args;
db9f0278 1903 Lisp_Object fun;
a6e3fa71 1904 struct gcpro gcpro1;
db9f0278
JB
1905
1906 fun = args [0];
1907 funcall_args = 0;
1908 spread_arg = args [nargs - 1];
1909 CHECK_LIST (spread_arg, nargs);
1910
1911 numargs = XINT (Flength (spread_arg));
1912
1913 if (numargs == 0)
1914 return Ffuncall (nargs - 1, args);
1915 else if (numargs == 1)
1916 {
1917 args [nargs - 1] = XCONS (spread_arg)->car;
1918 return Ffuncall (nargs, args);
1919 }
1920
a6e3fa71 1921 numargs += nargs - 2;
db9f0278 1922
ffd56f97
JB
1923 fun = indirect_function (fun);
1924 if (EQ (fun, Qunbound))
db9f0278 1925 {
ffd56f97
JB
1926 /* Let funcall get the error */
1927 fun = args[0];
1928 goto funcall;
db9f0278
JB
1929 }
1930
90165123 1931 if (SUBRP (fun))
db9f0278
JB
1932 {
1933 if (numargs < XSUBR (fun)->min_args
1934 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
1935 goto funcall; /* Let funcall get the error */
1936 else if (XSUBR (fun)->max_args > numargs)
1937 {
1938 /* Avoid making funcall cons up a yet another new vector of arguments
1939 by explicitly supplying nil's for optional values */
1940 funcall_args = (Lisp_Object *) alloca ((1 + XSUBR (fun)->max_args)
1941 * sizeof (Lisp_Object));
1942 for (i = numargs; i < XSUBR (fun)->max_args;)
1943 funcall_args[++i] = Qnil;
a6e3fa71
JB
1944 GCPRO1 (*funcall_args);
1945 gcpro1.nvars = 1 + XSUBR (fun)->max_args;
db9f0278
JB
1946 }
1947 }
1948 funcall:
1949 /* We add 1 to numargs because funcall_args includes the
1950 function itself as well as its arguments. */
1951 if (!funcall_args)
a6e3fa71
JB
1952 {
1953 funcall_args = (Lisp_Object *) alloca ((1 + numargs)
1954 * sizeof (Lisp_Object));
1955 GCPRO1 (*funcall_args);
1956 gcpro1.nvars = 1 + numargs;
1957 }
1958
db9f0278
JB
1959 bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
1960 /* Spread the last arg we got. Its first element goes in
1961 the slot that it used to occupy, hence this value of I. */
1962 i = nargs - 1;
265a9e55 1963 while (!NILP (spread_arg))
db9f0278
JB
1964 {
1965 funcall_args [i++] = XCONS (spread_arg)->car;
1966 spread_arg = XCONS (spread_arg)->cdr;
1967 }
a6e3fa71
JB
1968
1969 RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
db9f0278
JB
1970}
1971\f
ff936e53
SM
1972/* Run hook variables in various ways. */
1973
1974enum run_hooks_condition {to_completion, until_success, until_failure};
1975
1976DEFUN ("run-hooks", Frun_hooks, Srun_hooks, 1, MANY, 0,
1977 "Run each hook in HOOKS. Major mode functions use this.\n\
1978Each argument should be a symbol, a hook variable.\n\
1979These symbols are processed in the order specified.\n\
1980If a hook symbol has a non-nil value, that value may be a function\n\
1981or a list of functions to be called to run the hook.\n\
1982If the value is a function, it is called with no arguments.\n\
1983If it is a list, the elements are called, in order, with no arguments.\n\
1984\n\
1985To make a hook variable buffer-local, use `make-local-hook',\n\
1986not `make-local-variable'.")
1987 (nargs, args)
1988 int nargs;
1989 Lisp_Object *args;
1990{
1991 Lisp_Object hook[1];
1992 register int i;
1993
1994 for (i = 0; i < nargs; i++)
1995 {
1996 hook[0] = args[i];
1997 run_hook_with_args (1, hook, to_completion);
1998 }
1999
2000 return Qnil;
2001}
2002
a0d76c27
EN
2003DEFUN ("run-hook-with-args", Frun_hook_with_args,
2004 Srun_hook_with_args, 1, MANY, 0,
b0b667cb
KH
2005 "Run HOOK with the specified arguments ARGS.\n\
2006HOOK should be a symbol, a hook variable. If HOOK has a non-nil\n\
2007value, that value may be a function or a list of functions to be\n\
2008called to run the hook. If the value is a function, it is called with\n\
2009the given arguments and its return value is returned. If it is a list\n\
2010of functions, those functions are called, in order,\n\
2011with the given arguments ARGS.\n\
2012It is best not to depend on the value return by `run-hook-with-args',\n\
2013as that may change.\n\
2014\n\
ff936e53
SM
2015To make a hook variable buffer-local, use `make-local-hook',\n\
2016not `make-local-variable'.")
2017 (nargs, args)
2018 int nargs;
2019 Lisp_Object *args;
2020{
2021 return run_hook_with_args (nargs, args, to_completion);
2022}
2023
a0d76c27
EN
2024DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success,
2025 Srun_hook_with_args_until_success, 1, MANY, 0,
ff936e53
SM
2026 "Run HOOK with the specified arguments ARGS.\n\
2027HOOK should be a symbol, a hook variable. Its value should\n\
2028be a list of functions. We call those functions, one by one,\n\
2029passing arguments ARGS to each of them, until one of them\n\
2030returns a non-nil value. Then we return that value.\n\
2031If all the functions return nil, we return nil.\n\
2032\n\
2033To make a hook variable buffer-local, use `make-local-hook',\n\
2034not `make-local-variable'.")
b0b667cb
KH
2035 (nargs, args)
2036 int nargs;
2037 Lisp_Object *args;
2038{
ff936e53
SM
2039 return run_hook_with_args (nargs, args, until_success);
2040}
2041
a0d76c27
EN
2042DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure,
2043 Srun_hook_with_args_until_failure, 1, MANY, 0,
ff936e53
SM
2044 "Run HOOK with the specified arguments ARGS.\n\
2045HOOK should be a symbol, a hook variable. Its value should\n\
2046be a list of functions. We call those functions, one by one,\n\
2047passing arguments ARGS to each of them, until one of them\n\
2048returns nil. Then we return nil.\n\
2049If all the functions return non-nil, we return non-nil.\n\
2050\n\
2051To make a hook variable buffer-local, use `make-local-hook',\n\
2052not `make-local-variable'.")
2053 (nargs, args)
2054 int nargs;
2055 Lisp_Object *args;
2056{
2057 return run_hook_with_args (nargs, args, until_failure);
2058}
2059
c933ea05
RS
2060/* ARGS[0] should be a hook symbol.
2061 Call each of the functions in the hook value, passing each of them
2062 as arguments all the rest of ARGS (all NARGS - 1 elements).
2063 COND specifies a condition to test after each call
2064 to decide whether to stop.
2065 The caller (or its caller, etc) must gcpro all of ARGS,
2066 except that it isn't necessary to gcpro ARGS[0]. */
2067
ff936e53
SM
2068Lisp_Object
2069run_hook_with_args (nargs, args, cond)
2070 int nargs;
2071 Lisp_Object *args;
2072 enum run_hooks_condition cond;
2073{
2074 Lisp_Object sym, val, ret;
c933ea05 2075 struct gcpro gcpro1, gcpro2;
b0b667cb 2076
f029ca5f
RS
2077 /* If we are dying or still initializing,
2078 don't do anything--it would probably crash if we tried. */
2079 if (NILP (Vrun_hooks))
2080 return;
2081
b0b667cb 2082 sym = args[0];
aa681b51 2083 val = find_symbol_value (sym);
ff936e53
SM
2084 ret = (cond == until_failure ? Qt : Qnil);
2085
b0b667cb 2086 if (EQ (val, Qunbound) || NILP (val))
ff936e53 2087 return ret;
b0b667cb
KH
2088 else if (!CONSP (val) || EQ (XCONS (val)->car, Qlambda))
2089 {
2090 args[0] = val;
2091 return Ffuncall (nargs, args);
2092 }
2093 else
2094 {
cb9d21f8
RS
2095 GCPRO2 (sym, val);
2096
ff936e53
SM
2097 for (;
2098 CONSP (val) && ((cond == to_completion)
2099 || (cond == until_success ? NILP (ret)
2100 : !NILP (ret)));
2101 val = XCONS (val)->cdr)
b0b667cb
KH
2102 {
2103 if (EQ (XCONS (val)->car, Qt))
2104 {
2105 /* t indicates this hook has a local binding;
2106 it means to run the global binding too. */
2107 Lisp_Object globals;
2108
ff936e53
SM
2109 for (globals = Fdefault_value (sym);
2110 CONSP (globals) && ((cond == to_completion)
2111 || (cond == until_success ? NILP (ret)
2112 : !NILP (ret)));
b0b667cb
KH
2113 globals = XCONS (globals)->cdr)
2114 {
2115 args[0] = XCONS (globals)->car;
77d92e05
RS
2116 /* In a global value, t should not occur. If it does, we
2117 must ignore it to avoid an endless loop. */
2118 if (!EQ (args[0], Qt))
2119 ret = Ffuncall (nargs, args);
b0b667cb
KH
2120 }
2121 }
2122 else
2123 {
2124 args[0] = XCONS (val)->car;
ff936e53 2125 ret = Ffuncall (nargs, args);
b0b667cb
KH
2126 }
2127 }
cb9d21f8
RS
2128
2129 UNGCPRO;
ff936e53 2130 return ret;
b0b667cb
KH
2131 }
2132}
c933ea05
RS
2133
2134/* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2135 present value of that symbol.
2136 Call each element of FUNLIST,
2137 passing each of them the rest of ARGS.
2138 The caller (or its caller, etc) must gcpro all of ARGS,
2139 except that it isn't necessary to gcpro ARGS[0]. */
2140
2141Lisp_Object
2142run_hook_list_with_args (funlist, nargs, args)
2143 Lisp_Object funlist;
2144 int nargs;
2145 Lisp_Object *args;
2146{
2147 Lisp_Object sym;
2148 Lisp_Object val;
2149 struct gcpro gcpro1, gcpro2;
2150
2151 sym = args[0];
2152 GCPRO2 (sym, val);
2153
2154 for (val = funlist; CONSP (val); val = XCONS (val)->cdr)
2155 {
2156 if (EQ (XCONS (val)->car, Qt))
2157 {
2158 /* t indicates this hook has a local binding;
2159 it means to run the global binding too. */
2160 Lisp_Object globals;
2161
2162 for (globals = Fdefault_value (sym);
2163 CONSP (globals);
2164 globals = XCONS (globals)->cdr)
2165 {
2166 args[0] = XCONS (globals)->car;
77d92e05
RS
2167 /* In a global value, t should not occur. If it does, we
2168 must ignore it to avoid an endless loop. */
2169 if (!EQ (args[0], Qt))
2170 Ffuncall (nargs, args);
c933ea05
RS
2171 }
2172 }
2173 else
2174 {
2175 args[0] = XCONS (val)->car;
2176 Ffuncall (nargs, args);
2177 }
2178 }
2179 UNGCPRO;
2180 return Qnil;
2181}
7d48558f
RS
2182
2183/* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2184
2185void
2186run_hook_with_args_2 (hook, arg1, arg2)
2187 Lisp_Object hook, arg1, arg2;
2188{
2189 Lisp_Object temp[3];
2190 temp[0] = hook;
2191 temp[1] = arg1;
2192 temp[2] = arg2;
2193
2194 Frun_hook_with_args (3, temp);
2195}
ff936e53 2196\f
db9f0278
JB
2197/* Apply fn to arg */
2198Lisp_Object
2199apply1 (fn, arg)
2200 Lisp_Object fn, arg;
2201{
a6e3fa71
JB
2202 struct gcpro gcpro1;
2203
2204 GCPRO1 (fn);
265a9e55 2205 if (NILP (arg))
a6e3fa71
JB
2206 RETURN_UNGCPRO (Ffuncall (1, &fn));
2207 gcpro1.nvars = 2;
db9f0278
JB
2208#ifdef NO_ARG_ARRAY
2209 {
2210 Lisp_Object args[2];
2211 args[0] = fn;
2212 args[1] = arg;
a6e3fa71
JB
2213 gcpro1.var = args;
2214 RETURN_UNGCPRO (Fapply (2, args));
db9f0278
JB
2215 }
2216#else /* not NO_ARG_ARRAY */
a6e3fa71 2217 RETURN_UNGCPRO (Fapply (2, &fn));
db9f0278
JB
2218#endif /* not NO_ARG_ARRAY */
2219}
2220
2221/* Call function fn on no arguments */
2222Lisp_Object
2223call0 (fn)
2224 Lisp_Object fn;
2225{
a6e3fa71
JB
2226 struct gcpro gcpro1;
2227
2228 GCPRO1 (fn);
2229 RETURN_UNGCPRO (Ffuncall (1, &fn));
db9f0278
JB
2230}
2231
15285f9f 2232/* Call function fn with 1 argument arg1 */
db9f0278
JB
2233/* ARGSUSED */
2234Lisp_Object
15285f9f
RS
2235call1 (fn, arg1)
2236 Lisp_Object fn, arg1;
db9f0278 2237{
a6e3fa71 2238 struct gcpro gcpro1;
db9f0278 2239#ifdef NO_ARG_ARRAY
a6e3fa71
JB
2240 Lisp_Object args[2];
2241
db9f0278 2242 args[0] = fn;
15285f9f 2243 args[1] = arg1;
a6e3fa71
JB
2244 GCPRO1 (args[0]);
2245 gcpro1.nvars = 2;
2246 RETURN_UNGCPRO (Ffuncall (2, args));
db9f0278 2247#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2248 GCPRO1 (fn);
2249 gcpro1.nvars = 2;
2250 RETURN_UNGCPRO (Ffuncall (2, &fn));
db9f0278
JB
2251#endif /* not NO_ARG_ARRAY */
2252}
2253
15285f9f 2254/* Call function fn with 2 arguments arg1, arg2 */
db9f0278
JB
2255/* ARGSUSED */
2256Lisp_Object
15285f9f
RS
2257call2 (fn, arg1, arg2)
2258 Lisp_Object fn, arg1, arg2;
db9f0278 2259{
a6e3fa71 2260 struct gcpro gcpro1;
db9f0278
JB
2261#ifdef NO_ARG_ARRAY
2262 Lisp_Object args[3];
2263 args[0] = fn;
15285f9f
RS
2264 args[1] = arg1;
2265 args[2] = arg2;
a6e3fa71
JB
2266 GCPRO1 (args[0]);
2267 gcpro1.nvars = 3;
2268 RETURN_UNGCPRO (Ffuncall (3, args));
db9f0278 2269#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2270 GCPRO1 (fn);
2271 gcpro1.nvars = 3;
2272 RETURN_UNGCPRO (Ffuncall (3, &fn));
db9f0278
JB
2273#endif /* not NO_ARG_ARRAY */
2274}
2275
15285f9f 2276/* Call function fn with 3 arguments arg1, arg2, arg3 */
db9f0278
JB
2277/* ARGSUSED */
2278Lisp_Object
15285f9f
RS
2279call3 (fn, arg1, arg2, arg3)
2280 Lisp_Object fn, arg1, arg2, arg3;
db9f0278 2281{
a6e3fa71 2282 struct gcpro gcpro1;
db9f0278
JB
2283#ifdef NO_ARG_ARRAY
2284 Lisp_Object args[4];
2285 args[0] = fn;
15285f9f
RS
2286 args[1] = arg1;
2287 args[2] = arg2;
2288 args[3] = arg3;
a6e3fa71
JB
2289 GCPRO1 (args[0]);
2290 gcpro1.nvars = 4;
2291 RETURN_UNGCPRO (Ffuncall (4, args));
db9f0278 2292#else /* not NO_ARG_ARRAY */
a6e3fa71
JB
2293 GCPRO1 (fn);
2294 gcpro1.nvars = 4;
2295 RETURN_UNGCPRO (Ffuncall (4, &fn));
db9f0278
JB
2296#endif /* not NO_ARG_ARRAY */
2297}
2298
15285f9f 2299/* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
a5a44b91
JB
2300/* ARGSUSED */
2301Lisp_Object
15285f9f
RS
2302call4 (fn, arg1, arg2, arg3, arg4)
2303 Lisp_Object fn, arg1, arg2, arg3, arg4;
a5a44b91
JB
2304{
2305 struct gcpro gcpro1;
2306#ifdef NO_ARG_ARRAY
2307 Lisp_Object args[5];
2308 args[0] = fn;
15285f9f
RS
2309 args[1] = arg1;
2310 args[2] = arg2;
2311 args[3] = arg3;
2312 args[4] = arg4;
a5a44b91
JB
2313 GCPRO1 (args[0]);
2314 gcpro1.nvars = 5;
2315 RETURN_UNGCPRO (Ffuncall (5, args));
2316#else /* not NO_ARG_ARRAY */
2317 GCPRO1 (fn);
2318 gcpro1.nvars = 5;
2319 RETURN_UNGCPRO (Ffuncall (5, &fn));
2320#endif /* not NO_ARG_ARRAY */
2321}
2322
15285f9f
RS
2323/* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2324/* ARGSUSED */
2325Lisp_Object
2326call5 (fn, arg1, arg2, arg3, arg4, arg5)
2327 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5;
2328{
2329 struct gcpro gcpro1;
2330#ifdef NO_ARG_ARRAY
2331 Lisp_Object args[6];
2332 args[0] = fn;
2333 args[1] = arg1;
2334 args[2] = arg2;
2335 args[3] = arg3;
2336 args[4] = arg4;
2337 args[5] = arg5;
2338 GCPRO1 (args[0]);
2339 gcpro1.nvars = 6;
2340 RETURN_UNGCPRO (Ffuncall (6, args));
2341#else /* not NO_ARG_ARRAY */
2342 GCPRO1 (fn);
2343 gcpro1.nvars = 6;
2344 RETURN_UNGCPRO (Ffuncall (6, &fn));
2345#endif /* not NO_ARG_ARRAY */
2346}
2347
2348/* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2349/* ARGSUSED */
2350Lisp_Object
2351call6 (fn, arg1, arg2, arg3, arg4, arg5, arg6)
2352 Lisp_Object fn, arg1, arg2, arg3, arg4, arg5, arg6;
2353{
2354 struct gcpro gcpro1;
2355#ifdef NO_ARG_ARRAY
2356 Lisp_Object args[7];
2357 args[0] = fn;
2358 args[1] = arg1;
2359 args[2] = arg2;
2360 args[3] = arg3;
2361 args[4] = arg4;
2362 args[5] = arg5;
2363 args[6] = arg6;
2364 GCPRO1 (args[0]);
2365 gcpro1.nvars = 7;
2366 RETURN_UNGCPRO (Ffuncall (7, args));
2367#else /* not NO_ARG_ARRAY */
2368 GCPRO1 (fn);
2369 gcpro1.nvars = 7;
2370 RETURN_UNGCPRO (Ffuncall (7, &fn));
2371#endif /* not NO_ARG_ARRAY */
2372}
2373
db9f0278
JB
2374DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,
2375 "Call first argument as a function, passing remaining arguments to it.\n\
fd7fe9a1 2376Return the value that function returns.\n\
db9f0278
JB
2377Thus, (funcall 'cons 'x 'y) returns (x . y).")
2378 (nargs, args)
2379 int nargs;
2380 Lisp_Object *args;
2381{
2382 Lisp_Object fun;
2383 Lisp_Object funcar;
2384 int numargs = nargs - 1;
2385 Lisp_Object lisp_numargs;
2386 Lisp_Object val;
2387 struct backtrace backtrace;
2388 register Lisp_Object *internal_args;
2389 register int i;
2390
2391 QUIT;
2392 if (consing_since_gc > gc_cons_threshold)
a6e3fa71 2393 Fgarbage_collect ();
db9f0278
JB
2394
2395 if (++lisp_eval_depth > max_lisp_eval_depth)
2396 {
2397 if (max_lisp_eval_depth < 100)
2398 max_lisp_eval_depth = 100;
2399 if (lisp_eval_depth > max_lisp_eval_depth)
2400 error ("Lisp nesting exceeds max-lisp-eval-depth");
2401 }
2402
2403 backtrace.next = backtrace_list;
2404 backtrace_list = &backtrace;
2405 backtrace.function = &args[0];
2406 backtrace.args = &args[1];
2407 backtrace.nargs = nargs - 1;
2408 backtrace.evalargs = 0;
2409 backtrace.debug_on_exit = 0;
2410
2411 if (debug_on_next_call)
2412 do_debug_on_call (Qlambda);
2413
2414 retry:
2415
2416 fun = args[0];
ffd56f97
JB
2417
2418 fun = Findirect_function (fun);
db9f0278 2419
90165123 2420 if (SUBRP (fun))
db9f0278
JB
2421 {
2422 if (numargs < XSUBR (fun)->min_args
2423 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2424 {
a631e24c 2425 XSETFASTINT (lisp_numargs, numargs);
db9f0278
JB
2426 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (lisp_numargs, Qnil)));
2427 }
2428
2429 if (XSUBR (fun)->max_args == UNEVALLED)
2430 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2431
2432 if (XSUBR (fun)->max_args == MANY)
2433 {
2434 val = (*XSUBR (fun)->function) (numargs, args + 1);
2435 goto done;
2436 }
2437
2438 if (XSUBR (fun)->max_args > numargs)
2439 {
2440 internal_args = (Lisp_Object *) alloca (XSUBR (fun)->max_args * sizeof (Lisp_Object));
2441 bcopy (args + 1, internal_args, numargs * sizeof (Lisp_Object));
2442 for (i = numargs; i < XSUBR (fun)->max_args; i++)
2443 internal_args[i] = Qnil;
2444 }
2445 else
2446 internal_args = args + 1;
2447 switch (XSUBR (fun)->max_args)
2448 {
2449 case 0:
2450 val = (*XSUBR (fun)->function) ();
2451 goto done;
2452 case 1:
2453 val = (*XSUBR (fun)->function) (internal_args[0]);
2454 goto done;
2455 case 2:
2456 val = (*XSUBR (fun)->function) (internal_args[0],
2457 internal_args[1]);
2458 goto done;
2459 case 3:
2460 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2461 internal_args[2]);
2462 goto done;
2463 case 4:
2464 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2465 internal_args[2],
2466 internal_args[3]);
2467 goto done;
2468 case 5:
2469 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2470 internal_args[2], internal_args[3],
2471 internal_args[4]);
2472 goto done;
2473 case 6:
2474 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2475 internal_args[2], internal_args[3],
2476 internal_args[4], internal_args[5]);
2477 goto done;
15c65264
RS
2478 case 7:
2479 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2480 internal_args[2], internal_args[3],
2481 internal_args[4], internal_args[5],
2482 internal_args[6]);
2483 goto done;
db9f0278 2484
166c822d
KH
2485 case 8:
2486 val = (*XSUBR (fun)->function) (internal_args[0], internal_args[1],
2487 internal_args[2], internal_args[3],
2488 internal_args[4], internal_args[5],
2489 internal_args[6], internal_args[7]);
2490 goto done;
2491
db9f0278 2492 default:
70ee42f7 2493
166c822d 2494 /* If a subr takes more than 8 arguments without using MANY
70ee42f7
JB
2495 or UNEVALLED, we need to extend this function to support it.
2496 Until this is done, there is no way to call the function. */
2497 abort ();
db9f0278
JB
2498 }
2499 }
90165123 2500 if (COMPILEDP (fun))
db9f0278
JB
2501 val = funcall_lambda (fun, numargs, args + 1);
2502 else
2503 {
2504 if (!CONSP (fun))
2505 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2506 funcar = Fcar (fun);
90165123 2507 if (!SYMBOLP (funcar))
db9f0278
JB
2508 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2509 if (EQ (funcar, Qlambda))
2510 val = funcall_lambda (fun, numargs, args + 1);
2511 else if (EQ (funcar, Qmocklisp))
2512 val = ml_apply (fun, Flist (numargs, args + 1));
2513 else if (EQ (funcar, Qautoload))
2514 {
2515 do_autoload (fun, args[0]);
2516 goto retry;
2517 }
2518 else
2519 return Fsignal (Qinvalid_function, Fcons (fun, Qnil));
2520 }
2521 done:
2522 lisp_eval_depth--;
2523 if (backtrace.debug_on_exit)
2524 val = call_debugger (Fcons (Qexit, Fcons (val, Qnil)));
2525 backtrace_list = backtrace.next;
2526 return val;
2527}
2528\f
2529Lisp_Object
2530apply_lambda (fun, args, eval_flag)
2531 Lisp_Object fun, args;
2532 int eval_flag;
2533{
2534 Lisp_Object args_left;
2535 Lisp_Object numargs;
2536 register Lisp_Object *arg_vector;
2537 struct gcpro gcpro1, gcpro2, gcpro3;
2538 register int i;
2539 register Lisp_Object tem;
2540
2541 numargs = Flength (args);
2542 arg_vector = (Lisp_Object *) alloca (XINT (numargs) * sizeof (Lisp_Object));
2543 args_left = args;
2544
2545 GCPRO3 (*arg_vector, args_left, fun);
2546 gcpro1.nvars = 0;
2547
2548 for (i = 0; i < XINT (numargs);)
2549 {
2550 tem = Fcar (args_left), args_left = Fcdr (args_left);
2551 if (eval_flag) tem = Feval (tem);
2552 arg_vector[i++] = tem;
2553 gcpro1.nvars = i;
2554 }
2555
2556 UNGCPRO;
2557
2558 if (eval_flag)
2559 {
2560 backtrace_list->args = arg_vector;
2561 backtrace_list->nargs = i;
2562 }
2563 backtrace_list->evalargs = 0;
2564 tem = funcall_lambda (fun, XINT (numargs), arg_vector);
2565
2566 /* Do the debug-on-exit now, while arg_vector still exists. */
2567 if (backtrace_list->debug_on_exit)
2568 tem = call_debugger (Fcons (Qexit, Fcons (tem, Qnil)));
2569 /* Don't do it again when we return to eval. */
2570 backtrace_list->debug_on_exit = 0;
2571 return tem;
2572}
2573
2574/* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2575 and return the result of evaluation.
2576 FUN must be either a lambda-expression or a compiled-code object. */
2577
2578Lisp_Object
2579funcall_lambda (fun, nargs, arg_vector)
2580 Lisp_Object fun;
2581 int nargs;
2582 register Lisp_Object *arg_vector;
2583{
2584 Lisp_Object val, tem;
2585 register Lisp_Object syms_left;
2586 Lisp_Object numargs;
2587 register Lisp_Object next;
2588 int count = specpdl_ptr - specpdl;
2589 register int i;
2590 int optional = 0, rest = 0;
2591
2592 specbind (Qmocklisp_arguments, Qt); /* t means NOT mocklisp! */
2593
a631e24c 2594 XSETFASTINT (numargs, nargs);
db9f0278 2595
90165123 2596 if (CONSP (fun))
db9f0278 2597 syms_left = Fcar (Fcdr (fun));
90165123 2598 else if (COMPILEDP (fun))
db9f0278
JB
2599 syms_left = XVECTOR (fun)->contents[COMPILED_ARGLIST];
2600 else abort ();
2601
2602 i = 0;
265a9e55 2603 for (; !NILP (syms_left); syms_left = Fcdr (syms_left))
db9f0278
JB
2604 {
2605 QUIT;
2606 next = Fcar (syms_left);
90165123 2607 while (!SYMBOLP (next))
9ffa21d4 2608 next = Fsignal (Qinvalid_function, Fcons (fun, Qnil));
db9f0278
JB
2609 if (EQ (next, Qand_rest))
2610 rest = 1;
2611 else if (EQ (next, Qand_optional))
2612 optional = 1;
2613 else if (rest)
2614 {
9ffa21d4 2615 specbind (next, Flist (nargs - i, &arg_vector[i]));
db9f0278
JB
2616 i = nargs;
2617 }
2618 else if (i < nargs)
2619 {
2620 tem = arg_vector[i++];
2621 specbind (next, tem);
2622 }
2623 else if (!optional)
2624 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2625 else
2626 specbind (next, Qnil);
2627 }
2628
2629 if (i < nargs)
2630 return Fsignal (Qwrong_number_of_arguments, Fcons (fun, Fcons (numargs, Qnil)));
2631
90165123 2632 if (CONSP (fun))
db9f0278
JB
2633 val = Fprogn (Fcdr (Fcdr (fun)));
2634 else
ca248607
RS
2635 {
2636 /* If we have not actually read the bytecode string
2637 and constants vector yet, fetch them from the file. */
2638 if (CONSP (XVECTOR (fun)->contents[COMPILED_BYTECODE]))
661c7d6e 2639 Ffetch_bytecode (fun);
ca248607
RS
2640 val = Fbyte_code (XVECTOR (fun)->contents[COMPILED_BYTECODE],
2641 XVECTOR (fun)->contents[COMPILED_CONSTANTS],
2642 XVECTOR (fun)->contents[COMPILED_STACK_DEPTH]);
2643 }
db9f0278
JB
2644 return unbind_to (count, val);
2645}
661c7d6e
KH
2646
2647DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
2648 1, 1, 0,
2649 "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
2650 (object)
2651 Lisp_Object object;
2652{
2653 Lisp_Object tem;
2654
2655 if (COMPILEDP (object)
2656 && CONSP (XVECTOR (object)->contents[COMPILED_BYTECODE]))
2657 {
2658 tem = read_doc_string (XVECTOR (object)->contents[COMPILED_BYTECODE]);
5bbdb090
RS
2659 if (!CONSP (tem))
2660 error ("invalid byte code");
661c7d6e
KH
2661 XVECTOR (object)->contents[COMPILED_BYTECODE] = XCONS (tem)->car;
2662 XVECTOR (object)->contents[COMPILED_CONSTANTS] = XCONS (tem)->cdr;
2663 }
2664 return object;
2665}
db9f0278
JB
2666\f
2667void
2668grow_specpdl ()
2669{
2670 register int count = specpdl_ptr - specpdl;
2671 if (specpdl_size >= max_specpdl_size)
2672 {
2673 if (max_specpdl_size < 400)
2674 max_specpdl_size = 400;
2675 if (specpdl_size >= max_specpdl_size)
2676 {
debee8fe
RS
2677 if (!NILP (Vdebug_on_error))
2678 /* Leave room for some specpdl in the debugger. */
2679 max_specpdl_size = specpdl_size + 100;
db9f0278
JB
2680 Fsignal (Qerror,
2681 Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil));
db9f0278
JB
2682 }
2683 }
2684 specpdl_size *= 2;
2685 if (specpdl_size > max_specpdl_size)
2686 specpdl_size = max_specpdl_size;
2687 specpdl = (struct specbinding *) xrealloc (specpdl, specpdl_size * sizeof (struct specbinding));
2688 specpdl_ptr = specpdl + count;
2689}
2690
2691void
2692specbind (symbol, value)
2693 Lisp_Object symbol, value;
2694{
db9f0278
JB
2695 Lisp_Object ovalue;
2696
9ffa21d4
JB
2697 CHECK_SYMBOL (symbol, 0);
2698
db9f0278
JB
2699 if (specpdl_ptr == specpdl + specpdl_size)
2700 grow_specpdl ();
2701 specpdl_ptr->symbol = symbol;
2702 specpdl_ptr->func = 0;
d0f7cdc8 2703 specpdl_ptr->old_value = ovalue = find_symbol_value (symbol);
db9f0278 2704 specpdl_ptr++;
3d8585a1 2705 if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
db9f0278
JB
2706 store_symval_forwarding (symbol, ovalue, value);
2707 else
ab07bca0 2708 set_internal (symbol, value, 1);
db9f0278
JB
2709}
2710
2711void
2712record_unwind_protect (function, arg)
1d159538 2713 Lisp_Object (*function) P_ ((Lisp_Object));
db9f0278
JB
2714 Lisp_Object arg;
2715{
2716 if (specpdl_ptr == specpdl + specpdl_size)
2717 grow_specpdl ();
2718 specpdl_ptr->func = function;
2719 specpdl_ptr->symbol = Qnil;
2720 specpdl_ptr->old_value = arg;
2721 specpdl_ptr++;
2722}
2723
2724Lisp_Object
2725unbind_to (count, value)
2726 int count;
2727 Lisp_Object value;
2728{
265a9e55 2729 int quitf = !NILP (Vquit_flag);
db9f0278
JB
2730 struct gcpro gcpro1;
2731
2732 GCPRO1 (value);
2733
2734 Vquit_flag = Qnil;
2735
2736 while (specpdl_ptr != specpdl + count)
2737 {
2738 --specpdl_ptr;
2739 if (specpdl_ptr->func != 0)
2740 (*specpdl_ptr->func) (specpdl_ptr->old_value);
2741 /* Note that a "binding" of nil is really an unwind protect,
2742 so in that case the "old value" is a list of forms to evaluate. */
265a9e55 2743 else if (NILP (specpdl_ptr->symbol))
db9f0278
JB
2744 Fprogn (specpdl_ptr->old_value);
2745 else
ab07bca0 2746 set_internal (specpdl_ptr->symbol, specpdl_ptr->old_value, 1);
db9f0278 2747 }
265a9e55 2748 if (NILP (Vquit_flag) && quitf) Vquit_flag = Qt;
db9f0278
JB
2749
2750 UNGCPRO;
2751
2752 return value;
2753}
2754\f
2755#if 0
2756
2757/* Get the value of symbol's global binding, even if that binding
2758 is not now dynamically visible. */
2759
2760Lisp_Object
2761top_level_value (symbol)
2762 Lisp_Object symbol;
2763{
2764 register struct specbinding *ptr = specpdl;
2765
2766 CHECK_SYMBOL (symbol, 0);
2767 for (; ptr != specpdl_ptr; ptr++)
2768 {
2769 if (EQ (ptr->symbol, symbol))
2770 return ptr->old_value;
2771 }
2772 return Fsymbol_value (symbol);
2773}
2774
2775Lisp_Object
2776top_level_set (symbol, newval)
2777 Lisp_Object symbol, newval;
2778{
2779 register struct specbinding *ptr = specpdl;
2780
2781 CHECK_SYMBOL (symbol, 0);
2782 for (; ptr != specpdl_ptr; ptr++)
2783 {
2784 if (EQ (ptr->symbol, symbol))
2785 {
2786 ptr->old_value = newval;
2787 return newval;
2788 }
2789 }
2790 return Fset (symbol, newval);
2791}
2792
2793#endif /* 0 */
2794\f
2795DEFUN ("backtrace-debug", Fbacktrace_debug, Sbacktrace_debug, 2, 2, 0,
2796 "Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.\n\
2797The debugger is entered when that frame exits, if the flag is non-nil.")
2798 (level, flag)
2799 Lisp_Object level, flag;
2800{
2801 register struct backtrace *backlist = backtrace_list;
2802 register int i;
2803
2804 CHECK_NUMBER (level, 0);
2805
2806 for (i = 0; backlist && i < XINT (level); i++)
2807 {
2808 backlist = backlist->next;
2809 }
2810
2811 if (backlist)
265a9e55 2812 backlist->debug_on_exit = !NILP (flag);
db9f0278
JB
2813
2814 return flag;
2815}
2816
2817DEFUN ("backtrace", Fbacktrace, Sbacktrace, 0, 0, "",
2818 "Print a trace of Lisp function calls currently active.\n\
2819Output stream used is value of `standard-output'.")
2820 ()
2821{
2822 register struct backtrace *backlist = backtrace_list;
2823 register int i;
2824 Lisp_Object tail;
2825 Lisp_Object tem;
2826 extern Lisp_Object Vprint_level;
2827 struct gcpro gcpro1;
2828
a631e24c 2829 XSETFASTINT (Vprint_level, 3);
db9f0278
JB
2830
2831 tail = Qnil;
2832 GCPRO1 (tail);
2833
2834 while (backlist)
2835 {
2836 write_string (backlist->debug_on_exit ? "* " : " ", 2);
2837 if (backlist->nargs == UNEVALLED)
2838 {
2839 Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil);
b6703b02 2840 write_string ("\n", -1);
db9f0278
JB
2841 }
2842 else
2843 {
2844 tem = *backlist->function;
2845 Fprin1 (tem, Qnil); /* This can QUIT */
2846 write_string ("(", -1);
2847 if (backlist->nargs == MANY)
2848 {
2849 for (tail = *backlist->args, i = 0;
265a9e55 2850 !NILP (tail);
db9f0278
JB
2851 tail = Fcdr (tail), i++)
2852 {
2853 if (i) write_string (" ", -1);
2854 Fprin1 (Fcar (tail), Qnil);
2855 }
2856 }
2857 else
2858 {
2859 for (i = 0; i < backlist->nargs; i++)
2860 {
2861 if (i) write_string (" ", -1);
2862 Fprin1 (backlist->args[i], Qnil);
2863 }
2864 }
b6703b02 2865 write_string (")\n", -1);
db9f0278 2866 }
db9f0278
JB
2867 backlist = backlist->next;
2868 }
2869
2870 Vprint_level = Qnil;
2871 UNGCPRO;
2872 return Qnil;
2873}
2874
2875DEFUN ("backtrace-frame", Fbacktrace_frame, Sbacktrace_frame, 1, 1, "",
79e8bfbf 2876 "Return the function and arguments NFRAMES up from current execution point.\n\
db9f0278
JB
2877If that frame has not evaluated the arguments yet (or is a special form),\n\
2878the value is (nil FUNCTION ARG-FORMS...).\n\
2879If that frame has evaluated its arguments and called its function already,\n\
2880the value is (t FUNCTION ARG-VALUES...).\n\
2881A &rest arg is represented as the tail of the list ARG-VALUES.\n\
2882FUNCTION is whatever was supplied as car of evaluated list,\n\
2883or a lambda expression for macro calls.\n\
79e8bfbf 2884If NFRAMES is more than the number of frames, the value is nil.")
db9f0278
JB
2885 (nframes)
2886 Lisp_Object nframes;
2887{
2888 register struct backtrace *backlist = backtrace_list;
2889 register int i;
2890 Lisp_Object tem;
2891
2892 CHECK_NATNUM (nframes, 0);
2893
2894 /* Find the frame requested. */
b6703b02 2895 for (i = 0; backlist && i < XFASTINT (nframes); i++)
db9f0278
JB
2896 backlist = backlist->next;
2897
2898 if (!backlist)
2899 return Qnil;
2900 if (backlist->nargs == UNEVALLED)
2901 return Fcons (Qnil, Fcons (*backlist->function, *backlist->args));
2902 else
2903 {
2904 if (backlist->nargs == MANY)
2905 tem = *backlist->args;
2906 else
2907 tem = Flist (backlist->nargs, backlist->args);
2908
2909 return Fcons (Qt, Fcons (*backlist->function, tem));
2910 }
2911}
2912\f
dfcf069d 2913void
db9f0278
JB
2914syms_of_eval ()
2915{
2916 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size,
7eaada67
RS
2917 "*Limit on number of Lisp variable bindings & unwind-protects.\n\
2918If Lisp code tries to make more than this many at once,\n\
2919an error is signaled.");
db9f0278
JB
2920
2921 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth,
7eaada67 2922 "*Limit on depth in `eval', `apply' and `funcall' before error.\n\
db9f0278
JB
2923This limit is to catch infinite recursions for you before they cause\n\
2924actual stack overflow in C, which would be fatal for Emacs.\n\
2925You can safely make it considerably larger than its default value,\n\
2926if that proves inconveniently small.");
2927
2928 DEFVAR_LISP ("quit-flag", &Vquit_flag,
2929 "Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.\n\
d0b68896 2930Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.");
db9f0278
JB
2931 Vquit_flag = Qnil;
2932
2933 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit,
2934 "Non-nil inhibits C-g quitting from happening immediately.\n\
2935Note that `quit-flag' will still be set by typing C-g,\n\
690337b7 2936so a quit will be signaled as soon as `inhibit-quit' is nil.\n\
db9f0278
JB
2937To prevent this happening, set `quit-flag' to nil\n\
2938before making `inhibit-quit' nil.");
2939 Vinhibit_quit = Qnil;
2940
ad236261
JB
2941 Qinhibit_quit = intern ("inhibit-quit");
2942 staticpro (&Qinhibit_quit);
2943
db9f0278
JB
2944 Qautoload = intern ("autoload");
2945 staticpro (&Qautoload);
2946
2947 Qdebug_on_error = intern ("debug-on-error");
2948 staticpro (&Qdebug_on_error);
2949
2950 Qmacro = intern ("macro");
2951 staticpro (&Qmacro);
2952
2953 /* Note that the process handling also uses Qexit, but we don't want
2954 to staticpro it twice, so we just do it here. */
2955 Qexit = intern ("exit");
2956 staticpro (&Qexit);
2957
2958 Qinteractive = intern ("interactive");
2959 staticpro (&Qinteractive);
2960
2961 Qcommandp = intern ("commandp");
2962 staticpro (&Qcommandp);
2963
2964 Qdefun = intern ("defun");
2965 staticpro (&Qdefun);
2966
2967 Qand_rest = intern ("&rest");
2968 staticpro (&Qand_rest);
2969
2970 Qand_optional = intern ("&optional");
2971 staticpro (&Qand_optional);
2972
128c0f66 2973 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error,
db9f0278 2974 "*Non-nil means automatically display a backtrace buffer\n\
128c0f66
RM
2975after any error that is handled by the editor command loop.\n\
2976If the value is a list, an error only means to display a backtrace\n\
2977if one of its condition symbols appears in the list.");
2978 Vstack_trace_on_error = Qnil;
db9f0278 2979
128c0f66 2980 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error,
db9f0278
JB
2981 "*Non-nil means enter debugger if an error is signaled.\n\
2982Does not apply to errors handled by `condition-case'.\n\
128c0f66
RM
2983If the value is a list, an error only means to enter the debugger\n\
2984if one of its condition symbols appears in the list.\n\
db9f0278 2985See also variable `debug-on-quit'.");
128c0f66 2986 Vdebug_on_error = Qnil;
db9f0278 2987
fc950e09
KH
2988 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors,
2989 "*List of errors for which the debugger should not be called.\n\
2990Each element may be a condition-name or a regexp that matches error messages.\n\
2991If any element applies to a given error, that error skips the debugger\n\
2992and just returns to top level.\n\
2993This overrides the variable `debug-on-error'.\n\
2994It does not apply to errors handled by `condition-case'.");
2995 Vdebug_ignored_errors = Qnil;
2996
db9f0278 2997 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit,
d0b68896 2998 "*Non-nil means enter debugger if quit is signaled (C-g, for example).\n\
1b7d8239 2999Does not apply if quit is handled by a `condition-case'.");
db9f0278
JB
3000 debug_on_quit = 0;
3001
3002 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call,
3003 "Non-nil means enter debugger before next `eval', `apply' or `funcall'.");
3004
3005 DEFVAR_LISP ("debugger", &Vdebugger,
3006 "Function to call to invoke debugger.\n\
3007If due to frame exit, args are `exit' and the value being returned;\n\
3008 this function's value will be returned instead of that.\n\
3009If due to error, args are `error' and a list of the args to `signal'.\n\
3010If due to `apply' or `funcall' entry, one arg, `lambda'.\n\
3011If due to `eval' entry, one arg, t.");
3012 Vdebugger = Qnil;
3013
61ede770
RS
3014 DEFVAR_LISP ("signal-hook-function", &Vsignal_hook_function,
3015 "If non-nil, this is a function for `signal' to call.\n\
3016It receives the same arguments that `signal' was given.\n\
3017The Edebug package uses this to regain control.");
3018 Vsignal_hook_function = Qnil;
3019
db9f0278
JB
3020 Qmocklisp_arguments = intern ("mocklisp-arguments");
3021 staticpro (&Qmocklisp_arguments);
3022 DEFVAR_LISP ("mocklisp-arguments", &Vmocklisp_arguments,
3023 "While in a mocklisp function, the list of its unevaluated args.");
3024 Vmocklisp_arguments = Qt;
3025
57a6e758 3026 DEFVAR_LISP ("debug-on-signal", &Vdebug_on_signal,
61ede770
RS
3027 "*Non-nil means call the debugger regardless of condition handlers.\n\
3028Note that `debug-on-error', `debug-on-quit' and friends\n\
3029still determine whether to handle the particular condition.");
57a6e758 3030 Vdebug_on_signal = Qnil;
61ede770 3031
6e6e9f08
RS
3032 Vrun_hooks = intern ("run-hooks");
3033 staticpro (&Vrun_hooks);
db9f0278
JB
3034
3035 staticpro (&Vautoload_queue);
3036 Vautoload_queue = Qnil;
3037
3038 defsubr (&Sor);
3039 defsubr (&Sand);
3040 defsubr (&Sif);
3041 defsubr (&Scond);
3042 defsubr (&Sprogn);
3043 defsubr (&Sprog1);
3044 defsubr (&Sprog2);
3045 defsubr (&Ssetq);
3046 defsubr (&Squote);
3047 defsubr (&Sfunction);
3048 defsubr (&Sdefun);
3049 defsubr (&Sdefmacro);
3050 defsubr (&Sdefvar);
3051 defsubr (&Sdefconst);
3052 defsubr (&Suser_variable_p);
3053 defsubr (&Slet);
3054 defsubr (&SletX);
3055 defsubr (&Swhile);
3056 defsubr (&Smacroexpand);
3057 defsubr (&Scatch);
3058 defsubr (&Sthrow);
3059 defsubr (&Sunwind_protect);
3060 defsubr (&Scondition_case);
3061 defsubr (&Ssignal);
3062 defsubr (&Sinteractive_p);
3063 defsubr (&Scommandp);
3064 defsubr (&Sautoload);
3065 defsubr (&Seval);
3066 defsubr (&Sapply);
3067 defsubr (&Sfuncall);
ff936e53
SM
3068 defsubr (&Srun_hooks);
3069 defsubr (&Srun_hook_with_args);
3070 defsubr (&Srun_hook_with_args_until_success);
3071 defsubr (&Srun_hook_with_args_until_failure);
661c7d6e 3072 defsubr (&Sfetch_bytecode);
db9f0278
JB
3073 defsubr (&Sbacktrace_debug);
3074 defsubr (&Sbacktrace);
3075 defsubr (&Sbacktrace_frame);
3076}