1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-07 15:00:34 -08:00

(byte-compile-eval): Don't process

"cl" like other files.  Instead, call byte-compile-find-cl-functions.
(byte-compile-file-form-require): Detect "cl" from the arg value.

(byte-compile-log-1): Bind inhibit-read-only.
(byte-compile-warning-prefix, byte-compile-log-file): Likewise.
(byte-compile-log-warning): Likewise.
This commit is contained in:
Richard M. Stallman 2004-10-16 15:20:24 +00:00
parent d42c87ab53
commit 997011eb62

View file

@ -792,7 +792,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(let ((xs (pop hist-new)) (let ((xs (pop hist-new))
old-autoloads) old-autoloads)
;; Make sure the file was not already loaded before. ;; Make sure the file was not already loaded before.
(unless (assoc (car xs) hist-orig) (unless (or (assoc (car xs) hist-orig)
(equal (car xs) "cl"))
(dolist (s xs) (dolist (s xs)
(cond (cond
((symbolp s) ((symbolp s)
@ -809,7 +810,18 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(when (and (symbolp s) (not (memq s old-autoloads))) (when (and (symbolp s) (not (memq s old-autoloads)))
(push s byte-compile-noruntime-functions)) (push s byte-compile-noruntime-functions))
(when (and (consp s) (eq t (car s))) (when (and (consp s) (eq t (car s)))
(push (cdr s) old-autoloads)))))))))) (push (cdr s) old-autoloads)))))))
(when (memq 'cl-functions byte-compile-warnings)
(let ((hist-new load-history)
(hist-nil-new current-load-list))
;; Go through load-history, look for newly loaded files
;; and mark all the functions defined therein.
(while (and hist-new (not (eq hist-new hist-orig)))
(let ((xs (pop hist-new))
old-autoloads)
;; Make sure the file was not already loaded before.
(when (and (equal (car xs) "cl") (not (assoc (car xs) hist-orig)))
(byte-compile-find-cl-functions)))))))))
(defun byte-compile-eval-before-compile (form) (defun byte-compile-eval-before-compile (form)
"Evaluate FORM for `eval-and-compile'." "Evaluate FORM for `eval-and-compile'."
@ -848,12 +860,13 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
;; Log something that isn't a warning. ;; Log something that isn't a warning.
(defun byte-compile-log-1 (string) (defun byte-compile-log-1 (string)
(with-current-buffer "*Compile-Log*" (with-current-buffer "*Compile-Log*"
(goto-char (point-max)) (let ((inhibit-read-only t))
(byte-compile-warning-prefix nil nil) (goto-char (point-max))
(cond (noninteractive (byte-compile-warning-prefix nil nil)
(message " %s" string)) (cond (noninteractive
(t (message " %s" string))
(insert (format "%s\n" string)))))) (t
(insert (format "%s\n" string)))))))
(defvar byte-compile-read-position nil (defvar byte-compile-read-position nil
"Character position we began the last `read' from.") "Character position we began the last `read' from.")
@ -904,7 +917,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
;; This is used as warning-prefix for the compiler. ;; This is used as warning-prefix for the compiler.
;; It is always called with the warnings buffer current. ;; It is always called with the warnings buffer current.
(defun byte-compile-warning-prefix (level entry) (defun byte-compile-warning-prefix (level entry)
(let* ((dir default-directory) (let* ((inhibit-read-only t)
(dir default-directory)
(file (cond ((stringp byte-compile-current-file) (file (cond ((stringp byte-compile-current-file)
(format "%s:" (file-relative-name byte-compile-current-file dir))) (format "%s:" (file-relative-name byte-compile-current-file dir)))
((bufferp byte-compile-current-file) ((bufferp byte-compile-current-file)
@ -950,7 +964,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(save-excursion (save-excursion
(set-buffer (get-buffer-create "*Compile-Log*")) (set-buffer (get-buffer-create "*Compile-Log*"))
(goto-char (point-max)) (goto-char (point-max))
(let* ((dir (and byte-compile-current-file (let* ((inhibit-read-only t)
(dir (and byte-compile-current-file
(file-name-directory byte-compile-current-file))) (file-name-directory byte-compile-current-file)))
(was-same (equal default-directory dir)) (was-same (equal default-directory dir))
pt) pt)
@ -984,7 +999,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(defun byte-compile-log-warning (string &optional fill level) (defun byte-compile-log-warning (string &optional fill level)
(let ((warning-prefix-function 'byte-compile-warning-prefix) (let ((warning-prefix-function 'byte-compile-warning-prefix)
(warning-type-format "") (warning-type-format "")
(warning-fill-prefix (if fill " "))) (warning-fill-prefix (if fill " "))
(inhibit-read-only t))
(display-warning 'bytecomp string level "*Compile-Log*"))) (display-warning 'bytecomp string level "*Compile-Log*")))
(defun byte-compile-warn (format &rest args) (defun byte-compile-warn (format &rest args)
@ -2140,17 +2156,15 @@ list that represents a doc string reference.
(setq tail (cdr tail)))) (setq tail (cdr tail))))
form) form)
(put 'require 'byte-hunk-handler 'byte-compile-file-form-eval-boundary) (put 'require 'byte-hunk-handler 'byte-compile-file-form-require)
(defun byte-compile-file-form-eval-boundary (form) (defun byte-compile-file-form-require (form)
(let ((old-load-list current-load-list)) (let ((old-load-list current-load-list)
(eval form) (args (mapcar 'eval (cdr form))))
;; (require 'cl) turns off warnings for cl functions. (apply 'require args)
(let ((tem current-load-list)) ;; Detech (require 'cl) in a way that works even if cl is already loaded.
(while (not (eq tem old-load-list)) (if (member (car args) '("cl" cl))
(when (equal (car tem) '(require . cl)) (setq byte-compile-warnings
(setq byte-compile-warnings (remq 'cl-functions byte-compile-warnings))))
(remq 'cl-functions byte-compile-warnings)))
(setq tem (cdr tem)))))
(byte-compile-keep-pending form 'byte-compile-normal-call)) (byte-compile-keep-pending form 'byte-compile-normal-call))
(put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn) (put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn)