changeset 47110:ce17d4a1d32e

(byte-compile-warning-prefix): Decide here whether to print which form we're compiling. If we do that, still print file and line. Make file name relative to default-directory. Print fewer newlines. (byte-compile-log-file): Print something even if no file. Print messages for entering and leaving directories, and set default-directory. (displaying-byte-compile-warnings): Only sometimes bind warning-series. (byte-compile-warning-series): New function. (byte-compile-file): Set byte-compile-last-logged-file, don't bind it. (byte-compile-display-log-head-p): Function deleted.
author Richard M. Stallman <rms@gnu.org>
date Thu, 29 Aug 2002 17:26:47 +0000
parents 796b2ef84d40
children 356bbdda5f67
files lisp/emacs-lisp/bytecomp.el
diffstat 1 files changed, 72 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/bytecomp.el	Thu Aug 29 16:46:11 2002 +0000
+++ b/lisp/emacs-lisp/bytecomp.el	Thu Aug 29 17:26:47 2002 +0000
@@ -10,7 +10,7 @@
 
 ;;; This version incorporates changes up to version 2.10 of the
 ;;; Zawinski-Furuseth compiler.
-(defconst byte-compile-version "$Revision: 2.109 $")
+(defconst byte-compile-version "$Revision: 2.110 $")
 
 ;; This file is part of GNU Emacs.
 
@@ -888,27 +888,17 @@
 (defvar byte-compile-last-warned-form nil)
 (defvar byte-compile-last-logged-file nil)
 
-;; Return non-nil if should say what defun we are in.
-(defun byte-compile-display-log-head-p ()
-  (and (not (eq byte-compile-current-form :end))
-       (or (and byte-compile-current-file
-		(not (equal byte-compile-current-file
-			    byte-compile-last-logged-file)))
-	   (and byte-compile-last-warned-form
-		(not (eq byte-compile-current-form
-			 byte-compile-last-warned-form))))))
-
 (defun byte-goto-log-buffer ()
   (set-buffer (get-buffer-create "*Compile-Log*"))
   (unless (eq major-mode 'compilation-mode)
     (compilation-mode)))
 
 ;; 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)
-  (save-current-buffer
-    (byte-goto-log-buffer))
-  (let* ((file (cond ((stringp byte-compile-current-file)
-		      (format "%s:" byte-compile-current-file))
+  (let* ((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)
 		      (format "Buffer %s:"
 			      (buffer-name byte-compile-current-file)))
@@ -922,32 +912,57 @@
 			      (goto-char byte-compile-last-position)
 			      (1+ (current-column)))))
 		""))
-	 (form (or byte-compile-current-form "toplevel form")))
-    (when (byte-compile-display-log-head-p)
+	 (form (if (eq byte-compile-current-form :end) "end of data"
+		 (or byte-compile-current-form "toplevel form"))))
+    (when (or (and byte-compile-current-file
+		   (not (equal byte-compile-current-file
+			       byte-compile-last-logged-file)))
+	      (and byte-compile-last-warned-form
+		   (not (eq byte-compile-current-form
+			    byte-compile-last-warned-form))))
       (insert (format "\nIn %s:\n" form)))
-    (when (and level (not (byte-compile-display-log-head-p)))
-      (insert (format "\n%s%s\n" file pos))))
+    (when level
+      (insert (format "%s%s" file pos))))
   (setq byte-compile-last-logged-file byte-compile-current-file
 	byte-compile-last-warned-form byte-compile-current-form)
   entry)
 
+;; This no-op function is used as the value of warning-series
+;; to tell inner calls to displaying-byte-compile-warnings
+;; not to bind warning-series.
+(defun byte-compile-warning-series (&rest ignore)
+  nil)
+
 ;; Log the start of a file in *Compile-Log*, and mark it as done.
 ;; Return the position of the start of the page in the log buffer.
 ;; But do nothing in batch mode.
 (defun byte-compile-log-file ()
-  (and byte-compile-current-file
-       (not (equal byte-compile-current-file byte-compile-last-logged-file))
+  (and (not (equal byte-compile-current-file byte-compile-last-logged-file))
        (not noninteractive)
        (save-excursion
 	 (byte-goto-log-buffer)
 	 (goto-char (point-max))
-	 (insert "\n")
-	 (let ((pt (point)))
-	   (insert "\f\nCompiling "
-		   (if (stringp byte-compile-current-file)
-		       (concat "file " byte-compile-current-file)
-		     (concat "buffer " (buffer-name byte-compile-current-file)))
-		   " at " (current-time-string) "\n")
+	 (let* ((dir (and byte-compile-current-file
+			  (file-name-directory byte-compile-current-file)))
+		(was-same (equal default-directory dir))
+		pt)
+	   (when dir
+	     (unless was-same
+	       (insert (format "Leaving directory `%s'\n" default-directory))))
+	   (unless (bolp)
+	     (insert "\n"))
+	   (setq pt (point-marker))
+	   (if byte-compile-current-file
+	       (insert "\f\nCompiling "
+		       (if (stringp byte-compile-current-file)
+			   (concat "file " byte-compile-current-file)
+			 (concat "buffer " (buffer-name byte-compile-current-file)))
+		       " at " (current-time-string) "\n")
+	     (insert "\f\nCompiling no file at " (current-time-string) "\n"))
+	   (when dir
+	     (setq default-directory dir)
+	     (unless was-same
+	       (insert (format "Entering directory `%s'\n" default-directory))))
 	   (setq byte-compile-last-logged-file byte-compile-current-file)
 	   pt))))
 
@@ -1329,25 +1344,36 @@
 		)
 	      body)))
 
-;;;      ;; Log the file name.
-;;;      (let ((tem (byte-compile-log-file)))
-;;;        ;; Record position of that text,
-;;;        ;; unless we're compiling multiple files and this isn't the first.
-;;;        (unless warning-series
-;;; 	 (setq warning-series tem)))
-
 (defmacro displaying-byte-compile-warnings (&rest body)
-  `(let (warning-series)
-     ;; Log the file name.  Record position of that text.
-     (setq warning-series (byte-compile-log-file))
+  `(let* ((--displaying-byte-compile-warnings-fn (lambda () ,@body))
+	  (warning-series-started
+	   (and (markerp warning-series)
+		(eq (marker-buffer warning-series)
+		    (get-buffer "*Compile-Log*")))))
      (byte-compile-find-cl-functions)
-     (let ((--displaying-byte-compile-warnings-fn (lambda ()
-						    ,@body)))
-       (if byte-compile-debug
-	   (funcall --displaying-byte-compile-warnings-fn)
-	 (condition-case error-info
+     (if (or (eq warning-series 'byte-compile-warning-series)
+	     warning-series-started)
+	 ;; warning-series does come from compilation,
+	 ;; so don't bind it, but maybe do set it.
+	 (let (tem)
+	   ;; Log the file name.  Record position of that text.
+	   (setq tem (byte-compile-log-file))
+	   (unless warning-series-started
+	     (setq warning-series (or tem 'byte-compile-warning-series)))
+	   (if byte-compile-debug
+	       (funcall --displaying-byte-compile-warnings-fn)
+	     (condition-case error-info
+		 (funcall --displaying-byte-compile-warnings-fn)
+	       (error (byte-compile-report-error error-info)))))
+       ;; warning-series does not come from compilation, so bind it.
+       (let ((warning-series
+	      ;; Log the file name.  Record position of that text.
+	      (or (byte-compile-log-file) 'byte-compile-warning-series)))
+	 (if byte-compile-debug
 	     (funcall --displaying-byte-compile-warnings-fn)
-	   (error (byte-compile-report-error error-info)))))))
+	   (condition-case error-info
+	       (funcall --displaying-byte-compile-warnings-fn)
+	     (error (byte-compile-report-error error-info))))))))
 
 ;;;###autoload
 (defun byte-force-recompile (directory)
@@ -1474,8 +1500,9 @@
 		 (y-or-n-p (format "Save buffer %s first? " (buffer-name b))))
 	    (save-excursion (set-buffer b) (save-buffer)))))
 
+  ;; Force logging of the file name for each file compiled.
+  (setq byte-compile-last-logged-file nil)
   (let ((byte-compile-current-file filename)
-	(byte-compile-last-logged-file nil)
 	(set-auto-coding-for-load t)
 	target-file input-buffer output-buffer
 	byte-compile-dest-file)