From f6a5308b03f30872a1973a6d40116a636fa52b11 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 23 Apr 2010 16:13:06 +0200 Subject: [PATCH] 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. --- module/ice-9/boot-9.scm | 6 ++---- module/ice-9/deprecated.scm | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm index ac00ece85..bc9f170ca 100644 --- a/module/ice-9/boot-9.scm +++ b/module/ice-9/boot-9.scm @@ -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)) diff --git a/module/ice-9/deprecated.scm b/module/ice-9/deprecated.scm index 2ea99ba23..c6dab4e93 100644 --- a/module/ice-9/deprecated.scm +++ b/module/ice-9/deprecated.scm @@ -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.