Mercurial > emacs
changeset 44130:a9c023f8b14b
(byte-compile-file-form-defmumble):
Handle declarations in macro definitions.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Sun, 24 Mar 2002 19:47:26 +0000 |
parents | 444bd245e176 |
children | cd44b644b9dd |
files | lisp/emacs-lisp/bytecomp.el |
diffstat | 1 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el Sun Mar 24 19:46:58 2002 +0000 +++ b/lisp/emacs-lisp/bytecomp.el Sun Mar 24 19:47:26 2002 +0000 @@ -1,6 +1,6 @@ ;;; bytecomp.el --- compilation of Lisp code into byte code -;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1998, 2000, 2001 +;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1998, 2000, 2001, 2002 ;; Free Software Foundation, Inc. ;; Author: Jamie Zawinski <jwz@lucid.com> @@ -10,7 +10,7 @@ ;;; This version incorporates changes up to version 2.10 of the ;;; Zawinski-Furuseth compiler. -(defconst byte-compile-version "$Revision: 2.94 $") +(defconst byte-compile-version "$Revision: 2.95 $") ;; This file is part of GNU Emacs. @@ -1980,6 +1980,22 @@ (stringp (car-safe (cdr-safe (cdr-safe body))))) (byte-compile-warn "probable `\"' without `\\' in doc string of %s" (nth 1 form)))) + + ;; Generate code for declarations in macro definitions. + ;; Remove declarations from the body of the macro definition. + (when macrop + (let ((tail (nthcdr 2 form))) + (when (stringp (car (cdr tail))) + (setq tail (cdr tail))) + (while (and (consp (car (cdr tail))) + (eq (car (car (cdr tail))) 'declare)) + (let ((declaration (car (cdr tail)))) + (setcdr tail (cdr (cdr tail))) + (princ `(if macro-declaration-function + (funcall macro-declaration-function + ',name ',declaration)) + outbuffer))))) + (let* ((new-one (byte-compile-lambda (cons 'lambda (nthcdr 2 form)))) (code (byte-compile-byte-code-maker new-one))) (if this-one