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