sunterlib/s48/module-system/overlapping-imports.scm

27 lines
848 B
Scheme
Raw Normal View History

2003-01-28 08:08:27 -05:00
(define (overlapping-imports? forms package)
(let ((table (make-symbol-table))
(dups '()))
(for-each
(lambda (structure)
(for-each-export
(lambda (name want-type binding)
(let ((structs (table-ref table name)))
(cond ((not structs)
(table-set! table name (list (structure-name structure))))
((member (structure-name structure) structs)
#f);seems to happen in real life...
(else (set! dups (cons name dups))
(table-set! table
name
(cons (structure-name structure)
(table-ref table name)))))))
structure))
(package-opens package))
(if (not (null? dups))
(apply warn "package has overlapping imports"
package
(map (lambda (name) (list name (table-ref table name))) dups)))
forms))
(set-optimizer! 'overlapping-imports? overlapping-imports?)