diff options
| author | Stefan Monnier | 2011-03-13 18:31:49 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2011-03-13 18:31:49 -0400 |
| commit | 23aba0ea0e4922cfd8534f43667d3a758f2d2974 (patch) | |
| tree | 798c1de793ca32e93da9edac4705bcdb93aeecc7 /src | |
| parent | 2ec42da9f0ddaaa9197617eb3e5a9d18ad2ba942 (diff) | |
| download | emacs-23aba0ea0e4922cfd8534f43667d3a758f2d2974.tar.gz emacs-23aba0ea0e4922cfd8534f43667d3a758f2d2974.zip | |
* 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')
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/data.c | 4 | ||||
| -rw-r--r-- | src/doc.c | 8 | ||||
| -rw-r--r-- | src/eval.c | 9 |
4 files changed, 17 insertions, 11 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index bbf7f99bb32..00d8e4b8ee3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2011-03-13 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * eval.c (Ffunction): Use simpler format for closures. | ||
| 4 | (Fcommandp, funcall_lambda): | ||
| 5 | * doc.c (Fdocumentation, store_function_docstring): | ||
| 6 | * data.c (Finteractive_form): Adjust to new closure format. | ||
| 7 | |||
| 1 | 2011-03-11 Stefan Monnier <monnier@iro.umontreal.ca> | 8 | 2011-03-11 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 9 | ||
| 3 | * eval.c (Fprog1, Fprog2): Simplify and use XCDR/XCAR. | 10 | * eval.c (Fprog1, Fprog2): Simplify and use XCDR/XCAR. |
diff --git a/src/data.c b/src/data.c index 186e9cb9859..6039743b1d5 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -746,8 +746,8 @@ Value, if non-nil, is a list \(interactive SPEC). */) | |||
| 746 | { | 746 | { |
| 747 | Lisp_Object funcar = XCAR (fun); | 747 | Lisp_Object funcar = XCAR (fun); |
| 748 | if (EQ (funcar, Qclosure)) | 748 | if (EQ (funcar, Qclosure)) |
| 749 | fun = Fcdr (XCDR (fun)), funcar = Fcar (fun); | 749 | return Fassq (Qinteractive, Fcdr (Fcdr (XCDR (fun)))); |
| 750 | if (EQ (funcar, Qlambda)) | 750 | else if (EQ (funcar, Qlambda)) |
| 751 | return Fassq (Qinteractive, Fcdr (XCDR (fun))); | 751 | return Fassq (Qinteractive, Fcdr (XCDR (fun))); |
| 752 | else if (EQ (funcar, Qautoload)) | 752 | else if (EQ (funcar, Qautoload)) |
| 753 | { | 753 | { |
| @@ -369,6 +369,7 @@ string is passed through `substitute-command-keys'. */) | |||
| 369 | else if (EQ (funcar, Qkeymap)) | 369 | else if (EQ (funcar, Qkeymap)) |
| 370 | return build_string ("Prefix command (definition is a keymap associating keystrokes with commands)."); | 370 | return build_string ("Prefix command (definition is a keymap associating keystrokes with commands)."); |
| 371 | else if (EQ (funcar, Qlambda) | 371 | else if (EQ (funcar, Qlambda) |
| 372 | || (EQ (funcar, Qclosure) && (fun = XCDR (fun), 1)) | ||
| 372 | || EQ (funcar, Qautoload)) | 373 | || EQ (funcar, Qautoload)) |
| 373 | { | 374 | { |
| 374 | Lisp_Object tem1; | 375 | Lisp_Object tem1; |
| @@ -384,8 +385,6 @@ string is passed through `substitute-command-keys'. */) | |||
| 384 | else | 385 | else |
| 385 | return Qnil; | 386 | return Qnil; |
| 386 | } | 387 | } |
| 387 | else if (EQ (funcar, Qclosure)) | ||
| 388 | return Fdocumentation (Fcdr (XCDR (fun)), raw); | ||
| 389 | else if (EQ (funcar, Qmacro)) | 388 | else if (EQ (funcar, Qmacro)) |
| 390 | return Fdocumentation (Fcdr (fun), raw); | 389 | return Fdocumentation (Fcdr (fun), raw); |
| 391 | else | 390 | else |
| @@ -505,7 +504,8 @@ store_function_docstring (Lisp_Object fun, EMACS_INT offset) | |||
| 505 | Lisp_Object tem; | 504 | Lisp_Object tem; |
| 506 | 505 | ||
| 507 | tem = XCAR (fun); | 506 | tem = XCAR (fun); |
| 508 | if (EQ (tem, Qlambda) || EQ (tem, Qautoload)) | 507 | if (EQ (tem, Qlambda) || EQ (tem, Qautoload) |
| 508 | || (EQ (tem, Qclosure) && (fun = XCDR (fun), 1))) | ||
| 509 | { | 509 | { |
| 510 | tem = Fcdr (Fcdr (fun)); | 510 | tem = Fcdr (Fcdr (fun)); |
| 511 | if (CONSP (tem) && INTEGERP (XCAR (tem))) | 511 | if (CONSP (tem) && INTEGERP (XCAR (tem))) |
| @@ -513,8 +513,6 @@ store_function_docstring (Lisp_Object fun, EMACS_INT offset) | |||
| 513 | } | 513 | } |
| 514 | else if (EQ (tem, Qmacro)) | 514 | else if (EQ (tem, Qmacro)) |
| 515 | store_function_docstring (XCDR (fun), offset); | 515 | store_function_docstring (XCDR (fun), offset); |
| 516 | else if (EQ (tem, Qclosure)) | ||
| 517 | store_function_docstring (Fcdr (XCDR (fun)), offset); | ||
| 518 | } | 516 | } |
| 519 | 517 | ||
| 520 | /* Bytecode objects sometimes have slots for it. */ | 518 | /* Bytecode objects sometimes have slots for it. */ |
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) */) | |||
| 487 | && EQ (XCAR (quoted), Qlambda)) | 487 | && EQ (XCAR (quoted), Qlambda)) |
| 488 | /* This is a lambda expression within a lexical environment; | 488 | /* This is a lambda expression within a lexical environment; |
| 489 | return an interpreted closure instead of a simple lambda. */ | 489 | return an interpreted closure instead of a simple lambda. */ |
| 490 | return Fcons (Qclosure, Fcons (Vinternal_interpreter_environment, quoted)); | 490 | return Fcons (Qclosure, Fcons (Vinternal_interpreter_environment, |
| 491 | XCDR (quoted))); | ||
| 491 | else | 492 | else |
| 492 | /* Simply quote the argument. */ | 493 | /* Simply quote the argument. */ |
| 493 | return quoted; | 494 | return quoted; |
| @@ -2079,8 +2080,8 @@ then strings and vectors are not accepted. */) | |||
| 2079 | return Qnil; | 2080 | return Qnil; |
| 2080 | funcar = XCAR (fun); | 2081 | funcar = XCAR (fun); |
| 2081 | if (EQ (funcar, Qclosure)) | 2082 | if (EQ (funcar, Qclosure)) |
| 2082 | fun = Fcdr (XCDR (fun)), funcar = Fcar (fun); | 2083 | return !NILP (Fassq (Qinteractive, Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop; |
| 2083 | if (EQ (funcar, Qlambda)) | 2084 | else if (EQ (funcar, Qlambda)) |
| 2084 | return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop; | 2085 | return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop; |
| 2085 | else if (EQ (funcar, Qautoload)) | 2086 | else if (EQ (funcar, Qautoload)) |
| 2086 | return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop; | 2087 | return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop; |
| @@ -3121,7 +3122,7 @@ funcall_lambda (Lisp_Object fun, int nargs, | |||
| 3121 | { | 3122 | { |
| 3122 | fun = XCDR (fun); /* Drop `closure'. */ | 3123 | fun = XCDR (fun); /* Drop `closure'. */ |
| 3123 | lexenv = XCAR (fun); | 3124 | lexenv = XCAR (fun); |
| 3124 | fun = XCDR (fun); /* Drop the lexical environment. */ | 3125 | CHECK_LIST_CONS (fun, fun); |
| 3125 | } | 3126 | } |
| 3126 | else | 3127 | else |
| 3127 | lexenv = Qnil; | 3128 | lexenv = Qnil; |