@@ -890,15 +890,11 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
890
890
let mut seg_iter = p. segments . iter ( ) ;
891
891
let first_seg = seg_iter. next ( ) . unwrap ( ) ;
892
892
let remaining: String = seg_iter. map ( |seg| {
893
- if let syn:: PathArguments :: None = seg. arguments {
894
- format ! ( "{}" , seg. ident)
895
- } else {
896
- format ! ( "{}" , seg. ident)
897
- }
893
+ format ! ( "::{}" , seg. ident)
898
894
} ) . collect ( ) ;
899
895
if let Some ( imp) = self . imports . get ( & first_seg. ident ) {
900
896
if remaining != "" {
901
- Some ( imp. clone ( ) + "::" + & remaining)
897
+ Some ( imp. clone ( ) + & remaining)
902
898
} else {
903
899
Some ( imp. clone ( ) )
904
900
}
@@ -1740,14 +1736,12 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
1740
1736
} else if let syn:: Type :: Reference ( r_arg) = t {
1741
1737
if let syn:: Type :: Path ( p_arg) = & * r_arg. elem {
1742
1738
let resolved = self . resolve_path ( & p_arg. path , None ) ;
1743
- if single_ident_generic_path_to_ident ( & p_arg. path ) . is_some ( ) {
1744
- if self . crate_types . opaques . get ( & resolved) . is_some ( ) {
1745
- write ! ( w, "crate::{}" , resolved) . unwrap ( ) ;
1746
- } else {
1747
- let cty = self . c_type_from_path ( & resolved, true , true ) . expect ( "Template generics should be opaque or have a predefined mapping" ) ;
1748
- w. write ( cty. as_bytes ( ) ) . unwrap ( ) ;
1749
- }
1750
- } else { unimplemented ! ( ) ; }
1739
+ if self . crate_types . opaques . get ( & resolved) . is_some ( ) {
1740
+ write ! ( w, "crate::{}" , resolved) . unwrap ( ) ;
1741
+ } else {
1742
+ let cty = self . c_type_from_path ( & resolved, true , true ) . expect ( "Template generics should be opaque or have a predefined mapping" ) ;
1743
+ w. write ( cty. as_bytes ( ) ) . unwrap ( ) ;
1744
+ }
1751
1745
} else { unimplemented ! ( ) ; }
1752
1746
} else if let syn:: Type :: Array ( a_arg) = t {
1753
1747
if let syn:: Type :: Path ( p_arg) = & * a_arg. elem {
@@ -1827,13 +1821,14 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
1827
1821
self . write_c_mangled_container_path_intern( generics, w2, Self :: path_to_generic_args( & $p_arg. path) ,
1828
1822
& subtype, is_ref, is_mut, ptr_for_ref, true ) ;
1829
1823
}
1830
- } else if let Some ( id) = single_ident_generic_path_to_ident( & $p_arg. path) {
1824
+ } else {
1825
+ let id = &&$p_arg. path. segments. iter( ) . rev( ) . next( ) . unwrap( ) . ident;
1831
1826
write!( w, "{}" , id) . unwrap( ) ;
1832
1827
write!( mangled_type, "{}" , id) . unwrap( ) ;
1833
1828
if let Some ( w2) = $extra_write as Option <& mut Vec <u8 >> {
1834
1829
write!( w2, "{}" , id) . unwrap( ) ;
1835
1830
}
1836
- } else { return false ; }
1831
+ }
1837
1832
}
1838
1833
}
1839
1834
if let syn:: Type :: Tuple ( tuple) = arg {
@@ -1946,15 +1941,14 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
1946
1941
fn write_c_type_intern < W : std:: io:: Write > ( & mut self , generics : Option < & GenericTypes > , w : & mut W , t : & syn:: Type , is_ref : bool , is_mut : bool , ptr_for_ref : bool ) -> bool {
1947
1942
match t {
1948
1943
syn:: Type :: Path ( p) => {
1949
- if p. qself . is_some ( ) || p . path . leading_colon . is_some ( ) {
1944
+ if p. qself . is_some ( ) {
1950
1945
return false ;
1951
1946
}
1952
1947
if let Some ( full_path) = self . maybe_resolve_path ( & p. path , generics) {
1953
1948
if self . is_known_container ( & full_path, is_ref) || self . is_transparent_container ( & full_path, is_ref) {
1954
1949
return self . write_c_mangled_container_path ( generics, w, Self :: path_to_generic_args ( & p. path ) , & full_path, is_ref, is_mut, ptr_for_ref) ;
1955
1950
}
1956
1951
}
1957
- if p. path . leading_colon . is_some ( ) { return false ; }
1958
1952
self . write_c_path_intern ( generics, w, & p. path , is_ref, is_mut, ptr_for_ref)
1959
1953
} ,
1960
1954
syn:: Type :: Reference ( r) => {
0 commit comments