summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2011-03-13 18:31:49 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2011-03-13 18:31:49 -0400
commit23aba0ea0e4922cfd8534f43667d3a758f2d2974 (patch)
tree798c1de793ca32e93da9edac4705bcdb93aeecc7 /src/eval.c
parent2ec42da9f0ddaaa9197617eb3e5a9d18ad2ba942 (diff)
downloademacs-23aba0ea0e4922cfd8534f43667d3a758f2d2974.tar.gz
* src/eval.c (Ffunction): Use simpler format for closures.
(Fcommandp, funcall_lambda): * src/doc.c (Fdocumentation, store_function_docstring): * src/data.c (Finteractive_form): * lisp/help-fns.el (help-function-arglist): * lisp/emacs-lisp/bytecomp.el (byte-compile-arglist-warn): * lisp/subr.el (apply-partially): Adjust to new closure format. * lisp/emacs-lisp/disass.el (disassemble-internal): Catch closures.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/eval.c b/src/eval.c
index 36c63a5c8a7..2fb89ce404e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -487,7 +487,8 @@ usage: (function ARG) */)
&& EQ (XCAR (quoted), Qlambda))
/* This is a lambda expression within a lexical environment;
return an interpreted closure instead of a simple lambda. */
- return Fcons (Qclosure, Fcons (Vinternal_interpreter_environment, quoted));
+ return Fcons (Qclosure, Fcons (Vinternal_interpreter_environment,
+ XCDR (quoted)));
else
/* Simply quote the argument. */
return quoted;
@@ -2079,8 +2080,8 @@ then strings and vectors are not accepted. */)
return Qnil;
funcar = XCAR (fun);
if (EQ (funcar, Qclosure))
- fun = Fcdr (XCDR (fun)), funcar = Fcar (fun);
- if (EQ (funcar, Qlambda))
+ return !NILP (Fassq (Qinteractive, Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop;
+ else if (EQ (funcar, Qlambda))
return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop;
else if (EQ (funcar, Qautoload))
return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop;
@@ -3121,7 +3122,7 @@ funcall_lambda (Lisp_Object fun, int nargs,
{
fun = XCDR (fun); /* Drop `closure'. */
lexenv = XCAR (fun);
- fun = XCDR (fun); /* Drop the lexical environment. */
+ CHECK_LIST_CONS (fun, fun);
}
else
lexenv = Qnil;