1 /* Evaluator for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995 Free Software Foundation, Inc.
4 This file is part of GNU Emacs.
6 GNU Emacs is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU Emacs is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
24 #include "blockinput.h"
35 /* This definition is duplicated in alloc.c and keyboard.c */
36 /* Putting it in lisp.h makes cc bomb out! */
40 struct backtrace
*next
;
41 Lisp_Object
*function
;
42 Lisp_Object
*args
; /* Points to vector of args. */
43 int nargs
; /* Length of vector.
44 If nargs is UNEVALLED, args points to slot holding
45 list of unevalled args */
47 /* Nonzero means call value of debugger when done with this operation. */
51 struct backtrace
*backtrace_list
;
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.
57 Handlers for error conditions (represented by `struct handler'
58 structures) just point to a catch tag to do the cleanup required
61 catchtag structures are chained together in the C calling stack;
62 the `next' member points to the next outer catchtag.
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
69 All the other members are concerned with restoring the interpreter
75 struct catchtag
*next
;
78 struct backtrace
*backlist
;
79 struct handler
*handlerlist
;
82 int poll_suppress_count
;
85 struct catchtag
*catchlist
;
87 Lisp_Object Qautoload
, Qmacro
, Qexit
, Qinteractive
, Qcommandp
, Qdefun
;
88 Lisp_Object Qinhibit_quit
, Vinhibit_quit
, Vquit_flag
;
89 Lisp_Object Qmocklisp_arguments
, Vmocklisp_arguments
, Qmocklisp
;
90 Lisp_Object Qand_rest
, Qand_optional
;
91 Lisp_Object Qdebug_on_error
;
93 Lisp_Object Vrun_hooks
;
95 /* Non-nil means record all fset's and provide's, to be undone
96 if the file being autoloaded is not fully loaded.
97 They are recorded by being consed onto the front of Vautoload_queue:
98 (FUN . ODEF) for a defun, (OFEATURES . nil) for a provide. */
100 Lisp_Object Vautoload_queue
;
102 /* Current number of specbindings allocated in specpdl. */
105 /* Pointer to beginning of specpdl. */
106 struct specbinding
*specpdl
;
108 /* Pointer to first unused element in specpdl. */
109 struct specbinding
*specpdl_ptr
;
111 /* Maximum size allowed for specpdl allocation */
112 int max_specpdl_size
;
114 /* Depth in Lisp evaluations and function calls. */
117 /* Maximum allowed depth in Lisp evaluations and function calls. */
118 int max_lisp_eval_depth
;
120 /* Nonzero means enter debugger before next function call */
121 int debug_on_next_call
;
123 /* List of conditions (non-nil atom means all) which cause a backtrace
124 if an error is handled by the command loop's error handler. */
125 Lisp_Object Vstack_trace_on_error
;
127 /* List of conditions (non-nil atom means all) which enter the debugger
128 if an error is handled by the command loop's error handler. */
129 Lisp_Object Vdebug_on_error
;
131 /* List of conditions and regexps specifying error messages which
132 do not enter the debugger even if Vdebug_on_errors says they should. */
133 Lisp_Object Vdebug_ignored_errors
;
135 /* Nonzero means enter debugger if a quit signal
136 is handled by the command loop's error handler. */
139 /* The value of num_nonmacro_input_chars as of the last time we
140 started to enter the debugger. If we decide to enter the debugger
141 again when this is still equal to num_nonmacro_input_chars, then we
142 know that the debugger itself has an error, and we should just
143 signal the error instead of entering an infinite loop of debugger
145 int when_entered_debugger
;
147 Lisp_Object Vdebugger
;
149 void specbind (), record_unwind_protect ();
151 Lisp_Object
run_hook_with_args ();
153 Lisp_Object
funcall_lambda ();
154 extern Lisp_Object
ml_apply (); /* Apply a mocklisp function to unevaluated argument list */
159 specpdl
= (struct specbinding
*) xmalloc (specpdl_size
* sizeof (struct specbinding
));
160 specpdl_ptr
= specpdl
;
161 max_specpdl_size
= 600;
162 max_lisp_eval_depth
= 200;
169 specpdl_ptr
= specpdl
;
174 debug_on_next_call
= 0;
176 /* This is less than the initial value of num_nonmacro_input_chars. */
177 when_entered_debugger
= -1;
184 if (lisp_eval_depth
+ 20 > max_lisp_eval_depth
)
185 max_lisp_eval_depth
= lisp_eval_depth
+ 20;
186 if (specpdl_size
+ 40 > max_specpdl_size
)
187 max_specpdl_size
= specpdl_size
+ 40;
188 debug_on_next_call
= 0;
189 when_entered_debugger
= num_nonmacro_input_chars
;
190 return apply1 (Vdebugger
, arg
);
193 do_debug_on_call (code
)
196 debug_on_next_call
= 0;
197 backtrace_list
->debug_on_exit
= 1;
198 call_debugger (Fcons (code
, Qnil
));
201 /* NOTE!!! Every function that can call EVAL must protect its args
202 and temporaries from garbage collection while it needs them.
203 The definition of `For' shows what you have to do. */
205 DEFUN ("or", For
, Sor
, 0, UNEVALLED
, 0,
206 "Eval args until one of them yields non-nil, then return that value.\n\
207 The remaining args are not evalled at all.\n\
208 If all args return nil, return nil.")
212 register Lisp_Object val
;
213 Lisp_Object args_left
;
224 val
= Feval (Fcar (args_left
));
227 args_left
= Fcdr (args_left
);
229 while (!NILP(args_left
));
235 DEFUN ("and", Fand
, Sand
, 0, UNEVALLED
, 0,
236 "Eval args until one of them yields nil, then return nil.\n\
237 The remaining args are not evalled at all.\n\
238 If no arg yields nil, return the last arg's value.")
242 register Lisp_Object val
;
243 Lisp_Object args_left
;
254 val
= Feval (Fcar (args_left
));
257 args_left
= Fcdr (args_left
);
259 while (!NILP(args_left
));
265 DEFUN ("if", Fif
, Sif
, 2, UNEVALLED
, 0,
266 "(if COND THEN ELSE...): if COND yields non-nil, do THEN, else do ELSE...\n\
267 Returns the value of THEN or the value of the last of the ELSE's.\n\
268 THEN must be one expression, but ELSE... can be zero or more expressions.\n\
269 If COND yields nil, and there are no ELSE's, the value is nil.")
273 register Lisp_Object cond
;
277 cond
= Feval (Fcar (args
));
281 return Feval (Fcar (Fcdr (args
)));
282 return Fprogn (Fcdr (Fcdr (args
)));
285 DEFUN ("cond", Fcond
, Scond
, 0, UNEVALLED
, 0,
286 "(cond CLAUSES...): try each clause until one succeeds.\n\
287 Each clause looks like (CONDITION BODY...). CONDITION is evaluated\n\
288 and, if the value is non-nil, this clause succeeds:\n\
289 then the expressions in BODY are evaluated and the last one's\n\
290 value is the value of the cond-form.\n\
291 If no clause succeeds, cond returns nil.\n\
292 If a clause has one element, as in (CONDITION),\n\
293 CONDITION's value if non-nil is returned from the cond-form.")
297 register Lisp_Object clause
, val
;
304 clause
= Fcar (args
);
305 val
= Feval (Fcar (clause
));
308 if (!EQ (XCONS (clause
)->cdr
, Qnil
))
309 val
= Fprogn (XCONS (clause
)->cdr
);
312 args
= XCONS (args
)->cdr
;
319 DEFUN ("progn", Fprogn
, Sprogn
, 0, UNEVALLED
, 0,
320 "(progn BODY...): eval BODY forms sequentially and return value of last one.")
324 register Lisp_Object val
, tem
;
325 Lisp_Object args_left
;
328 /* In Mocklisp code, symbols at the front of the progn arglist
329 are to be bound to zero. */
330 if (!EQ (Vmocklisp_arguments
, Qt
))
332 val
= make_number (0);
333 while (!NILP (args
) && (tem
= Fcar (args
), SYMBOLP (tem
)))
336 specbind (tem
, val
), args
= Fcdr (args
);
348 val
= Feval (Fcar (args_left
));
349 args_left
= Fcdr (args_left
);
351 while (!NILP(args_left
));
357 DEFUN ("prog1", Fprog1
, Sprog1
, 1, UNEVALLED
, 0,
358 "(prog1 FIRST BODY...): eval FIRST and BODY sequentially; value from FIRST.\n\
359 The value of FIRST is saved during the evaluation of the remaining args,\n\
360 whose values are discarded.")
365 register Lisp_Object args_left
;
366 struct gcpro gcpro1
, gcpro2
;
367 register int argnum
= 0;
379 val
= Feval (Fcar (args_left
));
381 Feval (Fcar (args_left
));
382 args_left
= Fcdr (args_left
);
384 while (!NILP(args_left
));
390 DEFUN ("prog2", Fprog2
, Sprog2
, 2, UNEVALLED
, 0,
391 "(prog2 X Y BODY...): eval X, Y and BODY sequentially; value from Y.\n\
392 The value of Y is saved during the evaluation of the remaining args,\n\
393 whose values are discarded.")
398 register Lisp_Object args_left
;
399 struct gcpro gcpro1
, gcpro2
;
400 register int argnum
= -1;
414 val
= Feval (Fcar (args_left
));
416 Feval (Fcar (args_left
));
417 args_left
= Fcdr (args_left
);
419 while (!NILP (args_left
));
425 DEFUN ("setq", Fsetq
, Ssetq
, 0, UNEVALLED
, 0,
426 "(setq SYM VAL SYM VAL ...): set each SYM to the value of its VAL.\n\
427 The symbols SYM are variables; they are literal (not evaluated).\n\
428 The values VAL are expressions; they are evaluated.\n\
429 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.\n\
430 The second VAL is not computed until after the first SYM is set, and so on;\n\
431 each VAL can use the new value of variables set earlier in the `setq'.\n\
432 The return value of the `setq' form is the value of the last VAL.")
436 register Lisp_Object args_left
;
437 register Lisp_Object val
, sym
;
448 val
= Feval (Fcar (Fcdr (args_left
)));
449 sym
= Fcar (args_left
);
451 args_left
= Fcdr (Fcdr (args_left
));
453 while (!NILP(args_left
));
459 DEFUN ("quote", Fquote
, Squote
, 1, UNEVALLED
, 0,
460 "Return the argument, without evaluating it. `(quote x)' yields `x'.")
467 DEFUN ("function", Ffunction
, Sfunction
, 1, UNEVALLED
, 0,
468 "Like `quote', but preferred for objects which are functions.\n\
469 In byte compilation, `function' causes its argument to be compiled.\n\
470 `quote' cannot do that.")
477 DEFUN ("interactive-p", Finteractive_p
, Sinteractive_p
, 0, 0, 0,
478 "Return t if function in which this appears was called interactively.\n\
479 This means that the function was called with call-interactively (which\n\
480 includes being called as the binding of a key)\n\
481 and input is currently coming from the keyboard (not in keyboard macro).")
484 register struct backtrace
*btp
;
485 register Lisp_Object fun
;
490 btp
= backtrace_list
;
492 /* If this isn't a byte-compiled function, there may be a frame at
493 the top for Finteractive_p itself. If so, skip it. */
494 fun
= Findirect_function (*btp
->function
);
495 if (SUBRP (fun
) && XSUBR (fun
) == &Sinteractive_p
)
498 /* If we're running an Emacs 18-style byte-compiled function, there
499 may be a frame for Fbytecode. Now, given the strictest
500 definition, this function isn't really being called
501 interactively, but because that's the way Emacs 18 always builds
502 byte-compiled functions, we'll accept it for now. */
503 if (EQ (*btp
->function
, Qbytecode
))
506 /* If this isn't a byte-compiled function, then we may now be
507 looking at several frames for special forms. Skip past them. */
509 btp
->nargs
== UNEVALLED
)
512 /* btp now points at the frame of the innermost function that isn't
513 a special form, ignoring frames for Finteractive_p and/or
514 Fbytecode at the top. If this frame is for a built-in function
515 (such as load or eval-region) return nil. */
516 fun
= Findirect_function (*btp
->function
);
519 /* btp points to the frame of a Lisp function that called interactive-p.
520 Return t if that function was called interactively. */
521 if (btp
&& btp
->next
&& EQ (*btp
->next
->function
, Qcall_interactively
))
526 DEFUN ("defun", Fdefun
, Sdefun
, 2, UNEVALLED
, 0,
527 "(defun NAME ARGLIST [DOCSTRING] BODY...): define NAME as a function.\n\
528 The definition is (lambda ARGLIST [DOCSTRING] BODY...).\n\
529 See also the function `interactive'.")
533 register Lisp_Object fn_name
;
534 register Lisp_Object defn
;
536 fn_name
= Fcar (args
);
537 defn
= Fcons (Qlambda
, Fcdr (args
));
538 if (!NILP (Vpurify_flag
))
539 defn
= Fpurecopy (defn
);
540 Ffset (fn_name
, defn
);
541 LOADHIST_ATTACH (fn_name
);
545 DEFUN ("defmacro", Fdefmacro
, Sdefmacro
, 2, UNEVALLED
, 0,
546 "(defmacro NAME ARGLIST [DOCSTRING] BODY...): define NAME as a macro.\n\
547 The definition is (macro lambda ARGLIST [DOCSTRING] BODY...).\n\
548 When the macro is called, as in (NAME ARGS...),\n\
549 the function (lambda ARGLIST BODY...) is applied to\n\
550 the list ARGS... as it appears in the expression,\n\
551 and the result should be a form to be evaluated instead of the original.")
555 register Lisp_Object fn_name
;
556 register Lisp_Object defn
;
558 fn_name
= Fcar (args
);
559 defn
= Fcons (Qmacro
, Fcons (Qlambda
, Fcdr (args
)));
560 if (!NILP (Vpurify_flag
))
561 defn
= Fpurecopy (defn
);
562 Ffset (fn_name
, defn
);
563 LOADHIST_ATTACH (fn_name
);
567 DEFUN ("defvar", Fdefvar
, Sdefvar
, 1, UNEVALLED
, 0,
568 "(defvar SYMBOL INITVALUE DOCSTRING): define SYMBOL as a variable.\n\
569 You are not required to define a variable in order to use it,\n\
570 but the definition can supply documentation and an initial value\n\
571 in a way that tags can recognize.\n\n\
572 INITVALUE is evaluated, and used to set SYMBOL, only if SYMBOL's value is void.\n\
573 If SYMBOL is buffer-local, its default value is what is set;\n\
574 buffer-local values are not affected.\n\
575 INITVALUE and DOCSTRING are optional.\n\
576 If DOCSTRING starts with *, this variable is identified as a user option.\n\
577 This means that M-x set-variable and M-x edit-options recognize it.\n\
578 If INITVALUE is missing, SYMBOL's value is not set.")
582 register Lisp_Object sym
, tem
, tail
;
586 if (!NILP (Fcdr (Fcdr (tail
))))
587 error ("too many arguments");
591 tem
= Fdefault_boundp (sym
);
593 Fset_default (sym
, Feval (Fcar (Fcdr (args
))));
595 tail
= Fcdr (Fcdr (args
));
596 if (!NILP (Fcar (tail
)))
599 if (!NILP (Vpurify_flag
))
600 tem
= Fpurecopy (tem
);
601 Fput (sym
, Qvariable_documentation
, tem
);
603 LOADHIST_ATTACH (sym
);
607 DEFUN ("defconst", Fdefconst
, Sdefconst
, 2, UNEVALLED
, 0,
608 "(defconst SYMBOL INITVALUE DOCSTRING): define SYMBOL as a constant variable.\n\
609 The intent is that programs do not change this value, but users may.\n\
610 Always sets the value of SYMBOL to the result of evalling INITVALUE.\n\
611 If SYMBOL is buffer-local, its default value is what is set;\n\
612 buffer-local values are not affected.\n\
613 DOCSTRING is optional.\n\
614 If DOCSTRING starts with *, this variable is identified as a user option.\n\
615 This means that M-x set-variable and M-x edit-options recognize it.\n\n\
616 Note: do not use `defconst' for user options in libraries that are not\n\
617 normally loaded, since it is useful for users to be able to specify\n\
618 their own values for such variables before loading the library.\n\
619 Since `defconst' unconditionally assigns the variable,\n\
620 it would override the user's choice.")
624 register Lisp_Object sym
, tem
;
627 if (!NILP (Fcdr (Fcdr (Fcdr (args
)))))
628 error ("too many arguments");
630 Fset_default (sym
, Feval (Fcar (Fcdr (args
))));
631 tem
= Fcar (Fcdr (Fcdr (args
)));
634 if (!NILP (Vpurify_flag
))
635 tem
= Fpurecopy (tem
);
636 Fput (sym
, Qvariable_documentation
, tem
);
638 LOADHIST_ATTACH (sym
);
642 DEFUN ("user-variable-p", Fuser_variable_p
, Suser_variable_p
, 1, 1, 0,
643 "Returns t if VARIABLE is intended to be set and modified by users.\n\
644 \(The alternative is a variable used internally in a Lisp program.)\n\
645 Determined by whether the first character of the documentation\n\
646 for the variable is `*'.")
648 Lisp_Object variable
;
650 Lisp_Object documentation
;
652 documentation
= Fget (variable
, Qvariable_documentation
);
653 if (INTEGERP (documentation
) && XINT (documentation
) < 0)
655 if (STRINGP (documentation
)
656 && ((unsigned char) XSTRING (documentation
)->data
[0] == '*'))
658 /* If it is (STRING . INTEGER), a negative integer means a user variable. */
659 if (CONSP (documentation
)
660 && STRINGP (XCONS (documentation
)->car
)
661 && INTEGERP (XCONS (documentation
)->cdr
)
662 && XINT (XCONS (documentation
)->cdr
) < 0)
667 DEFUN ("let*", FletX
, SletX
, 1, UNEVALLED
, 0,
668 "(let* VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
669 The value of the last form in BODY is returned.\n\
670 Each element of VARLIST is a symbol (which is bound to nil)\n\
671 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
672 Each VALUEFORM can refer to the symbols already bound by this VARLIST.")
676 Lisp_Object varlist
, val
, elt
;
677 int count
= specpdl_ptr
- specpdl
;
678 struct gcpro gcpro1
, gcpro2
, gcpro3
;
680 GCPRO3 (args
, elt
, varlist
);
682 varlist
= Fcar (args
);
683 while (!NILP (varlist
))
686 elt
= Fcar (varlist
);
688 specbind (elt
, Qnil
);
689 else if (! NILP (Fcdr (Fcdr (elt
))))
691 Fcons (build_string ("`let' bindings can have only one value-form"),
695 val
= Feval (Fcar (Fcdr (elt
)));
696 specbind (Fcar (elt
), val
);
698 varlist
= Fcdr (varlist
);
701 val
= Fprogn (Fcdr (args
));
702 return unbind_to (count
, val
);
705 DEFUN ("let", Flet
, Slet
, 1, UNEVALLED
, 0,
706 "(let VARLIST BODY...): bind variables according to VARLIST then eval BODY.\n\
707 The value of the last form in BODY is returned.\n\
708 Each element of VARLIST is a symbol (which is bound to nil)\n\
709 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).\n\
710 All the VALUEFORMs are evalled before any symbols are bound.")
714 Lisp_Object
*temps
, tem
;
715 register Lisp_Object elt
, varlist
;
716 int count
= specpdl_ptr
- specpdl
;
718 struct gcpro gcpro1
, gcpro2
;
720 varlist
= Fcar (args
);
722 /* Make space to hold the values to give the bound variables */
723 elt
= Flength (varlist
);
724 temps
= (Lisp_Object
*) alloca (XFASTINT (elt
) * sizeof (Lisp_Object
));
726 /* Compute the values and store them in `temps' */
728 GCPRO2 (args
, *temps
);
731 for (argnum
= 0; !NILP (varlist
); varlist
= Fcdr (varlist
))
734 elt
= Fcar (varlist
);
736 temps
[argnum
++] = Qnil
;
737 else if (! NILP (Fcdr (Fcdr (elt
))))
739 Fcons (build_string ("`let' bindings can have only one value-form"),
742 temps
[argnum
++] = Feval (Fcar (Fcdr (elt
)));
743 gcpro2
.nvars
= argnum
;
747 varlist
= Fcar (args
);
748 for (argnum
= 0; !NILP (varlist
); varlist
= Fcdr (varlist
))
750 elt
= Fcar (varlist
);
751 tem
= temps
[argnum
++];
755 specbind (Fcar (elt
), tem
);
758 elt
= Fprogn (Fcdr (args
));
759 return unbind_to (count
, elt
);
762 DEFUN ("while", Fwhile
, Swhile
, 1, UNEVALLED
, 0,
763 "(while TEST BODY...): if TEST yields non-nil, eval BODY... and repeat.\n\
764 The order of execution is thus TEST, BODY, TEST, BODY and so on\n\
765 until TEST returns nil.")
769 Lisp_Object test
, body
, tem
;
770 struct gcpro gcpro1
, gcpro2
;
776 while (tem
= Feval (test
),
777 (!EQ (Vmocklisp_arguments
, Qt
) ? XINT (tem
) : !NILP (tem
)))
787 DEFUN ("macroexpand", Fmacroexpand
, Smacroexpand
, 1, 2, 0,
788 "Return result of expanding macros at top level of FORM.\n\
789 If FORM is not a macro call, it is returned unchanged.\n\
790 Otherwise, the macro is expanded and the expansion is considered\n\
791 in place of FORM. When a non-macro-call results, it is returned.\n\n\
792 The second optional arg ENVIRONMENT species an environment of macro\n\
793 definitions to shadow the loaded ones for use in file byte-compilation.")
795 register Lisp_Object form
;
796 Lisp_Object environment
;
798 /* With cleanups from Hallvard Furuseth. */
799 register Lisp_Object expander
, sym
, def
, tem
;
803 /* Come back here each time we expand a macro call,
804 in case it expands into another macro call. */
807 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
808 def
= sym
= XCONS (form
)->car
;
810 /* Trace symbols aliases to other symbols
811 until we get a symbol that is not an alias. */
812 while (SYMBOLP (def
))
816 tem
= Fassq (sym
, environment
);
819 def
= XSYMBOL (sym
)->function
;
820 if (!EQ (def
, Qunbound
))
825 /* Right now TEM is the result from SYM in ENVIRONMENT,
826 and if TEM is nil then DEF is SYM's function definition. */
829 /* SYM is not mentioned in ENVIRONMENT.
830 Look at its function definition. */
831 if (EQ (def
, Qunbound
) || !CONSP (def
))
832 /* Not defined or definition not suitable */
834 if (EQ (XCONS (def
)->car
, Qautoload
))
836 /* Autoloading function: will it be a macro when loaded? */
837 tem
= Fnth (make_number (4), def
);
838 if (EQ (tem
, Qt
) || EQ (tem
, Qmacro
))
839 /* Yes, load it and try again. */
841 do_autoload (def
, sym
);
847 else if (!EQ (XCONS (def
)->car
, Qmacro
))
849 else expander
= XCONS (def
)->cdr
;
853 expander
= XCONS (tem
)->cdr
;
857 form
= apply1 (expander
, XCONS (form
)->cdr
);
862 DEFUN ("catch", Fcatch
, Scatch
, 1, UNEVALLED
, 0,
863 "(catch TAG BODY...): eval BODY allowing nonlocal exits using `throw'.\n\
864 TAG is evalled to get the tag to use. Then the BODY is executed.\n\
865 Within BODY, (throw TAG) with same tag exits BODY and exits this `catch'.\n\
866 If no throw happens, `catch' returns the value of the last BODY form.\n\
867 If a throw happens, it specifies the value to return from `catch'.")
871 register Lisp_Object tag
;
875 tag
= Feval (Fcar (args
));
877 return internal_catch (tag
, Fprogn
, Fcdr (args
));
880 /* Set up a catch, then call C function FUNC on argument ARG.
881 FUNC should return a Lisp_Object.
882 This is how catches are done from within C code. */
885 internal_catch (tag
, func
, arg
)
887 Lisp_Object (*func
) ();
890 /* This structure is made part of the chain `catchlist'. */
893 /* Fill in the components of c, and put it on the list. */
897 c
.backlist
= backtrace_list
;
898 c
.handlerlist
= handlerlist
;
899 c
.lisp_eval_depth
= lisp_eval_depth
;
900 c
.pdlcount
= specpdl_ptr
- specpdl
;
901 c
.poll_suppress_count
= poll_suppress_count
;
906 if (! _setjmp (c
.jmp
))
907 c
.val
= (*func
) (arg
);
909 /* Throw works by a longjmp that comes right here. */
914 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
915 jump to that CATCH, returning VALUE as the value of that catch.
917 This is the guts Fthrow and Fsignal; they differ only in the way
918 they choose the catch tag to throw to. A catch tag for a
919 condition-case form has a TAG of Qnil.
921 Before each catch is discarded, unbind all special bindings and
922 execute all unwind-protect clauses made above that catch. Unwind
923 the handler stack as we go, so that the proper handlers are in
924 effect for each unwind-protect clause we run. At the end, restore
925 some static info saved in CATCH, and longjmp to the location
928 This is used for correct unwinding in Fthrow and Fsignal. */
931 unwind_to_catch (catch, value
)
932 struct catchtag
*catch;
935 register int last_time
;
937 /* Save the value in the tag. */
940 /* Restore the polling-suppression count. */
941 set_poll_suppress_count (catch->poll_suppress_count
);
945 last_time
= catchlist
== catch;
947 /* Unwind the specpdl stack, and then restore the proper set of
949 unbind_to (catchlist
->pdlcount
, Qnil
);
950 handlerlist
= catchlist
->handlerlist
;
951 catchlist
= catchlist
->next
;
955 gcprolist
= catch->gcpro
;
956 backtrace_list
= catch->backlist
;
957 lisp_eval_depth
= catch->lisp_eval_depth
;
959 _longjmp (catch->jmp
, 1);
962 DEFUN ("throw", Fthrow
, Sthrow
, 2, 2, 0,
963 "(throw TAG VALUE): throw to the catch for TAG and return VALUE from it.\n\
964 Both TAG and VALUE are evalled.")
966 register Lisp_Object tag
, value
;
968 register struct catchtag
*c
;
973 for (c
= catchlist
; c
; c
= c
->next
)
975 if (EQ (c
->tag
, tag
))
976 unwind_to_catch (c
, value
);
978 tag
= Fsignal (Qno_catch
, Fcons (tag
, Fcons (value
, Qnil
)));
983 DEFUN ("unwind-protect", Funwind_protect
, Sunwind_protect
, 1, UNEVALLED
, 0,
984 "Do BODYFORM, protecting with UNWINDFORMS.\n\
985 Usage looks like (unwind-protect BODYFORM UNWINDFORMS...).\n\
986 If BODYFORM completes normally, its value is returned\n\
987 after executing the UNWINDFORMS.\n\
988 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.")
993 int count
= specpdl_ptr
- specpdl
;
995 record_unwind_protect (0, Fcdr (args
));
996 val
= Feval (Fcar (args
));
997 return unbind_to (count
, val
);
1000 /* Chain of condition handlers currently in effect.
1001 The elements of this chain are contained in the stack frames
1002 of Fcondition_case and internal_condition_case.
1003 When an error is signaled (by calling Fsignal, below),
1004 this chain is searched for an element that applies. */
1006 struct handler
*handlerlist
;
1008 DEFUN ("condition-case", Fcondition_case
, Scondition_case
, 2, UNEVALLED
, 0,
1009 "Regain control when an error is signaled.\n\
1010 Usage looks like (condition-case VAR BODYFORM HANDLERS...).\n\
1011 executes BODYFORM and returns its value if no error happens.\n\
1012 Each element of HANDLERS looks like (CONDITION-NAME BODY...)\n\
1013 where the BODY is made of Lisp expressions.\n\n\
1014 A handler is applicable to an error\n\
1015 if CONDITION-NAME is one of the error's condition names.\n\
1016 If an error happens, the first applicable handler is run.\n\
1018 The car of a handler may be a list of condition names\n\
1019 instead of a single condition name.\n\
1021 When a handler handles an error,\n\
1022 control returns to the condition-case and the handler BODY... is executed\n\
1023 with VAR bound to (SIGNALED-CONDITIONS . SIGNAL-DATA).\n\
1024 VAR may be nil; then you do not get access to the signal information.\n\
1026 The value of the last BODY form is returned from the condition-case.\n\
1027 See also the function `signal' for more info.")
1034 register Lisp_Object var
, bodyform
, handlers
;
1037 bodyform
= Fcar (Fcdr (args
));
1038 handlers
= Fcdr (Fcdr (args
));
1039 CHECK_SYMBOL (var
, 0);
1041 for (val
= handlers
; ! NILP (val
); val
= Fcdr (val
))
1047 && (SYMBOLP (XCONS (tem
)->car
)
1048 || CONSP (XCONS (tem
)->car
)))))
1049 error ("Invalid condition handler", tem
);
1054 c
.backlist
= backtrace_list
;
1055 c
.handlerlist
= handlerlist
;
1056 c
.lisp_eval_depth
= lisp_eval_depth
;
1057 c
.pdlcount
= specpdl_ptr
- specpdl
;
1058 c
.poll_suppress_count
= poll_suppress_count
;
1059 c
.gcpro
= gcprolist
;
1060 if (_setjmp (c
.jmp
))
1063 specbind (h
.var
, c
.val
);
1064 val
= Fprogn (Fcdr (h
.chosen_clause
));
1066 /* Note that this just undoes the binding of h.var; whoever
1067 longjumped to us unwound the stack to c.pdlcount before
1069 unbind_to (c
.pdlcount
, Qnil
);
1076 h
.handler
= handlers
;
1077 h
.next
= handlerlist
;
1081 val
= Feval (bodyform
);
1083 handlerlist
= h
.next
;
1087 /* Call the function BFUN with no arguments, catching errors within it
1088 according to HANDLERS. If there is an error, call HFUN with
1089 one argument which is the data that describes the error:
1092 HANDLERS can be a list of conditions to catch.
1093 If HANDLERS is Qt, catch all errors.
1094 If HANDLERS is Qerror, catch all errors
1095 but allow the debugger to run if that is enabled. */
1098 internal_condition_case (bfun
, handlers
, hfun
)
1099 Lisp_Object (*bfun
) ();
1100 Lisp_Object handlers
;
1101 Lisp_Object (*hfun
) ();
1107 /* Since Fsignal resets this to 0, it had better be 0 now
1108 or else we have a potential bug. */
1109 if (interrupt_input_blocked
!= 0)
1114 c
.backlist
= backtrace_list
;
1115 c
.handlerlist
= handlerlist
;
1116 c
.lisp_eval_depth
= lisp_eval_depth
;
1117 c
.pdlcount
= specpdl_ptr
- specpdl
;
1118 c
.poll_suppress_count
= poll_suppress_count
;
1119 c
.gcpro
= gcprolist
;
1120 if (_setjmp (c
.jmp
))
1122 return (*hfun
) (c
.val
);
1126 h
.handler
= handlers
;
1128 h
.next
= handlerlist
;
1134 handlerlist
= h
.next
;
1138 /* Like internal_condition_case but call HFUN with ARG as its argument. */
1141 internal_condition_case_1 (bfun
, arg
, handlers
, hfun
)
1142 Lisp_Object (*bfun
) ();
1144 Lisp_Object handlers
;
1145 Lisp_Object (*hfun
) ();
1153 c
.backlist
= backtrace_list
;
1154 c
.handlerlist
= handlerlist
;
1155 c
.lisp_eval_depth
= lisp_eval_depth
;
1156 c
.pdlcount
= specpdl_ptr
- specpdl
;
1157 c
.poll_suppress_count
= poll_suppress_count
;
1158 c
.gcpro
= gcprolist
;
1159 if (_setjmp (c
.jmp
))
1161 return (*hfun
) (c
.val
);
1165 h
.handler
= handlers
;
1167 h
.next
= handlerlist
;
1171 val
= (*bfun
) (arg
);
1173 handlerlist
= h
.next
;
1177 static Lisp_Object
find_handler_clause ();
1179 DEFUN ("signal", Fsignal
, Ssignal
, 2, 2, 0,
1180 "Signal an error. Args are ERROR-SYMBOL and associated DATA.\n\
1181 This function does not return.\n\n\
1182 An error symbol is a symbol with an `error-conditions' property\n\
1183 that is a list of condition names.\n\
1184 A handler for any of those names will get to handle this signal.\n\
1185 The symbol `error' should normally be one of them.\n\
1187 DATA should be a list. Its elements are printed as part of the error message.\n\
1188 If the signal is handled, DATA is made available to the handler.\n\
1189 See also the function `condition-case'.")
1190 (error_symbol
, data
)
1191 Lisp_Object error_symbol
, data
;
1193 register struct handler
*allhandlers
= handlerlist
;
1194 Lisp_Object conditions
;
1195 extern int gc_in_progress
;
1196 extern int waiting_for_input
;
1197 Lisp_Object debugger_value
;
1199 quit_error_check ();
1201 if (gc_in_progress
|| waiting_for_input
)
1204 #ifdef HAVE_X_WINDOWS
1205 TOTALLY_UNBLOCK_INPUT
;
1208 conditions
= Fget (error_symbol
, Qerror_conditions
);
1210 for (; handlerlist
; handlerlist
= handlerlist
->next
)
1212 register Lisp_Object clause
;
1213 clause
= find_handler_clause (handlerlist
->handler
, conditions
,
1214 error_symbol
, data
, &debugger_value
);
1216 #if 0 /* Most callers are not prepared to handle gc if this returns.
1217 So, since this feature is not very useful, take it out. */
1218 /* If have called debugger and user wants to continue,
1220 if (EQ (clause
, Qlambda
))
1221 return debugger_value
;
1223 if (EQ (clause
, Qlambda
))
1225 /* We can't return values to code which signaled an error, but we
1226 can continue code which has signaled a quit. */
1227 if (EQ (error_symbol
, Qquit
))
1230 error ("Cannot return from the debugger in an error");
1236 Lisp_Object unwind_data
;
1237 struct handler
*h
= handlerlist
;
1239 handlerlist
= allhandlers
;
1240 if (EQ (data
, memory_signal_data
))
1241 unwind_data
= memory_signal_data
;
1243 unwind_data
= Fcons (error_symbol
, data
);
1244 h
->chosen_clause
= clause
;
1245 unwind_to_catch (h
->tag
, unwind_data
);
1249 handlerlist
= allhandlers
;
1250 /* If no handler is present now, try to run the debugger,
1251 and if that fails, throw to top level. */
1252 find_handler_clause (Qerror
, conditions
, error_symbol
, data
, &debugger_value
);
1253 Fthrow (Qtop_level
, Qt
);
1256 /* Return nonzero iff LIST is a non-nil atom or
1257 a list containing one of CONDITIONS. */
1260 wants_debugger (list
, conditions
)
1261 Lisp_Object list
, conditions
;
1268 while (CONSP (conditions
))
1270 Lisp_Object
this, tail
;
1271 this = XCONS (conditions
)->car
;
1272 for (tail
= list
; CONSP (tail
); tail
= XCONS (tail
)->cdr
)
1273 if (EQ (XCONS (tail
)->car
, this))
1275 conditions
= XCONS (conditions
)->cdr
;
1280 /* Return 1 if an error with condition-symbols CONDITIONS,
1281 and described by SIGNAL-DATA, should skip the debugger
1282 according to debugger-ignore-errors. */
1285 skip_debugger (conditions
, data
)
1286 Lisp_Object conditions
, data
;
1289 int first_string
= 1;
1290 Lisp_Object error_message
;
1292 for (tail
= Vdebug_ignored_errors
; CONSP (tail
);
1293 tail
= XCONS (tail
)->cdr
)
1295 if (STRINGP (XCONS (tail
)->car
))
1299 error_message
= Ferror_message_string (data
);
1302 if (fast_string_match (XCONS (tail
)->car
, error_message
) >= 0)
1307 Lisp_Object contail
;
1309 for (contail
= conditions
; CONSP (contail
);
1310 contail
= XCONS (contail
)->cdr
)
1311 if (EQ (XCONS (tail
)->car
, XCONS (contail
)->car
))
1319 /* Value of Qlambda means we have called debugger and user has continued.
1320 Store value returned from debugger into *DEBUGGER_VALUE_PTR. */
1323 find_handler_clause (handlers
, conditions
, sig
, data
, debugger_value_ptr
)
1324 Lisp_Object handlers
, conditions
, sig
, data
;
1325 Lisp_Object
*debugger_value_ptr
;
1327 register Lisp_Object h
;
1328 register Lisp_Object tem
;
1330 if (EQ (handlers
, Qt
)) /* t is used by handlers for all conditions, set up by C code. */
1332 if (EQ (handlers
, Qerror
)) /* error is used similarly, but means display a backtrace too */
1334 if (wants_debugger (Vstack_trace_on_error
, conditions
))
1335 internal_with_output_to_temp_buffer ("*Backtrace*", Fbacktrace
, Qnil
);
1336 if ((EQ (sig
, Qquit
)
1338 : wants_debugger (Vdebug_on_error
, conditions
))
1339 && ! skip_debugger (conditions
, Fcons (sig
, data
))
1340 && when_entered_debugger
< num_nonmacro_input_chars
)
1342 int count
= specpdl_ptr
- specpdl
;
1343 specbind (Qdebug_on_error
, Qnil
);
1345 = call_debugger (Fcons (Qerror
,
1346 Fcons (Fcons (sig
, data
),
1348 return unbind_to (count
, Qlambda
);
1352 for (h
= handlers
; CONSP (h
); h
= Fcdr (h
))
1354 Lisp_Object handler
, condit
;
1357 if (!CONSP (handler
))
1359 condit
= Fcar (handler
);
1360 /* Handle a single condition name in handler HANDLER. */
1361 if (SYMBOLP (condit
))
1363 tem
= Fmemq (Fcar (handler
), conditions
);
1367 /* Handle a list of condition names in handler HANDLER. */
1368 else if (CONSP (condit
))
1370 while (CONSP (condit
))
1372 tem
= Fmemq (Fcar (condit
), conditions
);
1375 condit
= XCONS (condit
)->cdr
;
1382 /* dump an error message; called like printf */
1386 error (m
, a1
, a2
, a3
)
1406 int used
= doprnt (buf
, size
, m
, m
+ mlen
, 3, args
);
1411 buffer
= (char *) xrealloc (buffer
, size
);
1414 buffer
= (char *) xmalloc (size
);
1419 string
= build_string (buf
);
1423 Fsignal (Qerror
, Fcons (string
, Qnil
));
1426 DEFUN ("commandp", Fcommandp
, Scommandp
, 1, 1, 0,
1427 "T if FUNCTION makes provisions for interactive calling.\n\
1428 This means it contains a description for how to read arguments to give it.\n\
1429 The value is nil for an invalid function or a symbol with no function\n\
1432 Interactively callable functions include strings and vectors (treated\n\
1433 as keyboard macros), lambda-expressions that contain a top-level call\n\
1434 to `interactive', autoload definitions made by `autoload' with non-nil\n\
1435 fourth argument, and some of the built-in functions of Lisp.\n\
1437 Also, a symbol satisfies `commandp' if its function definition does so.")
1439 Lisp_Object function
;
1441 register Lisp_Object fun
;
1442 register Lisp_Object funcar
;
1443 register Lisp_Object tem
;
1448 fun
= indirect_function (fun
);
1449 if (EQ (fun
, Qunbound
))
1452 /* Emacs primitives are interactive if their DEFUN specifies an
1453 interactive spec. */
1456 if (XSUBR (fun
)->prompt
)
1462 /* Bytecode objects are interactive if they are long enough to
1463 have an element whose index is COMPILED_INTERACTIVE, which is
1464 where the interactive spec is stored. */
1465 else if (COMPILEDP (fun
))
1466 return ((XVECTOR (fun
)->size
& PSEUDOVECTOR_SIZE_MASK
) > COMPILED_INTERACTIVE
1469 /* Strings and vectors are keyboard macros. */
1470 if (STRINGP (fun
) || VECTORP (fun
))
1473 /* Lists may represent commands. */
1476 funcar
= Fcar (fun
);
1477 if (!SYMBOLP (funcar
))
1478 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
1479 if (EQ (funcar
, Qlambda
))
1480 return Fassq (Qinteractive
, Fcdr (Fcdr (fun
)));
1481 if (EQ (funcar
, Qmocklisp
))
1482 return Qt
; /* All mocklisp functions can be called interactively */
1483 if (EQ (funcar
, Qautoload
))
1484 return Fcar (Fcdr (Fcdr (Fcdr (fun
))));
1490 DEFUN ("autoload", Fautoload
, Sautoload
, 2, 5, 0,
1491 "Define FUNCTION to autoload from FILE.\n\
1492 FUNCTION is a symbol; FILE is a file name string to pass to `load'.\n\
1493 Third arg DOCSTRING is documentation for the function.\n\
1494 Fourth arg INTERACTIVE if non-nil says function can be called interactively.\n\
1495 Fifth arg TYPE indicates the type of the object:\n\
1496 nil or omitted says FUNCTION is a function,\n\
1497 `keymap' says FUNCTION is really a keymap, and\n\
1498 `macro' or t says FUNCTION is really a macro.\n\
1499 Third through fifth args give info about the real definition.\n\
1500 They default to nil.\n\
1501 If FUNCTION is already defined other than as an autoload,\n\
1502 this does nothing and returns nil.")
1503 (function
, file
, docstring
, interactive
, type
)
1504 Lisp_Object function
, file
, docstring
, interactive
, type
;
1507 Lisp_Object args
[4];
1510 CHECK_SYMBOL (function
, 0);
1511 CHECK_STRING (file
, 1);
1513 /* If function is defined and not as an autoload, don't override */
1514 if (!EQ (XSYMBOL (function
)->function
, Qunbound
)
1515 && !(CONSP (XSYMBOL (function
)->function
)
1516 && EQ (XCONS (XSYMBOL (function
)->function
)->car
, Qautoload
)))
1521 args
[1] = docstring
;
1522 args
[2] = interactive
;
1525 return Ffset (function
, Fcons (Qautoload
, Flist (4, &args
[0])));
1526 #else /* NO_ARG_ARRAY */
1527 return Ffset (function
, Fcons (Qautoload
, Flist (4, &file
)));
1528 #endif /* not NO_ARG_ARRAY */
1532 un_autoload (oldqueue
)
1533 Lisp_Object oldqueue
;
1535 register Lisp_Object queue
, first
, second
;
1537 /* Queue to unwind is current value of Vautoload_queue.
1538 oldqueue is the shadowed value to leave in Vautoload_queue. */
1539 queue
= Vautoload_queue
;
1540 Vautoload_queue
= oldqueue
;
1541 while (CONSP (queue
))
1543 first
= Fcar (queue
);
1544 second
= Fcdr (first
);
1545 first
= Fcar (first
);
1546 if (EQ (second
, Qnil
))
1549 Ffset (first
, second
);
1550 queue
= Fcdr (queue
);
1555 do_autoload (fundef
, funname
)
1556 Lisp_Object fundef
, funname
;
1558 int count
= specpdl_ptr
- specpdl
;
1559 Lisp_Object fun
, val
, queue
, first
, second
;
1562 CHECK_SYMBOL (funname
, 0);
1564 /* Value saved here is to be restored into Vautoload_queue */
1565 record_unwind_protect (un_autoload
, Vautoload_queue
);
1566 Vautoload_queue
= Qt
;
1567 Fload (Fcar (Fcdr (fundef
)), Qnil
, noninteractive
? Qt
: Qnil
, Qnil
);
1569 /* Save the old autoloads, in case we ever do an unload. */
1570 queue
= Vautoload_queue
;
1571 while (CONSP (queue
))
1573 first
= Fcar (queue
);
1574 second
= Fcdr (first
);
1575 first
= Fcar (first
);
1577 /* Note: This test is subtle. The cdr of an autoload-queue entry
1578 may be an atom if the autoload entry was generated by a defalias
1581 Fput (first
, Qautoload
, (Fcdr (second
)));
1583 queue
= Fcdr (queue
);
1586 /* Once loading finishes, don't undo it. */
1587 Vautoload_queue
= Qt
;
1588 unbind_to (count
, Qnil
);
1590 fun
= Findirect_function (fun
);
1592 if (!NILP (Fequal (fun
, fundef
)))
1593 error ("Autoloading failed to define function %s",
1594 XSYMBOL (funname
)->name
->data
);
1597 DEFUN ("eval", Feval
, Seval
, 1, 1, 0,
1598 "Evaluate FORM and return its value.")
1602 Lisp_Object fun
, val
, original_fun
, original_args
;
1604 struct backtrace backtrace
;
1605 struct gcpro gcpro1
, gcpro2
, gcpro3
;
1609 if (EQ (Vmocklisp_arguments
, Qt
))
1610 return Fsymbol_value (form
);
1611 val
= Fsymbol_value (form
);
1613 XSETFASTINT (val
, 0);
1614 else if (EQ (val
, Qt
))
1615 XSETFASTINT (val
, 1);
1622 if (consing_since_gc
> gc_cons_threshold
)
1625 Fgarbage_collect ();
1629 if (++lisp_eval_depth
> max_lisp_eval_depth
)
1631 if (max_lisp_eval_depth
< 100)
1632 max_lisp_eval_depth
= 100;
1633 if (lisp_eval_depth
> max_lisp_eval_depth
)
1634 error ("Lisp nesting exceeds max-lisp-eval-depth");
1637 original_fun
= Fcar (form
);
1638 original_args
= Fcdr (form
);
1640 backtrace
.next
= backtrace_list
;
1641 backtrace_list
= &backtrace
;
1642 backtrace
.function
= &original_fun
; /* This also protects them from gc */
1643 backtrace
.args
= &original_args
;
1644 backtrace
.nargs
= UNEVALLED
;
1645 backtrace
.evalargs
= 1;
1646 backtrace
.debug_on_exit
= 0;
1648 if (debug_on_next_call
)
1649 do_debug_on_call (Qt
);
1651 /* At this point, only original_fun and original_args
1652 have values that will be used below */
1654 fun
= Findirect_function (original_fun
);
1658 Lisp_Object numargs
;
1659 Lisp_Object argvals
[7];
1660 Lisp_Object args_left
;
1661 register int i
, maxargs
;
1663 args_left
= original_args
;
1664 numargs
= Flength (args_left
);
1666 if (XINT (numargs
) < XSUBR (fun
)->min_args
||
1667 (XSUBR (fun
)->max_args
>= 0 && XSUBR (fun
)->max_args
< XINT (numargs
)))
1668 return Fsignal (Qwrong_number_of_arguments
, Fcons (fun
, Fcons (numargs
, Qnil
)));
1670 if (XSUBR (fun
)->max_args
== UNEVALLED
)
1672 backtrace
.evalargs
= 0;
1673 val
= (*XSUBR (fun
)->function
) (args_left
);
1677 if (XSUBR (fun
)->max_args
== MANY
)
1679 /* Pass a vector of evaluated arguments */
1681 register int argnum
= 0;
1683 vals
= (Lisp_Object
*) alloca (XINT (numargs
) * sizeof (Lisp_Object
));
1685 GCPRO3 (args_left
, fun
, fun
);
1689 while (!NILP (args_left
))
1691 vals
[argnum
++] = Feval (Fcar (args_left
));
1692 args_left
= Fcdr (args_left
);
1693 gcpro3
.nvars
= argnum
;
1696 backtrace
.args
= vals
;
1697 backtrace
.nargs
= XINT (numargs
);
1699 val
= (*XSUBR (fun
)->function
) (XINT (numargs
), vals
);
1704 GCPRO3 (args_left
, fun
, fun
);
1705 gcpro3
.var
= argvals
;
1708 maxargs
= XSUBR (fun
)->max_args
;
1709 for (i
= 0; i
< maxargs
; args_left
= Fcdr (args_left
))
1711 argvals
[i
] = Feval (Fcar (args_left
));
1717 backtrace
.args
= argvals
;
1718 backtrace
.nargs
= XINT (numargs
);
1723 val
= (*XSUBR (fun
)->function
) ();
1726 val
= (*XSUBR (fun
)->function
) (argvals
[0]);
1729 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1]);
1732 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1],
1736 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1],
1737 argvals
[2], argvals
[3]);
1740 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1], argvals
[2],
1741 argvals
[3], argvals
[4]);
1744 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1], argvals
[2],
1745 argvals
[3], argvals
[4], argvals
[5]);
1748 val
= (*XSUBR (fun
)->function
) (argvals
[0], argvals
[1], argvals
[2],
1749 argvals
[3], argvals
[4], argvals
[5],
1754 /* Someone has created a subr that takes more arguments than
1755 is supported by this code. We need to either rewrite the
1756 subr to use a different argument protocol, or add more
1757 cases to this switch. */
1761 if (COMPILEDP (fun
))
1762 val
= apply_lambda (fun
, original_args
, 1);
1766 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
1767 funcar
= Fcar (fun
);
1768 if (!SYMBOLP (funcar
))
1769 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
1770 if (EQ (funcar
, Qautoload
))
1772 do_autoload (fun
, original_fun
);
1775 if (EQ (funcar
, Qmacro
))
1776 val
= Feval (apply1 (Fcdr (fun
), original_args
));
1777 else if (EQ (funcar
, Qlambda
))
1778 val
= apply_lambda (fun
, original_args
, 1);
1779 else if (EQ (funcar
, Qmocklisp
))
1780 val
= ml_apply (fun
, original_args
);
1782 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
1785 if (!EQ (Vmocklisp_arguments
, Qt
))
1788 XSETFASTINT (val
, 0);
1789 else if (EQ (val
, Qt
))
1790 XSETFASTINT (val
, 1);
1793 if (backtrace
.debug_on_exit
)
1794 val
= call_debugger (Fcons (Qexit
, Fcons (val
, Qnil
)));
1795 backtrace_list
= backtrace
.next
;
1799 DEFUN ("apply", Fapply
, Sapply
, 2, MANY
, 0,
1800 "Call FUNCTION with our remaining args, using our last arg as list of args.\n\
1801 Then return the value FUNCTION returns.\n\
1802 Thus, (apply '+ 1 2 '(3 4)) returns 10.")
1807 register int i
, numargs
;
1808 register Lisp_Object spread_arg
;
1809 register Lisp_Object
*funcall_args
;
1811 struct gcpro gcpro1
;
1815 spread_arg
= args
[nargs
- 1];
1816 CHECK_LIST (spread_arg
, nargs
);
1818 numargs
= XINT (Flength (spread_arg
));
1821 return Ffuncall (nargs
- 1, args
);
1822 else if (numargs
== 1)
1824 args
[nargs
- 1] = XCONS (spread_arg
)->car
;
1825 return Ffuncall (nargs
, args
);
1828 numargs
+= nargs
- 2;
1830 fun
= indirect_function (fun
);
1831 if (EQ (fun
, Qunbound
))
1833 /* Let funcall get the error */
1840 if (numargs
< XSUBR (fun
)->min_args
1841 || (XSUBR (fun
)->max_args
>= 0 && XSUBR (fun
)->max_args
< numargs
))
1842 goto funcall
; /* Let funcall get the error */
1843 else if (XSUBR (fun
)->max_args
> numargs
)
1845 /* Avoid making funcall cons up a yet another new vector of arguments
1846 by explicitly supplying nil's for optional values */
1847 funcall_args
= (Lisp_Object
*) alloca ((1 + XSUBR (fun
)->max_args
)
1848 * sizeof (Lisp_Object
));
1849 for (i
= numargs
; i
< XSUBR (fun
)->max_args
;)
1850 funcall_args
[++i
] = Qnil
;
1851 GCPRO1 (*funcall_args
);
1852 gcpro1
.nvars
= 1 + XSUBR (fun
)->max_args
;
1856 /* We add 1 to numargs because funcall_args includes the
1857 function itself as well as its arguments. */
1860 funcall_args
= (Lisp_Object
*) alloca ((1 + numargs
)
1861 * sizeof (Lisp_Object
));
1862 GCPRO1 (*funcall_args
);
1863 gcpro1
.nvars
= 1 + numargs
;
1866 bcopy (args
, funcall_args
, nargs
* sizeof (Lisp_Object
));
1867 /* Spread the last arg we got. Its first element goes in
1868 the slot that it used to occupy, hence this value of I. */
1870 while (!NILP (spread_arg
))
1872 funcall_args
[i
++] = XCONS (spread_arg
)->car
;
1873 spread_arg
= XCONS (spread_arg
)->cdr
;
1876 RETURN_UNGCPRO (Ffuncall (gcpro1
.nvars
, funcall_args
));
1879 /* Run hook variables in various ways. */
1881 enum run_hooks_condition
{to_completion
, until_success
, until_failure
};
1883 DEFUN ("run-hooks", Frun_hooks
, Srun_hooks
, 1, MANY
, 0,
1884 "Run each hook in HOOKS. Major mode functions use this.\n\
1885 Each argument should be a symbol, a hook variable.\n\
1886 These symbols are processed in the order specified.\n\
1887 If a hook symbol has a non-nil value, that value may be a function\n\
1888 or a list of functions to be called to run the hook.\n\
1889 If the value is a function, it is called with no arguments.\n\
1890 If it is a list, the elements are called, in order, with no arguments.\n\
1892 To make a hook variable buffer-local, use `make-local-hook',\n\
1893 not `make-local-variable'.")
1898 Lisp_Object hook
[1];
1901 for (i
= 0; i
< nargs
; i
++)
1904 run_hook_with_args (1, hook
, to_completion
);
1910 DEFUN ("run-hook-with-args",
1911 Frun_hook_with_args
, Srun_hook_with_args
, 1, MANY
, 0,
1912 "Run HOOK with the specified arguments ARGS.\n\
1913 HOOK should be a symbol, a hook variable. If HOOK has a non-nil\n\
1914 value, that value may be a function or a list of functions to be\n\
1915 called to run the hook. If the value is a function, it is called with\n\
1916 the given arguments and its return value is returned. If it is a list\n\
1917 of functions, those functions are called, in order,\n\
1918 with the given arguments ARGS.\n\
1919 It is best not to depend on the value return by `run-hook-with-args',\n\
1920 as that may change.\n\
1922 To make a hook variable buffer-local, use `make-local-hook',\n\
1923 not `make-local-variable'.")
1928 return run_hook_with_args (nargs
, args
, to_completion
);
1931 DEFUN ("run-hook-with-args-until-success",
1932 Frun_hook_with_args_until_success
, Srun_hook_with_args_until_success
,
1934 "Run HOOK with the specified arguments ARGS.\n\
1935 HOOK should be a symbol, a hook variable. Its value should\n\
1936 be a list of functions. We call those functions, one by one,\n\
1937 passing arguments ARGS to each of them, until one of them\n\
1938 returns a non-nil value. Then we return that value.\n\
1939 If all the functions return nil, we return nil.\n\
1941 To make a hook variable buffer-local, use `make-local-hook',\n\
1942 not `make-local-variable'.")
1947 return run_hook_with_args (nargs
, args
, until_success
);
1950 DEFUN ("run-hook-with-args-until-failure",
1951 Frun_hook_with_args_until_failure
, Srun_hook_with_args_until_failure
,
1953 "Run HOOK with the specified arguments ARGS.\n\
1954 HOOK should be a symbol, a hook variable. Its value should\n\
1955 be a list of functions. We call those functions, one by one,\n\
1956 passing arguments ARGS to each of them, until one of them\n\
1957 returns nil. Then we return nil.\n\
1958 If all the functions return non-nil, we return non-nil.\n\
1960 To make a hook variable buffer-local, use `make-local-hook',\n\
1961 not `make-local-variable'.")
1966 return run_hook_with_args (nargs
, args
, until_failure
);
1969 /* ARGS[0] should be a hook symbol.
1970 Call each of the functions in the hook value, passing each of them
1971 as arguments all the rest of ARGS (all NARGS - 1 elements).
1972 COND specifies a condition to test after each call
1973 to decide whether to stop.
1974 The caller (or its caller, etc) must gcpro all of ARGS,
1975 except that it isn't necessary to gcpro ARGS[0]. */
1978 run_hook_with_args (nargs
, args
, cond
)
1981 enum run_hooks_condition cond
;
1983 Lisp_Object sym
, val
, ret
;
1984 struct gcpro gcpro1
, gcpro2
;
1986 /* If we are dying or still initializing,
1987 don't do anything--it would probably crash if we tried. */
1988 if (NILP (Vrun_hooks
))
1992 val
= find_symbol_value (sym
);
1993 ret
= (cond
== until_failure
? Qt
: Qnil
);
1995 if (EQ (val
, Qunbound
) || NILP (val
))
1997 else if (!CONSP (val
) || EQ (XCONS (val
)->car
, Qlambda
))
2000 return Ffuncall (nargs
, args
);
2007 CONSP (val
) && ((cond
== to_completion
)
2008 || (cond
== until_success
? NILP (ret
)
2010 val
= XCONS (val
)->cdr
)
2012 if (EQ (XCONS (val
)->car
, Qt
))
2014 /* t indicates this hook has a local binding;
2015 it means to run the global binding too. */
2016 Lisp_Object globals
;
2018 for (globals
= Fdefault_value (sym
);
2019 CONSP (globals
) && ((cond
== to_completion
)
2020 || (cond
== until_success
? NILP (ret
)
2022 globals
= XCONS (globals
)->cdr
)
2024 args
[0] = XCONS (globals
)->car
;
2025 /* In a global value, t should not occur. If it does, we
2026 must ignore it to avoid an endless loop. */
2027 if (!EQ (args
[0], Qt
))
2028 ret
= Ffuncall (nargs
, args
);
2033 args
[0] = XCONS (val
)->car
;
2034 ret
= Ffuncall (nargs
, args
);
2043 /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual
2044 present value of that symbol.
2045 Call each element of FUNLIST,
2046 passing each of them the rest of ARGS.
2047 The caller (or its caller, etc) must gcpro all of ARGS,
2048 except that it isn't necessary to gcpro ARGS[0]. */
2051 run_hook_list_with_args (funlist
, nargs
, args
)
2052 Lisp_Object funlist
;
2058 struct gcpro gcpro1
, gcpro2
;
2063 for (val
= funlist
; CONSP (val
); val
= XCONS (val
)->cdr
)
2065 if (EQ (XCONS (val
)->car
, Qt
))
2067 /* t indicates this hook has a local binding;
2068 it means to run the global binding too. */
2069 Lisp_Object globals
;
2071 for (globals
= Fdefault_value (sym
);
2073 globals
= XCONS (globals
)->cdr
)
2075 args
[0] = XCONS (globals
)->car
;
2076 /* In a global value, t should not occur. If it does, we
2077 must ignore it to avoid an endless loop. */
2078 if (!EQ (args
[0], Qt
))
2079 Ffuncall (nargs
, args
);
2084 args
[0] = XCONS (val
)->car
;
2085 Ffuncall (nargs
, args
);
2092 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2095 run_hook_with_args_2 (hook
, arg1
, arg2
)
2096 Lisp_Object hook
, arg1
, arg2
;
2098 Lisp_Object temp
[3];
2103 Frun_hook_with_args (3, temp
);
2106 /* Apply fn to arg */
2109 Lisp_Object fn
, arg
;
2111 struct gcpro gcpro1
;
2115 RETURN_UNGCPRO (Ffuncall (1, &fn
));
2119 Lisp_Object args
[2];
2123 RETURN_UNGCPRO (Fapply (2, args
));
2125 #else /* not NO_ARG_ARRAY */
2126 RETURN_UNGCPRO (Fapply (2, &fn
));
2127 #endif /* not NO_ARG_ARRAY */
2130 /* Call function fn on no arguments */
2135 struct gcpro gcpro1
;
2138 RETURN_UNGCPRO (Ffuncall (1, &fn
));
2141 /* Call function fn with 1 argument arg1 */
2145 Lisp_Object fn
, arg1
;
2147 struct gcpro gcpro1
;
2149 Lisp_Object args
[2];
2155 RETURN_UNGCPRO (Ffuncall (2, args
));
2156 #else /* not NO_ARG_ARRAY */
2159 RETURN_UNGCPRO (Ffuncall (2, &fn
));
2160 #endif /* not NO_ARG_ARRAY */
2163 /* Call function fn with 2 arguments arg1, arg2 */
2166 call2 (fn
, arg1
, arg2
)
2167 Lisp_Object fn
, arg1
, arg2
;
2169 struct gcpro gcpro1
;
2171 Lisp_Object args
[3];
2177 RETURN_UNGCPRO (Ffuncall (3, args
));
2178 #else /* not NO_ARG_ARRAY */
2181 RETURN_UNGCPRO (Ffuncall (3, &fn
));
2182 #endif /* not NO_ARG_ARRAY */
2185 /* Call function fn with 3 arguments arg1, arg2, arg3 */
2188 call3 (fn
, arg1
, arg2
, arg3
)
2189 Lisp_Object fn
, arg1
, arg2
, arg3
;
2191 struct gcpro gcpro1
;
2193 Lisp_Object args
[4];
2200 RETURN_UNGCPRO (Ffuncall (4, args
));
2201 #else /* not NO_ARG_ARRAY */
2204 RETURN_UNGCPRO (Ffuncall (4, &fn
));
2205 #endif /* not NO_ARG_ARRAY */
2208 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4 */
2211 call4 (fn
, arg1
, arg2
, arg3
, arg4
)
2212 Lisp_Object fn
, arg1
, arg2
, arg3
, arg4
;
2214 struct gcpro gcpro1
;
2216 Lisp_Object args
[5];
2224 RETURN_UNGCPRO (Ffuncall (5, args
));
2225 #else /* not NO_ARG_ARRAY */
2228 RETURN_UNGCPRO (Ffuncall (5, &fn
));
2229 #endif /* not NO_ARG_ARRAY */
2232 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5 */
2235 call5 (fn
, arg1
, arg2
, arg3
, arg4
, arg5
)
2236 Lisp_Object fn
, arg1
, arg2
, arg3
, arg4
, arg5
;
2238 struct gcpro gcpro1
;
2240 Lisp_Object args
[6];
2249 RETURN_UNGCPRO (Ffuncall (6, args
));
2250 #else /* not NO_ARG_ARRAY */
2253 RETURN_UNGCPRO (Ffuncall (6, &fn
));
2254 #endif /* not NO_ARG_ARRAY */
2257 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6 */
2260 call6 (fn
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
)
2261 Lisp_Object fn
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
;
2263 struct gcpro gcpro1
;
2265 Lisp_Object args
[7];
2275 RETURN_UNGCPRO (Ffuncall (7, args
));
2276 #else /* not NO_ARG_ARRAY */
2279 RETURN_UNGCPRO (Ffuncall (7, &fn
));
2280 #endif /* not NO_ARG_ARRAY */
2283 DEFUN ("funcall", Ffuncall
, Sfuncall
, 1, MANY
, 0,
2284 "Call first argument as a function, passing remaining arguments to it.\n\
2285 Return the value that function returns.\n\
2286 Thus, (funcall 'cons 'x 'y) returns (x . y).")
2293 int numargs
= nargs
- 1;
2294 Lisp_Object lisp_numargs
;
2296 struct backtrace backtrace
;
2297 register Lisp_Object
*internal_args
;
2301 if (consing_since_gc
> gc_cons_threshold
)
2302 Fgarbage_collect ();
2304 if (++lisp_eval_depth
> max_lisp_eval_depth
)
2306 if (max_lisp_eval_depth
< 100)
2307 max_lisp_eval_depth
= 100;
2308 if (lisp_eval_depth
> max_lisp_eval_depth
)
2309 error ("Lisp nesting exceeds max-lisp-eval-depth");
2312 backtrace
.next
= backtrace_list
;
2313 backtrace_list
= &backtrace
;
2314 backtrace
.function
= &args
[0];
2315 backtrace
.args
= &args
[1];
2316 backtrace
.nargs
= nargs
- 1;
2317 backtrace
.evalargs
= 0;
2318 backtrace
.debug_on_exit
= 0;
2320 if (debug_on_next_call
)
2321 do_debug_on_call (Qlambda
);
2327 fun
= Findirect_function (fun
);
2331 if (numargs
< XSUBR (fun
)->min_args
2332 || (XSUBR (fun
)->max_args
>= 0 && XSUBR (fun
)->max_args
< numargs
))
2334 XSETFASTINT (lisp_numargs
, numargs
);
2335 return Fsignal (Qwrong_number_of_arguments
, Fcons (fun
, Fcons (lisp_numargs
, Qnil
)));
2338 if (XSUBR (fun
)->max_args
== UNEVALLED
)
2339 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
2341 if (XSUBR (fun
)->max_args
== MANY
)
2343 val
= (*XSUBR (fun
)->function
) (numargs
, args
+ 1);
2347 if (XSUBR (fun
)->max_args
> numargs
)
2349 internal_args
= (Lisp_Object
*) alloca (XSUBR (fun
)->max_args
* sizeof (Lisp_Object
));
2350 bcopy (args
+ 1, internal_args
, numargs
* sizeof (Lisp_Object
));
2351 for (i
= numargs
; i
< XSUBR (fun
)->max_args
; i
++)
2352 internal_args
[i
] = Qnil
;
2355 internal_args
= args
+ 1;
2356 switch (XSUBR (fun
)->max_args
)
2359 val
= (*XSUBR (fun
)->function
) ();
2362 val
= (*XSUBR (fun
)->function
) (internal_args
[0]);
2365 val
= (*XSUBR (fun
)->function
) (internal_args
[0],
2369 val
= (*XSUBR (fun
)->function
) (internal_args
[0], internal_args
[1],
2373 val
= (*XSUBR (fun
)->function
) (internal_args
[0], internal_args
[1],
2378 val
= (*XSUBR (fun
)->function
) (internal_args
[0], internal_args
[1],
2379 internal_args
[2], internal_args
[3],
2383 val
= (*XSUBR (fun
)->function
) (internal_args
[0], internal_args
[1],
2384 internal_args
[2], internal_args
[3],
2385 internal_args
[4], internal_args
[5]);
2388 val
= (*XSUBR (fun
)->function
) (internal_args
[0], internal_args
[1],
2389 internal_args
[2], internal_args
[3],
2390 internal_args
[4], internal_args
[5],
2396 /* If a subr takes more than 6 arguments without using MANY
2397 or UNEVALLED, we need to extend this function to support it.
2398 Until this is done, there is no way to call the function. */
2402 if (COMPILEDP (fun
))
2403 val
= funcall_lambda (fun
, numargs
, args
+ 1);
2407 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
2408 funcar
= Fcar (fun
);
2409 if (!SYMBOLP (funcar
))
2410 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
2411 if (EQ (funcar
, Qlambda
))
2412 val
= funcall_lambda (fun
, numargs
, args
+ 1);
2413 else if (EQ (funcar
, Qmocklisp
))
2414 val
= ml_apply (fun
, Flist (numargs
, args
+ 1));
2415 else if (EQ (funcar
, Qautoload
))
2417 do_autoload (fun
, args
[0]);
2421 return Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
2425 if (backtrace
.debug_on_exit
)
2426 val
= call_debugger (Fcons (Qexit
, Fcons (val
, Qnil
)));
2427 backtrace_list
= backtrace
.next
;
2432 apply_lambda (fun
, args
, eval_flag
)
2433 Lisp_Object fun
, args
;
2436 Lisp_Object args_left
;
2437 Lisp_Object numargs
;
2438 register Lisp_Object
*arg_vector
;
2439 struct gcpro gcpro1
, gcpro2
, gcpro3
;
2441 register Lisp_Object tem
;
2443 numargs
= Flength (args
);
2444 arg_vector
= (Lisp_Object
*) alloca (XINT (numargs
) * sizeof (Lisp_Object
));
2447 GCPRO3 (*arg_vector
, args_left
, fun
);
2450 for (i
= 0; i
< XINT (numargs
);)
2452 tem
= Fcar (args_left
), args_left
= Fcdr (args_left
);
2453 if (eval_flag
) tem
= Feval (tem
);
2454 arg_vector
[i
++] = tem
;
2462 backtrace_list
->args
= arg_vector
;
2463 backtrace_list
->nargs
= i
;
2465 backtrace_list
->evalargs
= 0;
2466 tem
= funcall_lambda (fun
, XINT (numargs
), arg_vector
);
2468 /* Do the debug-on-exit now, while arg_vector still exists. */
2469 if (backtrace_list
->debug_on_exit
)
2470 tem
= call_debugger (Fcons (Qexit
, Fcons (tem
, Qnil
)));
2471 /* Don't do it again when we return to eval. */
2472 backtrace_list
->debug_on_exit
= 0;
2476 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2477 and return the result of evaluation.
2478 FUN must be either a lambda-expression or a compiled-code object. */
2481 funcall_lambda (fun
, nargs
, arg_vector
)
2484 register Lisp_Object
*arg_vector
;
2486 Lisp_Object val
, tem
;
2487 register Lisp_Object syms_left
;
2488 Lisp_Object numargs
;
2489 register Lisp_Object next
;
2490 int count
= specpdl_ptr
- specpdl
;
2492 int optional
= 0, rest
= 0;
2494 specbind (Qmocklisp_arguments
, Qt
); /* t means NOT mocklisp! */
2496 XSETFASTINT (numargs
, nargs
);
2499 syms_left
= Fcar (Fcdr (fun
));
2500 else if (COMPILEDP (fun
))
2501 syms_left
= XVECTOR (fun
)->contents
[COMPILED_ARGLIST
];
2505 for (; !NILP (syms_left
); syms_left
= Fcdr (syms_left
))
2508 next
= Fcar (syms_left
);
2509 while (!SYMBOLP (next
))
2510 next
= Fsignal (Qinvalid_function
, Fcons (fun
, Qnil
));
2511 if (EQ (next
, Qand_rest
))
2513 else if (EQ (next
, Qand_optional
))
2517 specbind (next
, Flist (nargs
- i
, &arg_vector
[i
]));
2522 tem
= arg_vector
[i
++];
2523 specbind (next
, tem
);
2526 return Fsignal (Qwrong_number_of_arguments
, Fcons (fun
, Fcons (numargs
, Qnil
)));
2528 specbind (next
, Qnil
);
2532 return Fsignal (Qwrong_number_of_arguments
, Fcons (fun
, Fcons (numargs
, Qnil
)));
2535 val
= Fprogn (Fcdr (Fcdr (fun
)));
2538 /* If we have not actually read the bytecode string
2539 and constants vector yet, fetch them from the file. */
2540 if (CONSP (XVECTOR (fun
)->contents
[COMPILED_BYTECODE
]))
2541 Ffetch_bytecode (fun
);
2542 val
= Fbyte_code (XVECTOR (fun
)->contents
[COMPILED_BYTECODE
],
2543 XVECTOR (fun
)->contents
[COMPILED_CONSTANTS
],
2544 XVECTOR (fun
)->contents
[COMPILED_STACK_DEPTH
]);
2546 return unbind_to (count
, val
);
2549 DEFUN ("fetch-bytecode", Ffetch_bytecode
, Sfetch_bytecode
,
2551 "If byte-compiled OBJECT is lazy-loaded, fetch it now.")
2557 if (COMPILEDP (object
)
2558 && CONSP (XVECTOR (object
)->contents
[COMPILED_BYTECODE
]))
2560 tem
= read_doc_string (XVECTOR (object
)->contents
[COMPILED_BYTECODE
]);
2562 error ("invalid byte code");
2563 XVECTOR (object
)->contents
[COMPILED_BYTECODE
] = XCONS (tem
)->car
;
2564 XVECTOR (object
)->contents
[COMPILED_CONSTANTS
] = XCONS (tem
)->cdr
;
2572 register int count
= specpdl_ptr
- specpdl
;
2573 if (specpdl_size
>= max_specpdl_size
)
2575 if (max_specpdl_size
< 400)
2576 max_specpdl_size
= 400;
2577 if (specpdl_size
>= max_specpdl_size
)
2579 if (!NILP (Vdebug_on_error
))
2580 /* Leave room for some specpdl in the debugger. */
2581 max_specpdl_size
= specpdl_size
+ 100;
2583 Fcons (build_string ("Variable binding depth exceeds max-specpdl-size"), Qnil
));
2587 if (specpdl_size
> max_specpdl_size
)
2588 specpdl_size
= max_specpdl_size
;
2589 specpdl
= (struct specbinding
*) xrealloc (specpdl
, specpdl_size
* sizeof (struct specbinding
));
2590 specpdl_ptr
= specpdl
+ count
;
2594 specbind (symbol
, value
)
2595 Lisp_Object symbol
, value
;
2599 CHECK_SYMBOL (symbol
, 0);
2601 if (specpdl_ptr
== specpdl
+ specpdl_size
)
2603 specpdl_ptr
->symbol
= symbol
;
2604 specpdl_ptr
->func
= 0;
2605 specpdl_ptr
->old_value
= ovalue
= find_symbol_value (symbol
);
2607 if (BUFFER_OBJFWDP (ovalue
) || KBOARD_OBJFWDP (ovalue
))
2608 store_symval_forwarding (symbol
, ovalue
, value
);
2610 Fset (symbol
, value
);
2614 record_unwind_protect (function
, arg
)
2615 Lisp_Object (*function
)();
2618 if (specpdl_ptr
== specpdl
+ specpdl_size
)
2620 specpdl_ptr
->func
= function
;
2621 specpdl_ptr
->symbol
= Qnil
;
2622 specpdl_ptr
->old_value
= arg
;
2627 unbind_to (count
, value
)
2631 int quitf
= !NILP (Vquit_flag
);
2632 struct gcpro gcpro1
;
2638 while (specpdl_ptr
!= specpdl
+ count
)
2641 if (specpdl_ptr
->func
!= 0)
2642 (*specpdl_ptr
->func
) (specpdl_ptr
->old_value
);
2643 /* Note that a "binding" of nil is really an unwind protect,
2644 so in that case the "old value" is a list of forms to evaluate. */
2645 else if (NILP (specpdl_ptr
->symbol
))
2646 Fprogn (specpdl_ptr
->old_value
);
2648 Fset (specpdl_ptr
->symbol
, specpdl_ptr
->old_value
);
2650 if (NILP (Vquit_flag
) && quitf
) Vquit_flag
= Qt
;
2659 /* Get the value of symbol's global binding, even if that binding
2660 is not now dynamically visible. */
2663 top_level_value (symbol
)
2666 register struct specbinding
*ptr
= specpdl
;
2668 CHECK_SYMBOL (symbol
, 0);
2669 for (; ptr
!= specpdl_ptr
; ptr
++)
2671 if (EQ (ptr
->symbol
, symbol
))
2672 return ptr
->old_value
;
2674 return Fsymbol_value (symbol
);
2678 top_level_set (symbol
, newval
)
2679 Lisp_Object symbol
, newval
;
2681 register struct specbinding
*ptr
= specpdl
;
2683 CHECK_SYMBOL (symbol
, 0);
2684 for (; ptr
!= specpdl_ptr
; ptr
++)
2686 if (EQ (ptr
->symbol
, symbol
))
2688 ptr
->old_value
= newval
;
2692 return Fset (symbol
, newval
);
2697 DEFUN ("backtrace-debug", Fbacktrace_debug
, Sbacktrace_debug
, 2, 2, 0,
2698 "Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.\n\
2699 The debugger is entered when that frame exits, if the flag is non-nil.")
2701 Lisp_Object level
, flag
;
2703 register struct backtrace
*backlist
= backtrace_list
;
2706 CHECK_NUMBER (level
, 0);
2708 for (i
= 0; backlist
&& i
< XINT (level
); i
++)
2710 backlist
= backlist
->next
;
2714 backlist
->debug_on_exit
= !NILP (flag
);
2719 DEFUN ("backtrace", Fbacktrace
, Sbacktrace
, 0, 0, "",
2720 "Print a trace of Lisp function calls currently active.\n\
2721 Output stream used is value of `standard-output'.")
2724 register struct backtrace
*backlist
= backtrace_list
;
2728 extern Lisp_Object Vprint_level
;
2729 struct gcpro gcpro1
;
2731 XSETFASTINT (Vprint_level
, 3);
2738 write_string (backlist
->debug_on_exit
? "* " : " ", 2);
2739 if (backlist
->nargs
== UNEVALLED
)
2741 Fprin1 (Fcons (*backlist
->function
, *backlist
->args
), Qnil
);
2742 write_string ("\n", -1);
2746 tem
= *backlist
->function
;
2747 Fprin1 (tem
, Qnil
); /* This can QUIT */
2748 write_string ("(", -1);
2749 if (backlist
->nargs
== MANY
)
2751 for (tail
= *backlist
->args
, i
= 0;
2753 tail
= Fcdr (tail
), i
++)
2755 if (i
) write_string (" ", -1);
2756 Fprin1 (Fcar (tail
), Qnil
);
2761 for (i
= 0; i
< backlist
->nargs
; i
++)
2763 if (i
) write_string (" ", -1);
2764 Fprin1 (backlist
->args
[i
], Qnil
);
2767 write_string (")\n", -1);
2769 backlist
= backlist
->next
;
2772 Vprint_level
= Qnil
;
2777 DEFUN ("backtrace-frame", Fbacktrace_frame
, Sbacktrace_frame
, 1, 1, "",
2778 "Return the function and arguments NFRAMES up from current execution point.\n\
2779 If that frame has not evaluated the arguments yet (or is a special form),\n\
2780 the value is (nil FUNCTION ARG-FORMS...).\n\
2781 If that frame has evaluated its arguments and called its function already,\n\
2782 the value is (t FUNCTION ARG-VALUES...).\n\
2783 A &rest arg is represented as the tail of the list ARG-VALUES.\n\
2784 FUNCTION is whatever was supplied as car of evaluated list,\n\
2785 or a lambda expression for macro calls.\n\
2786 If NFRAMES is more than the number of frames, the value is nil.")
2788 Lisp_Object nframes
;
2790 register struct backtrace
*backlist
= backtrace_list
;
2794 CHECK_NATNUM (nframes
, 0);
2796 /* Find the frame requested. */
2797 for (i
= 0; backlist
&& i
< XFASTINT (nframes
); i
++)
2798 backlist
= backlist
->next
;
2802 if (backlist
->nargs
== UNEVALLED
)
2803 return Fcons (Qnil
, Fcons (*backlist
->function
, *backlist
->args
));
2806 if (backlist
->nargs
== MANY
)
2807 tem
= *backlist
->args
;
2809 tem
= Flist (backlist
->nargs
, backlist
->args
);
2811 return Fcons (Qt
, Fcons (*backlist
->function
, tem
));
2817 DEFVAR_INT ("max-specpdl-size", &max_specpdl_size
,
2818 "Limit on number of Lisp variable bindings & unwind-protects before error.");
2820 DEFVAR_INT ("max-lisp-eval-depth", &max_lisp_eval_depth
,
2821 "Limit on depth in `eval', `apply' and `funcall' before error.\n\
2822 This limit is to catch infinite recursions for you before they cause\n\
2823 actual stack overflow in C, which would be fatal for Emacs.\n\
2824 You can safely make it considerably larger than its default value,\n\
2825 if that proves inconveniently small.");
2827 DEFVAR_LISP ("quit-flag", &Vquit_flag
,
2828 "Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.\n\
2829 Typing C-g sets `quit-flag' non-nil, regardless of `inhibit-quit'.");
2832 DEFVAR_LISP ("inhibit-quit", &Vinhibit_quit
,
2833 "Non-nil inhibits C-g quitting from happening immediately.\n\
2834 Note that `quit-flag' will still be set by typing C-g,\n\
2835 so a quit will be signaled as soon as `inhibit-quit' is nil.\n\
2836 To prevent this happening, set `quit-flag' to nil\n\
2837 before making `inhibit-quit' nil.");
2838 Vinhibit_quit
= Qnil
;
2840 Qinhibit_quit
= intern ("inhibit-quit");
2841 staticpro (&Qinhibit_quit
);
2843 Qautoload
= intern ("autoload");
2844 staticpro (&Qautoload
);
2846 Qdebug_on_error
= intern ("debug-on-error");
2847 staticpro (&Qdebug_on_error
);
2849 Qmacro
= intern ("macro");
2850 staticpro (&Qmacro
);
2852 /* Note that the process handling also uses Qexit, but we don't want
2853 to staticpro it twice, so we just do it here. */
2854 Qexit
= intern ("exit");
2857 Qinteractive
= intern ("interactive");
2858 staticpro (&Qinteractive
);
2860 Qcommandp
= intern ("commandp");
2861 staticpro (&Qcommandp
);
2863 Qdefun
= intern ("defun");
2864 staticpro (&Qdefun
);
2866 Qand_rest
= intern ("&rest");
2867 staticpro (&Qand_rest
);
2869 Qand_optional
= intern ("&optional");
2870 staticpro (&Qand_optional
);
2872 DEFVAR_LISP ("stack-trace-on-error", &Vstack_trace_on_error
,
2873 "*Non-nil means automatically display a backtrace buffer\n\
2874 after any error that is handled by the editor command loop.\n\
2875 If the value is a list, an error only means to display a backtrace\n\
2876 if one of its condition symbols appears in the list.");
2877 Vstack_trace_on_error
= Qnil
;
2879 DEFVAR_LISP ("debug-on-error", &Vdebug_on_error
,
2880 "*Non-nil means enter debugger if an error is signaled.\n\
2881 Does not apply to errors handled by `condition-case'.\n\
2882 If the value is a list, an error only means to enter the debugger\n\
2883 if one of its condition symbols appears in the list.\n\
2884 See also variable `debug-on-quit'.");
2885 Vdebug_on_error
= Qnil
;
2887 DEFVAR_LISP ("debug-ignored-errors", &Vdebug_ignored_errors
,
2888 "*List of errors for which the debugger should not be called.\n\
2889 Each element may be a condition-name or a regexp that matches error messages.\n\
2890 If any element applies to a given error, that error skips the debugger\n\
2891 and just returns to top level.\n\
2892 This overrides the variable `debug-on-error'.\n\
2893 It does not apply to errors handled by `condition-case'.");
2894 Vdebug_ignored_errors
= Qnil
;
2896 DEFVAR_BOOL ("debug-on-quit", &debug_on_quit
,
2897 "*Non-nil means enter debugger if quit is signaled (C-g, for example).\n\
2898 Does not apply if quit is handled by a `condition-case'.");
2901 DEFVAR_BOOL ("debug-on-next-call", &debug_on_next_call
,
2902 "Non-nil means enter debugger before next `eval', `apply' or `funcall'.");
2904 DEFVAR_LISP ("debugger", &Vdebugger
,
2905 "Function to call to invoke debugger.\n\
2906 If due to frame exit, args are `exit' and the value being returned;\n\
2907 this function's value will be returned instead of that.\n\
2908 If due to error, args are `error' and a list of the args to `signal'.\n\
2909 If due to `apply' or `funcall' entry, one arg, `lambda'.\n\
2910 If due to `eval' entry, one arg, t.");
2913 Qmocklisp_arguments
= intern ("mocklisp-arguments");
2914 staticpro (&Qmocklisp_arguments
);
2915 DEFVAR_LISP ("mocklisp-arguments", &Vmocklisp_arguments
,
2916 "While in a mocklisp function, the list of its unevaluated args.");
2917 Vmocklisp_arguments
= Qt
;
2919 DEFVAR_LISP ("run-hooks", &Vrun_hooks
,
2920 "Set to the function `run-hooks', if that function has been defined.\n\
2921 Otherwise, nil (in a bare Emacs without preloaded Lisp code).");
2923 staticpro (&Vautoload_queue
);
2924 Vautoload_queue
= Qnil
;
2935 defsubr (&Sfunction
);
2937 defsubr (&Sdefmacro
);
2939 defsubr (&Sdefconst
);
2940 defsubr (&Suser_variable_p
);
2944 defsubr (&Smacroexpand
);
2947 defsubr (&Sunwind_protect
);
2948 defsubr (&Scondition_case
);
2950 defsubr (&Sinteractive_p
);
2951 defsubr (&Scommandp
);
2952 defsubr (&Sautoload
);
2955 defsubr (&Sfuncall
);
2956 defsubr (&Srun_hooks
);
2957 defsubr (&Srun_hook_with_args
);
2958 defsubr (&Srun_hook_with_args_until_success
);
2959 defsubr (&Srun_hook_with_args_until_failure
);
2960 defsubr (&Sfetch_bytecode
);
2961 defsubr (&Sbacktrace_debug
);
2962 defsubr (&Sbacktrace
);
2963 defsubr (&Sbacktrace_frame
);