- walk_supertraits!(trait_obj, Some(&types), (
- (s, t, _) => {
- if types.crate_types.traits.get(s).is_some() {
- assert!(!types.is_clonable(s)); // We don't currently support cloning with a clonable supertrait
- writeln!(w, "\tnew_obj.{}.this_arg = new_obj.this_arg;", t).unwrap();
- writeln!(w, "\tnew_obj.{}.free = None;", t).unwrap();
+
+ fn seek_supertraits<W: std::io::Write>(w: &mut W, pfx: &str, tr: &syn::ItemTrait, types: &TypeResolver) {
+ walk_supertraits!(tr, Some(types), (
+ (s, t, _) => {
+ if types.crate_types.traits.get(s).is_some() {
+ assert!(!types.is_clonable(s)); // We don't currently support cloning with a clonable supertrait
+ writeln!(w, "\tnew_obj.{}{}.this_arg = new_obj.this_arg;", pfx, t).unwrap();
+ writeln!(w, "\tnew_obj.{}{}.free = None;", pfx, t).unwrap();
+ let tr = types.crate_types.traits.get(s).unwrap();
+ let resolver = get_module_type_resolver!(s, types.crate_types);
+ seek_supertraits(w, &format!("{}.", t), tr, &resolver);
+ }