diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm index 138cf59ff..3ec4600d2 100644 --- a/module/ice-9/boot-9.scm +++ b/module/ice-9/boot-9.scm @@ -1803,6 +1803,33 @@ If there is no handler at all, Guile prints an error and then exits." (define (module-define-submodule! module name submodule) (hashq-set! (module-submodules module) name submodule)) +;; It used to be, however, that module names were also present in the +;; value namespace. When we enable deprecated code, we preserve this +;; legacy behavior. +;; +;; These shims are defined here instead of in deprecated.scm because we +;; need their definitions before loading other modules. +;; +(begin-deprecated + (define (module-ref-submodule module name) + (or (hashq-ref (module-submodules module) name) + (and (module-submodule-binder module) + ((module-submodule-binder module) module name)) + (let ((var (module-local-variable module name))) + (and var (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 + (or (not (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))) + ;;; {Low Level Bootstrapping} diff --git a/module/ice-9/deprecated.scm b/module/ice-9/deprecated.scm index c0fa92168..4ead0754b 100644 --- a/module/ice-9/deprecated.scm +++ b/module/ice-9/deprecated.scm @@ -64,9 +64,7 @@ the-last-stack save-stack named-module-use! - top-repl) - - #:replace (module-ref-submodule module-define-submodule!)) + top-repl)) ;;;; Deprecated definitions. @@ -319,23 +317,8 @@ (lambda () (set! id old-v) ...))))))))) -(define (module-ref-submodule module name) - (or (hashq-ref (module-submodules module) name) - (and (module-submodule-binder module) - ((module-submodule-binder module) 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)) +;; There are deprecated definitions for module-ref-submodule and +;; module-define-submodule! in boot-9.scm. ;; Define (%app) and (%app modules), and have (app) alias (%app). This ;; side-effects the-root-module, both to the submodules table and (through