Commit bc4ed683 authored by Paul Eggert's avatar Paul Eggert
Browse files

Fix comment and tweak eval_sub

* src/eval.c (eval_sub): Check whether Fassq returns Qnil,
not whether it returns a cons, as NILP is faster than CONSP
nowadays.  Remove incorrect comment “only original_fun and
original_args have values that will be used below”; instead,
move declarations around so that the set of variables with
useful values is obvious.
parent 7d84056d
...@@ -2153,14 +2153,6 @@ record_in_backtrace (Lisp_Object function, Lisp_Object *args, ptrdiff_t nargs) ...@@ -2153,14 +2153,6 @@ record_in_backtrace (Lisp_Object function, Lisp_Object *args, ptrdiff_t nargs)
Lisp_Object Lisp_Object
eval_sub (Lisp_Object form) eval_sub (Lisp_Object form)
{ {
Lisp_Object fun, val, original_fun, original_args;
Lisp_Object funcar;
ptrdiff_t count;
/* Declare here, as this array may be accessed by call_debugger near
the end of this function. See Bug#21245. */
Lisp_Object argvals[8];
if (SYMBOLP (form)) if (SYMBOLP (form))
{ {
/* Look up its binding in the lexical environment. /* Look up its binding in the lexical environment.
...@@ -2170,10 +2162,7 @@ eval_sub (Lisp_Object form) ...@@ -2170,10 +2162,7 @@ eval_sub (Lisp_Object form)
= !NILP (Vinternal_interpreter_environment) /* Mere optimization! */ = !NILP (Vinternal_interpreter_environment) /* Mere optimization! */
? Fassq (form, Vinternal_interpreter_environment) ? Fassq (form, Vinternal_interpreter_environment)
: Qnil; : Qnil;
if (CONSP (lex_binding)) return !NILP (lex_binding) ? XCDR (lex_binding) : Fsymbol_value (form);
return XCDR (lex_binding);
else
return Fsymbol_value (form);
} }
if (!CONSP (form)) if (!CONSP (form))
...@@ -2191,18 +2180,22 @@ eval_sub (Lisp_Object form) ...@@ -2191,18 +2180,22 @@ eval_sub (Lisp_Object form)
error ("Lisp nesting exceeds `max-lisp-eval-depth'"); error ("Lisp nesting exceeds `max-lisp-eval-depth'");
} }
original_fun = XCAR (form); Lisp_Object original_fun = XCAR (form);
original_args = XCDR (form); Lisp_Object original_args = XCDR (form);
CHECK_LIST (original_args); CHECK_LIST (original_args);
/* This also protects them from gc. */ /* This also protects them from gc. */
count = record_in_backtrace (original_fun, &original_args, UNEVALLED); ptrdiff_t count
= record_in_backtrace (original_fun, &original_args, UNEVALLED);
if (debug_on_next_call) if (debug_on_next_call)
do_debug_on_call (Qt, count); do_debug_on_call (Qt, count);
/* At this point, only original_fun and original_args Lisp_Object fun, val, funcar;
have values that will be used below. */ /* Declare here, as this array may be accessed by call_debugger near
the end of this function. See Bug#21245. */
Lisp_Object argvals[8];
retry: retry:
/* Optimize for no indirection. */ /* Optimize for no indirection. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment