1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 05:50:26 +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:
Andy Wingo 2010-04-23 16:13:06 +02:00
parent f905381d31
commit f6a5308b03
2 changed files with 21 additions and 5 deletions

View file

@ -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. ;; with local variables that happen to be named the same as the submodule.
;; ;;
(define (module-ref-submodule module name) (define (module-ref-submodule module name)
(let ((m (module-ref module name))) (hashq-ref (module-submodules module) name))
(and m (module? m) m)))
(define (module-define-submodule! module name submodule) (define (module-define-submodule! module name submodule)
(module-define! module name submodule)) (hashq-set! (module-submodules module) name submodule))

View file

@ -38,7 +38,9 @@
$tanh $tanh
closure? closure?
%nil %nil
@bind)) @bind)
#:replace (module-ref-submodule module-define-submodule!))
;;;; Deprecated definitions. ;;;; Deprecated definitions.
@ -298,6 +300,22 @@
(lambda () (lambda ()
(set! id old-v) ...))))))))) (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 ;; Define (%app) and (%app modules), and have (app) alias (%app). This
;; side-effects the-root-module, both to the submodules table and (through ;; side-effects the-root-module, both to the submodules table and (through
;; module-define-submodule! above) the obarray. ;; module-define-submodule! above) the obarray.