1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

Warning and optimization levels always small integers

* module/language/tree-il/analyze.scm (make-analyzer): Expect an int for
  optimization level.
* module/scripts/compile.scm (%options, show-warning-help): No more
  -Wnone / Wall; use -W0 or -W9 instead.
* module/system/base/compile.scm (level-validator): Validate small int.
  (compute-analyzer, add-default-optimizations): Likewise.
* test-suite/tests/optargs.test (without-compiler-warnings):
* test-suite/tests/tree-il.test (call-with-warnings): Parameterize level
  to 0, not #f.
* bootstrap/Makefile.am (GUILE_WARNINGS): Use -W0, not -Wnone.
This commit is contained in:
Andy Wingo 2020-05-08 16:32:40 +02:00
parent 220934c49d
commit e9c0f3071d
6 changed files with 13 additions and 21 deletions

View file

@ -21,7 +21,7 @@
## Fifth Floor, Boston, MA 02110-1301 USA ## Fifth Floor, Boston, MA 02110-1301 USA
GUILE_WARNINGS = -Wnone GUILE_WARNINGS = -W0
# Loading eval.go happens before boot and therefore before modules are # Loading eval.go happens before boot and therefore before modules are
# resolved. For some reason if compiled without resolve-primitives, # resolved. For some reason if compiled without resolve-primitives,
# attempts to resolve primitives at boot fail; weird. Should fix this # attempts to resolve primitives at boot fail; weird. Should fix this

View file

@ -1098,10 +1098,7 @@ resort, return #t when EXP refers to the global variable SPECIAL-NAME."
#(format 1 ,format-analysis))) #(format 1 ,format-analysis)))
(define (make-analyzer warning-level warnings) (define (make-analyzer warning-level warnings)
(define (enabled-for-level? level) (define (enabled-for-level? level) (<= level warning-level))
(match warning-level
((? boolean?) warning-level)
((? exact-integer?) (>= warning-level level))))
(let ((analyses (filter-map (match-lambda (let ((analyses (filter-map (match-lambda
(#(kind level analysis) (#(kind level analysis)
(and (or (enabled-for-level? level) (and (or (enabled-for-level? level)

View file

@ -87,12 +87,6 @@
("help" ("help"
(show-warning-help) (show-warning-help)
(exit 0)) (exit 0))
("all"
(alist-cons 'warning-level #t
(alist-delete 'warning-level result)))
("none"
(alist-cons 'warning-level #f
(alist-delete 'warning-level result)))
((? string->number) ((? string->number)
(let ((n (string->number arg))) (let ((n (string->number arg)))
(unless (and (exact-integer? n) (<= 0 n)) (unless (and (exact-integer? n) (<= 0 n))
@ -176,8 +170,8 @@ There is NO WARRANTY, to the extent permitted by law.~%"))
(warning-type-description wt))) (warning-type-description wt)))
%warning-types) %warning-types)
(format #t "~%") (format #t "~%")
(format #t "You may also specify warning levels as `-Wnone', `-W0`, `-W1',~%") (format #t "You may also specify warning levels as `-W0`, `-W1',~%")
(format #t "`-W2', `-W3', or `-Wall`. The default is `-W1'.~%")) (format #t "`-W2', or `-W3'. The default is `-W1'.~%"))
(define (show-optimization-help) (define (show-optimization-help)
(format #t "The available optimizations are:~%~%") (format #t "The available optimizations are:~%~%")

View file

@ -34,12 +34,11 @@
(define (level-validator x) (define (level-validator x)
(match x (unless (and (exact-integer? x) (<= 0 x 9))
((? boolean?) x) (error
((and (? exact-integer?) (not (? negative?))) x) "bad warning or optimization level: expected integer between 0 and 9"
(_ (error x))
"bad warning or optimization level: expected #f, #t, or integer >= 0" x)
x))))
(define default-warning-level (make-parameter 1 level-validator)) (define default-warning-level (make-parameter 1 level-validator))
(define default-optimization-level (make-parameter 2 level-validator)) (define default-optimization-level (make-parameter 2 level-validator))
@ -215,6 +214,7 @@
;;; ;;;
(define (compute-analyzer lang warning-level opts) (define (compute-analyzer lang warning-level opts)
(level-validator warning-level)
(match (language-analyzer lang) (match (language-analyzer lang)
(#f (lambda (exp env) (values))) (#f (lambda (exp env) (values)))
(proc (proc warning-level (proc (proc warning-level
@ -225,6 +225,7 @@
((_ _ . opts) (lp opts)))))))) ((_ _ . opts) (lp opts))))))))
(define (add-default-optimizations lang optimization-level opts) (define (add-default-optimizations lang optimization-level opts)
(level-validator optimization-level)
(match (language-optimizations-for-level lang) (match (language-optimizations-for-level lang)
(#f opts) (#f opts)
(get-opts (append opts (get-opts optimization-level))))) (get-opts (append opts (get-opts optimization-level)))))

View file

@ -48,7 +48,7 @@
;;; ;;;
(define-syntax-rule (without-compiler-warnings exp ...) (define-syntax-rule (without-compiler-warnings exp ...)
(parameterize ((default-warning-level #f)) exp ...)) (parameterize ((default-warning-level 0)) exp ...))
(without-compiler-warnings (without-compiler-warnings
(with-test-prefix/c&e "let-keywords" (with-test-prefix/c&e "let-keywords"

View file

@ -242,7 +242,7 @@
(define (call-with-warnings thunk) (define (call-with-warnings thunk)
(let ((port (open-output-string))) (let ((port (open-output-string)))
;; Disable any warnings added by default. ;; Disable any warnings added by default.
(parameterize ((default-warning-level #f)) (parameterize ((default-warning-level 0))
(with-fluids ((*current-warning-port* port) (with-fluids ((*current-warning-port* port)
(*current-warning-prefix* "")) (*current-warning-prefix* ""))
(thunk))) (thunk)))