Mercurial > emacs
changeset 8086:9f6348616e4d
(byte-compile-callargs-warn): Handle function defnition
that is not a lambda expression or byte code function.
(byte-compile-arglist-warn): Likewise.
(byte-compile-defalias): New function, used to compile defalias.
(byte-compile-defalias-warn): New function.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 29 Jun 1994 18:06:09 +0000 |
parents | c7eb887a1e78 |
children | c22d7c5168f5 |
files | lisp/emacs-lisp/bytecomp.el |
diffstat | 1 files changed, 36 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el Wed Jun 29 16:28:50 1994 +0000 +++ b/lisp/emacs-lisp/bytecomp.el Wed Jun 29 18:06:09 1994 +0000 @@ -834,7 +834,7 @@ (defun byte-compile-fdefinition (name macro-p) (let* ((list (if macro-p byte-compile-macro-environment - byte-compile-function-environment)) + byte-compile-function-environment)) (env (cdr (assq name list)))) (or env (let ((fn name)) @@ -899,7 +899,9 @@ (sig (and def (byte-compile-arglist-signature (if (eq 'lambda (car-safe def)) (nth 1 def) - (aref def 0))))) + (if (compiled-function-p def) + (aref def 0) + '(&rest def)))))) (ncall (length (cdr form)))) (if sig (if (or (< ncall (car sig)) @@ -932,7 +934,9 @@ (let ((sig1 (byte-compile-arglist-signature (if (eq 'lambda (car-safe old)) (nth 1 old) - (aref old 0)))) + (if (compiled-function-p old) + (aref old 0) + '(&rest def))))) (sig2 (byte-compile-arglist-signature (nth 2 form)))) (or (byte-compile-arglist-signatures-congruent-p sig1 sig2) (byte-compile-warn "%s %s used to take %s %s, now takes %s" @@ -2771,6 +2775,7 @@ (byte-defop-compiler-1 defconst byte-compile-defvar) (byte-defop-compiler-1 autoload) (byte-defop-compiler-1 lambda byte-compile-lambda-form) +(byte-defop-compiler-1 defalias) (defun byte-compile-defun (form) ;; This is not used for file-level defuns with doc strings. @@ -2827,6 +2832,34 @@ (defun byte-compile-lambda-form (form) (error "`lambda' used as function name is invalid")) +;; Compile normally, but deal with warnings for the function being defined. +(defun byte-compile-defalias (form) + (if (and (consp (cdr form)) (consp (nth 1 form)) + (eq (car (nth 1 form)) 'quote) + (consp (cdr (nth 1 form))) + (symbolp (nth 1 (nth 1 form))) + (consp (nthcdr 2 form)) + (consp (nth 2 form)) + (eq (car (nth 2 form)) 'quote) + (consp (cdr (nth 2 form))) + (symbolp (nth 1 (nth 2 form)))) + (progn + (byte-compile-defalias-warn (nth 1 (nth 1 form)) + (nth 1 (nth 2 form))) + (setq byte-compile-function-environment + (cons (cons (nth 1 (nth 1 form)) + (nth 1 (nth 2 form))) + byte-compile-function-environment)))) + (byte-compile-normal-call form))) + +;; Turn off warnings about prior calls to the function being defalias'd. +;; This could be smarter and compare those calls with +;; the function it is being aliased to. +(defun byte-compile-defalias-warn (new alias) + (let ((calls (assq new byte-compile-unresolved-functions))) + (if calls + (setq byte-compile-unresolved-functions + (delq calls byte-compile-unresolved-functions))))) ;;; tags