summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-08-31 09:22:59 -0700
committerAndy Wingo <wingo@pobox.com>2010-09-02 21:31:55 -0700
commitdcb68c09d03cf9006c8e2c21c726a3f35be026bd (patch)
treec033f75167e867b6d339367d999420d02f4c8b92
parent61bac799dd1a1c004537a2ee2a21e729179d67f2 (diff)
downloadguile-dcb68c09d03cf9006c8e2c21c726a3f35be026bd.tar.gz
module-ref-submodule deprecation fixes
* module/ice-9/boot-9.scm (module-ref-submodule) (module-define-submodule!): Pull deprecated shims here, as we need them before loading (ice-9 deprecated). Also bugfix to only define the module if there is no local variable, even if it is unbound. * module/ice-9/deprecated.scm: Remove from here.
-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