diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2011-03-13 18:31:49 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2011-03-13 18:31:49 -0400 |
commit | 23aba0ea0e4922cfd8534f43667d3a758f2d2974 (patch) | |
tree | 798c1de793ca32e93da9edac4705bcdb93aeecc7 /src/eval.c | |
parent | 2ec42da9f0ddaaa9197617eb3e5a9d18ad2ba942 (diff) | |
download | emacs-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.c | 9 |
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; |