Skip to content

Commit cfa7915

Browse files
committed
[bindings] Remove some uneccessary no-multi-ident path restrictions
1 parent e233caa commit cfa7915

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

c-bindings-gen/src/types.rs

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -890,15 +890,11 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
890890
let mut seg_iter = p.segments.iter();
891891
let first_seg = seg_iter.next().unwrap();
892892
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)
898894
}).collect();
899895
if let Some(imp) = self.imports.get(&first_seg.ident) {
900896
if remaining != "" {
901-
Some(imp.clone() + "::" + &remaining)
897+
Some(imp.clone() + &remaining)
902898
} else {
903899
Some(imp.clone())
904900
}
@@ -1740,14 +1736,12 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
17401736
} else if let syn::Type::Reference(r_arg) = t {
17411737
if let syn::Type::Path(p_arg) = &*r_arg.elem {
17421738
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+
}
17511745
} else { unimplemented!(); }
17521746
} else if let syn::Type::Array(a_arg) = t {
17531747
if let syn::Type::Path(p_arg) = &*a_arg.elem {
@@ -1827,13 +1821,14 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
18271821
self.write_c_mangled_container_path_intern(generics, w2, Self::path_to_generic_args(&$p_arg.path),
18281822
&subtype, is_ref, is_mut, ptr_for_ref, true);
18291823
}
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;
18311826
write!(w, "{}", id).unwrap();
18321827
write!(mangled_type, "{}", id).unwrap();
18331828
if let Some(w2) = $extra_write as Option<&mut Vec<u8>> {
18341829
write!(w2, "{}", id).unwrap();
18351830
}
1836-
} else { return false; }
1831+
}
18371832
}
18381833
}
18391834
if let syn::Type::Tuple(tuple) = arg {
@@ -1946,15 +1941,14 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> {
19461941
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 {
19471942
match t {
19481943
syn::Type::Path(p) => {
1949-
if p.qself.is_some() || p.path.leading_colon.is_some() {
1944+
if p.qself.is_some() {
19501945
return false;
19511946
}
19521947
if let Some(full_path) = self.maybe_resolve_path(&p.path, generics) {
19531948
if self.is_known_container(&full_path, is_ref) || self.is_transparent_container(&full_path, is_ref) {
19541949
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);
19551950
}
19561951
}
1957-
if p.path.leading_colon.is_some() { return false; }
19581952
self.write_c_path_intern(generics, w, &p.path, is_ref, is_mut, ptr_for_ref)
19591953
},
19601954
syn::Type::Reference(r) => {

0 commit comments

Comments
 (0)