@@ -271,7 +271,7 @@ macro_rules! get_module_type_resolver {
271
271
let mut module_iter = module. rsplitn( 2 , "::" ) ;
272
272
module_iter. next( ) . unwrap( ) ;
273
273
let module = module_iter. next( ) . unwrap( ) ;
274
- let imports = ImportResolver :: new( module. splitn( 2 , "::" ) . next( ) . unwrap( ) , & $crate_types. lib_ast. dependencies ,
274
+ let imports = ImportResolver :: new( module. splitn( 2 , "::" ) . next( ) . unwrap( ) , & $crate_types. lib_ast,
275
275
module, & $crate_types. lib_ast. modules. get( module) . unwrap( ) . items) ;
276
276
TypeResolver :: new( module, imports, $crate_types)
277
277
} }
@@ -677,7 +677,7 @@ fn writeln_opaque<W: std::io::Write>(w: &mut W, ident: &syn::Ident, struct_name:
677
677
writeln ! ( w, "#[allow(unused)]" ) . unwrap ( ) ;
678
678
writeln ! ( w, "/// Used only if an object of this type is returned as a trait impl by a method" ) . unwrap ( ) ;
679
679
writeln ! ( w, "pub(crate) extern \" C\" fn {}_free_void(this_ptr: *mut c_void) {{" , struct_name) . unwrap ( ) ;
680
- writeln ! ( w, "\t unsafe {{ let _ = Box::from_raw(this_ptr as *mut native{}); }}\n }}" , struct_name) . unwrap ( ) ;
680
+ writeln ! ( w, "\t let _ = unsafe {{ Box::from_raw(this_ptr as *mut native{}) }}; \n }}" , struct_name) . unwrap ( ) ;
681
681
writeln ! ( w, "#[allow(unused)]" ) . unwrap ( ) ;
682
682
writeln ! ( w, "impl {} {{" , struct_name) . unwrap ( ) ;
683
683
writeln ! ( w, "\t pub(crate) fn get_native_ref(&self) -> &'static native{} {{" , struct_name) . unwrap ( ) ;
@@ -849,7 +849,8 @@ fn writeln_struct<'a, 'b, W: std::io::Write>(w: &mut W, s: &'a syn::ItemStruct,
849
849
write ! ( w, "\t }}" ) . unwrap ( ) ;
850
850
} ,
851
851
syn:: Fields :: Unnamed ( fields) => {
852
- assert ! ( s. generics. lt_token. is_none( ) ) ;
852
+ assert ! ( !s. generics. params. iter( )
853
+ . any( |gen | if let syn:: GenericParam :: Lifetime ( _) = gen { false } else { true } ) ) ;
853
854
writeln ! ( w, "{} (" , types. maybe_resolve_ident( & s. ident) . unwrap( ) ) . unwrap ( ) ;
854
855
for ( idx, field) in fields. unnamed . iter ( ) . enumerate ( ) {
855
856
write ! ( w, "\t \t " ) . unwrap ( ) ;
@@ -1359,6 +1360,7 @@ fn writeln_impl<W: std::io::Write>(w: &mut W, w_uses: &mut HashSet<String, NonRa
1359
1360
ExportStatus :: NoExport |ExportStatus :: TestOnly => continue ,
1360
1361
ExportStatus :: NotImplementable => panic ! ( "(C-not implementable) must only appear on traits" ) ,
1361
1362
}
1363
+ if m. sig . asyncness . is_some ( ) { continue ; }
1362
1364
let mut meth_gen_types = gen_types. push_ctx ( ) ;
1363
1365
assert ! ( meth_gen_types. learn_generics( & m. sig. generics, types) ) ;
1364
1366
if m. defaultness . is_some ( ) { unimplemented ! ( ) ; }
@@ -1430,7 +1432,7 @@ fn create_alias_for_impl<F: FnMut(syn::ItemImpl, &mut TypeResolver)>(resolved_pa
1430
1432
1431
1433
let alias_resolver_override;
1432
1434
let alias_resolver = if alias_module != types. module_path {
1433
- alias_resolver_override = ImportResolver :: new ( types. types . crate_name , & types. crate_types . lib_ast . dependencies ,
1435
+ alias_resolver_override = ImportResolver :: new ( types. types . crate_name , & types. crate_types . lib_ast ,
1434
1436
alias_module, & types. crate_types . lib_ast . modules . get ( alias_module) . unwrap ( ) . items ) ;
1435
1437
& alias_resolver_override
1436
1438
} else { & types. types } ;
@@ -1779,7 +1781,7 @@ fn writeln_enum<'a, 'b, W: std::io::Write>(w: &mut W, e: &'a syn::ItemEnum, type
1779
1781
} ;
1780
1782
if $ref || new_var {
1781
1783
if $ref {
1782
- write!( w, "let mut {}_nonref = (*{}).clone( );\n \t \t \t \t " , $field_ident, $field_ident) . unwrap( ) ;
1784
+ write!( w, "let mut {}_nonref = Clone::clone({} );\n \t \t \t \t " , $field_ident, $field_ident) . unwrap( ) ;
1783
1785
if new_var {
1784
1786
let nonref_ident = format_ident!( "{}_nonref" , $field_ident) ;
1785
1787
if $to_c {
@@ -1924,7 +1926,7 @@ fn convert_priv_mod<'a, 'b: 'a, W: std::io::Write>(w: &mut W, w_uses: &mut HashS
1924
1926
use_items. push ( item) ;
1925
1927
}
1926
1928
}
1927
- let import_resolver = ImportResolver :: from_borrowed_items ( mod_path. splitn ( 2 , "::" ) . next ( ) . unwrap ( ) , & libast. dependencies , mod_path, & use_items) ;
1929
+ let import_resolver = ImportResolver :: from_borrowed_items ( mod_path. splitn ( 2 , "::" ) . next ( ) . unwrap ( ) , libast, mod_path, & use_items) ;
1928
1930
let mut types = TypeResolver :: new ( mod_path, import_resolver, crate_types) ;
1929
1931
1930
1932
writeln ! ( w, "mod {} {{\n {}" , module. ident, DEFAULT_IMPORTS ) . unwrap ( ) ;
@@ -2006,7 +2008,7 @@ fn convert_file<'a, 'b>(libast: &'a FullLibraryAST, crate_types: &CrateTypes<'a>
2006
2008
2007
2009
eprintln ! ( "Converting {} entries..." , module) ;
2008
2010
2009
- let import_resolver = ImportResolver :: new ( orig_crate, & libast. dependencies , module, items) ;
2011
+ let import_resolver = ImportResolver :: new ( orig_crate, libast, module, items) ;
2010
2012
let mut type_resolver = TypeResolver :: new ( module, import_resolver, crate_types) ;
2011
2013
2012
2014
for item in items. iter ( ) {
@@ -2118,7 +2120,7 @@ fn walk_ast_second_pass<'a>(ast_storage: &'a FullLibraryAST, crate_types: &Crate
2118
2120
let ASTModule { ref attrs, ref items, .. } = astmod;
2119
2121
assert_eq ! ( export_status( & attrs) , ExportStatus :: Export ) ;
2120
2122
2121
- let import_resolver = ImportResolver :: new ( orig_crate, & ast_storage. dependencies , module, items) ;
2123
+ let import_resolver = ImportResolver :: new ( orig_crate, ast_storage, module, items) ;
2122
2124
let mut types = TypeResolver :: new ( module, import_resolver, crate_types) ;
2123
2125
2124
2126
for item in items. iter ( ) {
@@ -2154,7 +2156,7 @@ fn walk_ast_second_pass<'a>(ast_storage: &'a FullLibraryAST, crate_types: &Crate
2154
2156
}
2155
2157
2156
2158
fn walk_private_mod < ' a > ( ast_storage : & ' a FullLibraryAST , orig_crate : & str , module : String , items : & ' a syn:: ItemMod , crate_types : & mut CrateTypes < ' a > ) {
2157
- let import_resolver = ImportResolver :: new ( orig_crate, & ast_storage. dependencies , & module, & items. content . as_ref ( ) . unwrap ( ) . 1 ) ;
2159
+ let import_resolver = ImportResolver :: new ( orig_crate, ast_storage, & module, & items. content . as_ref ( ) . unwrap ( ) . 1 ) ;
2158
2160
for item in items. content . as_ref ( ) . unwrap ( ) . 1 . iter ( ) {
2159
2161
match item {
2160
2162
syn:: Item :: Mod ( m) => walk_private_mod ( ast_storage, orig_crate, format ! ( "{}::{}" , module, m. ident) , m, crate_types) ,
@@ -2183,7 +2185,7 @@ fn walk_ast_first_pass<'a>(ast_storage: &'a FullLibraryAST, crate_types: &mut Cr
2183
2185
let ASTModule { ref attrs, ref items, submods : _ } = astmod;
2184
2186
assert_eq ! ( export_status( & attrs) , ExportStatus :: Export ) ;
2185
2187
let orig_crate = module. splitn ( 2 , "::" ) . next ( ) . unwrap ( ) ;
2186
- let import_resolver = ImportResolver :: new ( orig_crate, & ast_storage. dependencies , module, items) ;
2188
+ let import_resolver = ImportResolver :: new ( orig_crate, ast_storage, module, items) ;
2187
2189
2188
2190
for item in items. iter ( ) {
2189
2191
match item {
0 commit comments