# HG changeset patch # User Richard M. Stallman # Date 1199424884 0 # Node ID d0544447616abdde5d314023dcf20792e5e91dea # Parent 81439a161f10cf22930efff3cca2bd4425fb24d5 (byte-compile-from-buffer): Call byte-compile-warn-about-unresolved-functions outside the with-current-buffer. (byte-compile-insert-header): Use with-current-buffer. diff -r 81439a161f10 -r d0544447616a lisp/emacs-lisp/bytecomp.el --- a/lisp/emacs-lisp/bytecomp.el Fri Jan 04 03:16:19 2008 +0000 +++ b/lisp/emacs-lisp/bytecomp.el Fri Jan 04 05:34:44 2008 +0000 @@ -1920,8 +1920,8 @@ (byte-compile-flush-pending) ;; Make warnings about unresolved functions ;; give the end of the file as their position. - (setq byte-compile-last-position (point-max)) - (byte-compile-warn-about-unresolved-functions)) + (setq byte-compile-last-position (point-max))) + (byte-compile-warn-about-unresolved-functions) ;; Fix up the header at the front of the output ;; if the buffer contains multibyte characters. (and filename (byte-compile-fix-header filename inbuffer outbuffer)))) @@ -1964,88 +1964,88 @@ (delete-char delta))))) (defun byte-compile-insert-header (filename inbuffer outbuffer) - (set-buffer inbuffer) - (let ((dynamic-docstrings byte-compile-dynamic-docstrings) - (dynamic byte-compile-dynamic)) - (set-buffer outbuffer) - (goto-char (point-min)) - ;; The magic number of .elc files is ";ELC", or 0x3B454C43. After - ;; that is the file-format version number (18, 19 or 20) as a - ;; byte, followed by some nulls. The primary motivation for doing - ;; this is to get some binary characters up in the first line of - ;; the file so that `diff' will simply say "Binary files differ" - ;; instead of actually doing a diff of two .elc files. An extra - ;; benefit is that you can add this to /etc/magic: - - ;; 0 string ;ELC GNU Emacs Lisp compiled file, - ;; >4 byte x version %d - - (insert - ";ELC" - (if (byte-compile-version-cond byte-compile-compatibility) 18 20) - "\000\000\000\n" - ) - (insert ";;; Compiled by " - (or (and (boundp 'user-mail-address) user-mail-address) - (concat (user-login-name) "@" (system-name))) - " on " - (current-time-string) "\n;;; from file " filename "\n") - (insert ";;; in Emacs version " emacs-version "\n") - (insert ";;; " - (cond - ((eq byte-optimize 'source) "with source-level optimization only") - ((eq byte-optimize 'byte) "with byte-level optimization only") - (byte-optimize "with all optimizations") - (t "without optimization")) - (if (byte-compile-version-cond byte-compile-compatibility) - "; compiled with Emacs 18 compatibility.\n" - ".\n")) - (if dynamic - (insert ";;; Function definitions are lazy-loaded.\n")) - (if (not (byte-compile-version-cond byte-compile-compatibility)) - (let (intro-string minimum-version) - ;; Figure out which Emacs version to require, - ;; and what comment to use to explain why. - ;; Note that this fails to take account of whether - ;; the buffer contains multibyte characters. We may have to - ;; compensate at the end in byte-compile-fix-header. - (if dynamic-docstrings + (with-current-buffer inbuffer + (let ((dynamic-docstrings byte-compile-dynamic-docstrings) + (dynamic byte-compile-dynamic)) + (set-buffer outbuffer) + (goto-char (point-min)) + ;; The magic number of .elc files is ";ELC", or 0x3B454C43. After + ;; that is the file-format version number (18, 19 or 20) as a + ;; byte, followed by some nulls. The primary motivation for doing + ;; this is to get some binary characters up in the first line of + ;; the file so that `diff' will simply say "Binary files differ" + ;; instead of actually doing a diff of two .elc files. An extra + ;; benefit is that you can add this to /etc/magic: + + ;; 0 string ;ELC GNU Emacs Lisp compiled file, + ;; >4 byte x version %d + + (insert + ";ELC" + (if (byte-compile-version-cond byte-compile-compatibility) 18 20) + "\000\000\000\n" + ) + (insert ";;; Compiled by " + (or (and (boundp 'user-mail-address) user-mail-address) + (concat (user-login-name) "@" (system-name))) + " on " + (current-time-string) "\n;;; from file " filename "\n") + (insert ";;; in Emacs version " emacs-version "\n") + (insert ";;; " + (cond + ((eq byte-optimize 'source) "with source-level optimization only") + ((eq byte-optimize 'byte) "with byte-level optimization only") + (byte-optimize "with all optimizations") + (t "without optimization")) + (if (byte-compile-version-cond byte-compile-compatibility) + "; compiled with Emacs 18 compatibility.\n" + ".\n")) + (if dynamic + (insert ";;; Function definitions are lazy-loaded.\n")) + (if (not (byte-compile-version-cond byte-compile-compatibility)) + (let (intro-string minimum-version) + ;; Figure out which Emacs version to require, + ;; and what comment to use to explain why. + ;; Note that this fails to take account of whether + ;; the buffer contains multibyte characters. We may have to + ;; compensate at the end in byte-compile-fix-header. + (if dynamic-docstrings + (setq intro-string + ";;; This file uses dynamic docstrings, first added in Emacs 19.29.\n" + minimum-version "19.29") (setq intro-string - ";;; This file uses dynamic docstrings, first added in Emacs 19.29.\n" - minimum-version "19.29") - (setq intro-string - ";;; This file uses opcodes which do not exist in Emacs 18.\n" - minimum-version "19")) - ;; Now insert the comment and the error check. - (insert - "\n" - intro-string - ;; Have to check if emacs-version is bound so that this works - ;; in files loaded early in loadup.el. - "(if (and (boundp 'emacs-version)\n" - ;; If there is a name at the end of emacs-version, - ;; don't try to check the version number. - "\t (< (aref emacs-version (1- (length emacs-version))) ?A)\n" - "\t (or (and (boundp 'epoch::version) epoch::version)\n" - (format "\t (string-lessp emacs-version \"%s\")))\n" - minimum-version) - " (error \"`" - ;; prin1-to-string is used to quote backslashes. - (substring (prin1-to-string (file-name-nondirectory filename)) - 1 -1) - (format "' was compiled for Emacs %s or later\"))\n\n" - minimum-version) - ;; Insert semicolons as ballast, so that byte-compile-fix-header - ;; can delete them so as to keep the buffer positions - ;; constant for the actual compiled code. - ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")) - ;; Here if we want Emacs 18 compatibility. - (when dynamic-docstrings - (error "Version-18 compatibility doesn't support dynamic doc strings")) - (when byte-compile-dynamic - (error "Version-18 compatibility doesn't support dynamic byte code")) - (insert "(or (boundp 'current-load-list) (setq current-load-list nil))\n" - "\n")))) + ";;; This file uses opcodes which do not exist in Emacs 18.\n" + minimum-version "19")) + ;; Now insert the comment and the error check. + (insert + "\n" + intro-string + ;; Have to check if emacs-version is bound so that this works + ;; in files loaded early in loadup.el. + "(if (and (boundp 'emacs-version)\n" + ;; If there is a name at the end of emacs-version, + ;; don't try to check the version number. + "\t (< (aref emacs-version (1- (length emacs-version))) ?A)\n" + "\t (or (and (boundp 'epoch::version) epoch::version)\n" + (format "\t (string-lessp emacs-version \"%s\")))\n" + minimum-version) + " (error \"`" + ;; prin1-to-string is used to quote backslashes. + (substring (prin1-to-string (file-name-nondirectory filename)) + 1 -1) + (format "' was compiled for Emacs %s or later\"))\n\n" + minimum-version) + ;; Insert semicolons as ballast, so that byte-compile-fix-header + ;; can delete them so as to keep the buffer positions + ;; constant for the actual compiled code. + ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n")) + ;; Here if we want Emacs 18 compatibility. + (when dynamic-docstrings + (error "Version-18 compatibility doesn't support dynamic doc strings")) + (when byte-compile-dynamic + (error "Version-18 compatibility doesn't support dynamic byte code")) + (insert "(or (boundp 'current-load-list) (setq current-load-list nil))\n" + "\n"))))) (defun byte-compile-output-file-form (form) ;; writes the given form to the output buffer, being careful of docstrings