X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/8c536f15bf95916d56bb50495d22b7da7e09fff9..ba03d0d932888f687ae9c9fb12e20908c6b0620f:/lisp/emacs-lisp/byte-run.el diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el index df8f588ce0..b4582a41d6 100644 --- a/lisp/emacs-lisp/byte-run.el +++ b/lisp/emacs-lisp/byte-run.el @@ -70,30 +70,43 @@ The return value of this function is not used." ;; loaded by loadup.el that uses declarations in macros. (defvar defun-declarations-alist - ;; FIXME: Should we also add an `obsolete' property? (list - ;; Too bad we can't use backquote yet at this stage of the bootstrap. + ;; We can only use backquotes inside the lambdas and not for those + ;; properties that are used by functions loaded before backquote.el. (list 'advertised-calling-convention - #'(lambda (f arglist when) + #'(lambda (f _args arglist when) (list 'set-advertised-calling-convention (list 'quote f) (list 'quote arglist) (list 'quote when)))) + (list 'obsolete + #'(lambda (f _args new-name when) + `(make-obsolete ',f ',new-name ,when))) + (list 'compiler-macro + #'(lambda (f args compiler-function) + ;; FIXME: Make it possible to just reuse `args'. + `(eval-and-compile + (put ',f 'compiler-macro + ,(if (eq (car-safe compiler-function) 'lambda) + `(lambda ,(append (cadr compiler-function) args) + ,@(cddr compiler-function)) + `#',compiler-function))))) (list 'doc-string - #'(lambda (f pos) + #'(lambda (f _args pos) (list 'put (list 'quote f) ''doc-string-elt (list 'quote pos)))) (list 'indent - #'(lambda (f val) + #'(lambda (f _args val) (list 'put (list 'quote f) ''lisp-indent-function (list 'quote val))))) "List associating function properties to their macro expansion. Each element of the list takes the form (PROP FUN) where FUN is a function. For each (PROP . VALUES) in a function's declaration, -the FUN corresponding to PROP is called with the function name -and the VALUES and should return the code to use to set this property.") +the FUN corresponding to PROP is called with the function name, +the function's arglist, and the VALUES and should return the code to use +to set this property.") (defvar macro-declarations-alist (cons (list 'debug - #'(lambda (name spec) + #'(lambda (name _args spec) (list 'progn :autoload-end (list 'put (list 'quote name) ''edebug-form-spec (list 'quote spec))))) @@ -116,7 +129,8 @@ the list ARGS... as it appears in the expression, and the result should be a form to be evaluated instead of the original. DECL is a declaration, optional, of the form (declare DECLS...) where DECLS is a list of elements of the form (PROP . VALUES). These are -interpreted according to `macro-declarations-alist'." +interpreted according to `macro-declarations-alist'. +The return value is undefined." (if (stringp docstring) nil (if decl (setq body (cons decl body))) (setq decl docstring) @@ -135,7 +149,7 @@ interpreted according to `macro-declarations-alist'." (mapcar #'(lambda (x) (let ((f (cdr (assq (car x) macro-declarations-alist)))) - (if f (apply (car f) name (cdr x)) + (if f (apply (car f) name arglist (cdr x)) (message "Warning: Unknown macro property %S in %S" (car x) name)))) (cdr decl)))) @@ -151,6 +165,7 @@ See also the function `interactive'. DECL is a declaration, optional, of the form (declare DECLS...) where DECLS is a list of elements of the form (PROP . VALUES). These are interpreted according to `defun-declarations-alist'. +The return value is undefined. \(fn NAME ARGLIST &optional DOCSTRING DECL &rest BODY)" ;; We can't just have `decl' as an &optional argument, because we need @@ -171,16 +186,15 @@ interpreted according to `defun-declarations-alist'. #'(lambda (x) (let ((f (cdr (assq (car x) defun-declarations-alist)))) (cond - (f (apply (car f) name (cdr x))) + (f (apply (car f) name arglist (cdr x))) ;; Yuck!! ((and (featurep 'cl) (memq (car x) ;C.f. cl-do-proclaim. '(special inline notinline optimize warn))) - (if (null (stringp docstring)) - (push (list 'declare x) body) - (setcdr body (cons (list 'declare x) (cdr body)))) + (push (list 'declare x) + (if (stringp docstring) (cdr body) body)) nil) - (t (message "Warning: Unknown defun property %S in %S" + (t (message "Warning: Unknown defun property `%S' in %S" (car x) name))))) decls)) (def (list 'defalias @@ -224,7 +238,8 @@ interpreted according to `defun-declarations-alist'. ;; fns))) (defmacro defsubst (name arglist &rest body) - "Define an inline function. The syntax is just like that of `defun'." + "Define an inline function. The syntax is just like that of `defun'. +\(fn NAME ARGLIST &optional DOCSTRING DECL &rest BODY)" (declare (debug defun) (doc-string 3)) (or (memq (get name 'byte-optimizer) '(nil byte-compile-inline-expand)) @@ -245,7 +260,9 @@ convention was modified." advertised-signature-table)) (defun make-obsolete (obsolete-name current-name &optional when) - "Make the byte-compiler warn that OBSOLETE-NAME is obsolete. + "Make the byte-compiler warn that function OBSOLETE-NAME is obsolete. +OBSOLETE-NAME should be a function name or macro name (a symbol). + The warning will say that CURRENT-NAME should be used instead. If CURRENT-NAME is a string, that is the `use instead' message \(it should end with a period, and not start with a capital). @@ -304,7 +321,7 @@ This uses `defvaralias' and `make-obsolete-variable' (which see). See the Info node `(elisp)Variable Aliases' for more details. If CURRENT-NAME is a defcustom (more generally, any variable -where OBSOLETE-NAME may be set, e.g. in a .emacs file, before the +where OBSOLETE-NAME may be set, e.g. in an init file, before the alias is defined), then the define-obsolete-variable-alias statement should be evaluated before the defcustom, if user customizations are to be respected. The simplest way to achieve @@ -411,8 +428,8 @@ In interpreted code, this is entirely equivalent to `progn'." ;; nil) (make-obsolete-variable 'macro-declaration-function - 'macro-declarations-alist "24.2") + 'macro-declarations-alist "24.3") (make-obsolete 'macro-declaration-function - 'macro-declarations-alist "24.2") + 'macro-declarations-alist "24.3") ;;; byte-run.el ends here