module-ref-submodule deprecation fixes
authorAndy Wingo <wingo@pobox.com>
Tue, 31 Aug 2010 16:22:59 +0000 (09:22 -0700)
committerAndy Wingo <wingo@pobox.com>
Fri, 3 Sep 2010 04:31:55 +0000 (21:31 -0700)
* 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.

module/ice-9/boot-9.scm
module/ice-9/deprecated.scm

index 138cf59..3ec4600 100644 (file)
@@ -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)))
+
 \f
 
 ;;; {Low Level Bootstrapping}
index c0fa921..4ead075 100644 (file)
@@ -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.
                    (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