diff options
author | Gerd Moellmann <gerd@gnu.org> | 2002-03-24 19:48:27 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2002-03-24 19:48:27 +0000 |
commit | 985b468607df1d1c9b703ffc3fb3f0ba91676905 (patch) | |
tree | 6441b7a8d0bf4776511614b649c0af78fdf226b6 /lisp/emacs-lisp/bytecomp.el | |
parent | 2c642c03dfc9b49880a673ef6946af74c7d8c99d (diff) | |
download | emacs-985b468607df1d1c9b703ffc3fb3f0ba91676905.tar.gz emacs-985b468607df1d1c9b703ffc3fb3f0ba91676905.tar.bz2 emacs-985b468607df1d1c9b703ffc3fb3f0ba91676905.zip |
(byte-compile-file-form-defmumble):
Handle declarations in macro definitions.
Diffstat (limited to 'lisp/emacs-lisp/bytecomp.el')
-rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 7fabdd603a8..f569a292816 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -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 @@ list that represents a doc string reference. (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 |