@@ -1181,7 +1181,7 @@ fn struct_def_from_struct_handle<Resolver>(
1181
1181
verified_modules : & mut BTreeMap < ModuleId , CompiledModule > ,
1182
1182
struct_name : & str ,
1183
1183
db : & Resolver ,
1184
- ) -> Option < StructDefinition >
1184
+ ) -> Option < ( StructDefinition , CompiledModule ) >
1185
1185
where
1186
1186
Resolver : ModuleResolver ,
1187
1187
{
@@ -1191,7 +1191,7 @@ where
1191
1191
let iterator_struct_name =
1192
1192
struct_full_name_from_sid ( & struct_handle_idx, & current_module_bin_view) ;
1193
1193
if iterator_struct_name == struct_name {
1194
- return Some ( struct_def. clone ( ) ) ;
1194
+ return Some ( ( struct_def. clone ( ) , current_module . clone ( ) ) ) ;
1195
1195
}
1196
1196
}
1197
1197
@@ -1202,7 +1202,7 @@ where
1202
1202
let iterator_struct_name =
1203
1203
struct_full_name_from_sid ( & struct_handle_idx, & iterator_module_bin_view) ;
1204
1204
if iterator_struct_name == struct_name {
1205
- return Some ( struct_def. clone ( ) ) ;
1205
+ return Some ( ( struct_def. clone ( ) , m . clone ( ) ) ) ;
1206
1206
}
1207
1207
}
1208
1208
}
@@ -1220,7 +1220,7 @@ where
1220
1220
let iterator_struct_name =
1221
1221
struct_full_name_from_sid ( & struct_handle_idx, & target_module_bin_view) ;
1222
1222
if iterator_struct_name == struct_name {
1223
- return Some ( struct_def. clone ( ) ) ;
1223
+ return Some ( ( struct_def. clone ( ) , target_module ) ) ;
1224
1224
}
1225
1225
}
1226
1226
None
@@ -1455,7 +1455,7 @@ where
1455
1455
db,
1456
1456
) ;
1457
1457
match struct_def_opt {
1458
- Some ( struct_def) => validate_struct_fields (
1458
+ Some ( ( struct_def, _ ) ) => validate_struct_fields (
1459
1459
& struct_def,
1460
1460
current_module,
1461
1461
module_bin_view,
@@ -1910,19 +1910,21 @@ where
1910
1910
) ;
1911
1911
1912
1912
let mut struct_fields = Vec :: new ( ) ;
1913
- if let Some ( struct_def) = struct_def_opt {
1914
- let field_count = struct_def. declared_field_count ( ) . unwrap ( ) ;
1915
- for field_idx in 0 ..field_count {
1916
- let field_def = struct_def. field ( field_idx as usize ) . unwrap ( ) . clone ( ) ;
1917
- struct_fields. push ( field_def) ;
1918
- }
1913
+ let mut target_module = caller_module. clone ( ) ;
1914
+ if let Some ( ( struct_def, m) ) = struct_def_opt {
1915
+ let v = match struct_def. field_information {
1916
+ StructFieldInformation :: Native => vec ! [ ] ,
1917
+ StructFieldInformation :: Declared ( v) => v,
1918
+ } ;
1919
+ target_module = m. clone ( ) ;
1920
+ struct_fields. extend ( v) ;
1919
1921
}
1920
1922
1921
1923
let formulas = struct_fields
1922
1924
. iter ( )
1923
1925
. map ( |field_def| {
1924
1926
calculate_depth_of_type (
1925
- caller_module ,
1927
+ & target_module ,
1926
1928
verified_modules,
1927
1929
db,
1928
1930
& field_def. signature . 0 . clone ( ) ,
0 commit comments