diff options
author | Miles Bader <miles@gnu.org> | 2007-07-27 10:52:18 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-07-27 10:52:18 +0000 |
commit | e468b87f91f26e66a8cde087c1a9c89c67b96d12 (patch) | |
tree | 7cf1ded30152bb0ddd4bbff544693a05b3b62911 /lisp/emacs-lisp/advice.el | |
parent | b692c96bfa9b8bedd6e093a6c571624442db2e2a (diff) | |
parent | 05bfa8f34f3eedec3ad2fdb45971476a8c8f49b1 (diff) | |
download | emacs-e468b87f91f26e66a8cde087c1a9c89c67b96d12.tar.gz emacs-e468b87f91f26e66a8cde087c1a9c89c67b96d12.tar.bz2 emacs-e468b87f91f26e66a8cde087c1a9c89c67b96d12.zip |
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 824-831)
- Update from CVS
- Merge from emacs--rel--22
* emacs--rel--22 (patch 70-74)
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-238
Diffstat (limited to 'lisp/emacs-lisp/advice.el')
-rw-r--r-- | lisp/emacs-lisp/advice.el | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el index 0123124b26d..c6e80453d72 100644 --- a/lisp/emacs-lisp/advice.el +++ b/lisp/emacs-lisp/advice.el @@ -12,7 +12,7 @@ ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) +;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, @@ -2473,10 +2473,6 @@ will clear the cache." (setq definition (indirect-function definition))) (and (subrp definition) (eq (cdr (subr-arity definition)) 'unevalled))) -(defmacro ad-interactive-p (definition) - ;;"non-nil if DEFINITION can be called interactively." - (list 'commandp definition)) - (defmacro ad-subr-p (definition) ;;"non-nil if DEFINITION is a subr." (list 'subrp definition)) @@ -2590,22 +2586,13 @@ that property, or otherwise use `(&rest ad-subr-args)'." (natnump docstring)) docstring))) -(defun ad-interactive-form (definition) - "Return the interactive form of DEFINITION." - (cond ((ad-compiled-p definition) - (and (commandp definition) - (list 'interactive (aref (ad-compiled-code definition) 5)))) - ((or (ad-advice-p definition) - (ad-lambda-p definition)) - (commandp (ad-lambda-expression definition))))) - (defun ad-body-forms (definition) "Return the list of body forms of DEFINITION." (cond ((ad-compiled-p definition) nil) ((consp definition) (nthcdr (+ (if (ad-docstring definition) 1 0) - (if (ad-interactive-form definition) 1 0)) + (if (interactive-form definition) 1 0)) (cdr (cdr (ad-lambda-expression definition))))))) ;; Matches the docstring of an advised definition. @@ -3037,7 +3024,7 @@ in any of these classes." (ad-get-enabled-advices function 'around) (ad-get-enabled-advices function 'after))) (let ((interactive-form - (ad-interactive-form (ad-advice-definition advice)))) + (interactive-form (ad-advice-definition advice)))) (if interactive-form ;; We found the first one, use it: (ad-do-return interactive-form))))) @@ -3051,7 +3038,7 @@ in any of these classes." (ad-has-redefining-advice function)) (let* ((origdef (ad-real-orig-definition function)) (origname (ad-get-advice-info-field function 'origname)) - (orig-interactive-p (ad-interactive-p origdef)) + (orig-interactive-p (commandp origdef)) (orig-subr-p (ad-subr-p origdef)) (orig-special-form-p (ad-special-form-p origdef)) (orig-macro-p (ad-macro-p origdef)) @@ -3063,15 +3050,11 @@ in any of these classes." (interactive-form (cond (orig-macro-p nil) (advised-interactive-form) - ((ad-interactive-form origdef) - (if (and (symbolp function) (get function 'elp-info)) - (interactive-form (aref (get function 'elp-info) 2)) - (ad-interactive-form origdef))) - ;; Otherwise we must have a subr: make it interactive if - ;; we have to and initialize required arguments in case - ;; it is called interactively: - (orig-interactive-p - (interactive-form origdef)))) + ((interactive-form origdef) + (interactive-form + (if (and (symbolp function) (get function 'elp-info)) + (aref (get function 'elp-info) 2) + origdef))))) (orig-form (cond ((or orig-special-form-p orig-macro-p) ;; Special forms and macros will be advised into macros. @@ -3294,8 +3277,8 @@ advised definition from scratch." t (ad-arglist original-definition function)) (if (eq (ad-definition-type original-definition) 'function) - (equal (ad-interactive-form original-definition) - (ad-interactive-form cached-definition)))))) + (equal (interactive-form original-definition) + (interactive-form cached-definition)))))) (defun ad-get-cache-class-id (function class) "Return the part of FUNCTION's cache id that identifies CLASS." @@ -3342,8 +3325,8 @@ advised definition from scratch." (ad-arglist cached-definition)) (setq code 'interactive-form-mismatch) (or (null (nth 5 cache-id)) - (equal (ad-interactive-form original-definition) - (ad-interactive-form cached-definition))) + (equal (interactive-form original-definition) + (interactive-form cached-definition))) (setq code 'verified)))) code)) |