mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
Add -Wshadowed-toplevel.
* module/language/tree-il/analyze.scm (shadowed-toplevel-analysis): New variable. * module/language/tree-il/compile-cps.scm (%warning-passes): Add it. * module/system/base/message.scm (%warning-types): Add it. * test-suite/tests/tree-il.test ("warnings")["shadowed-toplevel"]: New test prefix. * module/ice-9/boot-9.scm (%auto-compilation-options): Add it. * doc/ref/api-evaluation.texi (Compilation): Add 'shadowed-toplevel' and 'macro-use-before-definition'.
This commit is contained in:
parent
04aa6d1fb7
commit
c6f70e4b04
6 changed files with 130 additions and 5 deletions
|
@ -3665,7 +3665,8 @@ but it fails to load."
|
|||
|
||||
(define %auto-compilation-options
|
||||
;; Default `compile-file' option when auto-compiling.
|
||||
'(#:warnings (unbound-variable macro-use-before-definition arity-mismatch
|
||||
'(#:warnings (unbound-variable shadowed-toplevel
|
||||
macro-use-before-definition arity-mismatch
|
||||
format duplicate-case-datum bad-case-datum)))
|
||||
|
||||
(define* (load-in-vicinity dir file-name #:optional reader)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; TREE-IL -> GLIL compiler
|
||||
|
||||
;; Copyright (C) 2001, 2008-2014 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2001, 2008-2014, 2018 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
|
||||
|
@ -34,6 +34,7 @@
|
|||
analyze-tree
|
||||
unused-variable-analysis
|
||||
unused-toplevel-analysis
|
||||
shadowed-toplevel-analysis
|
||||
unbound-variable-analysis
|
||||
macro-use-before-definition-analysis
|
||||
arity-analysis
|
||||
|
@ -813,6 +814,37 @@ given `tree-il' element."
|
|||
|
||||
(make-reference-graph vlist-null vlist-null #f))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Shadowed top-level definition analysis.
|
||||
;;;
|
||||
|
||||
(define shadowed-toplevel-analysis
|
||||
;; Report top-level definitions that shadow previous top-level
|
||||
;; definitions from the same compilation unit.
|
||||
(make-tree-analysis
|
||||
(lambda (x defs env locs)
|
||||
;; Going down into X.
|
||||
(record-case x
|
||||
((<toplevel-define> name src)
|
||||
(match (vhash-assq name defs)
|
||||
((_ . previous-definition)
|
||||
(warning 'shadowed-toplevel src name
|
||||
(toplevel-define-src previous-definition))
|
||||
defs)
|
||||
(#f
|
||||
(vhash-consq name x defs))))
|
||||
(else defs)))
|
||||
|
||||
(lambda (x defs env locs)
|
||||
;; Leaving X's scope.
|
||||
defs)
|
||||
|
||||
(lambda (defs env)
|
||||
#t)
|
||||
|
||||
vlist-null))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Unbound variable analysis.
|
||||
|
|
|
@ -2319,6 +2319,7 @@ integer."
|
|||
(define %warning-passes
|
||||
`((unused-variable . ,unused-variable-analysis)
|
||||
(unused-toplevel . ,unused-toplevel-analysis)
|
||||
(shadowed-toplevel . ,shadowed-toplevel-analysis)
|
||||
(unbound-variable . ,unbound-variable-analysis)
|
||||
(macro-use-before-definition . ,macro-use-before-definition-analysis)
|
||||
(arity-mismatch . ,arity-analysis)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; User interface messages
|
||||
|
||||
;; Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2009, 2010, 2011, 2012, 2018 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
|
||||
|
@ -109,6 +109,13 @@
|
|||
(emit port "~A: warning: possibly unused local top-level variable `~A'~%"
|
||||
loc name)))
|
||||
|
||||
(shadowed-toplevel
|
||||
"report shadowed top-level variables"
|
||||
,(lambda (port loc name previous-loc)
|
||||
(emit port "~A: warning: shadows previous definition of `~A' at ~A~%"
|
||||
loc name
|
||||
(location-string previous-loc))))
|
||||
|
||||
(unbound-variable
|
||||
"report possibly unbound variables"
|
||||
,(lambda (port loc name)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue