summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--module/ice-9/boot-9.scm27
-rw-r--r--module/ice-9/deprecated.scm23
2 files changed, 30 insertions, 20 deletions
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