diff --git a/racket/src/expander/namespace/module.rkt b/racket/src/expander/namespace/module.rkt index 58c0063464..466a7afb75 100644 --- a/racket/src/expander/namespace/module.rkt +++ b/racket/src/expander/namespace/module.rkt @@ -205,7 +205,7 @@ ;; Register this module's exports for use in resolving bulk ;; bindings, so that bulk bindings can be shared among other ;; modules when unmarshaling; we don't do this without - ;; `with-submodules?` to avoid loeaking submodules being + ;; `with-submodules?` to avoid leaking submodules being ;; expanded, but see also `bind-all-provides!` (register-bulk-provide! (namespace-bulk-binding-registry ns) mod-name @@ -223,7 +223,9 @@ (define at-phase (hash-ref (namespace-module-instances ns) phase)) (hash-set! at-phase mod-name (make-module-instance m-ns m)) - + + (set-module-instance-shifted-requires! prior-mi #f) + (when visit? (namespace-module-visit! ns (namespace-mpi m-ns) phase)) (when run? @@ -369,7 +371,8 @@ (define (namespace-module-instantiate! ns mpi instance-phase #:run-phase [run-phase (namespace-phase ns)] #:skip-run? [skip-run? #f] #:otherwise-available? [otherwise-available? #t] - #:seen [seen #hasheq()]) + #:seen [seen #hasheq()] + #:seen-list [seen-list null]) (unless (module-path-index? mpi) (error "not a module path index:" mpi)) (define name (module-path-index-resolve mpi #t)) @@ -382,7 +385,8 @@ (run-module-instance! mi ns #:run-phase run-phase #:skip-run? skip-run? #:otherwise-available? otherwise-available? - #:seen seen)) + #:seen seen + #:seen-list seen-list)) ;; If the module is cross-phase persistent, make sure it's instantiated ;; at phase 0 and registered in `ns` as phaseless; otherwise (cond @@ -408,7 +412,8 @@ (define (run-module-instance! mi ns #:run-phase run-phase #:skip-run? skip-run? #:otherwise-available? otherwise-available? - #:seen [seen #hasheq()]) + #:seen [seen #hasheq()] + #:seen-list [seen-list null]) (performance-region ['eval 'requires] ;; Nothing to do if we've run this phase already and made the @@ -429,7 +434,11 @@ (define bulk-binding-registry (namespace-bulk-binding-registry m-ns)) (when (hash-ref seen mi #f) - (error 'require "import cycle detected during module instantiation")) + (error 'require + (apply string-append + "import cycle detected during module instantiation\n" + " dependency chain:" + (module-instances->indented-module-names mi seen-list)))) ;; If we haven't shifted required mpis already, do that (unless (module-instance-shifted-requires mi) @@ -450,7 +459,8 @@ #:run-phase run-phase #:skip-run? skip-run? #:otherwise-available? otherwise-available? - #:seen (hash-set seen mi #t)))) + #:seen (hash-set seen mi #t) + #:seen-list (cons mi seen-list)))) ;; Run or make available phases of the module body: (unless (label-phase? instance-phase) @@ -558,3 +568,19 @@ 'provided)))))) (set-module-access! m access) access) + +;; ---------------------------------------- + +(define (module-instances->indented-module-names mi seen-list) + (let ([mi->name (lambda (mi) + (format "\n ~a" (module-path-index-resolve + (namespace-mpi (module-instance-namespace mi)))))]) + (cons + (mi->name mi) + (let loop ([seen-list seen-list]) + (cond + [(null? seen-list) '()] + [(eq? mi (car seen-list)) + (list (mi->name mi))] + [else + (cons (mi->name (car seen-list)) (loop (cdr seen-list)))]))))) diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index c1375b2239..13194bb929 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -14034,38 +14034,38 @@ static const char *startup_source = "(let-values(((name_0)(1/module-path-index-resolve name-mpi_0)))" "(let-values(((m-ns_0)" "(let-values(((the-struct_0)" -"(let-values(((ns134_0) ns_0)" -"((root-expand-ctx135_0) root-expand-ctx_0)" -"((temp136_0) #f))" -"(new-namespace.1 temp136_0 root-expand-ctx135_0 ns134_0))))" +"(let-values(((ns138_0) ns_0)" +"((root-expand-ctx139_0) root-expand-ctx_0)" +"((temp140_0) #f))" +"(new-namespace.1 temp140_0 root-expand-ctx139_0 ns138_0))))" "(if(1/namespace? the-struct_0)" -"(let-values(((mpi126_0) name-mpi_0)" -"((source-name127_0)(resolved-module-path-root-name name_0))" -"((phase128_0) phase_0)" -"((0-phase129_0) phase_0)" -"((submodule-declarations130_0)" +"(let-values(((mpi130_0) name-mpi_0)" +"((source-name131_0)(resolved-module-path-root-name name_0))" +"((phase132_0) phase_0)" +"((0-phase133_0) phase_0)" +"((submodule-declarations134_0)" "(if for-submodule?_0" "(namespace-submodule-declarations ns_0)" "(make-small-hasheq)))" -"((available-module-instances131_0)(make-hasheqv))" -"((module-instances132_0)(make-hasheqv))" -"((declaration-inspector133_0)(current-code-inspector)))" +"((available-module-instances135_0)(make-hasheqv))" +"((module-instances136_0)(make-hasheqv))" +"((declaration-inspector137_0)(current-code-inspector)))" "(namespace1.1" -" mpi126_0" -" source-name127_0" +" mpi130_0" +" source-name131_0" "(namespace-root-expand-ctx the-struct_0)" -" phase128_0" -" 0-phase129_0" +" phase132_0" +" 0-phase133_0" "(namespace-phase-to-namespace the-struct_0)" "(namespace-phase-level-to-definitions the-struct_0)" "(namespace-module-registry$1 the-struct_0)" "(namespace-bulk-binding-registry the-struct_0)" -" submodule-declarations130_0" +" submodule-declarations134_0" "(namespace-root-namespace the-struct_0)" -" declaration-inspector133_0" +" declaration-inspector137_0" "(namespace-inspector the-struct_0)" -" available-module-instances131_0" -" module-instances132_0))" +" available-module-instances135_0" +" module-instances136_0))" " (raise-argument-error 'struct-copy \"namespace?\" the-struct_0)))))" "(let-values((()" "(begin" @@ -14096,10 +14096,10 @@ static const char *startup_source = "(let-values(((prior-mi_0)" "(if prior-m_0" "(if(not(eq? m_0 prior-m_0))" -"(let-values(((ns137_0) ns_0)" -"((mod-name138_0) mod-name_0)" -"((temp139_0)(namespace-phase ns_0)))" -"(namespace->module-instance.1 #f #f void ns137_0 mod-name138_0 temp139_0))" +"(let-values(((ns141_0) ns_0)" +"((mod-name142_0) mod-name_0)" +"((temp143_0)(namespace-phase ns_0)))" +"(namespace->module-instance.1 #f #f void ns141_0 mod-name142_0 temp143_0))" " #f)" " #f)))" "(begin" @@ -14129,30 +14129,32 @@ static const char *startup_source = "(let-values(((at-phase_0)(hash-ref(namespace-module-instances ns_0) phase_0)))" "(begin" "(hash-set! at-phase_0 mod-name_0(make-module-instance m-ns_0 m_0))" +"(set-module-instance-shifted-requires! prior-mi_0 #f)" "(if visit?_0" "(let-values()" -"(let-values(((ns140_0) ns_0)" -"((temp141_0)(namespace-mpi m-ns_0))" -"((phase142_0) phase_0))" +"(let-values(((ns144_0) ns_0)" +"((temp145_0)(namespace-mpi m-ns_0))" +"((phase146_0) phase_0))" "(namespace-module-visit!.1" " unsafe-undefined" -" ns140_0" -" temp141_0" -" phase142_0)))" +" ns144_0" +" temp145_0" +" phase146_0)))" "(void))" "(if run?_0" "(let-values()" -"(let-values(((ns143_0) ns_0)" -"((temp144_0)(namespace-mpi m-ns_0))" -"((phase145_0) phase_0))" +"(let-values(((ns147_0) ns_0)" +"((temp148_0)(namespace-mpi m-ns_0))" +"((phase149_0) phase_0))" "(namespace-module-instantiate!.1" " #t" " unsafe-undefined" " '#hasheq()" +" null" " #f" -" ns143_0" -" temp144_0" -" phase145_0)))" +" ns147_0" +" temp148_0" +" phase149_0)))" "(void))))))))))" "(void)))))))))))))" "(define-values" @@ -14231,32 +14233,32 @@ static const char *startup_source = "(let-values(((m-ns_0)" "(let-values(((the-struct_0) ns_0))" "(if(1/namespace? the-struct_0)" -"(let-values(((mpi146_0)(namespace-mpi existing-m-ns_0))" -"((source-name147_0)(namespace-source-name existing-m-ns_0))" -"((root-expand-ctx148_0)(box(unbox(namespace-root-expand-ctx existing-m-ns_0))))" -"((phase149_0)(namespace-phase existing-m-ns_0))" -"((0-phase150_0)(namespace-0-phase existing-m-ns_0))" -"((phase-to-namespace151_0)(make-small-hasheqv))" -"((phase-level-to-definitions152_0)" +"(let-values(((mpi150_0)(namespace-mpi existing-m-ns_0))" +"((source-name151_0)(namespace-source-name existing-m-ns_0))" +"((root-expand-ctx152_0)(box(unbox(namespace-root-expand-ctx existing-m-ns_0))))" +"((phase153_0)(namespace-phase existing-m-ns_0))" +"((0-phase154_0)(namespace-0-phase existing-m-ns_0))" +"((phase-to-namespace155_0)(make-small-hasheqv))" +"((phase-level-to-definitions156_0)" "(if(module-cross-phase-persistent? m_0)" "(namespace-phase-level-to-definitions existing-m-ns_0)" "(make-small-hasheqv)))" -"((declaration-inspector153_0)(module-inspector m_0))" -"((inspector154_0)(namespace-inspector existing-m-ns_0)))" +"((declaration-inspector157_0)(module-inspector m_0))" +"((inspector158_0)(namespace-inspector existing-m-ns_0)))" "(namespace1.1" -" mpi146_0" -" source-name147_0" -" root-expand-ctx148_0" -" phase149_0" -" 0-phase150_0" -" phase-to-namespace151_0" -" phase-level-to-definitions152_0" +" mpi150_0" +" source-name151_0" +" root-expand-ctx152_0" +" phase153_0" +" 0-phase154_0" +" phase-to-namespace155_0" +" phase-level-to-definitions156_0" "(namespace-module-registry$1 the-struct_0)" "(namespace-bulk-binding-registry the-struct_0)" "(namespace-submodule-declarations the-struct_0)" "(namespace-root-namespace the-struct_0)" -" declaration-inspector153_0" -" inspector154_0" +" declaration-inspector157_0" +" inspector158_0" "(namespace-available-module-instances the-struct_0)" "(namespace-module-instances the-struct_0)))" " (raise-argument-error 'struct-copy \"namespace?\" the-struct_0)))))" @@ -14310,33 +14312,33 @@ static const char *startup_source = "(let-values(((m-ns_0)" "(let-values(((the-struct_0) ns_0))" "(if(1/namespace? the-struct_0)" -"(let-values(((mpi155_0) mpi_0)" -"((source-name156_0)" +"(let-values(((mpi159_0) mpi_0)" +"((source-name160_0)" "(let-values(((or-part_0)(module-source-name m_0)))" "(if or-part_0" " or-part_0" "(resolved-module-path-root-name(1/module-path-index-resolve mpi_0)))))" -"((root-expand-ctx157_0)(box #f))" -"((phase158_0) 0-phase_0)" -"((0-phase159_0) 0-phase_0)" -"((phase-to-namespace160_0)(make-small-hasheqv))" -"((phase-level-to-definitions161_0)(make-small-hasheqv))" -"((declaration-inspector162_0)(module-inspector m_0))" -"((inspector163_0)(make-inspector(module-inspector m_0))))" +"((root-expand-ctx161_0)(box #f))" +"((phase162_0) 0-phase_0)" +"((0-phase163_0) 0-phase_0)" +"((phase-to-namespace164_0)(make-small-hasheqv))" +"((phase-level-to-definitions165_0)(make-small-hasheqv))" +"((declaration-inspector166_0)(module-inspector m_0))" +"((inspector167_0)(make-inspector(module-inspector m_0))))" "(namespace1.1" -" mpi155_0" -" source-name156_0" -" root-expand-ctx157_0" -" phase158_0" -" 0-phase159_0" -" phase-to-namespace160_0" -" phase-level-to-definitions161_0" +" mpi159_0" +" source-name160_0" +" root-expand-ctx161_0" +" phase162_0" +" 0-phase163_0" +" phase-to-namespace164_0" +" phase-level-to-definitions165_0" "(namespace-module-registry$1 the-struct_0)" "(namespace-bulk-binding-registry the-struct_0)" "(namespace-submodule-declarations the-struct_0)" "(namespace-root-namespace the-struct_0)" -" declaration-inspector162_0" -" inspector163_0" +" declaration-inspector166_0" +" inspector167_0" "(namespace-available-module-instances the-struct_0)" "(namespace-module-instances the-struct_0)))" " (raise-argument-error 'struct-copy \"namespace?\" the-struct_0)))))" @@ -14389,49 +14391,57 @@ static const char *startup_source = "(let-values(((unavailable-callback_0) unavailable-callback67_0))" "(let-values()" "(let-values(((mi_0)" -"(let-values(((ns164_0) ns_0)" -"((name165_0) name_0)" -"((0-phase166_0) 0-phase_0)" -"((complain-on-failure?167_0) complain-on-failure?_0)" -"((check-available-at-phase-level168_0) check-available-at-phase-level_0)" -"((unavailable-callback169_0) unavailable-callback_0))" +"(let-values(((ns168_0) ns_0)" +"((name169_0) name_0)" +"((0-phase170_0) 0-phase_0)" +"((complain-on-failure?171_0) complain-on-failure?_0)" +"((check-available-at-phase-level172_0) check-available-at-phase-level_0)" +"((unavailable-callback173_0) unavailable-callback_0))" "(namespace->module-instance.1" -" check-available-at-phase-level168_0" -" complain-on-failure?167_0" -" unavailable-callback169_0" -" ns164_0" -" name165_0" -" 0-phase166_0))))" +" check-available-at-phase-level172_0" +" complain-on-failure?171_0" +" unavailable-callback173_0" +" ns168_0" +" name169_0" +" 0-phase170_0))))" "(if mi_0(module-instance-namespace mi_0) #f))))))))))))" "(define-values" "(namespace-record-module-instance-attached!)" "(lambda(ns_0 mod-name_0 phase_0)" "(begin" "(let-values(((mi_0)" -"(let-values(((ns170_0) ns_0)((mod-name171_0) mod-name_0)((phase172_0) phase_0))" -"(namespace->module-instance.1 #f #f void ns170_0 mod-name171_0 phase172_0))))" +"(let-values(((ns174_0) ns_0)((mod-name175_0) mod-name_0)((phase176_0) phase_0))" +"(namespace->module-instance.1 #f #f void ns174_0 mod-name175_0 phase176_0))))" "(set-module-instance-attached?! mi_0 #t)))))" "(define-values" "(module-force-bulk-binding!)" "(lambda(m_0 ns_0)(begin((module-force-bulk-binding m_0)(namespace-bulk-binding-registry ns_0)))))" "(define-values" "(namespace-module-instantiate!.1)" -"(lambda(otherwise-available?77_0 run-phase75_0 seen78_0 skip-run?76_0 ns83_0 mpi84_0 instance-phase85_0)" +"(lambda(otherwise-available?77_0" +" run-phase75_0" +" seen78_0" +" seen-list79_0" +" skip-run?76_0" +" ns85_0" +" mpi86_0" +" instance-phase87_0)" "(begin" " 'namespace-module-instantiate!" -"(let-values(((ns_0) ns83_0))" -"(let-values(((mpi_0) mpi84_0))" -"(let-values(((instance-phase_0) instance-phase85_0))" +"(let-values(((ns_0) ns85_0))" +"(let-values(((mpi_0) mpi86_0))" +"(let-values(((instance-phase_0) instance-phase87_0))" "(let-values(((run-phase_0)(if(eq? run-phase75_0 unsafe-undefined)(namespace-phase ns_0) run-phase75_0)))" "(let-values(((skip-run?_0) skip-run?76_0))" "(let-values(((otherwise-available?_0) otherwise-available?77_0))" "(let-values(((seen_0) seen78_0))" +"(let-values(((seen-list_0) seen-list79_0))" "(let-values()" "(let-values((()" "(begin" "(if(1/module-path-index? mpi_0)" "(void)" -" (let-values () (error \"not a module path index:\" mpi_0)))" +" (let-values () (error \"not a module path index:\" mpi_0)))" "(values))))" "(let-values(((name_0)(1/module-path-index-resolve mpi_0 #t)))" "(let-values(((m_0)(namespace->module ns_0 name_0)))" @@ -14447,17 +14457,17 @@ static const char *startup_source = " 'instantiate!" "(let-values(((mi_0)" "(let-values(((or-part_0)" -"(let-values(((ns179_0) ns_1)" -"((name180_0) name_0)" -"((instance-phase181_0)" +"(let-values(((ns184_0) ns_1)" +"((name185_0) name_0)" +"((instance-phase186_0)" " instance-phase_1))" "(namespace->module-instance.1" " #f" " #f" " void" -" ns179_0" -" name180_0" -" instance-phase181_0))))" +" ns184_0" +" name185_0" +" instance-phase186_0))))" "(if or-part_0" " or-part_0" "(namespace-create-module-instance!" @@ -14466,19 +14476,21 @@ static const char *startup_source = " instance-phase_1" " m_0" " mpi_0)))))" -"(let-values(((mi173_0) mi_0)" -"((ns174_0) ns_1)" -"((run-phase175_0) run-phase_1)" -"((skip-run?176_0) skip-run?_0)" -"((otherwise-available?177_0) otherwise-available?_0)" -"((seen178_0) seen_0))" +"(let-values(((mi177_0) mi_0)" +"((ns178_0) ns_1)" +"((run-phase179_0) run-phase_1)" +"((skip-run?180_0) skip-run?_0)" +"((otherwise-available?181_0) otherwise-available?_0)" +"((seen182_0) seen_0)" +"((seen-list183_0) seen-list_0))" "(run-module-instance!.1" -" otherwise-available?177_0" -" run-phase175_0" -" seen178_0" -" skip-run?176_0" -" mi173_0" -" ns174_0)))))))" +" otherwise-available?181_0" +" run-phase179_0" +" seen182_0" +" seen-list183_0" +" skip-run?180_0" +" mi177_0" +" ns178_0)))))))" "(if(module-cross-phase-persistent? m_0)" "(let-values()" "(instantiate!_0" @@ -14486,65 +14498,68 @@ static const char *startup_source = " 0" "(let-values(((or-part_0)(namespace-root-namespace ns_0)))" "(if or-part_0 or-part_0 ns_0))))" -"(let-values()(instantiate!_0 instance-phase_0 run-phase_0 ns_0)))))))))))))))))))" +"(let-values()(instantiate!_0 instance-phase_0 run-phase_0 ns_0))))))))))))))))))))" "(define-values" "(namespace-module-visit!.1)" -"(lambda(visit-phase87_0 ns89_0 mpi90_0 instance-phase91_0)" +"(lambda(visit-phase89_0 ns91_0 mpi92_0 instance-phase93_0)" "(begin" " 'namespace-module-visit!" -"(let-values(((ns_0) ns89_0))" -"(let-values(((mpi_0) mpi90_0))" -"(let-values(((instance-phase_0) instance-phase91_0))" +"(let-values(((ns_0) ns91_0))" +"(let-values(((mpi_0) mpi92_0))" +"(let-values(((instance-phase_0) instance-phase93_0))" "(let-values(((visit-phase_0)" -"(if(eq? visit-phase87_0 unsafe-undefined)(namespace-phase ns_0) visit-phase87_0)))" +"(if(eq? visit-phase89_0 unsafe-undefined)(namespace-phase ns_0) visit-phase89_0)))" "(let-values()" -"(let-values(((ns182_0) ns_0)" -"((mpi183_0) mpi_0)" -"((instance-phase184_0) instance-phase_0)" -"((temp185_0)(add1 visit-phase_0)))" +"(let-values(((ns187_0) ns_0)" +"((mpi188_0) mpi_0)" +"((instance-phase189_0) instance-phase_0)" +"((temp190_0)(add1 visit-phase_0)))" "(namespace-module-instantiate!.1" " #t" -" temp185_0" +" temp190_0" " '#hasheq()" +" null" " #f" -" ns182_0" -" mpi183_0" -" instance-phase184_0))))))))))" +" ns187_0" +" mpi188_0" +" instance-phase189_0))))))))))" "(define-values" "(namespace-module-make-available!.1)" -"(lambda(visit-phase93_0 ns95_0 mpi96_0 instance-phase97_0)" +"(lambda(visit-phase95_0 ns97_0 mpi98_0 instance-phase99_0)" "(begin" " 'namespace-module-make-available!" -"(let-values(((ns_0) ns95_0))" -"(let-values(((mpi_0) mpi96_0))" -"(let-values(((instance-phase_0) instance-phase97_0))" +"(let-values(((ns_0) ns97_0))" +"(let-values(((mpi_0) mpi98_0))" +"(let-values(((instance-phase_0) instance-phase99_0))" "(let-values(((visit-phase_0)" -"(if(eq? visit-phase93_0 unsafe-undefined)(namespace-phase ns_0) visit-phase93_0)))" +"(if(eq? visit-phase95_0 unsafe-undefined)(namespace-phase ns_0) visit-phase95_0)))" "(let-values()" -"(let-values(((ns186_0) ns_0)" -"((mpi187_0) mpi_0)" -"((instance-phase188_0) instance-phase_0)" -"((temp189_0)(add1 visit-phase_0))" -"((temp190_0) #t))" +"(let-values(((ns191_0) ns_0)" +"((mpi192_0) mpi_0)" +"((instance-phase193_0) instance-phase_0)" +"((temp194_0)(add1 visit-phase_0))" +"((temp195_0) #t))" "(namespace-module-instantiate!.1" " #t" -" temp189_0" +" temp194_0" " '#hasheq()" -" temp190_0" -" ns186_0" -" mpi187_0" -" instance-phase188_0))))))))))" +" null" +" temp195_0" +" ns191_0" +" mpi192_0" +" instance-phase193_0))))))))))" "(define-values" "(run-module-instance!.1)" -"(lambda(otherwise-available?101_0 run-phase99_0 seen102_0 skip-run?100_0 mi107_0 ns108_0)" +"(lambda(otherwise-available?103_0 run-phase101_0 seen104_0 seen-list105_0 skip-run?102_0 mi111_0 ns112_0)" "(begin" " 'run-module-instance!" -"(let-values(((mi_0) mi107_0))" -"(let-values(((ns_0) ns108_0))" -"(let-values(((run-phase_0) run-phase99_0))" -"(let-values(((skip-run?_0) skip-run?100_0))" -"(let-values(((otherwise-available?_0) otherwise-available?101_0))" -"(let-values(((seen_0) seen102_0))" +"(let-values(((mi_0) mi111_0))" +"(let-values(((ns_0) ns112_0))" +"(let-values(((run-phase_0) run-phase101_0))" +"(let-values(((skip-run?_0) skip-run?102_0))" +"(let-values(((otherwise-available?_0) otherwise-available?103_0))" +"(let-values(((seen_0) seen104_0))" +"(let-values(((seen-list_0) seen-list105_0))" "(let-values()" "(begin" "(if log-performance?(let-values()(start-performance-region 'eval 'requires))(void))" @@ -14575,7 +14590,7 @@ static const char *startup_source = "(let-values()" "(error" " 'require" -" \"import cycle detected; trying to run module being expanded\")))" +" \"import cycle detected; trying to run module being expanded\")))" "(values))))" "(let-values(((mpi_0)(namespace-mpi m-ns_0)))" "(let-values(((phase-shift_0) instance-phase_0))" @@ -14586,7 +14601,11 @@ static const char *startup_source = "(let-values()" "(error" " 'require" -" \"import cycle detected during module instantiation\"))" +"(apply" +" string-append" +" \"import cycle detected during module instantiation\\n\"" +" \" dependency chain:\"" +"(module-instances->indented-module-names mi_0 seen-list_0))))" "(void))" "(if(module-instance-shifted-requires mi_0)" "(void)" @@ -14689,7 +14708,8 @@ static const char *startup_source = "(if(pair? lst_1)" "(let-values(((phase+mpis_0)" "(unsafe-car lst_1))" -"((rest_0)(unsafe-cdr lst_1)))" +"((rest_0)" +"(unsafe-cdr lst_1)))" "(let-values((()" "(let-values()" "(let-values((()" @@ -14728,33 +14748,38 @@ static const char *startup_source = "(let-values()" "(begin" "(let-values()" -"(let-values(((ns191_0)" +"(let-values(((ns196_0)" " ns_0)" -"((req-mpi192_0)" +"((req-mpi197_0)" " req-mpi_0)" -"((temp193_0)" +"((temp198_0)" "(phase+" " instance-phase_0" " req-phase_0))" -"((run-phase194_0)" +"((run-phase199_0)" " run-phase_0)" -"((skip-run?195_0)" +"((skip-run?200_0)" " skip-run?_0)" -"((otherwise-available?196_0)" +"((otherwise-available?201_0)" " otherwise-available?_0)" -"((temp197_0)" +"((temp202_0)" "(hash-set" " seen_0" " mi_0" -" #t)))" +" #t))" +"((temp203_0)" +"(cons" +" mi_0" +" seen-list_0)))" "(namespace-module-instantiate!.1" -" otherwise-available?196_0" -" run-phase194_0" -" temp197_0" -" skip-run?195_0" -" ns191_0" -" req-mpi192_0" -" temp193_0)))" +" otherwise-available?201_0" +" run-phase199_0" +" temp202_0" +" temp203_0" +" skip-run?200_0" +" ns196_0" +" req-mpi197_0" +" temp198_0)))" "(values)))))" "(values)))))" "(if(not" @@ -14791,7 +14816,8 @@ static const char *startup_source = "(begin" " 'for-loop" "(if(> pos_0 end_0)" -"(let-values(((phase-level_0) pos_0))" +"(let-values(((phase-level_0)" +" pos_0))" "(let-values((()" "(let-values()" "(let-values((()" @@ -14913,29 +14939,29 @@ static const char *startup_source = "(module-instance-phase-level-to-state mi_0)" " run-phase-level_0" " 'started)))))))))))))))" -"(if log-performance?(let-values()(end-performance-region))(void))))))))))))))" +"(if log-performance?(let-values()(end-performance-region))(void)))))))))))))))" "(define-values" "(namespace-visit-available-modules!)" "(let-values(((namespace-visit-available-modules!_0)" -"(lambda(ns111_0 run-phase110_0)" +"(lambda(ns115_0 run-phase114_0)" "(begin" " 'namespace-visit-available-modules!" -"(let-values(((ns_0) ns111_0))" +"(let-values(((ns_0) ns115_0))" "(let-values(((run-phase_0)" -"(if(eq? run-phase110_0 unsafe-undefined)(namespace-phase ns_0) run-phase110_0)))" +"(if(eq? run-phase114_0 unsafe-undefined)(namespace-phase ns_0) run-phase114_0)))" "(let-values()(namespace-run-available-modules! ns_0(add1 run-phase_0)))))))))" "(case-lambda" "((ns_0)(begin(namespace-visit-available-modules!_0 ns_0 unsafe-undefined)))" -"((ns_0 run-phase110_0)(namespace-visit-available-modules!_0 ns_0 run-phase110_0)))))" +"((ns_0 run-phase114_0)(namespace-visit-available-modules!_0 ns_0 run-phase114_0)))))" "(define-values" "(namespace-run-available-modules!)" "(let-values(((namespace-run-available-modules!_0)" -"(lambda(ns113_0 run-phase112_0)" +"(lambda(ns117_0 run-phase116_0)" "(begin" " 'namespace-run-available-modules!" -"(let-values(((ns_0) ns113_0))" +"(let-values(((ns_0) ns117_0))" "(let-values(((run-phase_0)" -"(if(eq? run-phase112_0 unsafe-undefined)(namespace-phase ns_0) run-phase112_0)))" +"(if(eq? run-phase116_0 unsafe-undefined)(namespace-phase ns_0) run-phase116_0)))" "(let-values()" "(registry-call-with-lock" "(namespace-module-registry$1 ns_0)" @@ -14979,23 +15005,24 @@ static const char *startup_source = "(let-values()" "(begin" "(let-values()" -"(let-values(((mi198_0)" +"(let-values(((mi204_0)" " mi_0)" -"((ns199_0)" +"((ns205_0)" " ns_0)" -"((run-phase200_0)" +"((run-phase206_0)" " run-phase_0)" -"((temp201_0)" +"((temp207_0)" " #f)" -"((temp202_0)" +"((temp208_0)" " #f))" "(run-module-instance!.1" -" temp202_0" -" run-phase200_0" +" temp208_0" +" run-phase206_0" " '#hasheq()" -" temp201_0" -" mi198_0" -" ns199_0)))" +" null" +" temp207_0" +" mi204_0" +" ns205_0)))" "(values)))))" "(values)))))" "(if(not #f)" @@ -15009,42 +15036,42 @@ static const char *startup_source = " loop_0)))))))))))" "(case-lambda" "((ns_0)(begin(namespace-run-available-modules!_0 ns_0 unsafe-undefined)))" -"((ns_0 run-phase112_0)(namespace-run-available-modules!_0 ns_0 run-phase112_0)))))" +"((ns_0 run-phase116_0)(namespace-run-available-modules!_0 ns_0 run-phase116_0)))))" "(define-values" "(namespace-primitive-module-visit!)" "(lambda(ns_0 name_0)" "(begin" "(let-values(((mi_0)(hash-ref(namespace-module-instances ns_0)(1/make-resolved-module-path name_0))))" -"(let-values(((mi203_0) mi_0)((ns204_0) ns_0)((temp205_0) 1)((temp206_0) #f)((temp207_0) #t))" -"(run-module-instance!.1 temp207_0 temp205_0 '#hasheq() temp206_0 mi203_0 ns204_0))))))" +"(let-values(((mi209_0) mi_0)((ns210_0) ns_0)((temp211_0) 1)((temp212_0) #f)((temp213_0) #t))" +"(run-module-instance!.1 temp213_0 temp211_0 '#hasheq() null temp212_0 mi209_0 ns210_0))))))" "(define-values" "(namespace-module-use->module+linklet-instances.1)" -"(lambda(phase-shift116_0 shift-from114_0 shift-to115_0 ns120_0 mu121_0)" +"(lambda(phase-shift120_0 shift-from118_0 shift-to119_0 ns124_0 mu125_0)" "(begin" " 'namespace-module-use->module+linklet-instances" -"(let-values(((ns_0) ns120_0))" -"(let-values(((mu_0) mu121_0))" -"(let-values(((shift-from_0) shift-from114_0))" -"(let-values(((shift-to_0) shift-to115_0))" -"(let-values(((phase-shift_0) phase-shift116_0))" +"(let-values(((ns_0) ns124_0))" +"(let-values(((mu_0) mu125_0))" +"(let-values(((shift-from_0) shift-from118_0))" +"(let-values(((shift-to_0) shift-to119_0))" +"(let-values(((phase-shift_0) phase-shift120_0))" "(let-values()" "(let-values(((mod_0)(module-use-module mu_0)))" "(let-values(((mi_0)" -"(let-values(((ns208_0) ns_0)" -"((temp209_0)" +"(let-values(((ns214_0) ns_0)" +"((temp215_0)" "(1/module-path-index-resolve" "(if shift-from_0" "(module-path-index-shift mod_0 shift-from_0 shift-to_0)" " mod_0)))" -"((phase-shift210_0) phase-shift_0)" -"((temp211_0) #t))" +"((phase-shift216_0) phase-shift_0)" +"((temp217_0) #t))" "(namespace->module-instance.1" " #f" -" temp211_0" +" temp217_0" " void" -" ns208_0" -" temp209_0" -" phase-shift210_0))))" +" ns214_0" +" temp215_0" +" phase-shift216_0))))" "(let-values(((m-ns_0)(module-instance-namespace mi_0)))" "(let-values(((d_0)" "(small-hash-ref" @@ -15222,6 +15249,31 @@ static const char *startup_source = "(hash-iterate-first ht_0))))))" "(begin(set-module-access! m_0 access_0) access_0)))))" "(define-values" +"(module-instances->indented-module-names)" +"(lambda(mi_0 seen-list_0)" +"(begin" +"(let-values(((mi->name_0)" +"(lambda(mi_1)" +"(begin" +" 'mi->name" +"(format" +" \"\\n ~a\"" +"(1/module-path-index-resolve(namespace-mpi(module-instance-namespace mi_1))))))))" +"(cons" +"(mi->name_0 mi_0)" +"((letrec-values(((loop_0)" +"(lambda(seen-list_1)" +"(begin" +" 'loop" +"(if(null? seen-list_1)" +"(let-values() '())" +"(if(eq? mi_0(car seen-list_1))" +"(let-values()(list(mi->name_0 mi_0)))" +"(let-values()" +"(cons(mi->name_0(car seen-list_1))(loop_0(cdr seen-list_1))))))))))" +" loop_0)" +" seen-list_0))))))" +"(define-values" "(binding->module-instance)" "(lambda(b_0 ns_0 phase_0 id_0)" "(begin" @@ -28232,6 +28284,7 @@ static const char *startup_source = " #t" " run-phase248_0" " '#hasheq()" +" null" " #f" " m-ns245_0" " interned-mpi246_0" @@ -49034,6 +49087,7 @@ static const char *startup_source = " #t" " unsafe-undefined" " '#hasheq()" +" null" " #f" " src-namespace35_0" " mpi36_0" @@ -51891,6 +51945,7 @@ static const char *startup_source = " temp15_0" " phase14_0" " '#hasheq()" +" null" " #f" " ns11_0" " mpi12_0" @@ -51905,6 +51960,7 @@ static const char *startup_source = " #t" " phase19_0" " '#hasheq()" +" null" " #f" " ns16_0" " mpi17_0" @@ -51967,6 +52023,7 @@ static const char *startup_source = " temp28_0" " phase27_0" " '#hasheq()" +" null" " #f" " ns24_0" " mpi25_0"