From 997011eb62f97c6f66d822682c7375e213ed6a2c Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 16 Oct 2004 15:20:24 +0000 Subject: (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. --- lisp/emacs-lisp/bytecomp.el | 58 ++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 22 deletions(-) (limited to 'lisp/emacs-lisp') diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 2b0a8e698a6..118352937bd 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -792,7 +792,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'." (let ((xs (pop hist-new)) old-autoloads) ;; 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) (cond ((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))) (push s byte-compile-noruntime-functions)) (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) "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. (defun byte-compile-log-1 (string) (with-current-buffer "*Compile-Log*" - (goto-char (point-max)) - (byte-compile-warning-prefix nil nil) - (cond (noninteractive - (message " %s" string)) - (t - (insert (format "%s\n" string)))))) + (let ((inhibit-read-only t)) + (goto-char (point-max)) + (byte-compile-warning-prefix nil nil) + (cond (noninteractive + (message " %s" string)) + (t + (insert (format "%s\n" string))))))) (defvar byte-compile-read-position nil "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. ;; It is always called with the warnings buffer current. (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) (format "%s:" (file-relative-name byte-compile-current-file dir))) ((bufferp byte-compile-current-file) @@ -950,7 +964,8 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'." (save-excursion (set-buffer (get-buffer-create "*Compile-Log*")) (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))) (was-same (equal default-directory dir)) 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) (let ((warning-prefix-function 'byte-compile-warning-prefix) (warning-type-format "") - (warning-fill-prefix (if fill " "))) + (warning-fill-prefix (if fill " ")) + (inhibit-read-only t)) (display-warning 'bytecomp string level "*Compile-Log*"))) (defun byte-compile-warn (format &rest args) @@ -2140,17 +2156,15 @@ list that represents a doc string reference. (setq tail (cdr tail)))) form) -(put 'require 'byte-hunk-handler 'byte-compile-file-form-eval-boundary) -(defun byte-compile-file-form-eval-boundary (form) - (let ((old-load-list current-load-list)) - (eval form) - ;; (require 'cl) turns off warnings for cl functions. - (let ((tem current-load-list)) - (while (not (eq tem old-load-list)) - (when (equal (car tem) '(require . cl)) - (setq byte-compile-warnings - (remq 'cl-functions byte-compile-warnings))) - (setq tem (cdr tem))))) +(put 'require 'byte-hunk-handler 'byte-compile-file-form-require) +(defun byte-compile-file-form-require (form) + (let ((old-load-list current-load-list) + (args (mapcar 'eval (cdr form)))) + (apply 'require args) + ;; Detech (require 'cl) in a way that works even if cl is already loaded. + (if (member (car args) '("cl" cl)) + (setq byte-compile-warnings + (remq 'cl-functions byte-compile-warnings)))) (byte-compile-keep-pending form 'byte-compile-normal-call)) (put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn) -- cgit v1.2.3 From 61f1ca4e1d1f43a37a5c7a0b7df85ff13c78be18 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 16 Oct 2004 15:21:10 +0000 Subject: (cl-unload-hook): Don't defvar it, just set it. --- lisp/emacs-lisp/cl.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'lisp/emacs-lisp') diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index b098a467f9f..2f6c799f528 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -108,8 +108,7 @@ printer proceeds to the next function on the list. This variable is not used at present, but it is defined in hopes that a future Emacs interpreter will be able to use it.") -(defvar cl-unload-hook '(cl-cannot-unload) - "Prevent unloading the feature `cl', since it does not work.") +(add-hook 'cl-unload-hook 'cl-cannot-unload) (defun cl-cannot-unload () (error "Cannot unload the feature `cl'")) -- cgit v1.2.3 From 5172bdd1bbc40ea05104e59eccc97849abb35669 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 16 Oct 2004 15:22:00 +0000 Subject: (elp-unload-hook): Set the variable. --- lisp/emacs-lisp/elp.el | 1 + 1 file changed, 1 insertion(+) (limited to 'lisp/emacs-lisp') diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el index f8d41f200d2..17991067fab 100644 --- a/lisp/emacs-lisp/elp.el +++ b/lisp/emacs-lisp/elp.el @@ -626,6 +626,7 @@ displayed." (defun elp-unload-hook () (elp-restore-all)) +(add-hook 'elp-unload-hook 'elp-unload-hook) (provide 'elp) -- cgit v1.2.3