* lisp/emacs-lisp/bytecomp.el: Drop warning for loading into Emacs<23
Stash the major version of the compiling Emacs such that the loading Emacs can later detect when loading a file compiled by a too-new Emacs. (byte-compile-fix-header): Remove. (byte-compile-from-buffer): Don't call it any more. (byte-compile-insert-header): Stash the emacs-major-version in it. Don't leave space for `byte-compile-fix-header`.
This commit is contained in:
parent
6ce2052558
commit
e4fb95fa18
1 changed files with 15 additions and 53 deletions
|
@ -2140,50 +2140,9 @@ With argument ARG, insert value in current buffer after the form."
|
|||
;; 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))
|
||||
;; Fix up the header at the front of the output
|
||||
;; if the buffer contains multibyte characters.
|
||||
(and byte-compile-current-file
|
||||
(with-current-buffer byte-compile--outbuffer
|
||||
(byte-compile-fix-header byte-compile-current-file))))
|
||||
(byte-compile-warn-about-unresolved-functions)))
|
||||
byte-compile--outbuffer)))
|
||||
|
||||
(defun byte-compile-fix-header (_filename)
|
||||
"If the current buffer has any multibyte characters, insert a version test."
|
||||
(when (< (point-max) (position-bytes (point-max)))
|
||||
(goto-char (point-min))
|
||||
;; Find the comment that describes the version condition.
|
||||
(when (search-forward "\n;;; This file does not contain utf-8" nil t)
|
||||
(narrow-to-region (line-beginning-position) (point-max))
|
||||
;; Find the first line of ballast semicolons.
|
||||
(search-forward ";;;;;;;;;;")
|
||||
(beginning-of-line)
|
||||
(narrow-to-region (point-min) (point))
|
||||
(let ((old-header-end (point))
|
||||
(minimum-version "23")
|
||||
delta)
|
||||
(delete-region (point-min) (point-max))
|
||||
(insert
|
||||
";;; This file contains utf-8 non-ASCII characters,\n"
|
||||
";;; and so cannot be loaded into Emacs 22 or earlier.\n"
|
||||
;; Have to check if emacs-version is bound so that this works
|
||||
;; in files loaded early in loadup.el.
|
||||
"(and (boundp 'emacs-version)\n"
|
||||
;; If there is a name at the end of emacs-version,
|
||||
;; don't try to check the version number.
|
||||
" (< (aref emacs-version (1- (length emacs-version))) ?A)\n"
|
||||
(format " (string-lessp emacs-version \"%s\")\n" minimum-version)
|
||||
;; Because the header must fit in a fixed width, we cannot
|
||||
;; insert arbitrary-length file names (Bug#11585).
|
||||
" (error \"`%s' was compiled for "
|
||||
(format "Emacs %s or later\" #$))\n\n" minimum-version))
|
||||
;; Now compensate for any change in size, to make sure all
|
||||
;; positions in the file remain valid.
|
||||
(setq delta (- (point-max) old-header-end))
|
||||
(goto-char (point-max))
|
||||
(widen)
|
||||
(delete-char delta)))))
|
||||
|
||||
(defun byte-compile-insert-header (_filename outbuffer)
|
||||
"Insert a header at the start of OUTBUFFER.
|
||||
Call from the source buffer."
|
||||
|
@ -2201,7 +2160,19 @@ Call from the source buffer."
|
|||
;; 0 string ;ELC GNU Emacs Lisp compiled file,
|
||||
;; >4 byte x version %d
|
||||
(insert
|
||||
";ELC" 23 "\000\000\000\n"
|
||||
";ELC"
|
||||
(let ((version
|
||||
(if (zerop emacs-minor-version)
|
||||
;; Let's allow silently loading into Emacs-27
|
||||
;; files compiled with Emacs-28.0.NN since the two can
|
||||
;; be almost identical (e.g. right after cutting the
|
||||
;; release branch) and people running the development
|
||||
;; branch can be presumed to know that it's risky anyway.
|
||||
(1- emacs-major-version) emacs-major-version)))
|
||||
;; Make sure the version is a plain byte that doesn't end the comment!
|
||||
(cl-assert (and (> version 13) (< version 128)))
|
||||
version)
|
||||
"\000\000\000\n"
|
||||
";;; Compiled\n"
|
||||
";;; in Emacs version " emacs-version "\n"
|
||||
";;; with"
|
||||
|
@ -2213,16 +2184,7 @@ Call from the source buffer."
|
|||
".\n"
|
||||
(if dynamic ";;; Function definitions are lazy-loaded.\n"
|
||||
"")
|
||||
"\n"
|
||||
;; Note that byte-compile-fix-header may change this.
|
||||
";;; This file does not contain utf-8 non-ASCII characters,\n"
|
||||
";;; and so can be loaded in Emacs versions earlier than 23.\n\n"
|
||||
;; 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"
|
||||
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n\n"))))
|
||||
"\n\n"))))
|
||||
|
||||
(defun byte-compile-output-file-form (form)
|
||||
;; Write the given form to the output buffer, being careful of docstrings
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue