@@ -51,17 +51,11 @@ struct PreparedBlockConnectionBuilder {
5151 dependency : DependencyId ,
5252}
5353
54- struct PreparedBlockConnectionGroupBuilder {
55- block : DependenciesBlockIdentifier ,
56- module : ModuleIdentifier ,
57- connections : Vec < DependencyId > ,
58- }
59-
6054fn finalize_prepared_connection_map (
6155 connections : impl IntoIterator < Item = PreparedBlockConnectionBuilder > ,
6256 capacity : usize ,
6357) -> PreparedBlockConnectionMap {
64- let mut groups = Vec :: < PreparedBlockConnectionGroupBuilder > :: with_capacity ( capacity) ;
58+ let mut groups = PreparedBlockConnectionMap :: with_capacity ( capacity) ;
6559 let mut group_index_by_block = Vec :: < ( DependenciesBlockIdentifier , IdentifierMap < usize > ) > :: new ( ) ;
6660 for connection in connections {
6761 let index_by_module = if let Some ( ( _, index_by_module) ) = group_index_by_block
@@ -78,27 +72,22 @@ fn finalize_prepared_connection_map(
7872 } ;
7973
8074 if let Some ( index) = index_by_module. get ( & connection. module ) {
81- groups[ * index] . connections . push ( connection. dependency ) ;
75+ Arc :: get_mut ( & mut groups[ * index] . connections )
76+ . expect ( "prepared connections should not be shared during finalize" )
77+ . push ( connection. dependency ) ;
8278 continue ;
8379 }
8480
8581 let index = groups. len ( ) ;
8682 index_by_module. insert ( connection. module , index) ;
87- groups. push ( PreparedBlockConnectionGroupBuilder {
83+ groups. push ( PreparedBlockConnection {
8884 block : connection. block ,
8985 module : connection. module ,
90- connections : vec ! [ connection. dependency] ,
86+ connections : Arc :: new ( vec ! [ connection. dependency] ) ,
9187 } ) ;
9288 }
9389
9490 groups
95- . into_iter ( )
96- . map ( |connection| PreparedBlockConnection {
97- block : connection. block ,
98- module : connection. module ,
99- connections : Arc :: new ( connection. connections ) ,
100- } )
101- . collect ( )
10291}
10392
10493#[ derive( Debug , Clone , Default ) ]
@@ -2335,9 +2324,6 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
23352324 let mut ordered_deps = Vec :: new ( ) ;
23362325 let mut unordered_deps = Vec :: with_capacity ( dependency_count) ;
23372326 for dep_id in all_dependencies {
2338- let Some ( connection) = mg. connection_by_dependency_id ( dep_id) else {
2339- continue ;
2340- } ;
23412327 let dep = mg. dependency_by_id ( dep_id) ;
23422328 let module_dep = dep. as_module_dependency ( ) ;
23432329 if module_dep. is_none ( ) && dep. as_context_dependency ( ) . is_none ( ) {
@@ -2346,6 +2332,9 @@ Or do you want to use the entrypoints '{name}' and '{runtime}' independently on
23462332 if matches ! ( module_dep. map( |d| d. weak( ) ) , Some ( true ) ) {
23472333 continue ;
23482334 }
2335+ let Some ( connection) = mg. connection_by_dependency_id ( dep_id) else {
2336+ continue ;
2337+ } ;
23492338
23502339 let module_identifier = * connection. module_identifier ( ) ;
23512340 let block_id = if let Some ( block) = mg. get_parent_block ( dep_id) {
0 commit comments