@@ -19,20 +19,20 @@ use std::{
1919} ;
2020
2121/// Holds data about referenced source contracts and bytecode dependencies.
22- pub struct PreprocessorDependencies {
22+ pub ( crate ) struct PreprocessorDependencies {
2323 // Mapping contract id to preprocess -> contract bytecode dependencies.
24- pub preprocessed_contracts : BTreeMap < u32 , Vec < BytecodeDependency > > ,
24+ pub preprocessed_contracts : BTreeMap < ContractId , Vec < BytecodeDependency > > ,
2525 // Referenced contract ids.
26- pub referenced_contracts : HashSet < u32 > ,
26+ pub referenced_contracts : HashSet < ContractId > ,
2727}
2828
2929impl PreprocessorDependencies {
3030 pub fn new ( sess : & Session , hir : & Hir < ' _ > , paths : & [ PathBuf ] , src_dir : & PathBuf ) -> Self {
3131 let mut preprocessed_contracts = BTreeMap :: new ( ) ;
3232 let mut referenced_contracts = HashSet :: new ( ) ;
33- for contract_id in Hir :: contract_ids ( hir ) {
34- let contract = Hir :: contract ( hir , contract_id) ;
35- let source = Hir :: source ( hir , contract. source ) ;
33+ for contract_id in hir . contract_ids ( ) {
34+ let contract = hir . contract ( contract_id) ;
35+ let source = hir . source ( contract. source ) ;
3636
3737 let FileName :: Real ( path) = & source. file . name else {
3838 continue ;
@@ -53,7 +53,7 @@ impl PreprocessorDependencies {
5353 deps_collector. walk_contract ( contract) ;
5454 // Ignore empty test contracts declared in source files with other contracts.
5555 if !deps_collector. dependencies . is_empty ( ) {
56- preprocessed_contracts. insert ( contract_id. get ( ) , deps_collector. dependencies ) ;
56+ preprocessed_contracts. insert ( contract_id, deps_collector. dependencies ) ;
5757 }
5858 // Record collected referenced contract ids.
5959 referenced_contracts. extend ( deps_collector. referenced_contracts ) ;
@@ -73,13 +73,13 @@ enum BytecodeDependencyKind {
7373
7474/// Represents a single bytecode dependency.
7575#[ derive( Debug ) ]
76- pub struct BytecodeDependency {
76+ pub ( crate ) struct BytecodeDependency {
7777 /// Dependency kind.
7878 kind : BytecodeDependencyKind ,
7979 /// Source map location of this dependency.
8080 loc : SourceMapLocation ,
8181 /// HIR id of referenced contract.
82- referenced_contract : u32 ,
82+ referenced_contract : ContractId ,
8383}
8484
8585/// Walks over contract HIR and collects [`BytecodeDependency`]s and referenced contracts.
@@ -95,7 +95,7 @@ struct BytecodeDependencyCollector<'hir> {
9595 /// Dependencies collected for current contract.
9696 dependencies : Vec < BytecodeDependency > ,
9797 /// Unique HIR ids of contracts referenced from current contract.
98- referenced_contracts : HashSet < u32 > ,
98+ referenced_contracts : HashSet < ContractId > ,
9999}
100100
101101impl < ' hir > BytecodeDependencyCollector < ' hir > {
@@ -119,8 +119,8 @@ impl<'hir> BytecodeDependencyCollector<'hir> {
119119 /// Discards any reference that is not in project src directory (e.g. external
120120 /// libraries or mock contracts that extend source contracts).
121121 fn collect_dependency ( & mut self , dependency : BytecodeDependency ) {
122- let contract = Hir :: contract ( self . hir , ContractId :: new ( dependency. referenced_contract ) ) ;
123- let source = Hir :: source ( self . hir , contract. source ) ;
122+ let contract = self . hir . contract ( dependency. referenced_contract ) ;
123+ let source = self . hir . source ( contract. source ) ;
124124 let FileName :: Real ( path) = & source. file . name else {
125125 return ;
126126 } ;
@@ -159,20 +159,20 @@ impl<'hir> Visit<'hir> for BytecodeDependencyCollector<'hir> {
159159 self . source_map ,
160160 Span :: new ( expr. span . lo ( ) , expr. span . hi ( ) ) ,
161161 ) ,
162- referenced_contract : contract_id. get ( ) ,
162+ referenced_contract : contract_id,
163163 } ) ;
164164 }
165165 }
166166 }
167167 ExprKind :: Member ( member_expr, ident) => {
168- if ident . name . to_string ( ) == "creationCode" {
169- if let ExprKind :: TypeCall ( ty ) = & member_expr . kind {
170- if let TypeKind :: Custom ( contract_id ) = & ty . kind {
168+ if let ExprKind :: TypeCall ( ty ) = & member_expr . kind {
169+ if let TypeKind :: Custom ( contract_id ) = & ty . kind {
170+ if ident . name . as_str ( ) == "creationCode" {
171171 if let Some ( contract_id) = contract_id. as_contract ( ) {
172172 self . collect_dependency ( BytecodeDependency {
173173 kind : BytecodeDependencyKind :: CreationCode ,
174174 loc : SourceMapLocation :: from_span ( self . source_map , expr. span ) ,
175- referenced_contract : contract_id. get ( ) ,
175+ referenced_contract : contract_id,
176176 } ) ;
177177 }
178178 }
@@ -187,23 +187,23 @@ impl<'hir> Visit<'hir> for BytecodeDependencyCollector<'hir> {
187187
188188/// Goes over all test/script files and replaces bytecode dependencies with cheatcode
189189/// invocations.
190- pub fn remove_bytecode_dependencies (
190+ pub ( crate ) fn remove_bytecode_dependencies (
191191 hir : & Hir < ' _ > ,
192192 deps : & PreprocessorDependencies ,
193193 data : & PreprocessorData ,
194194) -> Updates {
195195 let mut updates = Updates :: default ( ) ;
196196 for ( contract_id, deps) in & deps. preprocessed_contracts {
197- let contract = Hir :: contract ( hir , ContractId :: new ( * contract_id) ) ;
198- let source = Hir :: source ( hir , contract. source ) ;
197+ let contract = hir . contract ( * contract_id) ;
198+ let source = hir . source ( contract. source ) ;
199199 let FileName :: Real ( path) = & source. file . name else {
200200 continue ;
201201 } ;
202202
203203 let updates = updates. entry ( path. clone ( ) ) . or_default ( ) ;
204204 let mut used_helpers = BTreeSet :: new ( ) ;
205205
206- let vm_interface_name = format ! ( "VmContractHelper{contract_id}" ) ;
206+ let vm_interface_name = format ! ( "VmContractHelper{}" , contract_id . get ( ) ) ;
207207 let vm = format ! ( "{vm_interface_name}(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D)" ) ;
208208
209209 for dep in deps {
@@ -239,7 +239,7 @@ pub fn remove_bytecode_dependencies(
239239 dep. loc . end ,
240240 format ! (
241241 "deployCode{id}(DeployHelper{id}.ConstructorArgs" ,
242- id = dep. referenced_contract
242+ id = dep. referenced_contract. get ( )
243243 ) ,
244244 ) ) ;
245245 updates. insert ( (
@@ -252,6 +252,7 @@ pub fn remove_bytecode_dependencies(
252252 } ;
253253 }
254254 let helper_imports = used_helpers. into_iter ( ) . map ( |id| {
255+ let id = id. get ( ) ;
255256 format ! (
256257 "import {{DeployHelper{id}, encodeArgs{id}, deployCode{id}}} from \" foundry-pp/DeployHelper{id}.sol\" ;" ,
257258 )
0 commit comments