1 /* Evaluator for GNU Emacs Lisp interpreter.
3 Copyright (C) 1985-1987, 1993-1995, 1999-2015 Free Software Foundation,
6 This file is part of GNU Emacs.
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
26 #include "blockinput.h"
29 #include "dispextern.h"
32 /* Chain of condition and catch handlers currently in effect. */
34 struct handler
*handlerlist
;
36 /* Non-nil means record all fset's and provide's, to be undone
37 if the file being autoloaded is not fully loaded.
38 They are recorded by being consed onto the front of Vautoload_queue:
39 (FUN . ODEF) for a defun, (0 . OFEATURES) for a provide. */
41 Lisp_Object Vautoload_queue
;
43 /* This holds either the symbol `run-hooks' or nil.
44 It is nil at an early stage of startup, and when Emacs
46 Lisp_Object Vrun_hooks
;
48 /* Current number of specbindings allocated in specpdl, not counting
49 the dummy entry specpdl[-1]. */
51 ptrdiff_t specpdl_size
;
53 /* Pointer to beginning of specpdl. A dummy entry specpdl[-1] exists
54 only so that its address can be taken. */
56 union specbinding
*specpdl
;
58 /* Pointer to first unused element in specpdl. */
60 union specbinding
*specpdl_ptr
;
62 /* Depth in Lisp evaluations and function calls. */
64 EMACS_INT lisp_eval_depth
;
66 /* The value of num_nonmacro_input_events as of the last time we
67 started to enter the debugger. If we decide to enter the debugger
68 again when this is still equal to num_nonmacro_input_events, then we
69 know that the debugger itself has an error, and we should just
70 signal the error instead of entering an infinite loop of debugger
73 static EMACS_INT when_entered_debugger
;
75 /* The function from which the last `signal' was called. Set in
77 /* FIXME: We should probably get rid of this! */
78 Lisp_Object Vsignaling_function
;
80 /* If non-nil, Lisp code must not be run since some part of Emacs is in
81 an inconsistent state. Currently unused. */
82 Lisp_Object inhibit_lisp_code
;
84 /* These would ordinarily be static, but they need to be visible to GDB. */
85 bool backtrace_p (union specbinding
*) EXTERNALLY_VISIBLE
;
86 Lisp_Object
*backtrace_args (union specbinding
*) EXTERNALLY_VISIBLE
;
87 Lisp_Object
backtrace_function (union specbinding
*) EXTERNALLY_VISIBLE
;
88 union specbinding
*backtrace_next (union specbinding
*) EXTERNALLY_VISIBLE
;
89 union specbinding
*backtrace_top (void) EXTERNALLY_VISIBLE
;
91 static Lisp_Object
funcall_lambda (Lisp_Object
, ptrdiff_t, Lisp_Object
*);
92 static Lisp_Object
apply_lambda (Lisp_Object
, Lisp_Object
, ptrdiff_t);
95 specpdl_symbol (union specbinding
*pdl
)
97 eassert (pdl
->kind
>= SPECPDL_LET
);
98 return pdl
->let
.symbol
;
102 specpdl_old_value (union specbinding
*pdl
)
104 eassert (pdl
->kind
>= SPECPDL_LET
);
105 return pdl
->let
.old_value
;
109 set_specpdl_old_value (union specbinding
*pdl
, Lisp_Object val
)
111 eassert (pdl
->kind
>= SPECPDL_LET
);
112 pdl
->let
.old_value
= val
;
116 specpdl_where (union specbinding
*pdl
)
118 eassert (pdl
->kind
> SPECPDL_LET
);
119 return pdl
->let
.where
;
123 specpdl_arg (union specbinding
*pdl
)
125 eassert (pdl
->kind
== SPECPDL_UNWIND
);
126 return pdl
->unwind
.arg
;
130 backtrace_function (union specbinding
*pdl
)
132 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
133 return pdl
->bt
.function
;
137 backtrace_nargs (union specbinding
*pdl
)
139 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
140 return pdl
->bt
.nargs
;
144 backtrace_args (union specbinding
*pdl
)
146 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
151 backtrace_debug_on_exit (union specbinding
*pdl
)
153 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
154 return pdl
->bt
.debug_on_exit
;
157 /* Functions to modify slots of backtrace records. */
160 set_backtrace_args (union specbinding
*pdl
, Lisp_Object
*args
, ptrdiff_t nargs
)
162 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
164 pdl
->bt
.nargs
= nargs
;
168 set_backtrace_debug_on_exit (union specbinding
*pdl
, bool doe
)
170 eassert (pdl
->kind
== SPECPDL_BACKTRACE
);
171 pdl
->bt
.debug_on_exit
= doe
;
174 /* Helper functions to scan the backtrace. */
177 backtrace_p (union specbinding
*pdl
)
178 { return pdl
>= specpdl
; }
183 union specbinding
*pdl
= specpdl_ptr
- 1;
184 while (backtrace_p (pdl
) && pdl
->kind
!= SPECPDL_BACKTRACE
)
190 backtrace_next (union specbinding
*pdl
)
193 while (backtrace_p (pdl
) && pdl
->kind
!= SPECPDL_BACKTRACE
)
198 /* Return a pointer to somewhere near the top of the C stack. */
200 near_C_stack_top (void)
202 return backtrace_args (backtrace_top ());
206 init_eval_once (void)
209 union specbinding
*pdlvec
= xmalloc ((size
+ 1) * sizeof *specpdl
);
211 specpdl
= specpdl_ptr
= pdlvec
+ 1;
212 /* Don't forget to update docs (lispref node "Local Variables"). */
213 max_specpdl_size
= 1300; /* 1000 is not enough for CEDET's c-by.el. */
214 max_lisp_eval_depth
= 800;
219 static struct handler handlerlist_sentinel
;
225 specpdl_ptr
= specpdl
;
226 { /* Put a dummy catcher at top-level so that handlerlist is never NULL.
227 This is important since handlerlist->nextfree holds the freelist
228 which would otherwise leak every time we unwind back to top-level. */
230 handlerlist
= handlerlist_sentinel
.nextfree
= &handlerlist_sentinel
;
231 PUSH_HANDLER (c
, Qunbound
, CATCHER
);
232 eassert (c
== &handlerlist_sentinel
);
233 handlerlist_sentinel
.nextfree
= NULL
;
234 handlerlist_sentinel
.next
= NULL
;
237 debug_on_next_call
= 0;
239 /* This is less than the initial value of num_nonmacro_input_events. */
240 when_entered_debugger
= -1;
243 /* Unwind-protect function used by call_debugger. */
246 restore_stack_limits (Lisp_Object data
)
248 max_specpdl_size
= XINT (XCAR (data
));
249 max_lisp_eval_depth
= XINT (XCDR (data
));
252 static void grow_specpdl (void);
254 /* Call the Lisp debugger, giving it argument ARG. */
257 call_debugger (Lisp_Object arg
)
259 bool debug_while_redisplaying
;
260 ptrdiff_t count
= SPECPDL_INDEX ();
262 EMACS_INT old_depth
= max_lisp_eval_depth
;
263 /* Do not allow max_specpdl_size less than actual depth (Bug#16603). */
264 EMACS_INT old_max
= max (max_specpdl_size
, count
);
266 if (lisp_eval_depth
+ 40 > max_lisp_eval_depth
)
267 max_lisp_eval_depth
= lisp_eval_depth
+ 40;
269 /* While debugging Bug#16603, previous value of 100 was found
270 too small to avoid specpdl overflow in the debugger itself. */
271 if (max_specpdl_size
- 200 < count
)
272 max_specpdl_size
= count
+ 200;
274 if (old_max
== count
)
276 /* We can enter the debugger due to specpdl overflow (Bug#16603). */
281 /* Restore limits after leaving the debugger. */
282 record_unwind_protect (restore_stack_limits
,
283 Fcons (make_number (old_max
),
284 make_number (old_depth
)));
286 #ifdef HAVE_WINDOW_SYSTEM
287 if (display_hourglass_p
)
291 debug_on_next_call
= 0;
292 when_entered_debugger
= num_nonmacro_input_events
;
294 /* Resetting redisplaying_p to 0 makes sure that debug output is
295 displayed if the debugger is invoked during redisplay. */
296 debug_while_redisplaying
= redisplaying_p
;
298 specbind (intern ("debugger-may-continue"),
299 debug_while_redisplaying
? Qnil
: Qt
);
300 specbind (Qinhibit_redisplay
, Qnil
);
301 specbind (Qinhibit_debugger
, Qt
);
303 #if 0 /* Binding this prevents execution of Lisp code during
304 redisplay, which necessarily leads to display problems. */
305 specbind (Qinhibit_eval_during_redisplay
, Qt
);
308 val
= apply1 (Vdebugger
, arg
);
310 /* Interrupting redisplay and resuming it later is not safe under
311 all circumstances. So, when the debugger returns, abort the
312 interrupted redisplay by going back to the top-level. */
313 if (debug_while_redisplaying
)
316 return unbind_to (count
, val
);
320 do_debug_on_call (Lisp_Object code
, ptrdiff_t count
)
322 debug_on_next_call
= 0;
323 set_backtrace_debug_on_exit (specpdl
+ count
, true);
324 call_debugger (list1 (code
));
327 /* NOTE!!! Every function that can call EVAL must protect its args
328 and temporaries from garbage collection while it needs them.
329 The definition of `For' shows what you have to do. */
331 DEFUN ("or", For
, Sor
, 0, UNEVALLED
, 0,
332 doc
: /* Eval args until one of them yields non-nil, then return that value.
333 The remaining args are not evalled at all.
334 If all args return nil, return nil.
335 usage: (or CONDITIONS...) */)
338 Lisp_Object val
= Qnil
;
342 val
= eval_sub (XCAR (args
));
351 DEFUN ("and", Fand
, Sand
, 0, UNEVALLED
, 0,
352 doc
: /* Eval args until one of them yields nil, then return nil.
353 The remaining args are not evalled at all.
354 If no arg yields nil, return the last arg's value.
355 usage: (and CONDITIONS...) */)
358 Lisp_Object val
= Qt
;
362 val
= eval_sub (XCAR (args
));
371 DEFUN ("if", Fif
, Sif
, 2, UNEVALLED
, 0,
372 doc
: /* If COND yields non-nil, do THEN, else do ELSE...
373 Returns the value of THEN or the value of the last of the ELSE's.
374 THEN must be one expression, but ELSE... can be zero or more expressions.
375 If COND yields nil, and there are no ELSE's, the value is nil.
376 usage: (if COND THEN ELSE...) */)
381 cond
= eval_sub (XCAR (args
));
384 return eval_sub (Fcar (XCDR (args
)));
385 return Fprogn (XCDR (XCDR (args
)));
388 DEFUN ("cond", Fcond
, Scond
, 0, UNEVALLED
, 0,
389 doc
: /* Try each clause until one succeeds.
390 Each clause looks like (CONDITION BODY...). CONDITION is evaluated
391 and, if the value is non-nil, this clause succeeds:
392 then the expressions in BODY are evaluated and the last one's
393 value is the value of the cond-form.
394 If a clause has one element, as in (CONDITION), then the cond-form
395 returns CONDITION's value, if that is non-nil.
396 If no clause succeeds, cond returns nil.
397 usage: (cond CLAUSES...) */)
400 Lisp_Object val
= args
;
404 Lisp_Object clause
= XCAR (args
);
405 val
= eval_sub (Fcar (clause
));
408 if (!NILP (XCDR (clause
)))
409 val
= Fprogn (XCDR (clause
));
418 DEFUN ("progn", Fprogn
, Sprogn
, 0, UNEVALLED
, 0,
419 doc
: /* Eval BODY forms sequentially and return value of last one.
420 usage: (progn BODY...) */)
423 Lisp_Object val
= Qnil
;
427 val
= eval_sub (XCAR (body
));
434 /* Evaluate BODY sequentially, discarding its value. Suitable for
435 record_unwind_protect. */
438 unwind_body (Lisp_Object body
)
443 DEFUN ("prog1", Fprog1
, Sprog1
, 1, UNEVALLED
, 0,
444 doc
: /* Eval FIRST and BODY sequentially; return value from FIRST.
445 The value of FIRST is saved during the evaluation of the remaining args,
446 whose values are discarded.
447 usage: (prog1 FIRST BODY...) */)
451 Lisp_Object args_left
;
456 val
= eval_sub (XCAR (args_left
));
457 while (CONSP (args_left
= XCDR (args_left
)))
458 eval_sub (XCAR (args_left
));
463 DEFUN ("prog2", Fprog2
, Sprog2
, 2, UNEVALLED
, 0,
464 doc
: /* Eval FORM1, FORM2 and BODY sequentially; return value from FORM2.
465 The value of FORM2 is saved during the evaluation of the
466 remaining args, whose values are discarded.
467 usage: (prog2 FORM1 FORM2 BODY...) */)
470 eval_sub (XCAR (args
));
471 return Fprog1 (XCDR (args
));
474 DEFUN ("setq", Fsetq
, Ssetq
, 0, UNEVALLED
, 0,
475 doc
: /* Set each SYM to the value of its VAL.
476 The symbols SYM are variables; they are literal (not evaluated).
477 The values VAL are expressions; they are evaluated.
478 Thus, (setq x (1+ y)) sets `x' to the value of `(1+ y)'.
479 The second VAL is not computed until after the first SYM is set, and so on;
480 each VAL can use the new value of variables set earlier in the `setq'.
481 The return value of the `setq' form is the value of the last VAL.
482 usage: (setq [SYM VAL]...) */)
485 Lisp_Object val
, sym
, lex_binding
;
490 Lisp_Object args_left
= args
;
494 val
= eval_sub (Fcar (XCDR (args_left
)));
495 sym
= XCAR (args_left
);
497 /* Like for eval_sub, we do not check declared_special here since
498 it's been done when let-binding. */
499 if (!NILP (Vinternal_interpreter_environment
) /* Mere optimization! */
501 && !NILP (lex_binding
502 = Fassq (sym
, Vinternal_interpreter_environment
)))
503 XSETCDR (lex_binding
, val
); /* SYM is lexically bound. */
505 Fset (sym
, val
); /* SYM is dynamically bound. */
507 args_left
= Fcdr (XCDR (args_left
));
509 while (CONSP (args_left
));
515 DEFUN ("quote", Fquote
, Squote
, 1, UNEVALLED
, 0,
516 doc
: /* Return the argument, without evaluating it. `(quote x)' yields `x'.
517 Warning: `quote' does not construct its return value, but just returns
518 the value that was pre-constructed by the Lisp reader (see info node
519 `(elisp)Printed Representation').
520 This means that \\='(a . b) is not identical to (cons \\='a \\='b): the former
521 does not cons. Quoting should be reserved for constants that will
522 never be modified by side-effects, unless you like self-modifying code.
523 See the common pitfall in info node `(elisp)Rearrangement' for an example
524 of unexpected results when a quoted object is modified.
525 usage: (quote ARG) */)
528 if (CONSP (XCDR (args
)))
529 xsignal2 (Qwrong_number_of_arguments
, Qquote
, Flength (args
));
533 DEFUN ("function", Ffunction
, Sfunction
, 1, UNEVALLED
, 0,
534 doc
: /* Like `quote', but preferred for objects which are functions.
535 In byte compilation, `function' causes its argument to be compiled.
536 `quote' cannot do that.
537 usage: (function ARG) */)
540 Lisp_Object quoted
= XCAR (args
);
542 if (CONSP (XCDR (args
)))
543 xsignal2 (Qwrong_number_of_arguments
, Qfunction
, Flength (args
));
545 if (!NILP (Vinternal_interpreter_environment
)
547 && EQ (XCAR (quoted
), Qlambda
))
548 { /* This is a lambda expression within a lexical environment;
549 return an interpreted closure instead of a simple lambda. */
550 Lisp_Object cdr
= XCDR (quoted
);
551 Lisp_Object tmp
= cdr
;
553 && (tmp
= XCDR (tmp
), CONSP (tmp
))
554 && (tmp
= XCAR (tmp
), CONSP (tmp
))
555 && (EQ (QCdocumentation
, XCAR (tmp
))))
556 { /* Handle the special (:documentation <form>) to build the docstring
558 Lisp_Object docstring
= eval_sub (Fcar (XCDR (tmp
)));
559 CHECK_STRING (docstring
);
560 cdr
= Fcons (XCAR (cdr
), Fcons (docstring
, XCDR (XCDR (cdr
))));
562 return Fcons (Qclosure
, Fcons (Vinternal_interpreter_environment
,
566 /* Simply quote the argument. */
571 DEFUN ("defvaralias", Fdefvaralias
, Sdefvaralias
, 2, 3, 0,
572 doc
: /* Make NEW-ALIAS a variable alias for symbol BASE-VARIABLE.
573 Aliased variables always have the same value; setting one sets the other.
574 Third arg DOCSTRING, if non-nil, is documentation for NEW-ALIAS. If it is
575 omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
576 or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
577 itself an alias. If NEW-ALIAS is bound, and BASE-VARIABLE is not,
578 then the value of BASE-VARIABLE is set to that of NEW-ALIAS.
579 The return value is BASE-VARIABLE. */)
580 (Lisp_Object new_alias
, Lisp_Object base_variable
, Lisp_Object docstring
)
582 struct Lisp_Symbol
*sym
;
584 CHECK_SYMBOL (new_alias
);
585 CHECK_SYMBOL (base_variable
);
587 sym
= XSYMBOL (new_alias
);
590 /* Not sure why, but why not? */
591 error ("Cannot make a constant an alias");
593 switch (sym
->redirect
)
595 case SYMBOL_FORWARDED
:
596 error ("Cannot make an internal variable an alias");
597 case SYMBOL_LOCALIZED
:
598 error ("Don't know how to make a localized variable an alias");
599 case SYMBOL_PLAINVAL
:
600 case SYMBOL_VARALIAS
:
606 /* http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg00834.html
607 If n_a is bound, but b_v is not, set the value of b_v to n_a,
608 so that old-code that affects n_a before the aliasing is setup
610 if (NILP (Fboundp (base_variable
)))
611 set_internal (base_variable
, find_symbol_value (new_alias
), Qnil
, 1);
614 union specbinding
*p
;
616 for (p
= specpdl_ptr
; p
> specpdl
; )
617 if ((--p
)->kind
>= SPECPDL_LET
618 && (EQ (new_alias
, specpdl_symbol (p
))))
619 error ("Don't know how to make a let-bound variable an alias");
622 sym
->declared_special
= 1;
623 XSYMBOL (base_variable
)->declared_special
= 1;
624 sym
->redirect
= SYMBOL_VARALIAS
;
625 SET_SYMBOL_ALIAS (sym
, XSYMBOL (base_variable
));
626 sym
->constant
= SYMBOL_CONSTANT_P (base_variable
);
627 LOADHIST_ATTACH (new_alias
);
628 /* Even if docstring is nil: remove old docstring. */
629 Fput (new_alias
, Qvariable_documentation
, docstring
);
631 return base_variable
;
634 static union specbinding
*
635 default_toplevel_binding (Lisp_Object symbol
)
637 union specbinding
*binding
= NULL
;
638 union specbinding
*pdl
= specpdl_ptr
;
639 while (pdl
> specpdl
)
641 switch ((--pdl
)->kind
)
643 case SPECPDL_LET_DEFAULT
:
645 if (EQ (specpdl_symbol (pdl
), symbol
))
650 case SPECPDL_UNWIND_PTR
:
651 case SPECPDL_UNWIND_INT
:
652 case SPECPDL_UNWIND_VOID
:
653 case SPECPDL_BACKTRACE
:
654 case SPECPDL_LET_LOCAL
:
664 DEFUN ("default-toplevel-value", Fdefault_toplevel_value
, Sdefault_toplevel_value
, 1, 1, 0,
665 doc
: /* Return SYMBOL's toplevel default value.
666 "Toplevel" means outside of any let binding. */)
669 union specbinding
*binding
= default_toplevel_binding (symbol
);
671 = binding
? specpdl_old_value (binding
) : Fdefault_value (symbol
);
672 if (!EQ (value
, Qunbound
))
674 xsignal1 (Qvoid_variable
, symbol
);
677 DEFUN ("set-default-toplevel-value", Fset_default_toplevel_value
,
678 Sset_default_toplevel_value
, 2, 2, 0,
679 doc
: /* Set SYMBOL's toplevel default value to VALUE.
680 "Toplevel" means outside of any let binding. */)
681 (Lisp_Object symbol
, Lisp_Object value
)
683 union specbinding
*binding
= default_toplevel_binding (symbol
);
685 set_specpdl_old_value (binding
, value
);
687 Fset_default (symbol
, value
);
691 DEFUN ("defvar", Fdefvar
, Sdefvar
, 1, UNEVALLED
, 0,
692 doc
: /* Define SYMBOL as a variable, and return SYMBOL.
693 You are not required to define a variable in order to use it, but
694 defining it lets you supply an initial value and documentation, which
695 can be referred to by the Emacs help facilities and other programming
696 tools. The `defvar' form also declares the variable as \"special\",
697 so that it is always dynamically bound even if `lexical-binding' is t.
699 The optional argument INITVALUE is evaluated, and used to set SYMBOL,
700 only if SYMBOL's value is void. If SYMBOL is buffer-local, its
701 default value is what is set; buffer-local values are not affected.
702 If INITVALUE is missing, SYMBOL's value is not set.
704 If SYMBOL has a local binding, then this form affects the local
705 binding. This is usually not what you want. Thus, if you need to
706 load a file defining variables, with this form or with `defconst' or
707 `defcustom', you should always load that file _outside_ any bindings
708 for these variables. (`defconst' and `defcustom' behave similarly in
711 The optional argument DOCSTRING is a documentation string for the
714 To define a user option, use `defcustom' instead of `defvar'.
715 usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */)
718 Lisp_Object sym
, tem
, tail
;
725 if (CONSP (XCDR (tail
)) && CONSP (XCDR (XCDR (tail
))))
726 error ("Too many arguments");
728 tem
= Fdefault_boundp (sym
);
730 /* Do it before evaluating the initial value, for self-references. */
731 XSYMBOL (sym
)->declared_special
= 1;
734 Fset_default (sym
, eval_sub (XCAR (tail
)));
736 { /* Check if there is really a global binding rather than just a let
737 binding that shadows the global unboundness of the var. */
738 union specbinding
*binding
= default_toplevel_binding (sym
);
739 if (binding
&& EQ (specpdl_old_value (binding
), Qunbound
))
741 set_specpdl_old_value (binding
, eval_sub (XCAR (tail
)));
748 if (!NILP (Vpurify_flag
))
749 tem
= Fpurecopy (tem
);
750 Fput (sym
, Qvariable_documentation
, tem
);
752 LOADHIST_ATTACH (sym
);
754 else if (!NILP (Vinternal_interpreter_environment
)
755 && !XSYMBOL (sym
)->declared_special
)
756 /* A simple (defvar foo) with lexical scoping does "nothing" except
757 declare that var to be dynamically scoped *locally* (i.e. within
758 the current file or let-block). */
759 Vinternal_interpreter_environment
760 = Fcons (sym
, Vinternal_interpreter_environment
);
763 /* Simple (defvar <var>) should not count as a definition at all.
764 It could get in the way of other definitions, and unloading this
765 package could try to make the variable unbound. */
771 DEFUN ("defconst", Fdefconst
, Sdefconst
, 2, UNEVALLED
, 0,
772 doc
: /* Define SYMBOL as a constant variable.
773 This declares that neither programs nor users should ever change the
774 value. This constancy is not actually enforced by Emacs Lisp, but
775 SYMBOL is marked as a special variable so that it is never lexically
778 The `defconst' form always sets the value of SYMBOL to the result of
779 evalling INITVALUE. If SYMBOL is buffer-local, its default value is
780 what is set; buffer-local values are not affected. If SYMBOL has a
781 local binding, then this form sets the local binding's value.
782 However, you should normally not make local bindings for variables
783 defined with this form.
785 The optional DOCSTRING specifies the variable's documentation string.
786 usage: (defconst SYMBOL INITVALUE [DOCSTRING]) */)
789 Lisp_Object sym
, tem
;
792 if (CONSP (Fcdr (XCDR (XCDR (args
)))))
793 error ("Too many arguments");
795 tem
= eval_sub (Fcar (XCDR (args
)));
796 if (!NILP (Vpurify_flag
))
797 tem
= Fpurecopy (tem
);
798 Fset_default (sym
, tem
);
799 XSYMBOL (sym
)->declared_special
= 1;
800 tem
= Fcar (XCDR (XCDR (args
)));
803 if (!NILP (Vpurify_flag
))
804 tem
= Fpurecopy (tem
);
805 Fput (sym
, Qvariable_documentation
, tem
);
807 Fput (sym
, Qrisky_local_variable
, Qt
);
808 LOADHIST_ATTACH (sym
);
812 /* Make SYMBOL lexically scoped. */
813 DEFUN ("internal-make-var-non-special", Fmake_var_non_special
,
814 Smake_var_non_special
, 1, 1, 0,
815 doc
: /* Internal function. */)
818 CHECK_SYMBOL (symbol
);
819 XSYMBOL (symbol
)->declared_special
= 0;
824 DEFUN ("let*", FletX
, SletX
, 1, UNEVALLED
, 0,
825 doc
: /* Bind variables according to VARLIST then eval BODY.
826 The value of the last form in BODY is returned.
827 Each element of VARLIST is a symbol (which is bound to nil)
828 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
829 Each VALUEFORM can refer to the symbols already bound by this VARLIST.
830 usage: (let* VARLIST BODY...) */)
833 Lisp_Object varlist
, var
, val
, elt
, lexenv
;
834 ptrdiff_t count
= SPECPDL_INDEX ();
836 lexenv
= Vinternal_interpreter_environment
;
838 varlist
= XCAR (args
);
839 while (CONSP (varlist
))
843 elt
= XCAR (varlist
);
849 else if (! NILP (Fcdr (Fcdr (elt
))))
850 signal_error ("`let' bindings can have only one value-form", elt
);
854 val
= eval_sub (Fcar (Fcdr (elt
)));
857 if (!NILP (lexenv
) && SYMBOLP (var
)
858 && !XSYMBOL (var
)->declared_special
859 && NILP (Fmemq (var
, Vinternal_interpreter_environment
)))
860 /* Lexically bind VAR by adding it to the interpreter's binding
864 = Fcons (Fcons (var
, val
), Vinternal_interpreter_environment
);
865 if (EQ (Vinternal_interpreter_environment
, lexenv
))
866 /* Save the old lexical environment on the specpdl stack,
867 but only for the first lexical binding, since we'll never
868 need to revert to one of the intermediate ones. */
869 specbind (Qinternal_interpreter_environment
, newenv
);
871 Vinternal_interpreter_environment
= newenv
;
876 varlist
= XCDR (varlist
);
879 val
= Fprogn (XCDR (args
));
880 return unbind_to (count
, val
);
883 DEFUN ("let", Flet
, Slet
, 1, UNEVALLED
, 0,
884 doc
: /* Bind variables according to VARLIST then eval BODY.
885 The value of the last form in BODY is returned.
886 Each element of VARLIST is a symbol (which is bound to nil)
887 or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
888 All the VALUEFORMs are evalled before any symbols are bound.
889 usage: (let VARLIST BODY...) */)
892 Lisp_Object
*temps
, tem
, lexenv
;
893 Lisp_Object elt
, varlist
;
894 ptrdiff_t count
= SPECPDL_INDEX ();
898 varlist
= XCAR (args
);
900 /* Make space to hold the values to give the bound variables. */
901 elt
= Flength (varlist
);
902 SAFE_ALLOCA_LISP (temps
, XFASTINT (elt
));
904 /* Compute the values and store them in `temps'. */
906 for (argnum
= 0; CONSP (varlist
); varlist
= XCDR (varlist
))
909 elt
= XCAR (varlist
);
911 temps
[argnum
++] = Qnil
;
912 else if (! NILP (Fcdr (Fcdr (elt
))))
913 signal_error ("`let' bindings can have only one value-form", elt
);
915 temps
[argnum
++] = eval_sub (Fcar (Fcdr (elt
)));
918 lexenv
= Vinternal_interpreter_environment
;
920 varlist
= XCAR (args
);
921 for (argnum
= 0; CONSP (varlist
); varlist
= XCDR (varlist
))
925 elt
= XCAR (varlist
);
926 var
= SYMBOLP (elt
) ? elt
: Fcar (elt
);
927 tem
= temps
[argnum
++];
929 if (!NILP (lexenv
) && SYMBOLP (var
)
930 && !XSYMBOL (var
)->declared_special
931 && NILP (Fmemq (var
, Vinternal_interpreter_environment
)))
932 /* Lexically bind VAR by adding it to the lexenv alist. */
933 lexenv
= Fcons (Fcons (var
, tem
), lexenv
);
935 /* Dynamically bind VAR. */
939 if (!EQ (lexenv
, Vinternal_interpreter_environment
))
940 /* Instantiate a new lexical environment. */
941 specbind (Qinternal_interpreter_environment
, lexenv
);
943 elt
= Fprogn (XCDR (args
));
945 return unbind_to (count
, elt
);
948 DEFUN ("while", Fwhile
, Swhile
, 1, UNEVALLED
, 0,
949 doc
: /* If TEST yields non-nil, eval BODY... and repeat.
950 The order of execution is thus TEST, BODY, TEST, BODY and so on
951 until TEST returns nil.
952 usage: (while TEST BODY...) */)
955 Lisp_Object test
, body
;
959 while (!NILP (eval_sub (test
)))
968 DEFUN ("macroexpand", Fmacroexpand
, Smacroexpand
, 1, 2, 0,
969 doc
: /* Return result of expanding macros at top level of FORM.
970 If FORM is not a macro call, it is returned unchanged.
971 Otherwise, the macro is expanded and the expansion is considered
972 in place of FORM. When a non-macro-call results, it is returned.
974 The second optional arg ENVIRONMENT specifies an environment of macro
975 definitions to shadow the loaded ones for use in file byte-compilation. */)
976 (Lisp_Object form
, Lisp_Object environment
)
978 /* With cleanups from Hallvard Furuseth. */
979 register Lisp_Object expander
, sym
, def
, tem
;
983 /* Come back here each time we expand a macro call,
984 in case it expands into another macro call. */
987 /* Set SYM, give DEF and TEM right values in case SYM is not a symbol. */
988 def
= sym
= XCAR (form
);
990 /* Trace symbols aliases to other symbols
991 until we get a symbol that is not an alias. */
992 while (SYMBOLP (def
))
996 tem
= Fassq (sym
, environment
);
999 def
= XSYMBOL (sym
)->function
;
1005 /* Right now TEM is the result from SYM in ENVIRONMENT,
1006 and if TEM is nil then DEF is SYM's function definition. */
1009 /* SYM is not mentioned in ENVIRONMENT.
1010 Look at its function definition. */
1011 def
= Fautoload_do_load (def
, sym
, Qmacro
);
1013 /* Not defined or definition not suitable. */
1015 if (!EQ (XCAR (def
), Qmacro
))
1017 else expander
= XCDR (def
);
1021 expander
= XCDR (tem
);
1022 if (NILP (expander
))
1026 Lisp_Object newform
= apply1 (expander
, XCDR (form
));
1027 if (EQ (form
, newform
))
1036 DEFUN ("catch", Fcatch
, Scatch
, 1, UNEVALLED
, 0,
1037 doc
: /* Eval BODY allowing nonlocal exits using `throw'.
1038 TAG is evalled to get the tag to use; it must not be nil.
1040 Then the BODY is executed.
1041 Within BODY, a call to `throw' with the same TAG exits BODY and this `catch'.
1042 If no throw happens, `catch' returns the value of the last BODY form.
1043 If a throw happens, it specifies the value to return from `catch'.
1044 usage: (catch TAG BODY...) */)
1047 Lisp_Object tag
= eval_sub (XCAR (args
));
1048 return internal_catch (tag
, Fprogn
, XCDR (args
));
1051 /* Assert that E is true, as a comment only. Use this instead of
1052 eassert (E) when E contains variables that might be clobbered by a
1055 #define clobbered_eassert(E) ((void) 0)
1057 /* Set up a catch, then call C function FUNC on argument ARG.
1058 FUNC should return a Lisp_Object.
1059 This is how catches are done from within C code. */
1062 internal_catch (Lisp_Object tag
, Lisp_Object (*func
) (Lisp_Object
), Lisp_Object arg
)
1064 /* This structure is made part of the chain `catchlist'. */
1067 /* Fill in the components of c, and put it on the list. */
1068 PUSH_HANDLER (c
, tag
, CATCHER
);
1071 if (! sys_setjmp (c
->jmp
))
1073 Lisp_Object val
= (*func
) (arg
);
1074 clobbered_eassert (handlerlist
== c
);
1075 handlerlist
= handlerlist
->next
;
1079 { /* Throw works by a longjmp that comes right here. */
1080 Lisp_Object val
= handlerlist
->val
;
1081 clobbered_eassert (handlerlist
== c
);
1082 handlerlist
= handlerlist
->next
;
1087 /* Unwind the specbind, catch, and handler stacks back to CATCH, and
1088 jump to that CATCH, returning VALUE as the value of that catch.
1090 This is the guts of Fthrow and Fsignal; they differ only in the way
1091 they choose the catch tag to throw to. A catch tag for a
1092 condition-case form has a TAG of Qnil.
1094 Before each catch is discarded, unbind all special bindings and
1095 execute all unwind-protect clauses made above that catch. Unwind
1096 the handler stack as we go, so that the proper handlers are in
1097 effect for each unwind-protect clause we run. At the end, restore
1098 some static info saved in CATCH, and longjmp to the location
1101 This is used for correct unwinding in Fthrow and Fsignal. */
1103 static _Noreturn
void
1104 unwind_to_catch (struct handler
*catch, Lisp_Object value
)
1108 eassert (catch->next
);
1110 /* Save the value in the tag. */
1113 /* Restore certain special C variables. */
1114 set_poll_suppress_count (catch->poll_suppress_count
);
1115 unblock_input_to (catch->interrupt_input_blocked
);
1120 /* Unwind the specpdl stack, and then restore the proper set of
1122 unbind_to (handlerlist
->pdlcount
, Qnil
);
1123 last_time
= handlerlist
== catch;
1125 handlerlist
= handlerlist
->next
;
1127 while (! last_time
);
1129 eassert (handlerlist
== catch);
1131 byte_stack_list
= catch->byte_stack
;
1132 lisp_eval_depth
= catch->lisp_eval_depth
;
1134 sys_longjmp (catch->jmp
, 1);
1137 DEFUN ("throw", Fthrow
, Sthrow
, 2, 2, 0,
1138 doc
: /* Throw to the catch for TAG and return VALUE from it.
1139 Both TAG and VALUE are evalled. */
1140 attributes
: noreturn
)
1141 (register Lisp_Object tag
, Lisp_Object value
)
1146 for (c
= handlerlist
; c
; c
= c
->next
)
1148 if (c
->type
== CATCHER
&& EQ (c
->tag_or_ch
, tag
))
1149 unwind_to_catch (c
, value
);
1151 xsignal2 (Qno_catch
, tag
, value
);
1155 DEFUN ("unwind-protect", Funwind_protect
, Sunwind_protect
, 1, UNEVALLED
, 0,
1156 doc
: /* Do BODYFORM, protecting with UNWINDFORMS.
1157 If BODYFORM completes normally, its value is returned
1158 after executing the UNWINDFORMS.
1159 If BODYFORM exits nonlocally, the UNWINDFORMS are executed anyway.
1160 usage: (unwind-protect BODYFORM UNWINDFORMS...) */)
1164 ptrdiff_t count
= SPECPDL_INDEX ();
1166 record_unwind_protect (unwind_body
, XCDR (args
));
1167 val
= eval_sub (XCAR (args
));
1168 return unbind_to (count
, val
);
1171 DEFUN ("condition-case", Fcondition_case
, Scondition_case
, 2, UNEVALLED
, 0,
1172 doc
: /* Regain control when an error is signaled.
1173 Executes BODYFORM and returns its value if no error happens.
1174 Each element of HANDLERS looks like (CONDITION-NAME BODY...)
1175 where the BODY is made of Lisp expressions.
1177 A handler is applicable to an error
1178 if CONDITION-NAME is one of the error's condition names.
1179 If an error happens, the first applicable handler is run.
1181 The car of a handler may be a list of condition names instead of a
1182 single condition name; then it handles all of them. If the special
1183 condition name `debug' is present in this list, it allows another
1184 condition in the list to run the debugger if `debug-on-error' and the
1185 other usual mechanisms says it should (otherwise, `condition-case'
1186 suppresses the debugger).
1188 When a handler handles an error, control returns to the `condition-case'
1189 and it executes the handler's BODY...
1190 with VAR bound to (ERROR-SYMBOL . SIGNAL-DATA) from the error.
1191 (If VAR is nil, the handler can't access that information.)
1192 Then the value of the last BODY form is returned from the `condition-case'
1195 See also the function `signal' for more info.
1196 usage: (condition-case VAR BODYFORM &rest HANDLERS) */)
1199 Lisp_Object var
= XCAR (args
);
1200 Lisp_Object bodyform
= XCAR (XCDR (args
));
1201 Lisp_Object handlers
= XCDR (XCDR (args
));
1203 return internal_lisp_condition_case (var
, bodyform
, handlers
);
1206 /* Like Fcondition_case, but the args are separate
1207 rather than passed in a list. Used by Fbyte_code. */
1210 internal_lisp_condition_case (volatile Lisp_Object var
, Lisp_Object bodyform
,
1211 Lisp_Object handlers
)
1215 struct handler
*oldhandlerlist
= handlerlist
;
1220 for (val
= handlers
; CONSP (val
); val
= XCDR (val
))
1222 Lisp_Object tem
= XCAR (val
);
1226 && (SYMBOLP (XCAR (tem
))
1227 || CONSP (XCAR (tem
))))))
1228 error ("Invalid condition handler: %s",
1229 SDATA (Fprin1_to_string (tem
, Qt
)));
1232 { /* The first clause is the one that should be checked first, so it should
1233 be added to handlerlist last. So we build in `clauses' a table that
1234 contains `handlers' but in reverse order. SAFE_ALLOCA won't work
1235 here due to the setjmp, so impose a MAX_ALLOCA limit. */
1236 if (MAX_ALLOCA
/ word_size
< clausenb
)
1237 memory_full (SIZE_MAX
);
1238 Lisp_Object
*clauses
= alloca (clausenb
* sizeof *clauses
);
1239 Lisp_Object
*volatile clauses_volatile
= clauses
;
1241 for (val
= handlers
; CONSP (val
); val
= XCDR (val
))
1242 clauses
[--i
] = XCAR (val
);
1243 for (i
= 0; i
< clausenb
; i
++)
1245 Lisp_Object clause
= clauses
[i
];
1246 Lisp_Object condition
= XCAR (clause
);
1247 if (!CONSP (condition
))
1248 condition
= Fcons (condition
, Qnil
);
1249 PUSH_HANDLER (c
, condition
, CONDITION_CASE
);
1250 if (sys_setjmp (c
->jmp
))
1252 ptrdiff_t count
= SPECPDL_INDEX ();
1253 Lisp_Object val
= handlerlist
->val
;
1254 Lisp_Object
*chosen_clause
= clauses_volatile
;
1255 for (c
= handlerlist
->next
; c
!= oldhandlerlist
; c
= c
->next
)
1257 handlerlist
= oldhandlerlist
;
1260 if (!NILP (Vinternal_interpreter_environment
))
1261 specbind (Qinternal_interpreter_environment
,
1262 Fcons (Fcons (var
, val
),
1263 Vinternal_interpreter_environment
));
1265 specbind (var
, val
);
1267 val
= Fprogn (XCDR (*chosen_clause
));
1268 /* Note that this just undoes the binding of var; whoever
1269 longjumped to us unwound the stack to c.pdlcount before
1272 unbind_to (count
, Qnil
);
1278 val
= eval_sub (bodyform
);
1279 handlerlist
= oldhandlerlist
;
1283 /* Call the function BFUN with no arguments, catching errors within it
1284 according to HANDLERS. If there is an error, call HFUN with
1285 one argument which is the data that describes the error:
1288 HANDLERS can be a list of conditions to catch.
1289 If HANDLERS is Qt, catch all errors.
1290 If HANDLERS is Qerror, catch all errors
1291 but allow the debugger to run if that is enabled. */
1294 internal_condition_case (Lisp_Object (*bfun
) (void), Lisp_Object handlers
,
1295 Lisp_Object (*hfun
) (Lisp_Object
))
1300 PUSH_HANDLER (c
, handlers
, CONDITION_CASE
);
1301 if (sys_setjmp (c
->jmp
))
1303 Lisp_Object val
= handlerlist
->val
;
1304 clobbered_eassert (handlerlist
== c
);
1305 handlerlist
= handlerlist
->next
;
1306 return (*hfun
) (val
);
1310 clobbered_eassert (handlerlist
== c
);
1311 handlerlist
= handlerlist
->next
;
1315 /* Like internal_condition_case but call BFUN with ARG as its argument. */
1318 internal_condition_case_1 (Lisp_Object (*bfun
) (Lisp_Object
), Lisp_Object arg
,
1319 Lisp_Object handlers
, Lisp_Object (*hfun
) (Lisp_Object
))
1324 PUSH_HANDLER (c
, handlers
, CONDITION_CASE
);
1325 if (sys_setjmp (c
->jmp
))
1327 Lisp_Object val
= handlerlist
->val
;
1328 clobbered_eassert (handlerlist
== c
);
1329 handlerlist
= handlerlist
->next
;
1330 return (*hfun
) (val
);
1333 val
= (*bfun
) (arg
);
1334 clobbered_eassert (handlerlist
== c
);
1335 handlerlist
= handlerlist
->next
;
1339 /* Like internal_condition_case_1 but call BFUN with ARG1 and ARG2 as
1343 internal_condition_case_2 (Lisp_Object (*bfun
) (Lisp_Object
, Lisp_Object
),
1346 Lisp_Object handlers
,
1347 Lisp_Object (*hfun
) (Lisp_Object
))
1352 PUSH_HANDLER (c
, handlers
, CONDITION_CASE
);
1353 if (sys_setjmp (c
->jmp
))
1355 Lisp_Object val
= handlerlist
->val
;
1356 clobbered_eassert (handlerlist
== c
);
1357 handlerlist
= handlerlist
->next
;
1358 return (*hfun
) (val
);
1361 val
= (*bfun
) (arg1
, arg2
);
1362 clobbered_eassert (handlerlist
== c
);
1363 handlerlist
= handlerlist
->next
;
1367 /* Like internal_condition_case but call BFUN with NARGS as first,
1368 and ARGS as second argument. */
1371 internal_condition_case_n (Lisp_Object (*bfun
) (ptrdiff_t, Lisp_Object
*),
1374 Lisp_Object handlers
,
1375 Lisp_Object (*hfun
) (Lisp_Object err
,
1382 PUSH_HANDLER (c
, handlers
, CONDITION_CASE
);
1383 if (sys_setjmp (c
->jmp
))
1385 Lisp_Object val
= handlerlist
->val
;
1386 clobbered_eassert (handlerlist
== c
);
1387 handlerlist
= handlerlist
->next
;
1388 return (*hfun
) (val
, nargs
, args
);
1391 val
= (*bfun
) (nargs
, args
);
1392 clobbered_eassert (handlerlist
== c
);
1393 handlerlist
= handlerlist
->next
;
1398 static Lisp_Object
find_handler_clause (Lisp_Object
, Lisp_Object
);
1399 static bool maybe_call_debugger (Lisp_Object conditions
, Lisp_Object sig
,
1403 process_quit_flag (void)
1405 Lisp_Object flag
= Vquit_flag
;
1407 if (EQ (flag
, Qkill_emacs
))
1409 if (EQ (Vthrow_on_input
, flag
))
1410 Fthrow (Vthrow_on_input
, Qt
);
1411 Fsignal (Qquit
, Qnil
);
1414 DEFUN ("signal", Fsignal
, Ssignal
, 2, 2, 0,
1415 doc
: /* Signal an error. Args are ERROR-SYMBOL and associated DATA.
1416 This function does not return.
1418 An error symbol is a symbol with an `error-conditions' property
1419 that is a list of condition names.
1420 A handler for any of those names will get to handle this signal.
1421 The symbol `error' should normally be one of them.
1423 DATA should be a list. Its elements are printed as part of the error message.
1424 See Info anchor `(elisp)Definition of signal' for some details on how this
1425 error message is constructed.
1426 If the signal is handled, DATA is made available to the handler.
1427 See also the function `condition-case'. */)
1428 (Lisp_Object error_symbol
, Lisp_Object data
)
1430 /* When memory is full, ERROR-SYMBOL is nil,
1431 and DATA is (REAL-ERROR-SYMBOL . REAL-DATA).
1432 That is a special case--don't do this in other situations. */
1433 Lisp_Object conditions
;
1435 Lisp_Object real_error_symbol
1436 = (NILP (error_symbol
) ? Fcar (data
) : error_symbol
);
1437 register Lisp_Object clause
= Qnil
;
1442 if (gc_in_progress
|| waiting_for_input
)
1445 #if 0 /* rms: I don't know why this was here,
1446 but it is surely wrong for an error that is handled. */
1447 #ifdef HAVE_WINDOW_SYSTEM
1448 if (display_hourglass_p
)
1449 cancel_hourglass ();
1453 /* This hook is used by edebug. */
1454 if (! NILP (Vsignal_hook_function
)
1455 && ! NILP (error_symbol
))
1457 /* Edebug takes care of restoring these variables when it exits. */
1458 if (lisp_eval_depth
+ 20 > max_lisp_eval_depth
)
1459 max_lisp_eval_depth
= lisp_eval_depth
+ 20;
1461 if (SPECPDL_INDEX () + 40 > max_specpdl_size
)
1462 max_specpdl_size
= SPECPDL_INDEX () + 40;
1464 call2 (Vsignal_hook_function
, error_symbol
, data
);
1467 conditions
= Fget (real_error_symbol
, Qerror_conditions
);
1469 /* Remember from where signal was called. Skip over the frame for
1470 `signal' itself. If a frame for `error' follows, skip that,
1471 too. Don't do this when ERROR_SYMBOL is nil, because that
1472 is a memory-full error. */
1473 Vsignaling_function
= Qnil
;
1474 if (!NILP (error_symbol
))
1476 union specbinding
*pdl
= backtrace_next (backtrace_top ());
1477 if (backtrace_p (pdl
) && EQ (backtrace_function (pdl
), Qerror
))
1478 pdl
= backtrace_next (pdl
);
1479 if (backtrace_p (pdl
))
1480 Vsignaling_function
= backtrace_function (pdl
);
1483 for (h
= handlerlist
; h
; h
= h
->next
)
1485 if (h
->type
!= CONDITION_CASE
)
1487 clause
= find_handler_clause (h
->tag_or_ch
, conditions
);
1492 if (/* Don't run the debugger for a memory-full error.
1493 (There is no room in memory to do that!) */
1494 !NILP (error_symbol
)
1495 && (!NILP (Vdebug_on_signal
)
1496 /* If no handler is present now, try to run the debugger. */
1498 /* A `debug' symbol in the handler list disables the normal
1499 suppression of the debugger. */
1500 || (CONSP (clause
) && !NILP (Fmemq (Qdebug
, clause
)))
1501 /* Special handler that means "print a message and run debugger
1503 || EQ (h
->tag_or_ch
, Qerror
)))
1505 bool debugger_called
1506 = maybe_call_debugger (conditions
, error_symbol
, data
);
1507 /* We can't return values to code which signaled an error, but we
1508 can continue code which has signaled a quit. */
1509 if (debugger_called
&& EQ (real_error_symbol
, Qquit
))
1515 Lisp_Object unwind_data
1516 = (NILP (error_symbol
) ? data
: Fcons (error_symbol
, data
));
1518 unwind_to_catch (h
, unwind_data
);
1522 if (handlerlist
!= &handlerlist_sentinel
)
1523 /* FIXME: This will come right back here if there's no `top-level'
1524 catcher. A better solution would be to abort here, and instead
1525 add a catch-all condition handler so we never come here. */
1526 Fthrow (Qtop_level
, Qt
);
1529 if (! NILP (error_symbol
))
1530 data
= Fcons (error_symbol
, data
);
1532 string
= Ferror_message_string (data
);
1533 fatal ("%s", SDATA (string
));
1536 /* Internal version of Fsignal that never returns.
1537 Used for anything but Qquit (which can return from Fsignal). */
1540 xsignal (Lisp_Object error_symbol
, Lisp_Object data
)
1542 Fsignal (error_symbol
, data
);
1546 /* Like xsignal, but takes 0, 1, 2, or 3 args instead of a list. */
1549 xsignal0 (Lisp_Object error_symbol
)
1551 xsignal (error_symbol
, Qnil
);
1555 xsignal1 (Lisp_Object error_symbol
, Lisp_Object arg
)
1557 xsignal (error_symbol
, list1 (arg
));
1561 xsignal2 (Lisp_Object error_symbol
, Lisp_Object arg1
, Lisp_Object arg2
)
1563 xsignal (error_symbol
, list2 (arg1
, arg2
));
1567 xsignal3 (Lisp_Object error_symbol
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
)
1569 xsignal (error_symbol
, list3 (arg1
, arg2
, arg3
));
1572 /* Signal `error' with message S, and additional arg ARG.
1573 If ARG is not a genuine list, make it a one-element list. */
1576 signal_error (const char *s
, Lisp_Object arg
)
1578 Lisp_Object tortoise
, hare
;
1580 hare
= tortoise
= arg
;
1581 while (CONSP (hare
))
1588 tortoise
= XCDR (tortoise
);
1590 if (EQ (hare
, tortoise
))
1597 xsignal (Qerror
, Fcons (build_string (s
), arg
));
1601 /* Return true if LIST is a non-nil atom or
1602 a list containing one of CONDITIONS. */
1605 wants_debugger (Lisp_Object list
, Lisp_Object conditions
)
1612 while (CONSP (conditions
))
1614 Lisp_Object
this, tail
;
1615 this = XCAR (conditions
);
1616 for (tail
= list
; CONSP (tail
); tail
= XCDR (tail
))
1617 if (EQ (XCAR (tail
), this))
1619 conditions
= XCDR (conditions
);
1624 /* Return true if an error with condition-symbols CONDITIONS,
1625 and described by SIGNAL-DATA, should skip the debugger
1626 according to debugger-ignored-errors. */
1629 skip_debugger (Lisp_Object conditions
, Lisp_Object data
)
1632 bool first_string
= 1;
1633 Lisp_Object error_message
;
1635 error_message
= Qnil
;
1636 for (tail
= Vdebug_ignored_errors
; CONSP (tail
); tail
= XCDR (tail
))
1638 if (STRINGP (XCAR (tail
)))
1642 error_message
= Ferror_message_string (data
);
1646 if (fast_string_match (XCAR (tail
), error_message
) >= 0)
1651 Lisp_Object contail
;
1653 for (contail
= conditions
; CONSP (contail
); contail
= XCDR (contail
))
1654 if (EQ (XCAR (tail
), XCAR (contail
)))
1662 /* Call the debugger if calling it is currently enabled for CONDITIONS.
1663 SIG and DATA describe the signal. There are two ways to pass them:
1664 = SIG is the error symbol, and DATA is the rest of the data.
1665 = SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
1666 This is for memory-full errors only. */
1668 maybe_call_debugger (Lisp_Object conditions
, Lisp_Object sig
, Lisp_Object data
)
1670 Lisp_Object combined_data
;
1672 combined_data
= Fcons (sig
, data
);
1675 /* Don't try to run the debugger with interrupts blocked.
1676 The editing loop would return anyway. */
1677 ! input_blocked_p ()
1678 && NILP (Vinhibit_debugger
)
1679 /* Does user want to enter debugger for this kind of error? */
1682 : wants_debugger (Vdebug_on_error
, conditions
))
1683 && ! skip_debugger (conditions
, combined_data
)
1684 /* RMS: What's this for? */
1685 && when_entered_debugger
< num_nonmacro_input_events
)
1687 call_debugger (list2 (Qerror
, combined_data
));
1695 find_handler_clause (Lisp_Object handlers
, Lisp_Object conditions
)
1697 register Lisp_Object h
;
1699 /* t is used by handlers for all conditions, set up by C code. */
1700 if (EQ (handlers
, Qt
))
1703 /* error is used similarly, but means print an error message
1704 and run the debugger if that is enabled. */
1705 if (EQ (handlers
, Qerror
))
1708 for (h
= handlers
; CONSP (h
); h
= XCDR (h
))
1710 Lisp_Object handler
= XCAR (h
);
1711 if (!NILP (Fmemq (handler
, conditions
)))
1719 /* Dump an error message; called like vprintf. */
1721 verror (const char *m
, va_list ap
)
1724 ptrdiff_t size
= sizeof buf
;
1725 ptrdiff_t size_max
= STRING_BYTES_BOUND
+ 1;
1730 used
= evxprintf (&buffer
, &size
, buf
, size_max
, m
, ap
);
1731 string
= make_string (buffer
, used
);
1735 xsignal1 (Qerror
, string
);
1739 /* Dump an error message; called like printf. */
1743 error (const char *m
, ...)
1750 DEFUN ("commandp", Fcommandp
, Scommandp
, 1, 2, 0,
1751 doc
: /* Non-nil if FUNCTION makes provisions for interactive calling.
1752 This means it contains a description for how to read arguments to give it.
1753 The value is nil for an invalid function or a symbol with no function
1756 Interactively callable functions include strings and vectors (treated
1757 as keyboard macros), lambda-expressions that contain a top-level call
1758 to `interactive', autoload definitions made by `autoload' with non-nil
1759 fourth argument, and some of the built-in functions of Lisp.
1761 Also, a symbol satisfies `commandp' if its function definition does so.
1763 If the optional argument FOR-CALL-INTERACTIVELY is non-nil,
1764 then strings and vectors are not accepted. */)
1765 (Lisp_Object function
, Lisp_Object for_call_interactively
)
1767 register Lisp_Object fun
;
1768 register Lisp_Object funcar
;
1769 Lisp_Object if_prop
= Qnil
;
1773 fun
= indirect_function (fun
); /* Check cycles. */
1777 /* Check an `interactive-form' property if present, analogous to the
1778 function-documentation property. */
1780 while (SYMBOLP (fun
))
1782 Lisp_Object tmp
= Fget (fun
, Qinteractive_form
);
1785 fun
= Fsymbol_function (fun
);
1788 /* Emacs primitives are interactive if their DEFUN specifies an
1789 interactive spec. */
1791 return XSUBR (fun
)->intspec
? Qt
: if_prop
;
1793 /* Bytecode objects are interactive if they are long enough to
1794 have an element whose index is COMPILED_INTERACTIVE, which is
1795 where the interactive spec is stored. */
1796 else if (COMPILEDP (fun
))
1797 return ((ASIZE (fun
) & PSEUDOVECTOR_SIZE_MASK
) > COMPILED_INTERACTIVE
1800 /* Strings and vectors are keyboard macros. */
1801 if (STRINGP (fun
) || VECTORP (fun
))
1802 return (NILP (for_call_interactively
) ? Qt
: Qnil
);
1804 /* Lists may represent commands. */
1807 funcar
= XCAR (fun
);
1808 if (EQ (funcar
, Qclosure
))
1809 return (!NILP (Fassq (Qinteractive
, Fcdr (Fcdr (XCDR (fun
)))))
1811 else if (EQ (funcar
, Qlambda
))
1812 return !NILP (Fassq (Qinteractive
, Fcdr (XCDR (fun
)))) ? Qt
: if_prop
;
1813 else if (EQ (funcar
, Qautoload
))
1814 return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun
))))) ? Qt
: if_prop
;
1819 DEFUN ("autoload", Fautoload
, Sautoload
, 2, 5, 0,
1820 doc
: /* Define FUNCTION to autoload from FILE.
1821 FUNCTION is a symbol; FILE is a file name string to pass to `load'.
1822 Third arg DOCSTRING is documentation for the function.
1823 Fourth arg INTERACTIVE if non-nil says function can be called interactively.
1824 Fifth arg TYPE indicates the type of the object:
1825 nil or omitted says FUNCTION is a function,
1826 `keymap' says FUNCTION is really a keymap, and
1827 `macro' or t says FUNCTION is really a macro.
1828 Third through fifth args give info about the real definition.
1829 They default to nil.
1830 If FUNCTION is already defined other than as an autoload,
1831 this does nothing and returns nil. */)
1832 (Lisp_Object function
, Lisp_Object file
, Lisp_Object docstring
, Lisp_Object interactive
, Lisp_Object type
)
1834 CHECK_SYMBOL (function
);
1835 CHECK_STRING (file
);
1837 /* If function is defined and not as an autoload, don't override. */
1838 if (!NILP (XSYMBOL (function
)->function
)
1839 && !AUTOLOADP (XSYMBOL (function
)->function
))
1842 if (!NILP (Vpurify_flag
) && EQ (docstring
, make_number (0)))
1843 /* `read1' in lread.c has found the docstring starting with "\
1844 and assumed the docstring will be provided by Snarf-documentation, so it
1845 passed us 0 instead. But that leads to accidental sharing in purecopy's
1846 hash-consing, so we use a (hopefully) unique integer instead. */
1847 docstring
= make_number (XHASH (function
));
1848 return Fdefalias (function
,
1849 list5 (Qautoload
, file
, docstring
, interactive
, type
),
1854 un_autoload (Lisp_Object oldqueue
)
1856 Lisp_Object queue
, first
, second
;
1858 /* Queue to unwind is current value of Vautoload_queue.
1859 oldqueue is the shadowed value to leave in Vautoload_queue. */
1860 queue
= Vautoload_queue
;
1861 Vautoload_queue
= oldqueue
;
1862 while (CONSP (queue
))
1864 first
= XCAR (queue
);
1865 second
= Fcdr (first
);
1866 first
= Fcar (first
);
1867 if (EQ (first
, make_number (0)))
1870 Ffset (first
, second
);
1871 queue
= XCDR (queue
);
1875 /* Load an autoloaded function.
1876 FUNNAME is the symbol which is the function's name.
1877 FUNDEF is the autoload definition (a list). */
1879 DEFUN ("autoload-do-load", Fautoload_do_load
, Sautoload_do_load
, 1, 3, 0,
1880 doc
: /* Load FUNDEF which should be an autoload.
1881 If non-nil, FUNNAME should be the symbol whose function value is FUNDEF,
1882 in which case the function returns the new autoloaded function value.
1883 If equal to `macro', MACRO-ONLY specifies that FUNDEF should only be loaded if
1884 it defines a macro. */)
1885 (Lisp_Object fundef
, Lisp_Object funname
, Lisp_Object macro_only
)
1887 ptrdiff_t count
= SPECPDL_INDEX ();
1889 if (!CONSP (fundef
) || !EQ (Qautoload
, XCAR (fundef
)))
1892 if (EQ (macro_only
, Qmacro
))
1894 Lisp_Object kind
= Fnth (make_number (4), fundef
);
1895 if (! (EQ (kind
, Qt
) || EQ (kind
, Qmacro
)))
1899 /* This is to make sure that loadup.el gives a clear picture
1900 of what files are preloaded and when. */
1901 if (! NILP (Vpurify_flag
))
1902 error ("Attempt to autoload %s while preparing to dump",
1903 SDATA (SYMBOL_NAME (funname
)));
1905 CHECK_SYMBOL (funname
);
1907 /* Preserve the match data. */
1908 record_unwind_save_match_data ();
1910 /* If autoloading gets an error (which includes the error of failing
1911 to define the function being called), we use Vautoload_queue
1912 to undo function definitions and `provide' calls made by
1913 the function. We do this in the specific case of autoloading
1914 because autoloading is not an explicit request "load this file",
1915 but rather a request to "call this function".
1917 The value saved here is to be restored into Vautoload_queue. */
1918 record_unwind_protect (un_autoload
, Vautoload_queue
);
1919 Vautoload_queue
= Qt
;
1920 /* If `macro_only', assume this autoload to be a "best-effort",
1921 so don't signal an error if autoloading fails. */
1922 Fload (Fcar (Fcdr (fundef
)), macro_only
, Qt
, Qnil
, Qt
);
1924 /* Once loading finishes, don't undo it. */
1925 Vautoload_queue
= Qt
;
1926 unbind_to (count
, Qnil
);
1932 Lisp_Object fun
= Findirect_function (funname
, Qnil
);
1934 if (!NILP (Fequal (fun
, fundef
)))
1935 error ("Autoloading failed to define function %s",
1936 SDATA (SYMBOL_NAME (funname
)));
1943 DEFUN ("eval", Feval
, Seval
, 1, 2, 0,
1944 doc
: /* Evaluate FORM and return its value.
1945 If LEXICAL is t, evaluate using lexical scoping.
1946 LEXICAL can also be an actual lexical environment, in the form of an
1947 alist mapping symbols to their value. */)
1948 (Lisp_Object form
, Lisp_Object lexical
)
1950 ptrdiff_t count
= SPECPDL_INDEX ();
1951 specbind (Qinternal_interpreter_environment
,
1952 CONSP (lexical
) || NILP (lexical
) ? lexical
: list1 (Qt
));
1953 return unbind_to (count
, eval_sub (form
));
1956 /* Grow the specpdl stack by one entry.
1957 The caller should have already initialized the entry.
1958 Signal an error on stack overflow.
1960 Make sure that there is always one unused entry past the top of the
1961 stack, so that the just-initialized entry is safely unwound if
1962 memory exhausted and an error is signaled here. Also, allocate a
1963 never-used entry just before the bottom of the stack; sometimes its
1964 address is taken. */
1971 if (specpdl_ptr
== specpdl
+ specpdl_size
)
1973 ptrdiff_t count
= SPECPDL_INDEX ();
1974 ptrdiff_t max_size
= min (max_specpdl_size
, PTRDIFF_MAX
- 1000);
1975 union specbinding
*pdlvec
= specpdl
- 1;
1976 ptrdiff_t pdlvecsize
= specpdl_size
+ 1;
1977 if (max_size
<= specpdl_size
)
1979 if (max_specpdl_size
< 400)
1980 max_size
= max_specpdl_size
= 400;
1981 if (max_size
<= specpdl_size
)
1982 signal_error ("Variable binding depth exceeds max-specpdl-size",
1985 pdlvec
= xpalloc (pdlvec
, &pdlvecsize
, 1, max_size
+ 1, sizeof *specpdl
);
1986 specpdl
= pdlvec
+ 1;
1987 specpdl_size
= pdlvecsize
- 1;
1988 specpdl_ptr
= specpdl
+ count
;
1993 record_in_backtrace (Lisp_Object function
, Lisp_Object
*args
, ptrdiff_t nargs
)
1995 ptrdiff_t count
= SPECPDL_INDEX ();
1997 eassert (nargs
>= UNEVALLED
);
1998 specpdl_ptr
->bt
.kind
= SPECPDL_BACKTRACE
;
1999 specpdl_ptr
->bt
.debug_on_exit
= false;
2000 specpdl_ptr
->bt
.function
= function
;
2001 specpdl_ptr
->bt
.args
= args
;
2002 specpdl_ptr
->bt
.nargs
= nargs
;
2008 /* Eval a sub-expression of the current expression (i.e. in the same
2011 eval_sub (Lisp_Object form
)
2013 Lisp_Object fun
, val
, original_fun
, original_args
;
2019 /* Look up its binding in the lexical environment.
2020 We do not pay attention to the declared_special flag here, since we
2021 already did that when let-binding the variable. */
2022 Lisp_Object lex_binding
2023 = !NILP (Vinternal_interpreter_environment
) /* Mere optimization! */
2024 ? Fassq (form
, Vinternal_interpreter_environment
)
2026 if (CONSP (lex_binding
))
2027 return XCDR (lex_binding
);
2029 return Fsymbol_value (form
);
2039 if (++lisp_eval_depth
> max_lisp_eval_depth
)
2041 if (max_lisp_eval_depth
< 100)
2042 max_lisp_eval_depth
= 100;
2043 if (lisp_eval_depth
> max_lisp_eval_depth
)
2044 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
2047 original_fun
= XCAR (form
);
2048 original_args
= XCDR (form
);
2050 /* This also protects them from gc. */
2051 count
= record_in_backtrace (original_fun
, &original_args
, UNEVALLED
);
2053 if (debug_on_next_call
)
2054 do_debug_on_call (Qt
, count
);
2056 /* At this point, only original_fun and original_args
2057 have values that will be used below. */
2060 /* Optimize for no indirection. */
2063 fun
= Ffunction (Fcons (fun
, Qnil
));
2064 else if (!NILP (fun
) && (fun
= XSYMBOL (fun
)->function
, SYMBOLP (fun
)))
2065 fun
= indirect_function (fun
);
2069 Lisp_Object numargs
;
2070 Lisp_Object argvals
[8];
2071 Lisp_Object args_left
;
2072 register int i
, maxargs
;
2074 args_left
= original_args
;
2075 numargs
= Flength (args_left
);
2079 if (XINT (numargs
) < XSUBR (fun
)->min_args
2080 || (XSUBR (fun
)->max_args
>= 0
2081 && XSUBR (fun
)->max_args
< XINT (numargs
)))
2082 xsignal2 (Qwrong_number_of_arguments
, original_fun
, numargs
);
2084 else if (XSUBR (fun
)->max_args
== UNEVALLED
)
2085 val
= (XSUBR (fun
)->function
.aUNEVALLED
) (args_left
);
2086 else if (XSUBR (fun
)->max_args
== MANY
)
2088 /* Pass a vector of evaluated arguments. */
2090 ptrdiff_t argnum
= 0;
2093 SAFE_ALLOCA_LISP (vals
, XINT (numargs
));
2095 while (!NILP (args_left
))
2097 vals
[argnum
++] = eval_sub (Fcar (args_left
));
2098 args_left
= Fcdr (args_left
);
2101 set_backtrace_args (specpdl
+ count
, vals
, XINT (numargs
));
2103 val
= (XSUBR (fun
)->function
.aMANY
) (XINT (numargs
), vals
);
2108 maxargs
= XSUBR (fun
)->max_args
;
2109 for (i
= 0; i
< maxargs
; i
++)
2111 argvals
[i
] = eval_sub (Fcar (args_left
));
2112 args_left
= Fcdr (args_left
);
2115 set_backtrace_args (specpdl
+ count
, argvals
, XINT (numargs
));
2120 val
= (XSUBR (fun
)->function
.a0 ());
2123 val
= (XSUBR (fun
)->function
.a1 (argvals
[0]));
2126 val
= (XSUBR (fun
)->function
.a2 (argvals
[0], argvals
[1]));
2129 val
= (XSUBR (fun
)->function
.a3
2130 (argvals
[0], argvals
[1], argvals
[2]));
2133 val
= (XSUBR (fun
)->function
.a4
2134 (argvals
[0], argvals
[1], argvals
[2], argvals
[3]));
2137 val
= (XSUBR (fun
)->function
.a5
2138 (argvals
[0], argvals
[1], argvals
[2], argvals
[3],
2142 val
= (XSUBR (fun
)->function
.a6
2143 (argvals
[0], argvals
[1], argvals
[2], argvals
[3],
2144 argvals
[4], argvals
[5]));
2147 val
= (XSUBR (fun
)->function
.a7
2148 (argvals
[0], argvals
[1], argvals
[2], argvals
[3],
2149 argvals
[4], argvals
[5], argvals
[6]));
2153 val
= (XSUBR (fun
)->function
.a8
2154 (argvals
[0], argvals
[1], argvals
[2], argvals
[3],
2155 argvals
[4], argvals
[5], argvals
[6], argvals
[7]));
2159 /* Someone has created a subr that takes more arguments than
2160 is supported by this code. We need to either rewrite the
2161 subr to use a different argument protocol, or add more
2162 cases to this switch. */
2167 else if (COMPILEDP (fun
))
2168 val
= apply_lambda (fun
, original_args
, count
);
2172 xsignal1 (Qvoid_function
, original_fun
);
2174 xsignal1 (Qinvalid_function
, original_fun
);
2175 funcar
= XCAR (fun
);
2176 if (!SYMBOLP (funcar
))
2177 xsignal1 (Qinvalid_function
, original_fun
);
2178 if (EQ (funcar
, Qautoload
))
2180 Fautoload_do_load (fun
, original_fun
, Qnil
);
2183 if (EQ (funcar
, Qmacro
))
2185 ptrdiff_t count1
= SPECPDL_INDEX ();
2187 /* Bind lexical-binding during expansion of the macro, so the
2188 macro can know reliably if the code it outputs will be
2189 interpreted using lexical-binding or not. */
2190 specbind (Qlexical_binding
,
2191 NILP (Vinternal_interpreter_environment
) ? Qnil
: Qt
);
2192 exp
= apply1 (Fcdr (fun
), original_args
);
2193 unbind_to (count1
, Qnil
);
2194 val
= eval_sub (exp
);
2196 else if (EQ (funcar
, Qlambda
)
2197 || EQ (funcar
, Qclosure
))
2198 val
= apply_lambda (fun
, original_args
, count
);
2200 xsignal1 (Qinvalid_function
, original_fun
);
2205 if (backtrace_debug_on_exit (specpdl
+ count
))
2206 val
= call_debugger (list2 (Qexit
, val
));
2212 DEFUN ("apply", Fapply
, Sapply
, 1, MANY
, 0,
2213 doc
: /* Call FUNCTION with our remaining args, using our last arg as list of args.
2214 Then return the value FUNCTION returns.
2215 Thus, (apply \\='+ 1 2 \\='(3 4)) returns 10.
2216 usage: (apply FUNCTION &rest ARGUMENTS) */)
2217 (ptrdiff_t nargs
, Lisp_Object
*args
)
2219 ptrdiff_t i
, numargs
, funcall_nargs
;
2220 register Lisp_Object
*funcall_args
= NULL
;
2221 register Lisp_Object spread_arg
= args
[nargs
- 1];
2222 Lisp_Object fun
= args
[0];
2226 CHECK_LIST (spread_arg
);
2228 numargs
= XINT (Flength (spread_arg
));
2231 return Ffuncall (nargs
- 1, args
);
2232 else if (numargs
== 1)
2234 args
[nargs
- 1] = XCAR (spread_arg
);
2235 return Ffuncall (nargs
, args
);
2238 numargs
+= nargs
- 2;
2240 /* Optimize for no indirection. */
2241 if (SYMBOLP (fun
) && !NILP (fun
)
2242 && (fun
= XSYMBOL (fun
)->function
, SYMBOLP (fun
)))
2244 fun
= indirect_function (fun
);
2246 /* Let funcall get the error. */
2250 if (SUBRP (fun
) && XSUBR (fun
)->max_args
> numargs
2251 /* Don't hide an error by adding missing arguments. */
2252 && numargs
>= XSUBR (fun
)->min_args
)
2254 /* Avoid making funcall cons up a yet another new vector of arguments
2255 by explicitly supplying nil's for optional values. */
2256 SAFE_ALLOCA_LISP (funcall_args
, 1 + XSUBR (fun
)->max_args
);
2257 memclear (funcall_args
+ numargs
+ 1,
2258 (XSUBR (fun
)->max_args
- numargs
) * word_size
);
2259 funcall_nargs
= 1 + XSUBR (fun
)->max_args
;
2262 { /* We add 1 to numargs because funcall_args includes the
2263 function itself as well as its arguments. */
2264 SAFE_ALLOCA_LISP (funcall_args
, 1 + numargs
);
2265 funcall_nargs
= 1 + numargs
;
2268 memcpy (funcall_args
, args
, nargs
* word_size
);
2269 /* Spread the last arg we got. Its first element goes in
2270 the slot that it used to occupy, hence this value of I. */
2272 while (!NILP (spread_arg
))
2274 funcall_args
[i
++] = XCAR (spread_arg
);
2275 spread_arg
= XCDR (spread_arg
);
2278 retval
= Ffuncall (funcall_nargs
, funcall_args
);
2284 /* Run hook variables in various ways. */
2287 funcall_nil (ptrdiff_t nargs
, Lisp_Object
*args
)
2289 Ffuncall (nargs
, args
);
2293 DEFUN ("run-hooks", Frun_hooks
, Srun_hooks
, 0, MANY
, 0,
2294 doc
: /* Run each hook in HOOKS.
2295 Each argument should be a symbol, a hook variable.
2296 These symbols are processed in the order specified.
2297 If a hook symbol has a non-nil value, that value may be a function
2298 or a list of functions to be called to run the hook.
2299 If the value is a function, it is called with no arguments.
2300 If it is a list, the elements are called, in order, with no arguments.
2302 Major modes should not use this function directly to run their mode
2303 hook; they should use `run-mode-hooks' instead.
2305 Do not use `make-local-variable' to make a hook variable buffer-local.
2306 Instead, use `add-hook' and specify t for the LOCAL argument.
2307 usage: (run-hooks &rest HOOKS) */)
2308 (ptrdiff_t nargs
, Lisp_Object
*args
)
2312 for (i
= 0; i
< nargs
; i
++)
2318 DEFUN ("run-hook-with-args", Frun_hook_with_args
,
2319 Srun_hook_with_args
, 1, MANY
, 0,
2320 doc
: /* Run HOOK with the specified arguments ARGS.
2321 HOOK should be a symbol, a hook variable. The value of HOOK
2322 may be nil, a function, or a list of functions. Call each
2323 function in order with arguments ARGS. The final return value
2326 Do not use `make-local-variable' to make a hook variable buffer-local.
2327 Instead, use `add-hook' and specify t for the LOCAL argument.
2328 usage: (run-hook-with-args HOOK &rest ARGS) */)
2329 (ptrdiff_t nargs
, Lisp_Object
*args
)
2331 return run_hook_with_args (nargs
, args
, funcall_nil
);
2334 /* NB this one still documents a specific non-nil return value.
2335 (As did run-hook-with-args and run-hook-with-args-until-failure
2336 until they were changed in 24.1.) */
2337 DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success
,
2338 Srun_hook_with_args_until_success
, 1, MANY
, 0,
2339 doc
: /* Run HOOK with the specified arguments ARGS.
2340 HOOK should be a symbol, a hook variable. The value of HOOK
2341 may be nil, a function, or a list of functions. Call each
2342 function in order with arguments ARGS, stopping at the first
2343 one that returns non-nil, and return that value. Otherwise (if
2344 all functions return nil, or if there are no functions to call),
2347 Do not use `make-local-variable' to make a hook variable buffer-local.
2348 Instead, use `add-hook' and specify t for the LOCAL argument.
2349 usage: (run-hook-with-args-until-success HOOK &rest ARGS) */)
2350 (ptrdiff_t nargs
, Lisp_Object
*args
)
2352 return run_hook_with_args (nargs
, args
, Ffuncall
);
2356 funcall_not (ptrdiff_t nargs
, Lisp_Object
*args
)
2358 return NILP (Ffuncall (nargs
, args
)) ? Qt
: Qnil
;
2361 DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure
,
2362 Srun_hook_with_args_until_failure
, 1, MANY
, 0,
2363 doc
: /* Run HOOK with the specified arguments ARGS.
2364 HOOK should be a symbol, a hook variable. The value of HOOK
2365 may be nil, a function, or a list of functions. Call each
2366 function in order with arguments ARGS, stopping at the first
2367 one that returns nil, and return nil. Otherwise (if all functions
2368 return non-nil, or if there are no functions to call), return non-nil
2369 (do not rely on the precise return value in this case).
2371 Do not use `make-local-variable' to make a hook variable buffer-local.
2372 Instead, use `add-hook' and specify t for the LOCAL argument.
2373 usage: (run-hook-with-args-until-failure HOOK &rest ARGS) */)
2374 (ptrdiff_t nargs
, Lisp_Object
*args
)
2376 return NILP (run_hook_with_args (nargs
, args
, funcall_not
)) ? Qt
: Qnil
;
2380 run_hook_wrapped_funcall (ptrdiff_t nargs
, Lisp_Object
*args
)
2382 Lisp_Object tmp
= args
[0], ret
;
2385 ret
= Ffuncall (nargs
, args
);
2391 DEFUN ("run-hook-wrapped", Frun_hook_wrapped
, Srun_hook_wrapped
, 2, MANY
, 0,
2392 doc
: /* Run HOOK, passing each function through WRAP-FUNCTION.
2393 I.e. instead of calling each function FUN directly with arguments ARGS,
2394 it calls WRAP-FUNCTION with arguments FUN and ARGS.
2395 As soon as a call to WRAP-FUNCTION returns non-nil, `run-hook-wrapped'
2396 aborts and returns that value.
2397 usage: (run-hook-wrapped HOOK WRAP-FUNCTION &rest ARGS) */)
2398 (ptrdiff_t nargs
, Lisp_Object
*args
)
2400 return run_hook_with_args (nargs
, args
, run_hook_wrapped_funcall
);
2403 /* ARGS[0] should be a hook symbol.
2404 Call each of the functions in the hook value, passing each of them
2405 as arguments all the rest of ARGS (all NARGS - 1 elements).
2406 FUNCALL specifies how to call each function on the hook. */
2409 run_hook_with_args (ptrdiff_t nargs
, Lisp_Object
*args
,
2410 Lisp_Object (*funcall
) (ptrdiff_t nargs
, Lisp_Object
*args
))
2412 Lisp_Object sym
, val
, ret
= Qnil
;
2414 /* If we are dying or still initializing,
2415 don't do anything--it would probably crash if we tried. */
2416 if (NILP (Vrun_hooks
))
2420 val
= find_symbol_value (sym
);
2422 if (EQ (val
, Qunbound
) || NILP (val
))
2424 else if (!CONSP (val
) || FUNCTIONP (val
))
2427 return funcall (nargs
, args
);
2431 Lisp_Object global_vals
= Qnil
;
2434 CONSP (val
) && NILP (ret
);
2437 if (EQ (XCAR (val
), Qt
))
2439 /* t indicates this hook has a local binding;
2440 it means to run the global binding too. */
2441 global_vals
= Fdefault_value (sym
);
2442 if (NILP (global_vals
)) continue;
2444 if (!CONSP (global_vals
) || EQ (XCAR (global_vals
), Qlambda
))
2446 args
[0] = global_vals
;
2447 ret
= funcall (nargs
, args
);
2452 CONSP (global_vals
) && NILP (ret
);
2453 global_vals
= XCDR (global_vals
))
2455 args
[0] = XCAR (global_vals
);
2456 /* In a global value, t should not occur. If it does, we
2457 must ignore it to avoid an endless loop. */
2458 if (!EQ (args
[0], Qt
))
2459 ret
= funcall (nargs
, args
);
2465 args
[0] = XCAR (val
);
2466 ret
= funcall (nargs
, args
);
2474 /* Run the hook HOOK, giving each function no args. */
2477 run_hook (Lisp_Object hook
)
2479 Frun_hook_with_args (1, &hook
);
2482 /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */
2485 run_hook_with_args_2 (Lisp_Object hook
, Lisp_Object arg1
, Lisp_Object arg2
)
2487 CALLN (Frun_hook_with_args
, hook
, arg1
, arg2
);
2490 /* Apply fn to arg. */
2492 apply1 (Lisp_Object fn
, Lisp_Object arg
)
2494 return NILP (arg
) ? Ffuncall (1, &fn
) : CALLN (Fapply
, fn
, arg
);
2497 /* Call function fn on no arguments. */
2499 call0 (Lisp_Object fn
)
2501 return Ffuncall (1, &fn
);
2504 /* Call function fn with 1 argument arg1. */
2507 call1 (Lisp_Object fn
, Lisp_Object arg1
)
2509 return CALLN (Ffuncall
, fn
, arg1
);
2512 /* Call function fn with 2 arguments arg1, arg2. */
2515 call2 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
)
2517 return CALLN (Ffuncall
, fn
, arg1
, arg2
);
2520 /* Call function fn with 3 arguments arg1, arg2, arg3. */
2523 call3 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
)
2525 return CALLN (Ffuncall
, fn
, arg1
, arg2
, arg3
);
2528 /* Call function fn with 4 arguments arg1, arg2, arg3, arg4. */
2531 call4 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
,
2534 return CALLN (Ffuncall
, fn
, arg1
, arg2
, arg3
, arg4
);
2537 /* Call function fn with 5 arguments arg1, arg2, arg3, arg4, arg5. */
2540 call5 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
,
2541 Lisp_Object arg4
, Lisp_Object arg5
)
2543 return CALLN (Ffuncall
, fn
, arg1
, arg2
, arg3
, arg4
, arg5
);
2546 /* Call function fn with 6 arguments arg1, arg2, arg3, arg4, arg5, arg6. */
2549 call6 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
,
2550 Lisp_Object arg4
, Lisp_Object arg5
, Lisp_Object arg6
)
2552 return CALLN (Ffuncall
, fn
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
);
2555 /* Call function fn with 7 arguments arg1, arg2, arg3, arg4, arg5, arg6, arg7. */
2558 call7 (Lisp_Object fn
, Lisp_Object arg1
, Lisp_Object arg2
, Lisp_Object arg3
,
2559 Lisp_Object arg4
, Lisp_Object arg5
, Lisp_Object arg6
, Lisp_Object arg7
)
2561 return CALLN (Ffuncall
, fn
, arg1
, arg2
, arg3
, arg4
, arg5
, arg6
, arg7
);
2564 DEFUN ("functionp", Ffunctionp
, Sfunctionp
, 1, 1, 0,
2565 doc
: /* Non-nil if OBJECT is a function. */)
2566 (Lisp_Object object
)
2568 if (FUNCTIONP (object
))
2573 DEFUN ("funcall", Ffuncall
, Sfuncall
, 1, MANY
, 0,
2574 doc
: /* Call first argument as a function, passing remaining arguments to it.
2575 Return the value that function returns.
2576 Thus, (funcall \\='cons \\='x \\='y) returns (x . y).
2577 usage: (funcall FUNCTION &rest ARGUMENTS) */)
2578 (ptrdiff_t nargs
, Lisp_Object
*args
)
2580 Lisp_Object fun
, original_fun
;
2582 ptrdiff_t numargs
= nargs
- 1;
2583 Lisp_Object lisp_numargs
;
2585 Lisp_Object
*internal_args
;
2590 if (++lisp_eval_depth
> max_lisp_eval_depth
)
2592 if (max_lisp_eval_depth
< 100)
2593 max_lisp_eval_depth
= 100;
2594 if (lisp_eval_depth
> max_lisp_eval_depth
)
2595 error ("Lisp nesting exceeds `max-lisp-eval-depth'");
2598 count
= record_in_backtrace (args
[0], &args
[1], nargs
- 1);
2602 if (debug_on_next_call
)
2603 do_debug_on_call (Qlambda
, count
);
2607 original_fun
= args
[0];
2611 /* Optimize for no indirection. */
2613 if (SYMBOLP (fun
) && !NILP (fun
)
2614 && (fun
= XSYMBOL (fun
)->function
, SYMBOLP (fun
)))
2615 fun
= indirect_function (fun
);
2619 if (numargs
< XSUBR (fun
)->min_args
2620 || (XSUBR (fun
)->max_args
>= 0 && XSUBR (fun
)->max_args
< numargs
))
2622 XSETFASTINT (lisp_numargs
, numargs
);
2623 xsignal2 (Qwrong_number_of_arguments
, original_fun
, lisp_numargs
);
2626 else if (XSUBR (fun
)->max_args
== UNEVALLED
)
2627 xsignal1 (Qinvalid_function
, original_fun
);
2629 else if (XSUBR (fun
)->max_args
== MANY
)
2630 val
= (XSUBR (fun
)->function
.aMANY
) (numargs
, args
+ 1);
2633 Lisp_Object internal_argbuf
[8];
2634 if (XSUBR (fun
)->max_args
> numargs
)
2636 eassert (XSUBR (fun
)->max_args
<= ARRAYELTS (internal_argbuf
));
2637 internal_args
= internal_argbuf
;
2638 memcpy (internal_args
, args
+ 1, numargs
* word_size
);
2639 memclear (internal_args
+ numargs
,
2640 (XSUBR (fun
)->max_args
- numargs
) * word_size
);
2643 internal_args
= args
+ 1;
2644 switch (XSUBR (fun
)->max_args
)
2647 val
= (XSUBR (fun
)->function
.a0 ());
2650 val
= (XSUBR (fun
)->function
.a1 (internal_args
[0]));
2653 val
= (XSUBR (fun
)->function
.a2
2654 (internal_args
[0], internal_args
[1]));
2657 val
= (XSUBR (fun
)->function
.a3
2658 (internal_args
[0], internal_args
[1], internal_args
[2]));
2661 val
= (XSUBR (fun
)->function
.a4
2662 (internal_args
[0], internal_args
[1], internal_args
[2],
2666 val
= (XSUBR (fun
)->function
.a5
2667 (internal_args
[0], internal_args
[1], internal_args
[2],
2668 internal_args
[3], internal_args
[4]));
2671 val
= (XSUBR (fun
)->function
.a6
2672 (internal_args
[0], internal_args
[1], internal_args
[2],
2673 internal_args
[3], internal_args
[4], internal_args
[5]));
2676 val
= (XSUBR (fun
)->function
.a7
2677 (internal_args
[0], internal_args
[1], internal_args
[2],
2678 internal_args
[3], internal_args
[4], internal_args
[5],
2683 val
= (XSUBR (fun
)->function
.a8
2684 (internal_args
[0], internal_args
[1], internal_args
[2],
2685 internal_args
[3], internal_args
[4], internal_args
[5],
2686 internal_args
[6], internal_args
[7]));
2691 /* If a subr takes more than 8 arguments without using MANY
2692 or UNEVALLED, we need to extend this function to support it.
2693 Until this is done, there is no way to call the function. */
2698 else if (COMPILEDP (fun
))
2699 val
= funcall_lambda (fun
, numargs
, args
+ 1);
2703 xsignal1 (Qvoid_function
, original_fun
);
2705 xsignal1 (Qinvalid_function
, original_fun
);
2706 funcar
= XCAR (fun
);
2707 if (!SYMBOLP (funcar
))
2708 xsignal1 (Qinvalid_function
, original_fun
);
2709 if (EQ (funcar
, Qlambda
)
2710 || EQ (funcar
, Qclosure
))
2711 val
= funcall_lambda (fun
, numargs
, args
+ 1);
2712 else if (EQ (funcar
, Qautoload
))
2714 Fautoload_do_load (fun
, original_fun
, Qnil
);
2719 xsignal1 (Qinvalid_function
, original_fun
);
2723 if (backtrace_debug_on_exit (specpdl
+ count
))
2724 val
= call_debugger (list2 (Qexit
, val
));
2730 apply_lambda (Lisp_Object fun
, Lisp_Object args
, ptrdiff_t count
)
2732 Lisp_Object args_left
;
2735 Lisp_Object
*arg_vector
;
2739 numargs
= XFASTINT (Flength (args
));
2740 SAFE_ALLOCA_LISP (arg_vector
, numargs
);
2743 for (i
= 0; i
< numargs
; )
2745 tem
= Fcar (args_left
), args_left
= Fcdr (args_left
);
2746 tem
= eval_sub (tem
);
2747 arg_vector
[i
++] = tem
;
2750 set_backtrace_args (specpdl
+ count
, arg_vector
, i
);
2751 tem
= funcall_lambda (fun
, numargs
, arg_vector
);
2753 /* Do the debug-on-exit now, while arg_vector still exists. */
2754 if (backtrace_debug_on_exit (specpdl
+ count
))
2756 /* Don't do it again when we return to eval. */
2757 set_backtrace_debug_on_exit (specpdl
+ count
, false);
2758 tem
= call_debugger (list2 (Qexit
, tem
));
2764 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR
2765 and return the result of evaluation.
2766 FUN must be either a lambda-expression or a compiled-code object. */
2769 funcall_lambda (Lisp_Object fun
, ptrdiff_t nargs
,
2770 register Lisp_Object
*arg_vector
)
2772 Lisp_Object val
, syms_left
, next
, lexenv
;
2773 ptrdiff_t count
= SPECPDL_INDEX ();
2775 bool optional
, rest
;
2779 if (EQ (XCAR (fun
), Qclosure
))
2781 fun
= XCDR (fun
); /* Drop `closure'. */
2782 lexenv
= XCAR (fun
);
2783 CHECK_LIST_CONS (fun
, fun
);
2787 syms_left
= XCDR (fun
);
2788 if (CONSP (syms_left
))
2789 syms_left
= XCAR (syms_left
);
2791 xsignal1 (Qinvalid_function
, fun
);
2793 else if (COMPILEDP (fun
))
2795 syms_left
= AREF (fun
, COMPILED_ARGLIST
);
2796 if (INTEGERP (syms_left
))
2797 /* A byte-code object with a non-nil `push args' slot means we
2798 shouldn't bind any arguments, instead just call the byte-code
2799 interpreter directly; it will push arguments as necessary.
2801 Byte-code objects with either a non-existent, or a nil value for
2802 the `push args' slot (the default), have dynamically-bound
2803 arguments, and use the argument-binding code below instead (as do
2804 all interpreted functions, even lexically bound ones). */
2806 /* If we have not actually read the bytecode string
2807 and constants vector yet, fetch them from the file. */
2808 if (CONSP (AREF (fun
, COMPILED_BYTECODE
)))
2809 Ffetch_bytecode (fun
);
2810 return exec_byte_code (AREF (fun
, COMPILED_BYTECODE
),
2811 AREF (fun
, COMPILED_CONSTANTS
),
2812 AREF (fun
, COMPILED_STACK_DEPTH
),
2821 i
= optional
= rest
= 0;
2822 for (; CONSP (syms_left
); syms_left
= XCDR (syms_left
))
2826 next
= XCAR (syms_left
);
2827 if (!SYMBOLP (next
))
2828 xsignal1 (Qinvalid_function
, fun
);
2830 if (EQ (next
, Qand_rest
))
2832 else if (EQ (next
, Qand_optional
))
2839 arg
= Flist (nargs
- i
, &arg_vector
[i
]);
2843 arg
= arg_vector
[i
++];
2845 xsignal2 (Qwrong_number_of_arguments
, fun
, make_number (nargs
));
2849 /* Bind the argument. */
2850 if (!NILP (lexenv
) && SYMBOLP (next
))
2851 /* Lexically bind NEXT by adding it to the lexenv alist. */
2852 lexenv
= Fcons (Fcons (next
, arg
), lexenv
);
2854 /* Dynamically bind NEXT. */
2855 specbind (next
, arg
);
2859 if (!NILP (syms_left
))
2860 xsignal1 (Qinvalid_function
, fun
);
2862 xsignal2 (Qwrong_number_of_arguments
, fun
, make_number (nargs
));
2864 if (!EQ (lexenv
, Vinternal_interpreter_environment
))
2865 /* Instantiate a new lexical environment. */
2866 specbind (Qinternal_interpreter_environment
, lexenv
);
2869 val
= Fprogn (XCDR (XCDR (fun
)));
2872 /* If we have not actually read the bytecode string
2873 and constants vector yet, fetch them from the file. */
2874 if (CONSP (AREF (fun
, COMPILED_BYTECODE
)))
2875 Ffetch_bytecode (fun
);
2876 val
= exec_byte_code (AREF (fun
, COMPILED_BYTECODE
),
2877 AREF (fun
, COMPILED_CONSTANTS
),
2878 AREF (fun
, COMPILED_STACK_DEPTH
),
2882 return unbind_to (count
, val
);
2885 DEFUN ("fetch-bytecode", Ffetch_bytecode
, Sfetch_bytecode
,
2887 doc
: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */)
2888 (Lisp_Object object
)
2892 if (COMPILEDP (object
) && CONSP (AREF (object
, COMPILED_BYTECODE
)))
2894 tem
= read_doc_string (AREF (object
, COMPILED_BYTECODE
));
2897 tem
= AREF (object
, COMPILED_BYTECODE
);
2898 if (CONSP (tem
) && STRINGP (XCAR (tem
)))
2899 error ("Invalid byte code in %s", SDATA (XCAR (tem
)));
2901 error ("Invalid byte code");
2903 ASET (object
, COMPILED_BYTECODE
, XCAR (tem
));
2904 ASET (object
, COMPILED_CONSTANTS
, XCDR (tem
));
2909 /* Return true if SYMBOL currently has a let-binding
2910 which was made in the buffer that is now current. */
2913 let_shadows_buffer_binding_p (struct Lisp_Symbol
*symbol
)
2915 union specbinding
*p
;
2916 Lisp_Object buf
= Fcurrent_buffer ();
2918 for (p
= specpdl_ptr
; p
> specpdl
; )
2919 if ((--p
)->kind
> SPECPDL_LET
)
2921 struct Lisp_Symbol
*let_bound_symbol
= XSYMBOL (specpdl_symbol (p
));
2922 eassert (let_bound_symbol
->redirect
!= SYMBOL_VARALIAS
);
2923 if (symbol
== let_bound_symbol
2924 && EQ (specpdl_where (p
), buf
))
2932 let_shadows_global_binding_p (Lisp_Object symbol
)
2934 union specbinding
*p
;
2936 for (p
= specpdl_ptr
; p
> specpdl
; )
2937 if ((--p
)->kind
>= SPECPDL_LET
&& EQ (specpdl_symbol (p
), symbol
))
2943 /* `specpdl_ptr' describes which variable is
2944 let-bound, so it can be properly undone when we unbind_to.
2945 It can be either a plain SPECPDL_LET or a SPECPDL_LET_LOCAL/DEFAULT.
2946 - SYMBOL is the variable being bound. Note that it should not be
2947 aliased (i.e. when let-binding V1 that's aliased to V2, we want
2949 - WHERE tells us in which buffer the binding took place.
2950 This is used for SPECPDL_LET_LOCAL bindings (i.e. bindings to a
2951 buffer-local variable) as well as for SPECPDL_LET_DEFAULT bindings,
2952 i.e. bindings to the default value of a variable which can be
2956 specbind (Lisp_Object symbol
, Lisp_Object value
)
2958 struct Lisp_Symbol
*sym
;
2960 CHECK_SYMBOL (symbol
);
2961 sym
= XSYMBOL (symbol
);
2964 switch (sym
->redirect
)
2966 case SYMBOL_VARALIAS
:
2967 sym
= indirect_variable (sym
); XSETSYMBOL (symbol
, sym
); goto start
;
2968 case SYMBOL_PLAINVAL
:
2969 /* The most common case is that of a non-constant symbol with a
2970 trivial value. Make that as fast as we can. */
2971 specpdl_ptr
->let
.kind
= SPECPDL_LET
;
2972 specpdl_ptr
->let
.symbol
= symbol
;
2973 specpdl_ptr
->let
.old_value
= SYMBOL_VAL (sym
);
2976 SET_SYMBOL_VAL (sym
, value
);
2978 set_internal (symbol
, value
, Qnil
, 1);
2980 case SYMBOL_LOCALIZED
:
2981 if (SYMBOL_BLV (sym
)->frame_local
)
2982 error ("Frame-local vars cannot be let-bound");
2983 case SYMBOL_FORWARDED
:
2985 Lisp_Object ovalue
= find_symbol_value (symbol
);
2986 specpdl_ptr
->let
.kind
= SPECPDL_LET_LOCAL
;
2987 specpdl_ptr
->let
.symbol
= symbol
;
2988 specpdl_ptr
->let
.old_value
= ovalue
;
2989 specpdl_ptr
->let
.where
= Fcurrent_buffer ();
2991 eassert (sym
->redirect
!= SYMBOL_LOCALIZED
2992 || (EQ (SYMBOL_BLV (sym
)->where
, Fcurrent_buffer ())));
2994 if (sym
->redirect
== SYMBOL_LOCALIZED
)
2996 if (!blv_found (SYMBOL_BLV (sym
)))
2997 specpdl_ptr
->let
.kind
= SPECPDL_LET_DEFAULT
;
2999 else if (BUFFER_OBJFWDP (SYMBOL_FWD (sym
)))
3001 /* If SYMBOL is a per-buffer variable which doesn't have a
3002 buffer-local value here, make the `let' change the global
3003 value by changing the value of SYMBOL in all buffers not
3004 having their own value. This is consistent with what
3005 happens with other buffer-local variables. */
3006 if (NILP (Flocal_variable_p (symbol
, Qnil
)))
3008 specpdl_ptr
->let
.kind
= SPECPDL_LET_DEFAULT
;
3010 Fset_default (symbol
, value
);
3015 specpdl_ptr
->let
.kind
= SPECPDL_LET
;
3018 set_internal (symbol
, value
, Qnil
, 1);
3021 default: emacs_abort ();
3025 /* Push unwind-protect entries of various types. */
3028 record_unwind_protect (void (*function
) (Lisp_Object
), Lisp_Object arg
)
3030 specpdl_ptr
->unwind
.kind
= SPECPDL_UNWIND
;
3031 specpdl_ptr
->unwind
.func
= function
;
3032 specpdl_ptr
->unwind
.arg
= arg
;
3037 record_unwind_protect_ptr (void (*function
) (void *), void *arg
)
3039 specpdl_ptr
->unwind_ptr
.kind
= SPECPDL_UNWIND_PTR
;
3040 specpdl_ptr
->unwind_ptr
.func
= function
;
3041 specpdl_ptr
->unwind_ptr
.arg
= arg
;
3046 record_unwind_protect_int (void (*function
) (int), int arg
)
3048 specpdl_ptr
->unwind_int
.kind
= SPECPDL_UNWIND_INT
;
3049 specpdl_ptr
->unwind_int
.func
= function
;
3050 specpdl_ptr
->unwind_int
.arg
= arg
;
3055 record_unwind_protect_void (void (*function
) (void))
3057 specpdl_ptr
->unwind_void
.kind
= SPECPDL_UNWIND_VOID
;
3058 specpdl_ptr
->unwind_void
.func
= function
;
3066 /* Push an unwind-protect entry that does nothing, so that
3067 set_unwind_protect_ptr can overwrite it later. */
3070 record_unwind_protect_nothing (void)
3072 record_unwind_protect_void (do_nothing
);
3075 /* Clear the unwind-protect entry COUNT, so that it does nothing.
3076 It need not be at the top of the stack. */
3079 clear_unwind_protect (ptrdiff_t count
)
3081 union specbinding
*p
= specpdl
+ count
;
3082 p
->unwind_void
.kind
= SPECPDL_UNWIND_VOID
;
3083 p
->unwind_void
.func
= do_nothing
;
3086 /* Set the unwind-protect entry COUNT so that it invokes FUNC (ARG).
3087 It need not be at the top of the stack. Discard the entry's
3088 previous value without invoking it. */
3091 set_unwind_protect (ptrdiff_t count
, void (*func
) (Lisp_Object
),
3094 union specbinding
*p
= specpdl
+ count
;
3095 p
->unwind
.kind
= SPECPDL_UNWIND
;
3096 p
->unwind
.func
= func
;
3097 p
->unwind
.arg
= arg
;
3101 set_unwind_protect_ptr (ptrdiff_t count
, void (*func
) (void *), void *arg
)
3103 union specbinding
*p
= specpdl
+ count
;
3104 p
->unwind_ptr
.kind
= SPECPDL_UNWIND_PTR
;
3105 p
->unwind_ptr
.func
= func
;
3106 p
->unwind_ptr
.arg
= arg
;
3109 /* Pop and execute entries from the unwind-protect stack until the
3110 depth COUNT is reached. Return VALUE. */
3113 unbind_to (ptrdiff_t count
, Lisp_Object value
)
3115 Lisp_Object quitf
= Vquit_flag
;
3119 while (specpdl_ptr
!= specpdl
+ count
)
3121 /* Decrement specpdl_ptr before we do the work to unbind it, so
3122 that an error in unbinding won't try to unbind the same entry
3123 again. Take care to copy any parts of the binding needed
3124 before invoking any code that can make more bindings. */
3128 switch (specpdl_ptr
->kind
)
3130 case SPECPDL_UNWIND
:
3131 specpdl_ptr
->unwind
.func (specpdl_ptr
->unwind
.arg
);
3133 case SPECPDL_UNWIND_PTR
:
3134 specpdl_ptr
->unwind_ptr
.func (specpdl_ptr
->unwind_ptr
.arg
);
3136 case SPECPDL_UNWIND_INT
:
3137 specpdl_ptr
->unwind_int
.func (specpdl_ptr
->unwind_int
.arg
);
3139 case SPECPDL_UNWIND_VOID
:
3140 specpdl_ptr
->unwind_void
.func ();
3142 case SPECPDL_BACKTRACE
:
3145 { /* If variable has a trivial value (no forwarding), we can
3146 just set it. No need to check for constant symbols here,
3147 since that was already done by specbind. */
3148 struct Lisp_Symbol
*sym
= XSYMBOL (specpdl_symbol (specpdl_ptr
));
3149 if (sym
->redirect
== SYMBOL_PLAINVAL
)
3151 SET_SYMBOL_VAL (sym
, specpdl_old_value (specpdl_ptr
));
3156 NOTE: we only ever come here if make_local_foo was used for
3157 the first time on this var within this let. */
3160 case SPECPDL_LET_DEFAULT
:
3161 Fset_default (specpdl_symbol (specpdl_ptr
),
3162 specpdl_old_value (specpdl_ptr
));
3164 case SPECPDL_LET_LOCAL
:
3166 Lisp_Object symbol
= specpdl_symbol (specpdl_ptr
);
3167 Lisp_Object where
= specpdl_where (specpdl_ptr
);
3168 Lisp_Object old_value
= specpdl_old_value (specpdl_ptr
);
3169 eassert (BUFFERP (where
));
3171 /* If this was a local binding, reset the value in the appropriate
3172 buffer, but only if that buffer's binding still exists. */
3173 if (!NILP (Flocal_variable_p (symbol
, where
)))
3174 set_internal (symbol
, old_value
, where
, 1);
3180 if (NILP (Vquit_flag
) && !NILP (quitf
))
3186 DEFUN ("special-variable-p", Fspecial_variable_p
, Sspecial_variable_p
, 1, 1, 0,
3187 doc
: /* Return non-nil if SYMBOL's global binding has been declared special.
3188 A special variable is one that will be bound dynamically, even in a
3189 context where binding is lexical by default. */)
3190 (Lisp_Object symbol
)
3192 CHECK_SYMBOL (symbol
);
3193 return XSYMBOL (symbol
)->declared_special
? Qt
: Qnil
;
3197 DEFUN ("backtrace-debug", Fbacktrace_debug
, Sbacktrace_debug
, 2, 2, 0,
3198 doc
: /* Set the debug-on-exit flag of eval frame LEVEL levels down to FLAG.
3199 The debugger is entered when that frame exits, if the flag is non-nil. */)
3200 (Lisp_Object level
, Lisp_Object flag
)
3202 union specbinding
*pdl
= backtrace_top ();
3203 register EMACS_INT i
;
3205 CHECK_NUMBER (level
);
3207 for (i
= 0; backtrace_p (pdl
) && i
< XINT (level
); i
++)
3208 pdl
= backtrace_next (pdl
);
3210 if (backtrace_p (pdl
))
3211 set_backtrace_debug_on_exit (pdl
, !NILP (flag
));
3216 DEFUN ("backtrace", Fbacktrace
, Sbacktrace
, 0, 0, "",
3217 doc
: /* Print a trace of Lisp function calls currently active.
3218 Output stream used is value of `standard-output'. */)
3221 union specbinding
*pdl
= backtrace_top ();
3223 Lisp_Object old_print_level
= Vprint_level
;
3225 if (NILP (Vprint_level
))
3226 XSETFASTINT (Vprint_level
, 8);
3228 while (backtrace_p (pdl
))
3230 write_string (backtrace_debug_on_exit (pdl
) ? "* " : " ");
3231 if (backtrace_nargs (pdl
) == UNEVALLED
)
3233 Fprin1 (Fcons (backtrace_function (pdl
), *backtrace_args (pdl
)),
3235 write_string ("\n");
3239 tem
= backtrace_function (pdl
);
3240 Fprin1 (tem
, Qnil
); /* This can QUIT. */
3244 for (i
= 0; i
< backtrace_nargs (pdl
); i
++)
3246 if (i
) write_string (" ");
3247 Fprin1 (backtrace_args (pdl
)[i
], Qnil
);
3250 write_string (")\n");
3252 pdl
= backtrace_next (pdl
);
3255 Vprint_level
= old_print_level
;
3259 static union specbinding
*
3260 get_backtrace_frame (Lisp_Object nframes
, Lisp_Object base
)
3262 union specbinding
*pdl
= backtrace_top ();
3263 register EMACS_INT i
;
3265 CHECK_NATNUM (nframes
);
3268 { /* Skip up to `base'. */
3269 base
= Findirect_function (base
, Qt
);
3270 while (backtrace_p (pdl
)
3271 && !EQ (base
, Findirect_function (backtrace_function (pdl
), Qt
)))
3272 pdl
= backtrace_next (pdl
);
3275 /* Find the frame requested. */
3276 for (i
= XFASTINT (nframes
); i
> 0 && backtrace_p (pdl
); i
--)
3277 pdl
= backtrace_next (pdl
);
3282 DEFUN ("backtrace-frame", Fbacktrace_frame
, Sbacktrace_frame
, 1, 2, NULL
,
3283 doc
: /* Return the function and arguments NFRAMES up from current execution point.
3284 If that frame has not evaluated the arguments yet (or is a special form),
3285 the value is (nil FUNCTION ARG-FORMS...).
3286 If that frame has evaluated its arguments and called its function already,
3287 the value is (t FUNCTION ARG-VALUES...).
3288 A &rest arg is represented as the tail of the list ARG-VALUES.
3289 FUNCTION is whatever was supplied as car of evaluated list,
3290 or a lambda expression for macro calls.
3291 If NFRAMES is more than the number of frames, the value is nil.
3292 If BASE is non-nil, it should be a function and NFRAMES counts from its
3293 nearest activation frame. */)
3294 (Lisp_Object nframes
, Lisp_Object base
)
3296 union specbinding
*pdl
= get_backtrace_frame (nframes
, base
);
3298 if (!backtrace_p (pdl
))
3300 if (backtrace_nargs (pdl
) == UNEVALLED
)
3302 Fcons (backtrace_function (pdl
), *backtrace_args (pdl
)));
3305 Lisp_Object tem
= Flist (backtrace_nargs (pdl
), backtrace_args (pdl
));
3307 return Fcons (Qt
, Fcons (backtrace_function (pdl
), tem
));
3311 /* For backtrace-eval, we want to temporarily unwind the last few elements of
3312 the specpdl stack, and then rewind them. We store the pre-unwind values
3313 directly in the pre-existing specpdl elements (i.e. we swap the current
3314 value and the old value stored in the specpdl), kind of like the inplace
3315 pointer-reversal trick. As it turns out, the rewind does the same as the
3316 unwind, except it starts from the other end of the specpdl stack, so we use
3317 the same function for both unwind and rewind. */
3319 backtrace_eval_unrewind (int distance
)
3321 union specbinding
*tmp
= specpdl_ptr
;
3324 { /* It's a rewind rather than unwind. */
3325 tmp
+= distance
- 1;
3327 distance
= -distance
;
3330 for (; distance
> 0; distance
--)
3335 /* FIXME: Ideally we'd like to "temporarily unwind" (some of) those
3336 unwind_protect, but the problem is that we don't know how to
3337 rewind them afterwards. */
3338 case SPECPDL_UNWIND
:
3340 Lisp_Object oldarg
= tmp
->unwind
.arg
;
3341 if (tmp
->unwind
.func
== set_buffer_if_live
)
3342 tmp
->unwind
.arg
= Fcurrent_buffer ();
3343 else if (tmp
->unwind
.func
== save_excursion_restore
)
3344 tmp
->unwind
.arg
= save_excursion_save ();
3347 tmp
->unwind
.func (oldarg
);
3351 case SPECPDL_UNWIND_PTR
:
3352 case SPECPDL_UNWIND_INT
:
3353 case SPECPDL_UNWIND_VOID
:
3354 case SPECPDL_BACKTRACE
:
3357 { /* If variable has a trivial value (no forwarding), we can
3358 just set it. No need to check for constant symbols here,
3359 since that was already done by specbind. */
3360 struct Lisp_Symbol
*sym
= XSYMBOL (specpdl_symbol (tmp
));
3361 if (sym
->redirect
== SYMBOL_PLAINVAL
)
3363 Lisp_Object old_value
= specpdl_old_value (tmp
);
3364 set_specpdl_old_value (tmp
, SYMBOL_VAL (sym
));
3365 SET_SYMBOL_VAL (sym
, old_value
);
3370 NOTE: we only ever come here if make_local_foo was used for
3371 the first time on this var within this let. */
3374 case SPECPDL_LET_DEFAULT
:
3376 Lisp_Object sym
= specpdl_symbol (tmp
);
3377 Lisp_Object old_value
= specpdl_old_value (tmp
);
3378 set_specpdl_old_value (tmp
, Fdefault_value (sym
));
3379 Fset_default (sym
, old_value
);
3382 case SPECPDL_LET_LOCAL
:
3384 Lisp_Object symbol
= specpdl_symbol (tmp
);
3385 Lisp_Object where
= specpdl_where (tmp
);
3386 Lisp_Object old_value
= specpdl_old_value (tmp
);
3387 eassert (BUFFERP (where
));
3389 /* If this was a local binding, reset the value in the appropriate
3390 buffer, but only if that buffer's binding still exists. */
3391 if (!NILP (Flocal_variable_p (symbol
, where
)))
3393 set_specpdl_old_value
3394 (tmp
, Fbuffer_local_value (symbol
, where
));
3395 set_internal (symbol
, old_value
, where
, 1);
3403 DEFUN ("backtrace-eval", Fbacktrace_eval
, Sbacktrace_eval
, 2, 3, NULL
,
3404 doc
: /* Evaluate EXP in the context of some activation frame.
3405 NFRAMES and BASE specify the activation frame to use, as in `backtrace-frame'. */)
3406 (Lisp_Object exp
, Lisp_Object nframes
, Lisp_Object base
)
3408 union specbinding
*pdl
= get_backtrace_frame (nframes
, base
);
3409 ptrdiff_t count
= SPECPDL_INDEX ();
3410 ptrdiff_t distance
= specpdl_ptr
- pdl
;
3411 eassert (distance
>= 0);
3413 if (!backtrace_p (pdl
))
3414 error ("Activation frame not found!");
3416 backtrace_eval_unrewind (distance
);
3417 record_unwind_protect_int (backtrace_eval_unrewind
, -distance
);
3419 /* Use eval_sub rather than Feval since the main motivation behind
3420 backtrace-eval is to be able to get/set the value of lexical variables
3421 from the debugger. */
3422 return unbind_to (count
, eval_sub (exp
));
3425 DEFUN ("backtrace--locals", Fbacktrace__locals
, Sbacktrace__locals
, 1, 2, NULL
,
3426 doc
: /* Return names and values of local variables of a stack frame.
3427 NFRAMES and BASE specify the activation frame to use, as in `backtrace-frame'. */)
3428 (Lisp_Object nframes
, Lisp_Object base
)
3430 union specbinding
*frame
= get_backtrace_frame (nframes
, base
);
3431 union specbinding
*prevframe
3432 = get_backtrace_frame (make_number (XFASTINT (nframes
) - 1), base
);
3433 ptrdiff_t distance
= specpdl_ptr
- frame
;
3434 Lisp_Object result
= Qnil
;
3435 eassert (distance
>= 0);
3437 if (!backtrace_p (prevframe
))
3438 error ("Activation frame not found!");
3439 if (!backtrace_p (frame
))
3440 error ("Activation frame not found!");
3442 /* The specpdl entries normally contain the symbol being bound along with its
3443 `old_value', so it can be restored. The new value to which it is bound is
3444 available in one of two places: either in the current value of the
3445 variable (if it hasn't been rebound yet) or in the `old_value' slot of the
3446 next specpdl entry for it.
3447 `backtrace_eval_unrewind' happens to swap the role of `old_value'
3448 and "new value", so we abuse it here, to fetch the new value.
3449 It's ugly (we'd rather not modify global data) and a bit inefficient,
3450 but it does the job for now. */
3451 backtrace_eval_unrewind (distance
);
3455 union specbinding
*tmp
= prevframe
;
3456 for (; tmp
> frame
; tmp
--)
3461 case SPECPDL_LET_DEFAULT
:
3462 case SPECPDL_LET_LOCAL
:
3464 Lisp_Object sym
= specpdl_symbol (tmp
);
3465 Lisp_Object val
= specpdl_old_value (tmp
);
3466 if (EQ (sym
, Qinternal_interpreter_environment
))
3468 Lisp_Object env
= val
;
3469 for (; CONSP (env
); env
= XCDR (env
))
3471 Lisp_Object binding
= XCAR (env
);
3472 if (CONSP (binding
))
3473 result
= Fcons (Fcons (XCAR (binding
),
3479 result
= Fcons (Fcons (sym
, val
), result
);
3483 case SPECPDL_UNWIND
:
3484 case SPECPDL_UNWIND_PTR
:
3485 case SPECPDL_UNWIND_INT
:
3486 case SPECPDL_UNWIND_VOID
:
3487 case SPECPDL_BACKTRACE
:
3496 /* Restore values from specpdl to original place. */
3497 backtrace_eval_unrewind (-distance
);
3506 union specbinding
*pdl
;
3507 for (pdl
= specpdl
; pdl
!= specpdl_ptr
; pdl
++)
3511 case SPECPDL_UNWIND
:
3512 mark_object (specpdl_arg (pdl
));
3515 case SPECPDL_BACKTRACE
:
3517 ptrdiff_t nargs
= backtrace_nargs (pdl
);
3518 mark_object (backtrace_function (pdl
));
3519 if (nargs
== UNEVALLED
)
3522 mark_object (backtrace_args (pdl
)[nargs
]);
3526 case SPECPDL_LET_DEFAULT
:
3527 case SPECPDL_LET_LOCAL
:
3528 mark_object (specpdl_where (pdl
));
3531 mark_object (specpdl_symbol (pdl
));
3532 mark_object (specpdl_old_value (pdl
));
3535 case SPECPDL_UNWIND_PTR
:
3536 case SPECPDL_UNWIND_INT
:
3537 case SPECPDL_UNWIND_VOID
:
3547 get_backtrace (Lisp_Object array
)
3549 union specbinding
*pdl
= backtrace_next (backtrace_top ());
3550 ptrdiff_t i
= 0, asize
= ASIZE (array
);
3552 /* Copy the backtrace contents into working memory. */
3553 for (; i
< asize
; i
++)
3555 if (backtrace_p (pdl
))
3557 ASET (array
, i
, backtrace_function (pdl
));
3558 pdl
= backtrace_next (pdl
);
3561 ASET (array
, i
, Qnil
);
3565 Lisp_Object
backtrace_top_function (void)
3567 union specbinding
*pdl
= backtrace_top ();
3568 return (backtrace_p (pdl
) ? backtrace_function (pdl
) : Qnil
);
3574 DEFVAR_INT ("max-specpdl-size", max_specpdl_size
,
3575 doc
: /* Limit on number of Lisp variable bindings and `unwind-protect's.
3576 If Lisp code tries to increase the total number past this amount,
3577 an error is signaled.
3578 You can safely use a value considerably larger than the default value,
3579 if that proves inconveniently small. However, if you increase it too far,
3580 Emacs could run out of memory trying to make the stack bigger.
3581 Note that this limit may be silently increased by the debugger
3582 if `debug-on-error' or `debug-on-quit' is set. */);
3584 DEFVAR_INT ("max-lisp-eval-depth", max_lisp_eval_depth
,
3585 doc
: /* Limit on depth in `eval', `apply' and `funcall' before error.
3587 This limit serves to catch infinite recursions for you before they cause
3588 actual stack overflow in C, which would be fatal for Emacs.
3589 You can safely make it considerably larger than its default value,
3590 if that proves inconveniently small. However, if you increase it too far,
3591 Emacs could overflow the real C stack, and crash. */);
3593 DEFVAR_LISP ("quit-flag", Vquit_flag
,
3594 doc
: /* Non-nil causes `eval' to abort, unless `inhibit-quit' is non-nil.
3595 If the value is t, that means do an ordinary quit.
3596 If the value equals `throw-on-input', that means quit by throwing
3597 to the tag specified in `throw-on-input'; it's for handling `while-no-input'.
3598 Typing C-g sets `quit-flag' to t, regardless of `inhibit-quit',
3599 but `inhibit-quit' non-nil prevents anything from taking notice of that. */);
3602 DEFVAR_LISP ("inhibit-quit", Vinhibit_quit
,
3603 doc
: /* Non-nil inhibits C-g quitting from happening immediately.
3604 Note that `quit-flag' will still be set by typing C-g,
3605 so a quit will be signaled as soon as `inhibit-quit' is nil.
3606 To prevent this happening, set `quit-flag' to nil
3607 before making `inhibit-quit' nil. */);
3608 Vinhibit_quit
= Qnil
;
3610 DEFSYM (Qinhibit_quit
, "inhibit-quit");
3611 DEFSYM (Qautoload
, "autoload");
3612 DEFSYM (Qinhibit_debugger
, "inhibit-debugger");
3613 DEFSYM (Qmacro
, "macro");
3615 /* Note that the process handling also uses Qexit, but we don't want
3616 to staticpro it twice, so we just do it here. */
3617 DEFSYM (Qexit
, "exit");
3619 DEFSYM (Qinteractive
, "interactive");
3620 DEFSYM (Qcommandp
, "commandp");
3621 DEFSYM (Qand_rest
, "&rest");
3622 DEFSYM (Qand_optional
, "&optional");
3623 DEFSYM (Qclosure
, "closure");
3624 DEFSYM (QCdocumentation
, ":documentation");
3625 DEFSYM (Qdebug
, "debug");
3627 DEFVAR_LISP ("inhibit-debugger", Vinhibit_debugger
,
3628 doc
: /* Non-nil means never enter the debugger.
3629 Normally set while the debugger is already active, to avoid recursive
3631 Vinhibit_debugger
= Qnil
;
3633 DEFVAR_LISP ("debug-on-error", Vdebug_on_error
,
3634 doc
: /* Non-nil means enter debugger if an error is signaled.
3635 Does not apply to errors handled by `condition-case' or those
3636 matched by `debug-ignored-errors'.
3637 If the value is a list, an error only means to enter the debugger
3638 if one of its condition symbols appears in the list.
3639 When you evaluate an expression interactively, this variable
3640 is temporarily non-nil if `eval-expression-debug-on-error' is non-nil.
3641 The command `toggle-debug-on-error' toggles this.
3642 See also the variable `debug-on-quit' and `inhibit-debugger'. */);
3643 Vdebug_on_error
= Qnil
;
3645 DEFVAR_LISP ("debug-ignored-errors", Vdebug_ignored_errors
,
3646 doc
: /* List of errors for which the debugger should not be called.
3647 Each element may be a condition-name or a regexp that matches error messages.
3648 If any element applies to a given error, that error skips the debugger
3649 and just returns to top level.
3650 This overrides the variable `debug-on-error'.
3651 It does not apply to errors handled by `condition-case'. */);
3652 Vdebug_ignored_errors
= Qnil
;
3654 DEFVAR_BOOL ("debug-on-quit", debug_on_quit
,
3655 doc
: /* Non-nil means enter debugger if quit is signaled (C-g, for example).
3656 Does not apply if quit is handled by a `condition-case'. */);
3659 DEFVAR_BOOL ("debug-on-next-call", debug_on_next_call
,
3660 doc
: /* Non-nil means enter debugger before next `eval', `apply' or `funcall'. */);
3662 DEFVAR_BOOL ("debugger-may-continue", debugger_may_continue
,
3663 doc
: /* Non-nil means debugger may continue execution.
3664 This is nil when the debugger is called under circumstances where it
3665 might not be safe to continue. */);
3666 debugger_may_continue
= 1;
3668 DEFVAR_LISP ("debugger", Vdebugger
,
3669 doc
: /* Function to call to invoke debugger.
3670 If due to frame exit, args are `exit' and the value being returned;
3671 this function's value will be returned instead of that.
3672 If due to error, args are `error' and a list of the args to `signal'.
3673 If due to `apply' or `funcall' entry, one arg, `lambda'.
3674 If due to `eval' entry, one arg, t. */);
3677 DEFVAR_LISP ("signal-hook-function", Vsignal_hook_function
,
3678 doc
: /* If non-nil, this is a function for `signal' to call.
3679 It receives the same arguments that `signal' was given.
3680 The Edebug package uses this to regain control. */);
3681 Vsignal_hook_function
= Qnil
;
3683 DEFVAR_LISP ("debug-on-signal", Vdebug_on_signal
,
3684 doc
: /* Non-nil means call the debugger regardless of condition handlers.
3685 Note that `debug-on-error', `debug-on-quit' and friends
3686 still determine whether to handle the particular condition. */);
3687 Vdebug_on_signal
= Qnil
;
3689 /* When lexical binding is being used,
3690 Vinternal_interpreter_environment is non-nil, and contains an alist
3691 of lexically-bound variable, or (t), indicating an empty
3692 environment. The lisp name of this variable would be
3693 `internal-interpreter-environment' if it weren't hidden.
3694 Every element of this list can be either a cons (VAR . VAL)
3695 specifying a lexical binding, or a single symbol VAR indicating
3696 that this variable should use dynamic scoping. */
3697 DEFSYM (Qinternal_interpreter_environment
,
3698 "internal-interpreter-environment");
3699 DEFVAR_LISP ("internal-interpreter-environment",
3700 Vinternal_interpreter_environment
,
3701 doc
: /* If non-nil, the current lexical environment of the lisp interpreter.
3702 When lexical binding is not being used, this variable is nil.
3703 A value of `(t)' indicates an empty environment, otherwise it is an
3704 alist of active lexical bindings. */);
3705 Vinternal_interpreter_environment
= Qnil
;
3706 /* Don't export this variable to Elisp, so no one can mess with it
3707 (Just imagine if someone makes it buffer-local). */
3708 Funintern (Qinternal_interpreter_environment
, Qnil
);
3710 Vrun_hooks
= intern_c_string ("run-hooks");
3711 staticpro (&Vrun_hooks
);
3713 staticpro (&Vautoload_queue
);
3714 Vautoload_queue
= Qnil
;
3715 staticpro (&Vsignaling_function
);
3716 Vsignaling_function
= Qnil
;
3718 inhibit_lisp_code
= Qnil
;
3729 defsubr (&Sfunction
);
3730 defsubr (&Sdefault_toplevel_value
);
3731 defsubr (&Sset_default_toplevel_value
);
3733 defsubr (&Sdefvaralias
);
3734 defsubr (&Sdefconst
);
3735 defsubr (&Smake_var_non_special
);
3739 defsubr (&Smacroexpand
);
3742 defsubr (&Sunwind_protect
);
3743 defsubr (&Scondition_case
);
3745 defsubr (&Scommandp
);
3746 defsubr (&Sautoload
);
3747 defsubr (&Sautoload_do_load
);
3750 defsubr (&Sfuncall
);
3751 defsubr (&Srun_hooks
);
3752 defsubr (&Srun_hook_with_args
);
3753 defsubr (&Srun_hook_with_args_until_success
);
3754 defsubr (&Srun_hook_with_args_until_failure
);
3755 defsubr (&Srun_hook_wrapped
);
3756 defsubr (&Sfetch_bytecode
);
3757 defsubr (&Sbacktrace_debug
);
3758 defsubr (&Sbacktrace
);
3759 defsubr (&Sbacktrace_frame
);
3760 defsubr (&Sbacktrace_eval
);
3761 defsubr (&Sbacktrace__locals
);
3762 defsubr (&Sspecial_variable_p
);
3763 defsubr (&Sfunctionp
);