mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
module-{ref,define}-submodule use the submodules table
* module/ice-9/boot-9.scm (module-ref-submodule) (module-define-submodule!): Implement in terms of the module-submodules table, instead of looking for bindings in the value namespace. * module/ice-9/deprecated.scm (module-ref-submodule): (module-define-submodule!): Define deprecated versions of these that duplicate the submodules table in the normal values namespace, for back compatibility.
This commit is contained in:
parent
f905381d31
commit
f6a5308b03
2 changed files with 21 additions and 5 deletions
|
@ -1925,12 +1925,10 @@ If there is no handler at all, Guile prints an error and then exits."
|
|||
;; with local variables that happen to be named the same as the submodule.
|
||||
;;
|
||||
(define (module-ref-submodule module name)
|
||||
(let ((m (module-ref module name)))
|
||||
(and m (module? m) m)))
|
||||
(hashq-ref (module-submodules module) name))
|
||||
|
||||
(define (module-define-submodule! module name submodule)
|
||||
(module-define! module name submodule))
|
||||
|
||||
(hashq-set! (module-submodules module) name submodule))
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -38,7 +38,9 @@
|
|||
$tanh
|
||||
closure?
|
||||
%nil
|
||||
@bind))
|
||||
@bind)
|
||||
|
||||
#:replace (module-ref-submodule module-define-submodule!))
|
||||
|
||||
|
||||
;;;; Deprecated definitions.
|
||||
|
@ -298,6 +300,22 @@
|
|||
(lambda ()
|
||||
(set! id old-v) ...)))))))))
|
||||
|
||||
(define (module-ref-submodule module name)
|
||||
(or (hashq-ref (module-submodules module) name)
|
||||
(let ((var (module-local-variable module name)))
|
||||
(and (variable-bound? var)
|
||||
(module? (variable-ref var))
|
||||
(begin
|
||||
(warn "module" module "not in submodules table")
|
||||
(variable-ref var))))))
|
||||
|
||||
(define (module-define-submodule! module name submodule)
|
||||
(let ((var (module-local-variable module name)))
|
||||
(if (and var (variable-bound? var) (not (module? (variable-ref var))))
|
||||
(warn "defining module" module ": not overriding local definition" var)
|
||||
(module-define! module name submodule)))
|
||||
(hashq-set! (module-submodules module) name submodule))
|
||||
|
||||
;; Define (%app) and (%app modules), and have (app) alias (%app). This
|
||||
;; side-effects the-root-module, both to the submodules table and (through
|
||||
;; module-define-submodule! above) the obarray.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue