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