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