Add `*current-warning-prefix*'.
authorLudovic Courtès <ludo@gnu.org>
Sun, 13 Feb 2011 18:13:36 +0000 (19:13 +0100)
committerLudovic Courtès <ludo@gnu.org>
Sun, 13 Feb 2011 18:13:36 +0000 (19:13 +0100)
* module/system/base/message.scm (*current-warning-prefix*): New
  variable.
  (%warning-types): Honor `*current-warning-prefix*'.

* module/scripts/compile.scm (compile): Use an empty
  `*current-warning-prefix*'.

* module/system/repl/common.scm (repl-compile): Likewise.

* test-suite/tests/tree-il.test (call-with-warnings): Likewise.

module/scripts/compile.scm
module/system/base/message.scm
module/system/repl/common.scm
test-suite/tests/tree-il.test

index 9763d1d..f9d6cca 100644 (file)
@@ -168,11 +168,12 @@ Report bugs to <~A>.~%"
 
     (for-each (lambda (file)
                 (format #t "wrote `~A'\n"
-                        (compile-file file
-                                      #:output-file output-file
-                                      #:from from
-                                      #:to to
-                                      #:opts compile-opts)))
+                        (with-fluids ((*current-warning-prefix* ""))
+                          (compile-file file
+                                        #:output-file output-file
+                                        #:from from
+                                        #:to to
+                                        #:opts compile-opts))))
               input-files)))
 
 (define main compile)
index 62e7274..95468ca 100644 (file)
@@ -1,6 +1,6 @@
 ;;; User interface messages
 
-;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;;; This library is free software; you can redistribute it and/or
 ;;; modify it under the terms of the GNU Lesser General Public
@@ -27,7 +27,9 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (ice-9 match)
-  #:export (*current-warning-port* warning
+  #:export (*current-warning-port*
+            *current-warning-prefix*
+            warning
 
             warning-type? warning-type-name warning-type-description
             warning-type-printer lookup-warning-type
 
 (fluid-set! *current-warning-port* (current-error-port))
 
+(define *current-warning-prefix*
+  ;; Prefix string when emitting a warning.
+  (make-fluid))
+
+(fluid-set! *current-warning-prefix* ";;; ")
+
+
 (define-record-type <warning-type>
   (make-warning-type name description printer)
   warning-type?
   (map (lambda (args)
          (apply make-warning-type args))
 
-       `((unsupported-warning ;; a "meta warning"
-          "warn about unknown warning types"
-          ,(lambda (port unused name)
-             (format port "warning: unknown warning type `~A'~%"
+       (let-syntax ((emit
+                     (lambda (s)
+                       (syntax-case s ()
+                         ((_ port fmt args ...)
+                          (string? (syntax->datum #'fmt))
+                          (with-syntax ((fmt
+                                         (string-append "~a"
+                                                        (syntax->datum
+                                                         #'fmt))))
+                            #'(format port fmt
+                                      (fluid-ref *current-warning-prefix*)
+                                      args ...)))))))
+         `((unsupported-warning ;; a "meta warning"
+            "warn about unknown warning types"
+            ,(lambda (port unused name)
+               (emit port "warning: unknown warning type `~A'~%"
                      name)))
 
-         (unused-variable
-          "report unused variables"
-          ,(lambda (port loc name)
-             (format port "~A: warning: unused variable `~A'~%"
+           (unused-variable
+            "report unused variables"
+            ,(lambda (port loc name)
+               (emit port "~A: warning: unused variable `~A'~%"
                      loc name)))
 
-         (unused-toplevel
-          "report unused local top-level variables"
-          ,(lambda (port loc name)
-             (format port "~A: warning: possibly unused local top-level variable `~A'~%"
+           (unused-toplevel
+            "report unused local top-level variables"
+            ,(lambda (port loc name)
+               (emit port "~A: warning: possibly unused local top-level variable `~A'~%"
                      loc name)))
 
-         (unbound-variable
-          "report possibly unbound variables"
-          ,(lambda (port loc name)
-             (format port "~A: warning: possibly unbound variable `~A'~%"
+           (unbound-variable
+            "report possibly unbound variables"
+            ,(lambda (port loc name)
+               (emit port "~A: warning: possibly unbound variable `~A'~%"
                      loc name)))
 
-         (arity-mismatch
-          "report procedure arity mismatches (wrong number of arguments)"
-          ,(lambda (port loc name certain?)
-             (if certain?
-                 (format port
+           (arity-mismatch
+            "report procedure arity mismatches (wrong number of arguments)"
+            ,(lambda (port loc name certain?)
+               (if certain?
+                   (emit port
                          "~A: warning: wrong number of arguments to `~A'~%"
                          loc name)
-                 (format port
+                   (emit port
                          "~A: warning: possibly wrong number of arguments to `~A'~%"
                          loc name))))
 
-         (format
-          "report wrong number of arguments to `format'"
-          ,(lambda (port loc . rest)
-             (define (escape-newlines str)
-               (list->string
-                (string-fold-right (lambda (c r)
-                                     (if (eq? c #\newline)
-                                         (append '(#\\ #\n) r)
-                                         (cons c r)))
-                                   '()
-                                   str)))
-
-             (define (range min max)
-               (cond ((eq? min 'any)
-                      (if (eq? max 'any)
-                          "any number" ;; can't happen
-                          (format #f "up to ~a" max)))
-                     ((eq? max 'any)
-                      (format #f "at least ~a" min))
-                     ((= min max) (number->string min))
-                     (else
-                      (format #f "~a to ~a" min max))))
-
-             (match rest
-               (('wrong-format-arg-count fmt min max actual)
-                (format port
+           (format
+            "report wrong number of arguments to `format'"
+            ,(lambda (port loc . rest)
+               (define (escape-newlines str)
+                 (list->string
+                  (string-fold-right (lambda (c r)
+                                       (if (eq? c #\newline)
+                                           (append '(#\\ #\n) r)
+                                           (cons c r)))
+                                     '()
+                                     str)))
+
+               (define (range min max)
+                 (cond ((eq? min 'any)
+                        (if (eq? max 'any)
+                            "any number" ;; can't happen
+                            (emit #f "up to ~a" max)))
+                       ((eq? max 'any)
+                        (emit #f "at least ~a" min))
+                       ((= min max) (number->string min))
+                       (else
+                        (emit #f "~a to ~a" min max))))
+
+               (match rest
+                 (('wrong-format-arg-count fmt min max actual)
+                  (emit port
                         "~A: warning: ~S: wrong number of `format' arguments: expected ~A, got ~A~%"
                         loc (escape-newlines fmt)
                         (range min max) actual))
-               (('syntax-error 'unterminated-iteration fmt)
-                (format port "~A: warning: ~S: unterminated iteration~%"
+                 (('syntax-error 'unterminated-iteration fmt)
+                  (emit port "~A: warning: ~S: unterminated iteration~%"
                         loc (escape-newlines fmt)))
-               (('syntax-error 'unterminated-conditional fmt)
-                (format port "~A: warning: ~S: unterminated conditional~%"
+                 (('syntax-error 'unterminated-conditional fmt)
+                  (emit port "~A: warning: ~S: unterminated conditional~%"
                         loc (escape-newlines fmt)))
-               (('syntax-error 'unexpected-semicolon fmt)
-                (format port "~A: warning: ~S: unexpected `~~;'~%"
+                 (('syntax-error 'unexpected-semicolon fmt)
+                  (emit port "~A: warning: ~S: unexpected `~~;'~%"
                         loc (escape-newlines fmt)))
-               (('syntax-error 'unexpected-conditional-termination fmt)
-                (format port "~A: warning: ~S: unexpected `~~]'~%"
+                 (('syntax-error 'unexpected-conditional-termination fmt)
+                  (emit port "~A: warning: ~S: unexpected `~~]'~%"
                         loc (escape-newlines fmt)))
-               (('wrong-port wrong-port)
-                (format port
+                 (('wrong-port wrong-port)
+                  (emit port
                         "~A: warning: ~S: wrong port argument~%"
                         loc wrong-port))
-               (('wrong-format-string fmt)
-                (format port
+                 (('wrong-format-string fmt)
+                  (emit port
                         "~A: warning: ~S: wrong format string~%"
                         loc fmt))
-               (('non-literal-format-string)
-                (format port
+                 (('non-literal-format-string)
+                  (emit port
                         "~A: warning: non-literal format string~%"
                         loc))
-               (('wrong-num-args count)
-                (format port
+                 (('wrong-num-args count)
+                  (emit port
                         "~A: warning: wrong number of arguments to `format'~%"
                         loc))
-               (else
-                (format port "~A: `format' warning~%" loc))))))))
+                 (else
+                  (emit port "~A: `format' warning~%" loc)))))))))
 
 (define (lookup-warning-type name)
   "Return the warning type NAME or `#f' if not found."
index 5405bb8..0e7cb69 100644 (file)
@@ -1,6 +1,6 @@
 ;;; Repl common routines
 
-;; Copyright (C) 2001, 2008, 2009, 2010 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;;; This library is free software; you can redistribute it and/or
 ;;; modify it under the terms of the GNU Lesser General Public
@@ -22,6 +22,7 @@
   #:use-module (system base syntax)
   #:use-module (system base compile)
   #:use-module (system base language)
+  #:use-module (system base message)
   #:use-module (system vm program)
   #:use-module (ice-9 control)
   #:use-module (ice-9 history)
@@ -158,8 +159,9 @@ See <http://www.gnu.org/licenses/lgpl.html>, for more details.")
 (define (repl-compile repl form)
   (let ((from (repl-language repl))
         (opts (repl-compile-options repl)))
-    (compile form #:from from #:to 'objcode #:opts opts
-             #:env (current-module))))
+    (with-fluids ((*current-warning-prefix* ""))  ; XXX: Keep ";;; "?
+      (compile form #:from from #:to 'objcode #:opts opts
+               #:env (current-module)))))
 
 (define (repl-parse repl form)
   (let ((parser (language-parser (repl-language repl))))
index e28506f..76c825d 100644 (file)
@@ -1,18 +1,18 @@
 ;;;; tree-il.test --- test suite for compiling tree-il   -*- scheme -*-
 ;;;; Andy Wingo <wingo@pobox.com> --- May 2009
 ;;;;
-;;;;   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
-;;;; 
+;;;;   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+;;;;
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
 ;;;; License as published by the Free Software Foundation; either
 ;;;; version 3 of the License, or (at your option) any later version.
-;;;; 
+;;;;
 ;;;; This library is distributed in the hope that it will be useful,
 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ;;;; Lesser General Public License for more details.
-;;;; 
+;;;;
 ;;;; You should have received a copy of the GNU Lesser General Public
 ;;;; License along with this library; if not, write to the Free Software
 ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
 (define (call-with-warnings thunk)
   (let ((port (open-output-string)))
-    (with-fluid* *current-warning-port* port
-      thunk)
+    (with-fluids ((*current-warning-port*   port)
+                  (*current-warning-prefix* ""))
+      (thunk))
     (let ((warnings (get-output-string port)))
       (string-tokenize warnings
                        (char-set-complement (char-set #\newline))))))