1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-04 19:20:27 +02:00

* boot-9.scm (module-duplicates-info, set-module-duplicates-info!): Removed.

(module-duplicates-handlers, module-duplicates-interface): New.
(module-type): Added duplicates-handlers and duplicates-interface.
This commit is contained in:
Mikael Djurfeldt 2003-03-12 14:30:03 +00:00
parent d57da08b6d
commit 8d8dac1f2f
2 changed files with 30 additions and 21 deletions

View file

@ -9,6 +9,10 @@
module-defer-observers-table): New variables.
(process-define-module, process-use-modules, export, re-export):
Use call-with-deferred-observers.
(module-duplicates-info, set-module-duplicates-info!): Removed.
(module-duplicates-handlers, module-duplicates-interface): New.
(module-type): Added duplicates-handlers and
duplicates-interface.
* syncase.scm (eval): Mark as replacement.

View file

@ -971,7 +971,8 @@
(define module-type
(make-record-type 'module
'(obarray uses binder eval-closure transformer name kind
observers weak-observers observer-id)
duplicates-handlers duplicates-interface
observers weak-observers observer-id)
%print-module))
;; make-module &opt size uses binder
@ -1005,7 +1006,7 @@
(let ((module (module-constructor (and (not (zero? size))
(make-hash-table size))
uses binder #f #f #f #f
uses binder #f #f #f #f #f #f
'()
(make-weak-value-hash-table 31)
0)))
@ -1034,6 +1035,14 @@
(define set-module-name! (record-modifier module-type 'name))
(define module-kind (record-accessor module-type 'kind))
(define set-module-kind! (record-modifier module-type 'kind))
(define module-duplicates-handlers
(record-accessor module-type 'duplicates-handlers))
(define set-module-duplicates-handlers!
(record-modifier module-type 'duplicates-handlers))
(define module-duplicates-interface
(record-accessor module-type 'duplicates-interface))
(define set-module-duplicates-interface!
(record-modifier module-type 'duplicates-interface))
(define module-observers (record-accessor module-type 'observers))
(define set-module-observers! (record-modifier module-type 'observers))
(define module-weak-observers (record-accessor module-type 'weak-observers))
@ -1485,12 +1494,11 @@
;; Same as MODULE-USE! but add multiple interfaces and check for duplicates
;;
(define (module-use-interfaces! module interfaces)
(let* ((duplicates-info (module-duplicates-info module))
(duplicates-handlers? (or (car duplicates-info)
(let* ((duplicates-handlers? (or (module-duplicates-handlers module)
(default-duplicate-binding-procedures)))
(uses (module-uses module)))
;; remove duplicates-interface
(set! uses (delq! (cdr duplicates-info) uses))
(set! uses (delq! (module-duplicates-interface module) uses))
;; remove interfaces to be added
(for-each (lambda (interface)
(set! uses
@ -1509,8 +1517,9 @@
(set-module-uses! module uses))
interfaces)
;; add duplicates interface
(if (cdr duplicates-info)
(set-module-uses! module (cons (cdr duplicates-info) uses)))
(if (module-duplicates-interface module)
(set-module-uses! module
(cons (module-duplicates-interface module) uses)))
(module-modified module)))
@ -1600,16 +1609,11 @@
(module-ref m '%module-public-interface #f))
(define (set-module-public-interface! m i)
(module-define! m '%module-public-interface i))
(define (module-duplicates-info m)
(or (module-ref m '%module-duplicates-info #f) (cons #f #f)))
(define (set-module-duplicates-info! m i)
(module-define! m '%module-duplicates-info i))
(define (set-system-module! m s)
(set-procedure-property! (module-eval-closure m) 'system-module s))
(define the-root-module (make-root-module))
(define the-scm-module (make-scm-module))
(set-module-public-interface! the-root-module the-scm-module)
(set-module-duplicates-info! the-root-module (cons #f #f))
(set-module-name! the-root-module '(guile))
(set-module-name! the-scm-module '(guile))
(set-module-kind! the-scm-module 'interface)
@ -1638,8 +1642,7 @@
(let ((interface (make-module 31)))
(set-module-name! interface (module-name module))
(set-module-kind! interface 'interface)
(set-module-public-interface! module interface)
(set-module-duplicates-info! module (cons #f #f)))))
(set-module-public-interface! module interface))))
(if (and (not (memq the-scm-module (module-uses module)))
(not (eq? module the-root-module)))
(set-module-uses! module
@ -1853,8 +1856,9 @@
((#:duplicates)
(if (not (pair? (cdr kws)))
(unrecognized kws))
(set-car! (module-duplicates-info module)
(lookup-duplicates-handlers (cadr kws)))
(set-module-duplicates-handlers!
module
(lookup-duplicates-handlers (cadr kws)))
(loop (cddr kws) reversed-interfaces exports re-exports replacements))
((#:export #:export-syntax)
(or (pair? (cdr kws))
@ -1901,7 +1905,7 @@
;; Replace autoload-interface with interface
(set-car! (memq a (module-uses module)) i)
(module-local-variable i sym))))))
(module-constructor #() '() b #f #f name 'autoload
(module-constructor #() '() b #f #f name 'autoload #f #f
'() (make-weak-value-hash-table 31) 0)))
;;; {Compiled module}
@ -2925,10 +2929,9 @@
m))
(define (process-duplicates module interface)
(let* ((duplicates-info (module-duplicates-info module))
(duplicates-handlers (or (car duplicates-info)
(let* ((duplicates-handlers (or (module-duplicates-handlers module)
(default-duplicate-binding-procedures)))
(duplicates-interface (cdr duplicates-info)))
(duplicates-interface (module-duplicates-interface module)))
(module-for-each
(lambda (name var)
(cond ((module-import-interface module name)
@ -2942,7 +2945,9 @@
(begin
(set! duplicates-interface
(make-duplicates-interface))
(set-cdr! duplicates-info duplicates-interface)))
(set-module-duplicates-interface!
module
duplicates-interface)))
(let* ((var (module-local-variable duplicates-interface
name))
(val (and var