cxxbridge_macro/
expand.rs

1use crate::syntax::atom::Atom::*;
2use crate::syntax::attrs::{self, OtherAttrs};
3use crate::syntax::cfg::{CfgExpr, ComputedCfg};
4use crate::syntax::file::Module;
5use crate::syntax::instantiate::{ImplKey, NamedImplKey};
6use crate::syntax::map::OrderedMap;
7use crate::syntax::message::Message;
8use crate::syntax::namespace::Namespace;
9use crate::syntax::qualified::QualifiedName;
10use crate::syntax::report::Errors;
11use crate::syntax::set::UnorderedSet;
12use crate::syntax::symbol::Symbol;
13use crate::syntax::trivial::TrivialReason;
14use crate::syntax::types::ConditionalImpl;
15use crate::syntax::unpin::UnpinReason;
16use crate::syntax::{
17    self, check, mangle, Api, Doc, Enum, ExternFn, ExternType, FnKind, Lang, Pair, Signature,
18    Struct, Trait, Type, TypeAlias, Types,
19};
20use crate::type_id::Crate;
21use crate::{derive, generics};
22use proc_macro2::{Ident, Span, TokenStream};
23use quote::{format_ident, quote, quote_spanned, ToTokens};
24use std::fmt::{self, Display};
25use std::mem;
26use syn::{parse_quote, GenericParam, Generics, Lifetime, Result, Token, Visibility};
27
28pub(crate) fn bridge(mut ffi: Module) -> Result<TokenStream> {
29    let ref mut errors = Errors::new();
30
31    let mut cfg = CfgExpr::Unconditional;
32    let mut doc = Doc::new();
33    let attrs = attrs::parse(
34        errors,
35        mem::take(&mut ffi.attrs),
36        attrs::Parser {
37            cfg: Some(&mut cfg),
38            doc: Some(&mut doc),
39            ..Default::default()
40        },
41    );
42
43    let content = mem::take(&mut ffi.content);
44    let trusted = ffi.unsafety.is_some();
45    let namespace = &ffi.namespace;
46    let ref mut apis = syntax::parse_items(errors, content, trusted, namespace);
47    let ref types = Types::collect(errors, apis);
48    errors.propagate()?;
49
50    let generator = check::Generator::Macro;
51    check::typecheck(errors, apis, types, generator);
52    errors.propagate()?;
53
54    Ok(expand(ffi, doc, attrs, apis, types))
55}
56
57fn expand(ffi: Module, doc: Doc, attrs: OtherAttrs, apis: &[Api], types: &Types) -> TokenStream {
58    let mut expanded = TokenStream::new();
59    let mut hidden = TokenStream::new();
60    let mut forbid = TokenStream::new();
61
62    for api in apis {
63        if let Api::RustType(ety) = api {
64            expanded.extend(expand_rust_type_import(ety));
65            hidden.extend(expand_rust_type_assert_unpin(ety, types));
66        }
67    }
68
69    for api in apis {
70        match api {
71            Api::Include(_) | Api::Impl(_) => {}
72            Api::Struct(strct) => {
73                expanded.extend(expand_struct(strct));
74                expanded.extend(expand_associated_functions(&strct.name.rust, types));
75                hidden.extend(expand_struct_nonempty(strct));
76                hidden.extend(expand_struct_operators(strct));
77                forbid.extend(expand_struct_forbid_drop(strct));
78            }
79            Api::Enum(enm) => expanded.extend(expand_enum(enm)),
80            Api::CxxType(ety) => {
81                let ident = &ety.name.rust;
82                if types.structs.contains_key(ident) {
83                    hidden.extend(expand_extern_shared_struct(ety, &ffi));
84                } else if !types.enums.contains_key(ident) {
85                    expanded.extend(expand_cxx_type(ety));
86                    expanded.extend(expand_associated_functions(&ety.name.rust, types));
87                    hidden.extend(expand_cxx_type_assert_pinned(ety, types));
88                }
89            }
90            Api::CxxFunction(efn) => {
91                if efn.self_type().is_none() {
92                    expanded.extend(expand_cxx_function_shim(efn, types));
93                }
94            }
95            Api::RustType(ety) => {
96                expanded.extend(expand_rust_type_impl(ety));
97                expanded.extend(expand_associated_functions(&ety.name.rust, types));
98                hidden.extend(expand_rust_type_layout(ety, types));
99            }
100            Api::RustFunction(efn) => hidden.extend(expand_rust_function_shim(efn, types)),
101            Api::TypeAlias(alias) => {
102                expanded.extend(expand_type_alias(alias));
103                expanded.extend(expand_associated_functions(&alias.name.rust, types));
104                hidden.extend(expand_type_alias_verify(alias, types));
105            }
106        }
107    }
108
109    for (impl_key, conditional_impl) in &types.impls {
110        match impl_key {
111            ImplKey::RustBox(ident) => {
112                hidden.extend(expand_rust_box(ident, types, conditional_impl));
113            }
114            ImplKey::RustVec(ident) => {
115                hidden.extend(expand_rust_vec(ident, types, conditional_impl));
116            }
117            ImplKey::UniquePtr(ident) => {
118                expanded.extend(expand_unique_ptr(ident, types, conditional_impl));
119            }
120            ImplKey::SharedPtr(ident) => {
121                expanded.extend(expand_shared_ptr(ident, types, conditional_impl));
122            }
123            ImplKey::WeakPtr(ident) => {
124                expanded.extend(expand_weak_ptr(ident, types, conditional_impl));
125            }
126            ImplKey::CxxVector(ident) => {
127                expanded.extend(expand_cxx_vector(ident, conditional_impl, types));
128            }
129        }
130    }
131
132    if !forbid.is_empty() {
133        hidden.extend(expand_forbid(forbid));
134    }
135
136    // Work around https://github.com/rust-lang/rust/issues/67851.
137    if !hidden.is_empty() {
138        expanded.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "doc");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&hidden, &mut _s);
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
139            #[doc(hidden)]
140            const _: () = {
141                #hidden
142            };
143        });
144    }
145
146    let all_attrs = attrs.all();
147    let vis = &ffi.vis;
148    let mod_token = &ffi.mod_token;
149    let ident = &ffi.ident;
150    let span = ffi.brace_token.span;
151    let expanded = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&expanded, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> {#expanded});
152
153    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "deny");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "improper_ctypes");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "improper_ctypes_definitions");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "allow");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "unknown_lints");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "allow");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s,
                        "non_camel_case_types");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "non_snake_case");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "extra_unused_type_parameters");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "items_after_statements");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "no_effect_underscore_binding");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "unsafe_derive_deserialize");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s,
                        "upper_case_acronyms");
                    ::quote::__private::push_comma(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "clippy");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "use_self");
                    ::quote::__private::push_comma(&mut _s);
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&vis, &mut _s);
    ::quote::ToTokens::to_tokens(&mod_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&expanded, &mut _s);
    _s
}quote! {
154        #doc
155        #all_attrs
156        #[deny(improper_ctypes, improper_ctypes_definitions)]
157        #[allow(clippy::unknown_lints)]
158        #[allow(
159            non_camel_case_types,
160            non_snake_case,
161            clippy::extra_unused_type_parameters,
162            clippy::items_after_statements,
163            clippy::no_effect_underscore_binding,
164            clippy::unsafe_derive_deserialize,
165            clippy::upper_case_acronyms,
166            clippy::use_self,
167        )]
168        #vis #mod_token #ident #expanded
169    }
170}
171
172fn expand_struct(strct: &Struct) -> TokenStream {
173    let ident = &strct.name.rust;
174    let doc = &strct.doc;
175    let all_attrs = strct.attrs.all();
176    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
177    let generics = &strct.generics;
178    let type_id = type_id(&strct.name);
179    let fields = strct.fields.iter().map(|field| {
180        let doc = &field.doc;
181        let all_attrs = field.attrs.all();
182        // This span on the pub makes "private type in public interface" errors
183        // appear in the right place.
184        let vis = field.visibility;
185        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::ToTokens::to_tokens(&vis, &mut _s);
    ::quote::ToTokens::to_tokens(&field, &mut _s);
    _s
}quote!(#doc #all_attrs #vis #field)
186    });
187    let mut derives = None;
188    let derived_traits = derive::expand_struct(strct, &mut derives);
189
190    let span = ident.span();
191    let visibility = strct.visibility;
192    let struct_token = strct.struct_token;
193    let struct_def = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&visibility, &mut _s);
    ::quote::ToTokens::to_tokens(&struct_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut fields, i) = fields.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let fields =
                        match fields.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&fields, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            _s
        });
    _s
}quote_spanned! {span=>
194        #visibility #struct_token #ident #generics {
195            #(#fields,)*
196        }
197    };
198
199    let align = strct.align.as_ref().map(|align| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_comma(&mut _s);
    ::quote::__private::push_ident(&mut _s, "align");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&align, &mut _s);
            _s
        });
    _s
}quote!(, align(#align)));
200
201    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&derives, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "repr");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "C");
                    ::quote::ToTokens::to_tokens(&align, &mut _s);
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&struct_def, &mut _s);
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "automatically_derived");
            _s
        });
    ::quote::__private::push_ident(&mut _s, "unsafe");
    ::quote::__private::push_ident(&mut _s, "impl");
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ExternType");
    ::quote::__private::push_ident(&mut _s, "for");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "allow");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s,
                                "unused_attributes");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "doc");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Id");
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&type_id, &mut _s);
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Kind");
            ::quote::__private::push_eq(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "kind");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Trivial");
            ::quote::__private::push_semi(&mut _s);
            _s
        });
    ::quote::ToTokens::to_tokens(&derived_traits, &mut _s);
    _s
}quote! {
202        #doc
203        #derives
204        #all_attrs
205        #[repr(C #align)]
206        #struct_def
207
208        #cfg_and_lint_attrs
209        #[automatically_derived]
210        unsafe impl #generics ::cxx::ExternType for #ident #generics {
211            #[allow(unused_attributes)] // incorrect lint
212            #[doc(hidden)]
213            type Id = #type_id;
214            type Kind = ::cxx::kind::Trivial;
215        }
216
217        #derived_traits
218    }
219}
220
221fn expand_struct_nonempty(strct: &Struct) -> TokenStream {
222    let has_unconditional_field = strct
223        .fields
224        .iter()
225        .any(|field| #[allow(non_exhaustive_omitted_patterns)] match field.cfg {
    CfgExpr::Unconditional => true,
    _ => false,
}matches!(field.cfg, CfgExpr::Unconditional));
226    if has_unconditional_field {
227        return TokenStream::new();
228    }
229
230    let mut fields = strct.fields.iter();
231    let mut cfg = ComputedCfg::from(&fields.next().unwrap().cfg);
232    fields.for_each(|field| cfg.merge_or(&field.cfg));
233
234    if let ComputedCfg::Leaf(CfgExpr::Unconditional) = cfg {
235        // At least one field is unconditional, nothing to check.
236        TokenStream::new()
237    } else {
238        let meta = cfg.as_meta();
239        let msg = "structs without any fields are not supported";
240        let error = syn::Error::new_spanned(strct, msg).into_compile_error();
241        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "cfg");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "not");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::ToTokens::to_tokens(&meta, &mut _s);
                            _s
                        });
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&error, &mut _s);
    _s
}quote! {
242            #[cfg(not(#meta))]
243            #error
244        }
245    }
246}
247
248fn expand_struct_operators(strct: &Struct) -> TokenStream {
249    let ident = &strct.name.rust;
250    let generics = &strct.generics;
251    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
252    let mut operators = TokenStream::new();
253
254    for derive in &strct.derives {
255        let span = derive.span;
256        match derive.what {
257            Trait::PartialEq => {
258                let link_name = mangle::operator(&strct.name, "eq");
259                let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_eq_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_eq_{}", strct.name.rust);
260                let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialEq>::eq",
                strct.name.rust))
    })format!("::{} as PartialEq>::eq", strct.name.rust);
261                operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_eq_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
262                    #cfg_and_lint_attrs
263                    #[doc(hidden)]
264                    #[unsafe(export_name = #link_name)]
265                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
266                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
267                        ::cxx::private::prevent_unwind(__fn, || *lhs == *rhs)
268                    }
269                });
270
271                if !derive::contains(&strct.derives, Trait::Eq) {
272                    let link_name = mangle::operator(&strct.name, "ne");
273                    let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_ne_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_ne_{}", strct.name.rust);
274                    let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialEq>::ne",
                strct.name.rust))
    })format!("::{} as PartialEq>::ne", strct.name.rust);
275                    operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_ne_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
276                        #cfg_and_lint_attrs
277                        #[doc(hidden)]
278                        #[unsafe(export_name = #link_name)]
279                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
280                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
281                            ::cxx::private::prevent_unwind(__fn, || *lhs != *rhs)
282                        }
283                    });
284                }
285            }
286            Trait::PartialOrd => {
287                let link_name = mangle::operator(&strct.name, "lt");
288                let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_lt_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_lt_{}", strct.name.rust);
289                let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialOrd>::lt",
                strct.name.rust))
    })format!("::{} as PartialOrd>::lt", strct.name.rust);
290                operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
291                    #cfg_and_lint_attrs
292                    #[doc(hidden)]
293                    #[unsafe(export_name = #link_name)]
294                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
295                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
296                        ::cxx::private::prevent_unwind(__fn, || *lhs < *rhs)
297                    }
298                });
299
300                let link_name = mangle::operator(&strct.name, "le");
301                let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_le_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_le_{}", strct.name.rust);
302                let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialOrd>::le",
                strct.name.rust))
    })format!("::{} as PartialOrd>::le", strct.name.rust);
303                operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_le_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
304                    #cfg_and_lint_attrs
305                    #[doc(hidden)]
306                    #[unsafe(export_name = #link_name)]
307                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
308                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
309                        ::cxx::private::prevent_unwind(__fn, || *lhs <= *rhs)
310                    }
311                });
312
313                if !derive::contains(&strct.derives, Trait::Ord) {
314                    let link_name = mangle::operator(&strct.name, "gt");
315                    let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_gt_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_gt_{}", strct.name.rust);
316                    let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialOrd>::gt",
                strct.name.rust))
    })format!("::{} as PartialOrd>::gt", strct.name.rust);
317                    operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
318                        #cfg_and_lint_attrs
319                        #[doc(hidden)]
320                        #[unsafe(export_name = #link_name)]
321                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
322                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
323                            ::cxx::private::prevent_unwind(__fn, || *lhs > *rhs)
324                        }
325                    });
326
327                    let link_name = mangle::operator(&strct.name, "ge");
328                    let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_ge_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_ge_{}", strct.name.rust);
329                    let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as PartialOrd>::ge",
                strct.name.rust))
    })format!("::{} as PartialOrd>::ge", strct.name.rust);
330                    operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "lhs");
                    ::quote::__private::push_ge_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "rhs");
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
331                        #cfg_and_lint_attrs
332                        #[doc(hidden)]
333                        #[unsafe(export_name = #link_name)]
334                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
335                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
336                            ::cxx::private::prevent_unwind(__fn, || *lhs >= *rhs)
337                        }
338                    });
339                }
340            }
341            Trait::Hash => {
342                let link_name = mangle::operator(&strct.name, "hash");
343                let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__operator_hash_{0}",
                                arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_hash_{}", strct.name.rust);
344                let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Hash>::hash",
                strct.name.rust))
    })format!("::{} as Hash>::hash", strct.name.rust);
345                operators.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "allow");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "clippy");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cast_possible_truncation");
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "this");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&generics, &mut _s);
            _s
        });
    ::quote::__private::push_rarrow_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "prevent_unwind");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_or_or_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hash");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "this");
                            _s
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {span=>
346                    #cfg_and_lint_attrs
347                    #[doc(hidden)]
348                    #[unsafe(export_name = #link_name)]
349                    #[allow(clippy::cast_possible_truncation)]
350                    extern "C" fn #local_name #generics(this: &#ident #generics) -> ::cxx::core::primitive::usize {
351                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
352                        ::cxx::private::prevent_unwind(__fn, || ::cxx::private::hash(this))
353                    }
354                });
355            }
356            _ => {}
357        }
358    }
359
360    operators
361}
362
363fn expand_struct_forbid_drop(strct: &Struct) -> TokenStream {
364    let ident = &strct.name.rust;
365    let generics = &strct.generics;
366    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
367    let span = ident.span();
368    let impl_token = ::syn::token::ImplToken![impl](strct.visibility.span);
369
370    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::ToTokens::to_tokens(&impl_token, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "self");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Drop");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "super");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned! {span=>
371        #cfg_and_lint_attrs
372        #[automatically_derived]
373        #impl_token #generics self::Drop for super::#ident #generics {}
374    }
375}
376
377fn expand_enum(enm: &Enum) -> TokenStream {
378    let ident = &enm.name.rust;
379    let doc = &enm.doc;
380    let all_attrs = enm.attrs.all();
381    let cfg_and_lint_attrs = enm.attrs.cfg_and_lint();
382    let repr = &enm.repr;
383    let type_id = type_id(&enm.name);
384    let variants = enm.variants.iter().map(|variant| {
385        let doc = &variant.doc;
386        let all_attrs = variant.attrs.all();
387        let variant_ident = &variant.name.rust;
388        let discriminant = &variant.discriminant;
389        let span = variant_ident.span();
390        Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "allow");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "dead_code");
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "pub");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
    ::quote::ToTokens::to_tokens(&variant_ident, &mut _s);
    ::quote::__private::push_colon_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
    ::quote::__private::push_eq_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "repr");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&discriminant, &mut _s);
            _s
        });
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
391            #doc
392            #all_attrs
393            #[allow(dead_code)]
394            pub const #variant_ident: Self = #ident { repr: #discriminant };
395        })
396    });
397    let mut derives = None;
398    let derived_traits = derive::expand_enum(enm, &mut derives);
399
400    let span = ident.span();
401    let visibility = enm.visibility;
402    let struct_token = ::syn::token::StructToken![struct](enm.enum_token.span);
403    let enum_repr = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "allow");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "missing_docs");
                    _s
                });
            _s
        });
    ::quote::__private::push_ident(&mut _s, "pub");
    ::quote::__private::push_ident(&mut _s, "repr");
    ::quote::__private::push_colon(&mut _s);
    ::quote::ToTokens::to_tokens(&repr, &mut _s);
    ::quote::__private::push_comma(&mut _s);
    _s
}quote! {
404        #[allow(missing_docs)]
405        pub repr: #repr,
406    };
407    let enum_def = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&visibility, &mut _s);
    ::quote::ToTokens::to_tokens(&struct_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&enum_repr, &mut _s);
            _s
        });
    _s
}quote_spanned! {span=>
408        #visibility #struct_token #ident {
409            #enum_repr
410        }
411    };
412
413    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&derives, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "repr");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "transparent");
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&enum_def, &mut _s);
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "allow");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s,
                        "non_upper_case_globals");
                    _s
                });
            _s
        });
    ::quote::__private::push_ident(&mut _s, "impl");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut variants, i) = variants.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let variants =
                        match variants.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&variants, &mut _s);
                }
            }
            _s
        });
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "automatically_derived");
            _s
        });
    ::quote::__private::push_ident(&mut _s, "unsafe");
    ::quote::__private::push_ident(&mut _s, "impl");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ExternType");
    ::quote::__private::push_ident(&mut _s, "for");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "allow");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s,
                                "unused_attributes");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "doc");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Id");
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&type_id, &mut _s);
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Kind");
            ::quote::__private::push_eq(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "kind");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Trivial");
            ::quote::__private::push_semi(&mut _s);
            _s
        });
    ::quote::ToTokens::to_tokens(&derived_traits, &mut _s);
    _s
}quote! {
414        #doc
415        #derives
416        #all_attrs
417        #[repr(transparent)]
418        #enum_def
419
420        #cfg_and_lint_attrs
421        #[allow(non_upper_case_globals)]
422        impl #ident {
423            #(#variants)*
424        }
425
426        #cfg_and_lint_attrs
427        #[automatically_derived]
428        unsafe impl ::cxx::ExternType for #ident {
429            #[allow(unused_attributes)] // incorrect lint
430            #[doc(hidden)]
431            type Id = #type_id;
432            type Kind = ::cxx::kind::Trivial;
433        }
434
435        #derived_traits
436    }
437}
438
439fn expand_cxx_type(ety: &ExternType) -> TokenStream {
440    let ident = &ety.name.rust;
441    let doc = &ety.doc;
442    let all_attrs = ety.attrs.all();
443    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
444    let generics = &ety.generics;
445    let type_id = type_id(&ety.name);
446
447    let lifetime_fields = ety.generics.lifetimes.iter().map(|lifetime| {
448        let field = match ::quote::__private::IdentFragmentAdapter(&lifetime.ident) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("_lifetime_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("_lifetime_{}", lifetime.ident);
449        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&field, &mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "marker");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "PhantomData");
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_and(&mut _s);
    ::quote::ToTokens::to_tokens(&lifetime, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_gt(&mut _s);
    _s
}quote!(#field: ::cxx::core::marker::PhantomData<&#lifetime ()>)
450    });
451    let repr_fields = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "_private");
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Opaque");
    ::quote::__private::push_comma(&mut _s);
    {
        use ::quote::__private::ext::*;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut lifetime_fields, i) = lifetime_fields.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let lifetime_fields =
                match lifetime_fields.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            ::quote::ToTokens::to_tokens(&lifetime_fields, &mut _s);
            ::quote::__private::push_comma(&mut _s);
        }
    }
    _s
}quote! {
452        _private: ::cxx::private::Opaque,
453        #(#lifetime_fields,)*
454    };
455
456    let span = ident.span();
457    let visibility = &ety.visibility;
458    let struct_token = ::syn::token::StructToken![struct](ety.type_token.span);
459    let extern_type_def = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&visibility, &mut _s);
    ::quote::ToTokens::to_tokens(&struct_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&repr_fields, &mut _s);
            _s
        });
    _s
}quote_spanned! {span=>
460        #visibility #struct_token #ident #generics {
461            #repr_fields
462        }
463    };
464
465    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "repr");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "C");
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&extern_type_def, &mut _s);
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "automatically_derived");
            _s
        });
    ::quote::__private::push_ident(&mut _s, "unsafe");
    ::quote::__private::push_ident(&mut _s, "impl");
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ExternType");
    ::quote::__private::push_ident(&mut _s, "for");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "allow");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s,
                                "unused_attributes");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "doc");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Id");
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&type_id, &mut _s);
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_ident(&mut _s, "type");
            ::quote::__private::push_ident(&mut _s, "Kind");
            ::quote::__private::push_eq(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "kind");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Opaque");
            ::quote::__private::push_semi(&mut _s);
            _s
        });
    _s
}quote! {
466        #doc
467        #all_attrs
468        #[repr(C)]
469        #extern_type_def
470
471        #cfg_and_lint_attrs
472        #[automatically_derived]
473        unsafe impl #generics ::cxx::ExternType for #ident #generics {
474            #[allow(unused_attributes)] // incorrect lint
475            #[doc(hidden)]
476            type Id = #type_id;
477            type Kind = ::cxx::kind::Opaque;
478        }
479    }
480}
481
482fn expand_cxx_type_assert_pinned(ety: &ExternType, types: &Types) -> TokenStream {
483    let ident = &ety.name.rust;
484    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
485    let infer = ::syn::token::UnderscoreToken![_](ident.span());
486
487    let resolve = types.resolve(ident);
488    let lifetimes = resolve.generics.to_underscore_lifetimes();
489
490    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "trait");
            ::quote::__private::push_ident(&mut _s, "__AmbiguousIfImpl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "A");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "fn");
                    ::quote::__private::push_ident(&mut _s, "infer");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        ::quote::__private::TokenStream::new());
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Brace,
                        ::quote::__private::TokenStream::new());
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s,
                        "automatically_derived");
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "impl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__AmbiguousIfImpl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "for");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_ident(&mut _s, "where");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_question(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Sized");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "allow");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "dead_code");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "struct");
            ::quote::__private::push_ident(&mut _s, "__Invalid");
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s,
                        "automatically_derived");
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "impl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__AmbiguousIfImpl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "__Invalid");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "for");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_ident(&mut _s, "where");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_question(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Sized");
            ::quote::__private::push_add(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Unpin");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_lt(&mut _s);
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::__private::push_ident(&mut _s, "__AmbiguousIfImpl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::ToTokens::to_tokens(&infer, &mut _s);
            ::quote::__private::push_shr(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "infer");
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
491        #cfg_and_lint_attrs
492        let _: fn() = {
493            // Derived from https://github.com/nvzqz/static-assertions-rs.
494            trait __AmbiguousIfImpl<A> {
495                fn infer() {}
496            }
497
498            #[automatically_derived]
499            impl<T> __AmbiguousIfImpl<()> for T
500            where
501                T: ?::cxx::core::marker::Sized
502            {}
503
504            #[allow(dead_code)]
505            struct __Invalid;
506
507            #[automatically_derived]
508            impl<T> __AmbiguousIfImpl<__Invalid> for T
509            where
510                T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin,
511            {}
512
513            // If there is only one specialized trait impl, type inference with
514            // `_` can be resolved and this can compile. Fails to compile if
515            // user has added a manual Unpin impl for their opaque C++ type as
516            // then `__AmbiguousIfImpl<__Invalid>` also exists.
517            <#ident #lifetimes as __AmbiguousIfImpl<#infer>>::infer
518        };
519    }
520}
521
522fn expand_extern_shared_struct(ety: &ExternType, ffi: &Module) -> TokenStream {
523    let module = &ffi.ident;
524    let name = &ety.name.rust;
525    let namespaced_name = display_namespaced(&ety.name);
526    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
527
528    let visibility = match &ffi.vis {
529        Visibility::Public(_) => "pub ".to_owned(),
530        Visibility::Restricted(vis) => {
531            ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("pub(in {0}) ",
                vis.path.segments.iter().map(|segment|
                                segment.ident.to_string()).collect::<Vec<_>>().join("::")))
    })format!(
532                "pub(in {}) ",
533                vis.path
534                    .segments
535                    .iter()
536                    .map(|segment| segment.ident.to_string())
537                    .collect::<Vec<_>>()
538                    .join("::"),
539            )
540        }
541        Visibility::Inherited => String::new(),
542    };
543
544    let namespace_attr = if ety.name.namespace == Namespace::ROOT {
545        String::new()
546    } else {
547        ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("#[namespace = \"{0}\"]\n        ",
                ety.name.namespace.iter().map(Ident::to_string).collect::<Vec<_>>().join("::")))
    })format!(
548            "#[namespace = \"{}\"]\n        ",
549            ety.name
550                .namespace
551                .iter()
552                .map(Ident::to_string)
553                .collect::<Vec<_>>()
554                .join("::"),
555        )
556    };
557
558    let message = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("\nShared struct redeclared as an unsafe extern C++ type is deprecated.\nIf this is intended to be a shared struct, remove this `type {0}`.\nIf this is intended to be an extern type, change it to:\n\n    use cxx::ExternType;\n    \n    #[repr(C)]\n    {1}struct {0} {{\n        ...\n    }}\n    \n    unsafe impl ExternType for {0} {{\n        type Id = cxx::type_id!(\"{2}\");\n        type Kind = cxx::kind::Trivial;\n    }}\n    \n    {1}mod {3} {{\n        {4}extern \"C++\" {{\n            type {0} = crate::{0};\n        }}\n        ...\n    }}",
                name, visibility, namespaced_name, module, namespace_attr))
    })format!(
559        "\
560        \nShared struct redeclared as an unsafe extern C++ type is deprecated.\
561        \nIf this is intended to be a shared struct, remove this `type {name}`.\
562        \nIf this is intended to be an extern type, change it to:\
563        \n\
564        \n    use cxx::ExternType;\
565        \n    \
566        \n    #[repr(C)]\
567        \n    {visibility}struct {name} {{\
568        \n        ...\
569        \n    }}\
570        \n    \
571        \n    unsafe impl ExternType for {name} {{\
572        \n        type Id = cxx::type_id!(\"{namespaced_name}\");\
573        \n        type Kind = cxx::kind::Trivial;\
574        \n    }}\
575        \n    \
576        \n    {visibility}mod {module} {{\
577        \n        {namespace_attr}extern \"C++\" {{\
578        \n            type {name} = crate::{name};\
579        \n        }}\
580        \n        ...\
581        \n    }}",
582    );
583
584    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "deprecated");
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&message, &mut _s);
            _s
        });
    ::quote::__private::push_ident(&mut _s, "struct");
    ::quote::ToTokens::to_tokens(&name, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        ::quote::__private::TokenStream::new());
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_eq(&mut _s);
    ::quote::ToTokens::to_tokens(&name, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
585        #cfg_and_lint_attrs
586        #[deprecated = #message]
587        struct #name {}
588
589        #cfg_and_lint_attrs
590        let _ = #name {};
591    }
592}
593
594fn expand_associated_functions(self_type: &Ident, types: &Types) -> TokenStream {
595    let Some(functions) = types.associated_fn.get(self_type) else {
596        return TokenStream::new();
597    };
598
599    let resolve = types.resolve(self_type);
600    let self_type_cfg_attrs = resolve.attrs.cfg();
601    let elided_lifetime = Lifetime::new("'_", Span::call_site());
602    let mut group_by_lifetimes = OrderedMap::new();
603    let mut tokens = TokenStream::new();
604
605    for efn in functions {
606        match efn.lang {
607            Lang::Cxx | Lang::CxxUnwind => {}
608            Lang::Rust => continue,
609        }
610        let mut impl_lifetimes = Vec::new();
611        let mut self_type_lifetimes = Vec::new();
612        let self_lt_token;
613        let self_gt_token;
614        match &efn.kind {
615            FnKind::Method(receiver) if receiver.ty.generics.lt_token.is_some() => {
616                for lifetime in &receiver.ty.generics.lifetimes {
617                    if lifetime.ident != "_"
618                        && efn
619                            .generics
620                            .lifetimes()
621                            .any(|param| param.lifetime == *lifetime)
622                    {
623                        impl_lifetimes.push(lifetime);
624                    }
625                    self_type_lifetimes.push(lifetime);
626                }
627                self_lt_token = receiver.ty.generics.lt_token;
628                self_gt_token = receiver.ty.generics.gt_token;
629            }
630            _ => {
631                self_type_lifetimes.resize(resolve.generics.lifetimes.len(), &elided_lifetime);
632                self_lt_token = resolve.generics.lt_token;
633                self_gt_token = resolve.generics.gt_token;
634            }
635        }
636        if efn.undeclared_lifetimes().is_empty()
637            && self_type_lifetimes.len() == resolve.generics.lifetimes.len()
638        {
639            group_by_lifetimes
640                .entry((impl_lifetimes, self_type_lifetimes))
641                .or_insert_with(Vec::new)
642                .push(efn);
643        } else {
644            let impl_token = ::syn::token::ImplToken![impl](efn.name.rust.span());
645            let impl_lt_token = efn.generics.lt_token;
646            let impl_gt_token = efn.generics.gt_token;
647            let self_type = efn.self_type().unwrap();
648            let function = expand_cxx_function_shim(efn, types);
649            tokens.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&self_type_cfg_attrs, &mut _s);
    ::quote::ToTokens::to_tokens(&impl_token, &mut _s);
    ::quote::ToTokens::to_tokens(&impl_lt_token, &mut _s);
    {
        use ::quote::__private::ext::*;
        let mut _i = 0usize;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let impl_lifetimes =
                match impl_lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            if _i > 0 { ::quote::__private::push_comma(&mut _s); }
            _i += 1;
            ::quote::ToTokens::to_tokens(&impl_lifetimes, &mut _s);
        }
    }
    ::quote::ToTokens::to_tokens(&impl_gt_token, &mut _s);
    ::quote::ToTokens::to_tokens(&self_type, &mut _s);
    ::quote::ToTokens::to_tokens(&self_lt_token, &mut _s);
    {
        use ::quote::__private::ext::*;
        let mut _i = 0usize;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut self_type_lifetimes, i) =
            self_type_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let self_type_lifetimes =
                match self_type_lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            if _i > 0 { ::quote::__private::push_comma(&mut _s); }
            _i += 1;
            ::quote::ToTokens::to_tokens(&self_type_lifetimes, &mut _s);
        }
    }
    ::quote::ToTokens::to_tokens(&self_gt_token, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&function, &mut _s);
            _s
        });
    _s
}quote! {
650                #self_type_cfg_attrs
651                #impl_token #impl_lt_token #(#impl_lifetimes),* #impl_gt_token #self_type #self_lt_token #(#self_type_lifetimes),* #self_gt_token {
652                    #function
653                }
654            });
655        }
656    }
657
658    for ((impl_lifetimes, self_type_lifetimes), functions) in &group_by_lifetimes {
659        let functions = functions
660            .iter()
661            .map(|efn| expand_cxx_function_shim(efn, types));
662        tokens.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&self_type_cfg_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "impl");
    ::quote::__private::push_lt(&mut _s);
    {
        use ::quote::__private::ext::*;
        let mut _i = 0usize;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let impl_lifetimes =
                match impl_lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            if _i > 0 { ::quote::__private::push_comma(&mut _s); }
            _i += 1;
            ::quote::ToTokens::to_tokens(&impl_lifetimes, &mut _s);
        }
    }
    ::quote::__private::push_gt(&mut _s);
    ::quote::ToTokens::to_tokens(&self_type, &mut _s);
    ::quote::__private::push_lt(&mut _s);
    {
        use ::quote::__private::ext::*;
        let mut _i = 0usize;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut self_type_lifetimes, i) =
            self_type_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let self_type_lifetimes =
                match self_type_lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            if _i > 0 { ::quote::__private::push_comma(&mut _s); }
            _i += 1;
            ::quote::ToTokens::to_tokens(&self_type_lifetimes, &mut _s);
        }
    }
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut functions, i) = functions.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let functions =
                        match functions.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&functions, &mut _s);
                }
            }
            _s
        });
    _s
}quote! {
663            #self_type_cfg_attrs
664            impl <#(#impl_lifetimes),*> #self_type <#(#self_type_lifetimes),*> {
665                #(#functions)*
666            }
667        });
668    }
669
670    tokens
671}
672
673fn expand_cxx_function_decl(efn: &ExternFn, types: &Types) -> TokenStream {
674    let receiver = efn.receiver().into_iter().map(|receiver| {
675        if types.is_considered_improper_ctype(&receiver.ty) {
676            if receiver.mutable {
677                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    _s
}quote!(_: *mut ::cxx::core::ffi::c_void)
678            } else {
679                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    _s
}quote!(_: *const ::cxx::core::ffi::c_void)
680            }
681        } else {
682            let receiver_type = receiver.ty();
683            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
    _s
}quote!(_: #receiver_type)
684        }
685    });
686    let args = efn.args.iter().map(|arg| {
687        let var = &arg.name.rust;
688        let colon = arg.colon_token;
689        let ty = expand_extern_type(&arg.ty, types, true);
690        if arg.ty == RustString {
691            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon *const #ty)
692        } else if let Type::RustVec(_) = arg.ty {
693            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon *const #ty)
694        } else if let Type::Fn(_) = arg.ty {
695            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "FatFunction");
    _s
}quote!(#var #colon ::cxx::private::FatFunction)
696        } else if types.needs_indirect_abi(&arg.ty) {
697            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon *mut #ty)
698        } else {
699            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon #ty)
700        }
701    });
702    let all_args = receiver.chain(args);
703    let ret = if efn.throws {
704        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Result");
    _s
}quote!(-> ::cxx::private::Result)
705    } else {
706        expand_extern_return_type(efn, types, true, efn.lang)
707    };
708    let mut outparam = None;
709    if indirect_return(efn, types, efn.lang) {
710        let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
711        outparam = Some({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "__return");
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(__return: *mut #ret));
712    }
713    let link_name = mangle::extern_fn(efn, types);
714    let local_name = match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust);
715    let lt_token = efn.generics.lt_token.unwrap_or_default();
716    let undeclared_lifetimes = efn.undeclared_lifetimes().into_iter();
717    let declared_lifetimes = &efn.generics.params;
718    let gt_token = efn.generics.gt_token.unwrap_or_default();
719    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_pound(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "link_name");
            ::quote::__private::push_eq(&mut _s);
            ::quote::ToTokens::to_tokens(&link_name, &mut _s);
            _s
        });
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&lt_token, &mut _s);
    {
        use ::quote::__private::ext::*;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut undeclared_lifetimes, i) =
            undeclared_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let undeclared_lifetimes =
                match undeclared_lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            ::quote::ToTokens::to_tokens(&undeclared_lifetimes, &mut _s);
            ::quote::__private::push_comma(&mut _s);
        }
    }
    ::quote::ToTokens::to_tokens(&declared_lifetimes, &mut _s);
    ::quote::ToTokens::to_tokens(&gt_token, &mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let all_args =
                        match all_args.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&all_args, &mut _s);
                    ::quote::__private::push_comma(&mut _s);
                }
            }
            ::quote::ToTokens::to_tokens(&outparam, &mut _s);
            _s
        });
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
720        #[link_name = #link_name]
721        fn #local_name #lt_token #(#undeclared_lifetimes,)* #declared_lifetimes #gt_token(#(#all_args,)* #outparam) #ret;
722    }
723}
724
725fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
726    let doc = &efn.doc;
727    let all_attrs = efn.attrs.all();
728    let decl = expand_cxx_function_decl(efn, types);
729    let receiver = efn.receiver().into_iter().map(|receiver| {
730        let var = receiver.var;
731        if receiver.pinned {
732            let colon = receiver.colon_token;
733            let ty = receiver.ty_self();
734            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon #ty)
735        } else {
736            let ampersand = receiver.ampersand;
737            let lifetime = &receiver.lifetime;
738            let mutability = receiver.mutability;
739            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetime, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#ampersand #lifetime #mutability #var)
740        }
741    });
742    let args = efn.args.iter().map(|arg| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&arg, &mut _s);
    _s
}quote!(#arg));
743    let all_args = receiver.chain(args);
744    let ret = if efn.throws {
745        let ok = match &efn.ret {
746            Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(#ret),
747            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(()),
748        };
749        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "result");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Result");
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ok, &mut _s);
    ::quote::__private::push_comma(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Exception");
    ::quote::__private::push_gt(&mut _s);
    _s
}quote!(-> ::cxx::core::result::Result<#ok, ::cxx::Exception>)
750    } else {
751        expand_return_type(&efn.ret)
752    };
753    let indirect_return = indirect_return(efn, types, efn.lang);
754    let receiver_var = efn.receiver().into_iter().map(|receiver| {
755        if types.is_considered_improper_ctype(&receiver.ty) {
756            let var = receiver.var;
757            let ty = &receiver.ty.rust;
758            let resolve = types.resolve(ty);
759            let lifetimes = resolve.generics.to_underscore_lifetimes();
760            if receiver.pinned {
761                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ptr");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "from_mut");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "pin");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Pin");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "into_inner_unchecked");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::ToTokens::to_tokens(&var, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_dot(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cast");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(::cxx::core::ptr::from_mut::<#ty #lifetimes>(::cxx::core::pin::Pin::into_inner_unchecked(#var)).cast::<::cxx::core::ffi::c_void>())
762            } else if receiver.mutable {
763                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ptr");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "from_mut");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cast");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(::cxx::core::ptr::from_mut::<#ty #lifetimes>(#var).cast::<::cxx::core::ffi::c_void>())
764            } else {
765                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ptr");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "from_ref");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cast");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(::cxx::core::ptr::from_ref::<#ty #lifetimes>(#var).cast::<::cxx::core::ffi::c_void>())
766            }
767        } else {
768            receiver.var.to_token_stream()
769        }
770    });
771    let arg_vars = efn.args.iter().map(|arg| {
772        let var = &arg.name.rust;
773        let span = var.span();
774        match &arg.ty {
775            Type::Ident(ident) if ident.rust == RustString => {
776                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_ptr");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast_const");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_ptr().cast::<::cxx::private::RustString>().cast_const())
777            }
778            Type::RustBox(ty) => {
779                if types.is_considered_improper_ctype(&ty.inner) {
780                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::into_raw(#var).cast())
781                } else {
782                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::into_raw(#var))
783                }
784            }
785            Type::UniquePtr(ty) => {
786                if types.is_considered_improper_ctype(&ty.inner) {
787                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::into_raw(#var).cast())
788                } else {
789                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::into_raw(#var))
790                }
791            }
792            Type::RustVec(_) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_ptr");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_underscore_spanned(&mut _s, _span);
    ::quote::__private::push_shr_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast_const");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_ptr().cast::<::cxx::private::RustVec<_>>().cast_const()),
793            Type::Ref(ty) => match &ty.inner {
794                Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
795                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustString::from_ref(#var)),
796                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustString::from_mut(#var)),
797                },
798                Type::RustVec(_) => match ty.mutable {
799                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustVec::from_ref(#var)),
800                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustVec::from_mut(#var)),
801                },
802                inner if types.is_considered_improper_ctype(inner) => {
803                    let var = match ty.pinned {
804                        false => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
805                        true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span,
        "into_inner_unchecked");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::pin::Pin::into_inner_unchecked(#var)),
806                    };
807                    match ty.mutable {
808                        false => {
809                            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> ::cxx::core::ptr::from_ref::<#inner>(#var).cast::<::cxx::core::ffi::c_void>())
810                        }
811                        true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> ::cxx::core::ptr::from_mut::<#inner>(#var).cast::<::cxx::core::ffi::c_void>()),
812                    }
813                }
814                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
815            },
816            Type::Ptr(ty) => {
817                if types.is_considered_improper_ctype(&ty.inner) {
818                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.cast())
819                } else {
820                    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var)
821                }
822            }
823            Type::Str(_) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustStr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustStr::from(#var)),
824            Type::SliceRef(ty) => match ty.mutable {
825                false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_ref(#var)),
826                true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_mut(#var)),
827            },
828            ty if types.needs_indirect_abi(ty) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_ptr");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_ptr()),
829            _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
830        }
831    });
832    let vars = receiver_var.chain(arg_vars);
833    let trampolines = efn
834        .args
835        .iter()
836        .filter_map(|arg| {
837            if let Type::Fn(f) = &arg.ty {
838                let var = &arg.name;
839                Some(expand_function_pointer_trampoline(efn, var, f, types))
840            } else {
841                None
842            }
843        })
844        .collect::<TokenStream>();
845    let mut setup = efn
846        .args
847        .iter()
848        .filter(|arg| types.needs_indirect_abi(&arg.ty))
849        .map(|arg| {
850            let var = &arg.name.rust;
851            let span = var.span();
852            // These are arguments for which C++ has taken ownership of the data
853            // behind the mut reference it received.
854            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_eq_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "MaybeUninit");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "new");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
855                let mut #var = ::cxx::core::mem::MaybeUninit::new(#var);
856            }
857        })
858        .collect::<TokenStream>();
859    let local_name = match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust);
860    let span = efn.semi_token.span;
861    let call = if indirect_return {
862        let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
863        setup.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
    ::quote::__private::push_eq_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "MaybeUninit");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "uninit");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
864            let mut __return = ::cxx::core::mem::MaybeUninit::<#ret>::uninit();
865        });
866        setup.extend(if efn.throws {
867            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__return");
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "as_mut_ptr");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "exception");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_question_spanned(&mut _s, _span);
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
868                #local_name(#(#vars,)* __return.as_mut_ptr()).exception()?;
869            }
870        } else {
871            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__return");
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "as_mut_ptr");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
872                #local_name(#(#vars,)* __return.as_mut_ptr());
873            }
874        });
875        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "assume_init");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> __return.assume_init())
876    } else if efn.throws {
877        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let mut _i = 0usize;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    if _i > 0 {
                        ::quote::__private::push_comma_spanned(&mut _s, _span);
                    }
                    _i += 1;
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                }
            }
            _s
        });
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "exception");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned! {span=>
878            #local_name(#(#vars),*).exception()
879        }
880    } else {
881        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let mut _i = 0usize;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    if _i > 0 {
                        ::quote::__private::push_comma_spanned(&mut _s, _span);
                    }
                    _i += 1;
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                }
            }
            _s
        });
    _s
}quote_spanned! {span=>
882            #local_name(#(#vars),*)
883        }
884    };
885    let mut expr;
886    if let Some(ret) = &efn.ret {
887        expr = match ret {
888            Type::Ident(ident) if ident.rust == RustString => {
889                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_string");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.into_string())
890            }
891            Type::RustBox(ty) => {
892                if types.is_considered_improper_ctype(&ty.inner) {
893                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#call.cast()))
894                } else {
895                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#call))
896                }
897            }
898            Type::RustVec(_) => {
899                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_vec");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.into_vec())
900            }
901            Type::UniquePtr(ty) => {
902                if types.is_considered_improper_ctype(&ty.inner) {
903                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#call.cast()))
904                } else {
905                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#call))
906                }
907            }
908            Type::Ref(ty) => match &ty.inner {
909                Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
910                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_string");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_string()),
911                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_string");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_mut_string()),
912                },
913                Type::RustVec(_) => match ty.mutable {
914                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_vec");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_vec()),
915                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_vec");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_mut_vec()),
916                },
917                inner if types.is_considered_improper_ctype(inner) => {
918                    let mutability = ty.mutability;
919                    let deref_mut = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> &#mutability *#call.cast());
920                    match ty.pinned {
921                        false => deref_mut,
922                        true => {
923                            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "new_unchecked");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&deref_mut, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::pin::Pin::new_unchecked(#deref_mut))
924                        }
925                    }
926                }
927                _ => call,
928            },
929            Type::Ptr(ty) => {
930                if types.is_considered_improper_ctype(&ty.inner) {
931                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.cast())
932                } else {
933                    call
934                }
935            }
936            Type::Str(_) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_str");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_str()),
937            Type::SliceRef(slice) => {
938                let inner = &slice.inner;
939                match slice.mutable {
940                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_slice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_slice::<#inner>()),
941                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_slice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #call.as_mut_slice::<#inner>()),
942                }
943            }
944            _ => call,
945        };
946        if efn.throws {
947            expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "result");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Ok");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::result::Result::Ok(#expr));
948        }
949    } else if efn.throws {
950        expr = call;
951    } else {
952        expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! { #call; };
953    }
954    let dispatch = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&setup, &mut _s);
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> unsafe { #setup #expr });
955    let visibility = efn.visibility;
956    let unsafety = &efn.unsafety;
957    let fn_token = efn.fn_token;
958    let ident = &efn.name.rust;
959    let lt_token = efn.generics.lt_token;
960    let lifetimes = {
961        let mut self_type_lifetimes = UnorderedSet::new();
962        if let FnKind::Method(receiver) = &efn.kind {
963            self_type_lifetimes.extend(&receiver.ty.generics.lifetimes);
964        }
965        efn.generics
966            .params
967            .pairs()
968            .filter(move |param| match param.value() {
969                GenericParam::Lifetime(param) => !self_type_lifetimes.contains(&param.lifetime),
970                GenericParam::Type(_) | GenericParam::Const(_) => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
971            })
972    };
973    let gt_token = efn.generics.gt_token;
974    let arg_list = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(efn.paren_token.span).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let all_args =
                        match all_args.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&all_args, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            _s
        });
    _s
}quote_spanned!(efn.paren_token.span=> (#(#all_args,)*));
975    let calling_conv = match efn.lang {
976        Lang::Cxx => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    _s
}quote_spanned!(span=> "C"),
977        Lang::CxxUnwind => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C-unwind\"");
    _s
}quote_spanned!(span=> "C-unwind"),
978        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
979    };
980    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::ToTokens::to_tokens(&visibility, &mut _s);
    ::quote::ToTokens::to_tokens(&unsafety, &mut _s);
    ::quote::ToTokens::to_tokens(&fn_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lt_token, &mut _s);
    {
        use ::quote::__private::ext::*;
        let has_iter = ::quote::__private::HasIterator::<false>;
        #[allow(unused_mut)]
        let (mut lifetimes, i) = lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        <_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
        while true {
            let lifetimes =
                match lifetimes.next() {
                    Some(_x) => ::quote::__private::RepInterp(_x),
                    None => break,
                };
            ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
        }
    }
    ::quote::ToTokens::to_tokens(&gt_token, &mut _s);
    ::quote::ToTokens::to_tokens(&arg_list, &mut _s);
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::ToTokens::to_tokens(&calling_conv, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::ToTokens::to_tokens(&decl, &mut _s);
                    _s
                });
            ::quote::ToTokens::to_tokens(&trampolines, &mut _s);
            ::quote::ToTokens::to_tokens(&dispatch, &mut _s);
            _s
        });
    _s
}quote_spanned! {span=>
981        #doc
982        #all_attrs
983        #visibility #unsafety #fn_token #ident #lt_token #(#lifetimes)* #gt_token #arg_list #ret {
984            unsafe extern #calling_conv {
985                #decl
986            }
987            #trampolines
988            #dispatch
989        }
990    }
991}
992
993fn expand_function_pointer_trampoline(
994    efn: &ExternFn,
995    var: &Pair,
996    sig: &Signature,
997    types: &Types,
998) -> TokenStream {
999    let c_trampoline = mangle::c_trampoline(efn, var, types);
1000    let r_trampoline = mangle::r_trampoline(efn, var, types);
1001    let local_name = ::syn::__private::parse_quote({
        let mut _s = ::quote::__private::TokenStream::new();
        ::quote::__private::push_ident(&mut _s, "__");
        _s
    })parse_quote!(__);
1002    let prevent_unwind_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0}::{1}", efn.name.rust,
                var.rust))
    })format!("::{}::{}", efn.name.rust, var.rust);
1003    let body_span = efn.semi_token.span;
1004    let shim = expand_rust_function_shim_impl(
1005        sig,
1006        types,
1007        &r_trampoline,
1008        local_name,
1009        prevent_unwind_label,
1010        None,
1011        Some(&efn.generics),
1012        &efn.attrs,
1013        body_span,
1014    );
1015    let calling_conv = match efn.lang {
1016        Lang::Cxx => "C",
1017        Lang::CxxUnwind => "C-unwind",
1018        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
1019    };
1020    let var = &var.rust;
1021
1022    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "FatFunction");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "trampoline");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "unsafe");
                    ::quote::__private::push_ident(&mut _s, "extern");
                    ::quote::ToTokens::to_tokens(&calling_conv, &mut _s);
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_pound(&mut _s);
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    ::quote::__private::push_ident(&mut _s, "link_name");
                                    ::quote::__private::push_eq(&mut _s);
                                    ::quote::ToTokens::to_tokens(&c_trampoline, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident(&mut _s, "fn");
                            ::quote::__private::push_ident(&mut _s, "trampoline");
                            ::quote::__private::push_group(&mut _s,
                                ::quote::__private::Delimiter::Parenthesis,
                                ::quote::__private::TokenStream::new());
                            ::quote::__private::push_semi(&mut _s);
                            _s
                        });
                    ::quote::ToTokens::to_tokens(&shim, &mut _s);
                    ::quote::__private::push_ident(&mut _s, "trampoline");
                    ::quote::__private::push_ident(&mut _s, "as");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cxx");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "core");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "primitive");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "usize");
                    ::quote::__private::push_ident(&mut _s, "as");
                    ::quote::__private::push_star(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "const");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cxx");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "core");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "ffi");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "c_void");
                    _s
                });
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "ptr");
            ::quote::__private::push_colon(&mut _s);
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "primitive");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "usize");
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::__private::push_star(&mut _s);
            ::quote::__private::push_ident(&mut _s, "const");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "ffi");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "c_void");
            ::quote::__private::push_comma(&mut _s);
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1023        let #var = ::cxx::private::FatFunction {
1024            trampoline: {
1025                unsafe extern #calling_conv {
1026                    #[link_name = #c_trampoline]
1027                    fn trampoline();
1028                }
1029                #shim
1030                trampoline as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void
1031            },
1032            ptr: #var as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void,
1033        };
1034    }
1035}
1036
1037fn expand_rust_type_import(ety: &ExternType) -> TokenStream {
1038    let ident = &ety.name.rust;
1039    let all_attrs = ety.attrs.all();
1040    let span = ident.span();
1041
1042    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "use");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "super");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {span=>
1043        #all_attrs
1044        use super::#ident;
1045    }
1046}
1047
1048fn expand_rust_type_impl(ety: &ExternType) -> TokenStream {
1049    let ident = &ety.name.rust;
1050    let generics = &ety.generics;
1051    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1052    let span = ident.span();
1053    let unsafe_impl = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(ety.type_token.span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    _s
}quote_spanned!(ety.type_token.span=> unsafe impl);
1054
1055    let mut impls = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::ToTokens::to_tokens(&unsafe_impl, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustType");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned! {span=>
1056        #cfg_and_lint_attrs
1057        #[automatically_derived]
1058        #[doc(hidden)]
1059        #unsafe_impl #generics ::cxx::private::RustType for #ident #generics {}
1060    };
1061
1062    for derive in &ety.derives {
1063        if derive.what == Trait::ExternType {
1064            let type_id = type_id(&ety.name);
1065            let span = derive.span;
1066            impls.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ExternType");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "allow");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "unused_attributes");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "type");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Id");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&type_id, &mut _s);
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "type");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Kind");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "kind");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Opaque");
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            _s
        });
    _s
}quote_spanned! {span=>
1067                #cfg_and_lint_attrs
1068                #[automatically_derived]
1069                unsafe impl #generics ::cxx::ExternType for #ident #generics {
1070                    #[allow(unused_attributes)] // incorrect lint
1071                    #[doc(hidden)]
1072                    type Id = #type_id;
1073                    type Kind = ::cxx::kind::Opaque;
1074                }
1075            });
1076        }
1077    }
1078
1079    impls
1080}
1081
1082fn expand_rust_type_assert_unpin(ety: &ExternType, types: &Types) -> TokenStream {
1083    let ident = &ety.name.rust;
1084    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1085
1086    let resolve = types.resolve(ident);
1087    let lifetimes = resolve.generics.to_underscore_lifetimes();
1088
1089    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(ident.span()).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
    ::quote::__private::push_underscore_spanned(&mut _s, _span);
    ::quote::__private::push_colon_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    ::quote::__private::push_eq_spanned(&mut _s, _span);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "require_unpin");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_semi_spanned(&mut _s, _span);
    _s
}quote_spanned! {ident.span()=>
1090        #cfg_and_lint_attrs
1091        const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1092    }
1093}
1094
1095fn expand_rust_type_layout(ety: &ExternType, types: &Types) -> TokenStream {
1096    // Rustc will render as follows if not sized:
1097    //
1098    //     type TheirType;
1099    //     -----^^^^^^^^^-
1100    //     |    |
1101    //     |    doesn't have a size known at compile-time
1102    //     required by this bound in `__AssertSized`
1103
1104    let ident = &ety.name.rust;
1105    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1106    let begin_span = ::syn::token::PathSepToken![::](ety.type_token.span);
1107    let sized = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(ety.semi_token.span).__into_span();
    ::quote::ToTokens::to_tokens(&begin_span, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "marker");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Sized");
    _s
}quote_spanned! {ety.semi_token.span=>
1108        #begin_span cxx::core::marker::Sized
1109    };
1110
1111    let link_sizeof = mangle::operator(&ety.name, "sizeof");
1112    let link_alignof = mangle::operator(&ety.name, "alignof");
1113
1114    let local_sizeof = match ::quote::__private::IdentFragmentAdapter(&ety.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__sizeof_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__sizeof_{}", ety.name.rust);
1115    let local_alignof = match ::quote::__private::IdentFragmentAdapter(&ety.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__alignof_{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__alignof_{}", ety.name.rust);
1116
1117    let resolve = types.resolve(ident);
1118    let lifetimes = resolve.generics.to_underscore_lifetimes();
1119
1120    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(ident.span()).__into_span();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "allow");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "clippy");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "needless_maybe_sized");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__AssertSized");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "T");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_question_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&sized, &mut _s);
            ::quote::__private::push_add_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&sized, &mut _s);
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Layout");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "alloc");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Layout");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "T");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_sizeof, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::ToTokens::to_tokens(&local_sizeof, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__AssertSized");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&ident, &mut _s);
                    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "size");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_alignof, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::ToTokens::to_tokens(&local_alignof, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__AssertSized");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&ident, &mut _s);
                    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "align");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {ident.span()=>
1121        #cfg_and_lint_attrs
1122        {
1123            #[doc(hidden)]
1124            #[allow(clippy::needless_maybe_sized)]
1125            fn __AssertSized<T: ?#sized + #sized>() -> ::cxx::core::alloc::Layout {
1126                ::cxx::core::alloc::Layout::new::<T>()
1127            }
1128            #[doc(hidden)]
1129            #[unsafe(export_name = #link_sizeof)]
1130            extern "C" fn #local_sizeof() -> ::cxx::core::primitive::usize {
1131                __AssertSized::<#ident #lifetimes>().size()
1132            }
1133            #[doc(hidden)]
1134            #[unsafe(export_name = #link_alignof)]
1135            extern "C" fn #local_alignof() -> ::cxx::core::primitive::usize {
1136                __AssertSized::<#ident #lifetimes>().align()
1137            }
1138        }
1139    }
1140}
1141
1142fn expand_forbid(impls: TokenStream) -> TokenStream {
1143    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "mod");
    ::quote::__private::push_ident(&mut _s, "forbid");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "pub");
            ::quote::__private::push_ident(&mut _s, "trait");
            ::quote::__private::push_ident(&mut _s, "Drop");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s,
                        "automatically_derived");
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "allow");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "drop_bounds");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "impl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_question(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Sized");
            ::quote::__private::push_add(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "ops");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Drop");
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_ident(&mut _s, "self");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Drop");
            ::quote::__private::push_ident(&mut _s, "for");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::ToTokens::to_tokens(&impls, &mut _s);
            _s
        });
    _s
}quote! {
1144        mod forbid {
1145            pub trait Drop {}
1146            #[automatically_derived]
1147            #[allow(drop_bounds)]
1148            impl<T: ?::cxx::core::marker::Sized + ::cxx::core::ops::Drop> self::Drop for T {}
1149            #impls
1150        }
1151    }
1152}
1153
1154fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
1155    let link_name = mangle::extern_fn(efn, types);
1156    let local_name = match efn.self_type() {
1157        None => match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("__{0}", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust),
1158        Some(self_type) => match ::quote::__private::IdentFragmentAdapter(&self_type) {
    arg =>
        match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
            arg =>
                ::quote::__private::mk_ident(&::alloc::__export::must_use({
                                ::alloc::fmt::format(format_args!("__{0}__{1}", arg, arg))
                            }),
                    ::quote::__private::Option::None.or(arg.span()).or(arg.span())),
        },
}format_ident!("__{}__{}", self_type, efn.name.rust),
1159    };
1160    let prevent_unwind_label = match efn.self_type() {
1161        None => ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0}", efn.name.rust))
    })format!("::{}", efn.name.rust),
1162        Some(self_type) => ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0}::{1}", self_type,
                efn.name.rust))
    })format!("::{}::{}", self_type, efn.name.rust),
1163    };
1164    let invoke = Some(&efn.name.rust);
1165    let body_span = efn.semi_token.span;
1166    expand_rust_function_shim_impl(
1167        efn,
1168        types,
1169        &link_name,
1170        local_name,
1171        prevent_unwind_label,
1172        invoke,
1173        None,
1174        &efn.attrs,
1175        body_span,
1176    )
1177}
1178
1179fn expand_rust_function_shim_impl(
1180    sig: &Signature,
1181    types: &Types,
1182    link_name: &Symbol,
1183    local_name: Ident,
1184    prevent_unwind_label: String,
1185    invoke: Option<&Ident>,
1186    outer_generics: Option<&Generics>,
1187    attrs: &OtherAttrs,
1188    body_span: Span,
1189) -> TokenStream {
1190    let all_attrs = attrs.all();
1191    let generics = outer_generics.unwrap_or(&sig.generics);
1192    let receiver_var = sig
1193        .receiver()
1194        .map(|receiver| {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(receiver.var.span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__self");
    _s
}quote_spanned!(receiver.var.span=> __self));
1195    let receiver = sig.receiver().map(|receiver| {
1196        let colon = receiver.colon_token;
1197        let receiver_type = receiver.ty();
1198        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&receiver_var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
    _s
}quote!(#receiver_var #colon #receiver_type)
1199    });
1200    let args = sig.args.iter().map(|arg| {
1201        let var = &arg.name.rust;
1202        let colon = arg.colon_token;
1203        let ty = expand_extern_type(&arg.ty, types, false);
1204        if types.needs_indirect_abi(&arg.ty) {
1205            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon *mut #ty)
1206        } else {
1207            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::ToTokens::to_tokens(&colon, &mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon #ty)
1208        }
1209    });
1210    let all_args = receiver.into_iter().chain(args);
1211
1212    let mut requires_unsafe = false;
1213    let arg_vars = sig.args.iter().map(|arg| {
1214        let var = &arg.name.rust;
1215        let span = var.span();
1216        match &arg.ty {
1217            Type::Ident(i) if i.rust == RustString => {
1218                requires_unsafe = true;
1219                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "take");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&var, &mut _s);
                    _s
                });
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "as_mut_string");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::mem::take((*#var).as_mut_string()))
1220            }
1221            Type::RustBox(_) => {
1222                requires_unsafe = true;
1223                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#var))
1224            }
1225            Type::RustVec(_) => {
1226                requires_unsafe = true;
1227                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "take");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&var, &mut _s);
                    _s
                });
            ::quote::__private::push_dot_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "as_mut_vec");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::mem::take((*#var).as_mut_vec()))
1228            }
1229            Type::UniquePtr(_) => {
1230                requires_unsafe = true;
1231                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#var))
1232            }
1233            Type::Ref(ty) => match &ty.inner {
1234                Type::Ident(i) if i.rust == RustString => match ty.mutable {
1235                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_string");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_string()),
1236                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_string");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_string()),
1237                },
1238                Type::RustVec(_) => match ty.mutable {
1239                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_vec");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_vec()),
1240                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_vec");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_vec()),
1241                },
1242                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1243            },
1244            Type::Str(_) => {
1245                requires_unsafe = true;
1246                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_str");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_str())
1247            }
1248            Type::SliceRef(slice) => {
1249                requires_unsafe = true;
1250                let inner = &slice.inner;
1251                match slice.mutable {
1252                    false => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_slice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_slice::<#inner>()),
1253                    true => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_dot_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_slice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> #var.as_mut_slice::<#inner>()),
1254                }
1255            }
1256            ty if types.needs_indirect_abi(ty) => {
1257                requires_unsafe = true;
1258                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "read");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&var, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::ptr::read(#var))
1259            }
1260            _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1261        }
1262    });
1263    let vars: Vec<_> = receiver_var.into_iter().chain(arg_vars).collect();
1264
1265    let mut requires_closure;
1266    let mut call = match invoke {
1267        Some(_) => {
1268            requires_closure = false;
1269            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1270        }
1271        None => {
1272            requires_closure = true;
1273            requires_unsafe = true;
1274            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mem");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "transmute");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_comma(&mut _s);
    ::quote::ToTokens::to_tokens(&sig, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "__extern");
            _s
        });
    _s
}quote!(::cxx::core::mem::transmute::<*const (), #sig>(__extern))
1275        }
1276    };
1277    requires_closure |= !vars.is_empty();
1278    call.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            {
                use ::quote::__private::ext::*;
                let mut _i = 0usize;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    if _i > 0 { ::quote::__private::push_comma(&mut _s); }
                    _i += 1;
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                }
            }
            _s
        });
    _s
}quote! { (#(#vars),*) });
1279
1280    let wrap_super = invoke.map(|invoke| {
1281        // If the wrapper function is being passed directly to prevent_unwind,
1282        // it must implement `FnOnce() -> R` and cannot be an unsafe fn.
1283        let unsafety = sig.unsafety.filter(|_| requires_closure);
1284        expand_rust_function_shim_super(sig, &local_name, invoke, unsafety)
1285    });
1286
1287    let span = body_span;
1288    let conversion = sig.ret.as_ref().and_then(|ret| match ret {
1289        Type::Ident(ident) if ident.rust == RustString => {
1290            Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from");
    _s
}quote_spanned!(span=> ::cxx::private::RustString::from))
1291        }
1292        Type::RustBox(_) => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    _s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::into_raw)),
1293        Type::RustVec(_) => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from");
    _s
}quote_spanned!(span=> ::cxx::private::RustVec::from)),
1294        Type::UniquePtr(_) => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
    _s
}quote_spanned!(span=> ::cxx::UniquePtr::into_raw)),
1295        Type::Ref(ty) => match &ty.inner {
1296            Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
1297                false => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    _s
}quote_spanned!(span=> ::cxx::private::RustString::from_ref)),
1298                true => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    _s
}quote_spanned!(span=> ::cxx::private::RustString::from_mut)),
1299            },
1300            Type::RustVec(_) => match ty.mutable {
1301                false => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    _s
}quote_spanned!(span=> ::cxx::private::RustVec::from_ref)),
1302                true => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    _s
}quote_spanned!(span=> ::cxx::private::RustVec::from_mut)),
1303            },
1304            _ => None,
1305        },
1306        Type::Str(_) => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustStr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from");
    _s
}quote_spanned!(span=> ::cxx::private::RustStr::from)),
1307        Type::SliceRef(ty) => match ty.mutable {
1308            false => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
    _s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_ref)),
1309            true => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
    _s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_mut)),
1310        },
1311        _ => None,
1312    });
1313
1314    let mut expr = match conversion {
1315        None => call,
1316        Some(conversion) if !sig.throws => {
1317            requires_closure = true;
1318            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&conversion, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> #conversion(#call))
1319        }
1320        Some(conversion) => {
1321            requires_closure = true;
1322            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "result");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "map");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&call, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&conversion, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::result::Result::map(#call, #conversion))
1323        }
1324    };
1325
1326    let mut outparam = None;
1327    let indirect_return = indirect_return(sig, types, Lang::Rust);
1328    if indirect_return {
1329        let ret = expand_extern_type(sig.ret.as_ref().unwrap(), types, false);
1330        outparam = Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
    ::quote::__private::push_colon_spanned(&mut _s, _span);
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_comma_spanned(&mut _s, _span);
    _s
}quote_spanned!(span=> __return: *mut #ret,));
1331    }
1332    if sig.throws {
1333        let out = match sig.ret {
1334            Some(_) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
    _s
}quote_spanned!(span=> __return),
1335            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> &mut ()),
1336        };
1337        requires_closure = true;
1338        requires_unsafe = true;
1339        expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "r#try");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&out, &mut _s);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::r#try(#out, #expr));
1340    } else if indirect_return {
1341        requires_closure = true;
1342        requires_unsafe = true;
1343        expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "write");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__return");
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::core::ptr::write(__return, #expr));
1344    }
1345
1346    if requires_unsafe {
1347        expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> unsafe { #expr });
1348    }
1349
1350    let closure = if requires_closure {
1351        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "move");
    ::quote::__private::push_or_or_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&expr, &mut _s);
    _s
}quote_spanned!(span=> move || #expr)
1352    } else {
1353        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1354    };
1355
1356    expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "prevent_unwind");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&closure, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> ::cxx::private::prevent_unwind(__fn, #closure));
1357
1358    let ret = if sig.throws {
1359        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Result");
    _s
}quote!(-> ::cxx::private::Result)
1360    } else {
1361        expand_extern_return_type(sig, types, false, Lang::Rust)
1362    };
1363
1364    let pointer = match invoke {
1365        None => Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__extern");
    ::quote::__private::push_colon_spanned(&mut _s, _span);
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::TokenStream::new()
        });
    _s
}quote_spanned!(span=> __extern: *const ())),
1366        Some(_) => None,
1367    };
1368
1369    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "hidden");
                    _s
                });
            _s
        });
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "export_name");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&link_name, &mut _s);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let all_args =
                        match all_args.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&all_args, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            ::quote::ToTokens::to_tokens(&outparam, &mut _s);
            ::quote::ToTokens::to_tokens(&pointer, &mut _s);
            _s
        });
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "let");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
            ::quote::__private::push_eq_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
            ::quote::__private::push_bang_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "module_path");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&prevent_unwind_label,
                        &mut _s);
                    _s
                });
            ::quote::__private::push_semi_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&wrap_super, &mut _s);
            ::quote::ToTokens::to_tokens(&expr, &mut _s);
            _s
        });
    _s
}quote_spanned! {span=>
1370        #all_attrs
1371        #[doc(hidden)]
1372        #[unsafe(export_name = #link_name)]
1373        unsafe extern "C" fn #local_name #generics(#(#all_args,)* #outparam #pointer) #ret {
1374            let __fn = ::cxx::core::concat!(::cxx::core::module_path!(), #prevent_unwind_label);
1375            #wrap_super
1376            #expr
1377        }
1378    }
1379}
1380
1381// A wrapper like `fn f(x: Arg) { super::f(x) }` just to ensure we have the
1382// accurate unsafety declaration and no problematic elided lifetimes.
1383fn expand_rust_function_shim_super(
1384    sig: &Signature,
1385    local_name: &Ident,
1386    invoke: &Ident,
1387    unsafety: Option<Token![unsafe]>,
1388) -> TokenStream {
1389    let generics = &sig.generics;
1390
1391    let receiver_var = sig
1392        .receiver()
1393        .map(|receiver| Ident::new("__self", receiver.var.span));
1394    let receiver = sig.receiver().into_iter().map(|receiver| {
1395        let receiver_type = receiver.ty();
1396        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&receiver_var, &mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
    _s
}quote!(#receiver_var: #receiver_type)
1397    });
1398    let args = sig.args.iter().map(|arg| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&arg, &mut _s);
    _s
}quote!(#arg));
1399    let all_args = receiver.chain(args);
1400
1401    let ret = if let Some((result, _langle, rangle)) = sig.throws_tokens {
1402        let ok = match &sig.ret {
1403            Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(#ret),
1404            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(()),
1405        };
1406        // Set spans that result in the `Result<...>` written by the user being
1407        // highlighted as the cause if their error type has no Display impl.
1408        let result_begin = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(result.span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "result");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&ok, &mut _s);
    ::quote::__private::push_comma_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    _s
}quote_spanned!(result.span=> ::cxx::core::result::Result<#ok, impl);
1409        let result_end = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(rangle.span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "Display");
    ::quote::__private::push_add_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "use");
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    ::quote::__private::push_shr_spanned(&mut _s, _span);
    _s
}quote_spanned!(rangle.span=> ::cxx::core::fmt::Display + use<>>);
1410        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::ToTokens::to_tokens(&result_begin, &mut _s);
    ::quote::ToTokens::to_tokens(&result_end, &mut _s);
    _s
}quote!(-> #result_begin #result_end)
1411    } else {
1412        expand_return_type(&sig.ret)
1413    };
1414
1415    let arg_vars = sig.args.iter().map(|arg| &arg.name.rust);
1416    let vars = receiver_var.iter().chain(arg_vars);
1417
1418    let span = invoke.span();
1419    let call = match sig.self_type() {
1420        None => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "super");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&invoke, &mut _s);
    _s
}quote_spanned!(span=> super::#invoke),
1421        Some(self_type) => {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&self_type, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&invoke, &mut _s);
    _s
}quote_spanned!(span=> #self_type::#invoke),
1422    };
1423
1424    let mut body = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let vars =
                        match vars.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&vars, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            _s
        });
    _s
}quote_spanned!(span=> #call(#(#vars,)*));
1425    let mut allow_unused_unsafe = None;
1426    if sig.unsafety.is_some() {
1427        body = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&body, &mut _s);
            _s
        });
    _s
}quote_spanned!(span=> unsafe { #body });
1428        allow_unused_unsafe = Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "allow");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unused_unsafe");
                    _s
                });
            _s
        });
    _s
}quote_spanned!(span=> #[allow(unused_unsafe)]));
1429    }
1430
1431    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&allow_unused_unsafe, &mut _s);
    ::quote::ToTokens::to_tokens(&unsafety, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            {
                use ::quote::__private::ext::*;
                let has_iter = ::quote::__private::HasIterator::<false>;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                <_ as
                        ::quote::__private::CheckHasIterator<true>>::check(has_iter);
                while true {
                    let all_args =
                        match all_args.next() {
                            Some(_x) => ::quote::__private::RepInterp(_x),
                            None => break,
                        };
                    ::quote::ToTokens::to_tokens(&all_args, &mut _s);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                }
            }
            _s
        });
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&body, &mut _s);
            _s
        });
    _s
}quote_spanned! {span=>
1432        #allow_unused_unsafe
1433        #unsafety fn #local_name #generics(#(#all_args,)*) #ret {
1434            #body
1435        }
1436    }
1437}
1438
1439fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
1440    let doc = &alias.doc;
1441    let all_attrs = alias.attrs.all();
1442    let visibility = alias.visibility;
1443    let type_token = alias.type_token;
1444    let ident = &alias.name.rust;
1445    let generics = &alias.generics;
1446    let eq_token = alias.eq_token;
1447    let ty = &alias.ty;
1448    let semi_token = alias.semi_token;
1449
1450    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&doc, &mut _s);
    ::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
    ::quote::ToTokens::to_tokens(&visibility, &mut _s);
    ::quote::ToTokens::to_tokens(&type_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::ToTokens::to_tokens(&eq_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&semi_token, &mut _s);
    _s
}quote! {
1451        #doc
1452        #all_attrs
1453        #visibility #type_token #ident #generics #eq_token #ty #semi_token
1454    }
1455}
1456
1457fn expand_type_alias_verify(alias: &TypeAlias, types: &Types) -> TokenStream {
1458    let cfg_and_lint_attrs = alias.attrs.cfg_and_lint();
1459    let ident = &alias.name.rust;
1460    let type_id = type_id(&alias.name);
1461    let begin_span = alias.type_token.span;
1462    let end_span = alias.semi_token.span;
1463    let begin = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(begin_span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span,
        "verify_extern_type");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    _s
}quote_spanned!(begin_span=> ::cxx::private::verify_extern_type::<);
1464    let end = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    _s
}quote_spanned!(end_span=> >);
1465
1466    let resolve = types.resolve(ident);
1467    let lifetimes = resolve.generics.to_underscore_lifetimes();
1468
1469    let mut verify = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::ToTokens::to_tokens(&begin, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_comma(&mut _s);
    ::quote::ToTokens::to_tokens(&type_id, &mut _s);
    ::quote::ToTokens::to_tokens(&end, &mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1470        #cfg_and_lint_attrs
1471        const _: fn() = #begin #ident #lifetimes, #type_id #end;
1472    };
1473
1474    let mut require_unpin = false;
1475    let mut require_box = false;
1476    let mut require_vec = false;
1477    let mut require_extern_type_trivial = false;
1478    let mut require_rust_type_or_trivial = None;
1479    if let Some(reasons) = types.required_trivial.get(&alias.name.rust) {
1480        for reason in reasons {
1481            match reason {
1482                TrivialReason::BoxTarget { local: true }
1483                | TrivialReason::VecElement { local: true } => require_unpin = true,
1484                TrivialReason::BoxTarget { local: false } => require_box = true,
1485                TrivialReason::VecElement { local: false } => require_vec = true,
1486                TrivialReason::StructField(_)
1487                | TrivialReason::FunctionArgument(_)
1488                | TrivialReason::FunctionReturn(_) => require_extern_type_trivial = true,
1489                TrivialReason::SliceElement(slice) => require_rust_type_or_trivial = Some(slice),
1490            }
1491        }
1492    }
1493
1494    'unpin: {
1495        if let Some(reason) = types.required_unpin.get(ident) {
1496            let ampersand;
1497            let reference_lifetime;
1498            let mutability;
1499            let mut inner;
1500            let generics;
1501            let shorthand;
1502            match reason {
1503                UnpinReason::Receiver(receiver) => {
1504                    ampersand = &receiver.ampersand;
1505                    reference_lifetime = &receiver.lifetime;
1506                    mutability = &receiver.mutability;
1507                    inner = receiver.ty.rust.clone();
1508                    generics = &receiver.ty.generics;
1509                    shorthand = receiver.shorthand;
1510                    if receiver.shorthand {
1511                        inner.set_span(receiver.var.span);
1512                    }
1513                }
1514                UnpinReason::Ref(mutable_reference) => {
1515                    ampersand = &mutable_reference.ampersand;
1516                    reference_lifetime = &mutable_reference.lifetime;
1517                    mutability = &mutable_reference.mutability;
1518                    let Type::Ident(inner_type) = &mutable_reference.inner else {
1519                        ::core::panicking::panic("internal error: entered unreachable code");unreachable!();
1520                    };
1521                    inner = inner_type.rust.clone();
1522                    generics = &inner_type.generics;
1523                    shorthand = false;
1524                }
1525                UnpinReason::Slice(mutable_slice) => {
1526                    ampersand = &mutable_slice.ampersand;
1527                    mutability = &mutable_slice.mutability;
1528                    let inner = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(mutable_slice.bracket.span).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
            _s
        });
    _s
}quote_spanned!(mutable_slice.bracket.span=> [#ident #lifetimes]);
1529                    let trait_name = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("SliceOfUnpin_{0}", ident))
            }), ::quote::__private::Option::None)format_ident!("SliceOfUnpin_{ident}");
1530                    let label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("requires `{0}: Unpin`", ident))
    })format!("requires `{ident}: Unpin`");
1531                    verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "diagnostic");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "on_unimplemented");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "message");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::__private::parse(&mut _s,
                                "\"mutable slice of pinned type is not supported\"");
                            ::quote::__private::push_comma(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "label");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::ToTokens::to_tokens(&label, &mut _s);
                            ::quote::__private::push_comma(&mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "trait");
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "fn");
                    ::quote::__private::push_ident(&mut _s, "check_unpin");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        ::quote::__private::TokenStream::new());
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Brace,
                        ::quote::__private::TokenStream::new());
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "diagnostic");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "do_not_recommend");
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "impl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_lifetime(&mut _s, "\'a");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_question(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Sized");
            ::quote::__private::push_add(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Unpin");
            ::quote::__private::push_gt(&mut _s);
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_ident(&mut _s, "for");
            ::quote::__private::push_and(&mut _s);
            ::quote::__private::push_lifetime(&mut _s, "\'a");
            ::quote::ToTokens::to_tokens(&mutability, &mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_lt(&mut _s);
            ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
            ::quote::ToTokens::to_tokens(&mutability, &mut _s);
            ::quote::ToTokens::to_tokens(&inner, &mut _s);
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "check_unpin");
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1532                        #cfg_and_lint_attrs
1533                        let _ = {
1534                            #[diagnostic::on_unimplemented(
1535                                message = "mutable slice of pinned type is not supported",
1536                                label = #label,
1537                            )]
1538                            trait #trait_name {
1539                                fn check_unpin() {}
1540                            }
1541                            #[diagnostic::do_not_recommend]
1542                            impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a #mutability T {}
1543                            <#ampersand #mutability #inner as #trait_name>::check_unpin
1544                        };
1545                    });
1546                    require_unpin = false;
1547                    break 'unpin;
1548                }
1549            }
1550            let trait_name = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("ReferenceToUnpin_{0}",
                        ident))
            }), ::quote::__private::Option::None)format_ident!("ReferenceToUnpin_{ident}");
1551            let message =
1552                ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("mutable reference to C++ type requires a pin -- use Pin<&mut {0}>",
                ident))
    })format!("mutable reference to C++ type requires a pin -- use Pin<&mut {ident}>");
1553            let label = {
1554                let mut label = Message::new();
1555                label.write_fmt(format_args!("use `"));write!(label, "use `");
1556                if shorthand {
1557                    label.write_fmt(format_args!("self: "));write!(label, "self: ");
1558                }
1559                label.write_fmt(format_args!("Pin<&"));write!(label, "Pin<&");
1560                if let Some(reference_lifetime) = reference_lifetime {
1561                    label.write_fmt(format_args!("{0} ", reference_lifetime));write!(label, "{reference_lifetime} ");
1562                }
1563                label.write_fmt(format_args!("mut {0}", ident));write!(label, "mut {ident}");
1564                if !generics.lifetimes.is_empty() {
1565                    label.write_fmt(format_args!("<"));write!(label, "<");
1566                    for (i, lifetime) in generics.lifetimes.iter().enumerate() {
1567                        if i > 0 {
1568                            label.write_fmt(format_args!(", "));write!(label, ", ");
1569                        }
1570                        label.write_fmt(format_args!("{0}", lifetime));write!(label, "{lifetime}");
1571                    }
1572                    label.write_fmt(format_args!(">"));write!(label, ">");
1573                } else if shorthand && !alias.generics.lifetimes.is_empty() {
1574                    label.write_fmt(format_args!("<"));write!(label, "<");
1575                    for i in 0..alias.generics.lifetimes.len() {
1576                        if i > 0 {
1577                            label.write_fmt(format_args!(", "));write!(label, ", ");
1578                        }
1579                        label.write_fmt(format_args!("\'_"));write!(label, "'_");
1580                    }
1581                    label.write_fmt(format_args!(">"));write!(label, ">");
1582                }
1583                label.write_fmt(format_args!(">`"));write!(label, ">`");
1584                label
1585            };
1586            let lifetimes = generics.to_underscore_lifetimes();
1587            verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "diagnostic");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "on_unimplemented");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "message");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::ToTokens::to_tokens(&message, &mut _s);
                            ::quote::__private::push_comma(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "label");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::ToTokens::to_tokens(&label, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "trait");
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "fn");
                    ::quote::__private::push_ident(&mut _s, "check_unpin");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        ::quote::__private::TokenStream::new());
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Brace,
                        ::quote::__private::TokenStream::new());
                    _s
                });
            ::quote::__private::push_pound(&mut _s);
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "diagnostic");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "do_not_recommend");
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "impl");
            ::quote::__private::push_lt(&mut _s);
            ::quote::__private::push_lifetime(&mut _s, "\'a");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_question(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Sized");
            ::quote::__private::push_add(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "marker");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Unpin");
            ::quote::__private::push_gt(&mut _s);
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_ident(&mut _s, "for");
            ::quote::__private::push_and(&mut _s);
            ::quote::__private::push_lifetime(&mut _s, "\'a");
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_ident(&mut _s, "T");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_lt(&mut _s);
            ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
            ::quote::ToTokens::to_tokens(&mutability, &mut _s);
            ::quote::ToTokens::to_tokens(&inner, &mut _s);
            ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
            ::quote::__private::push_ident(&mut _s, "as");
            ::quote::ToTokens::to_tokens(&trait_name, &mut _s);
            ::quote::__private::push_gt(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "check_unpin");
            _s
        });
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1588                #cfg_and_lint_attrs
1589                let _ = {
1590                    #[diagnostic::on_unimplemented(message = #message, label = #label)]
1591                    trait #trait_name {
1592                        fn check_unpin() {}
1593                    }
1594                    #[diagnostic::do_not_recommend]
1595                    impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a mut T {}
1596                    <#ampersand #mutability #inner #lifetimes as #trait_name>::check_unpin
1597                };
1598            });
1599            require_unpin = false;
1600        }
1601    }
1602
1603    if require_unpin {
1604        verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "require_unpin");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1605            #cfg_and_lint_attrs
1606            const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1607        });
1608    }
1609
1610    if require_box {
1611        verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "require_box");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1612            #cfg_and_lint_attrs
1613            const _: fn() = ::cxx::private::require_box::<#ident #lifetimes>;
1614        });
1615    }
1616
1617    if require_vec {
1618        verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "require_vec");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1619            #cfg_and_lint_attrs
1620            const _: fn() = ::cxx::private::require_vec::<#ident #lifetimes>;
1621        });
1622    }
1623
1624    if require_extern_type_trivial {
1625        let begin = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(begin_span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span,
        "verify_extern_kind");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_lt_spanned(&mut _s, _span);
    _s
}quote_spanned!(begin_span=> ::cxx::private::verify_extern_kind::<);
1626        verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_colon(&mut _s);
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_eq(&mut _s);
    ::quote::ToTokens::to_tokens(&begin, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_comma(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "kind");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "Trivial");
    ::quote::ToTokens::to_tokens(&end, &mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1627            #cfg_and_lint_attrs
1628            const _: fn() = #begin #ident #lifetimes, ::cxx::kind::Trivial #end;
1629        });
1630    } else if let Some(slice_type) = require_rust_type_or_trivial {
1631        let ampersand = &slice_type.ampersand;
1632        let mutability = &slice_type.mutability;
1633        let inner = {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(slice_type.bracket.span.join()).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
            _s
        });
    _s
}quote_spanned!(slice_type.bracket.span.join()=> [#ident #lifetimes]);
1634        verify.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
    ::quote::__private::push_ident(&mut _s, "let");
    ::quote::__private::push_underscore(&mut _s);
    ::quote::__private::push_eq(&mut _s);
    ::quote::__private::push_or_or(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "private");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "with");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_dot(&mut _s);
    ::quote::__private::push_ident(&mut _s, "check_slice");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_lt(&mut _s);
    ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! {
1635            #cfg_and_lint_attrs
1636            let _ = || ::cxx::private::with::<#ident #lifetimes>().check_slice::<#ampersand #mutability #inner>();
1637        });
1638    }
1639
1640    verify
1641}
1642
1643fn type_id(name: &Pair) -> TokenStream {
1644    let namespace_segments = name.namespace.iter();
1645    let mut segments = Vec::with_capacity(namespace_segments.len() + 1);
1646    segments.extend(namespace_segments.cloned());
1647    segments.push(Ident::new(&name.cxx.to_string(), Span::call_site()));
1648    let qualified = QualifiedName { segments };
1649    crate::type_id::expand(Crate::Cxx, qualified)
1650}
1651
1652fn expand_rust_box(
1653    key: &NamedImplKey,
1654    types: &Types,
1655    conditional_impl: &ConditionalImpl,
1656) -> TokenStream {
1657    let link_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$box${0}$", key.symbol))
    })format!("cxxbridge1$box${}$", key.symbol);
1658    let link_alloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}alloc", link_prefix))
    })format!("{}alloc", link_prefix);
1659    let link_dealloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}dealloc", link_prefix))
    })format!("{}dealloc", link_prefix);
1660    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1661
1662    let (impl_generics, inner_with_generics) =
1663        generics::split_for_impl(key, conditional_impl, types);
1664
1665    let cfg = conditional_impl.cfg.into_attr();
1666    let begin_span = conditional_impl
1667        .explicit_impl
1668        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1669    let end_span = conditional_impl
1670        .explicit_impl
1671        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1672    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1673    let prevent_unwind_drop_label =
1674        ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop",
                generics::local_type(key.inner).rust))
    })format!("::{} as Drop>::drop", generics::local_type(key.inner).rust);
1675
1676    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "automatically_derived");
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ImplBox");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_alloc, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__alloc");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "alloc");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "boxed");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Box");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "into_raw");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "alloc");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "boxed");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Box");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "new_uninit");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_dealloc, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__dealloc");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ptr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_underscore_spanned(&mut _s, _span);
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "alloc");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "boxed");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Box");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "from_raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ptr");
                                    _s
                                });
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_drop, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "alloc");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "boxed");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Box");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "concat");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "module_path");
                            ::quote::__private::push_bang_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
                                &mut _s);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "prevent_unwind");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__fn");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_or_or_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "unsafe");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ptr");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "drop_in_place");
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            let _span: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                                "this");
                                            _s
                                        });
                                    _s
                                });
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            _s
        });
    _s
}quote_spanned!(end_span=> {
1677        #cfg
1678        #[automatically_derived]
1679        #[doc(hidden)]
1680        #unsafe_token impl #impl_generics ::cxx::private::ImplBox for #inner_with_generics {}
1681
1682        #cfg
1683        #[doc(hidden)]
1684        #[unsafe(export_name = #link_alloc)]
1685        unsafe extern "C" fn __alloc #impl_generics() -> *mut ::cxx::core::mem::MaybeUninit<#inner_with_generics> {
1686            // No prevent_unwind: the global allocator is not allowed to panic.
1687            ::cxx::alloc::boxed::Box::into_raw(::cxx::alloc::boxed::Box::new_uninit())
1688        }
1689
1690        #cfg
1691        #[doc(hidden)]
1692        #[unsafe(export_name = #link_dealloc)]
1693        unsafe extern "C" fn __dealloc #impl_generics(ptr: *mut ::cxx::core::mem::MaybeUninit<#inner_with_generics>) {
1694            // No prevent_unwind: the global allocator is not allowed to panic.
1695            let _ = unsafe { ::cxx::alloc::boxed::Box::from_raw(ptr) };
1696        }
1697
1698        #cfg
1699        #[doc(hidden)]
1700        #[unsafe(export_name = #link_drop)]
1701        unsafe extern "C" fn __drop #impl_generics(this: *mut ::cxx::alloc::boxed::Box<#inner_with_generics>) {
1702            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1703            ::cxx::private::prevent_unwind(__fn, || unsafe { ::cxx::core::ptr::drop_in_place(this) });
1704        }
1705    })
1706}
1707
1708fn expand_rust_vec(
1709    key: &NamedImplKey,
1710    types: &Types,
1711    conditional_impl: &ConditionalImpl,
1712) -> TokenStream {
1713    let link_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$rust_vec${0}$",
                key.symbol))
    })format!("cxxbridge1$rust_vec${}$", key.symbol);
1714    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", link_prefix))
    })format!("{}new", link_prefix);
1715    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1716    let link_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}len", link_prefix))
    })format!("{}len", link_prefix);
1717    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", link_prefix))
    })format!("{}capacity", link_prefix);
1718    let link_data = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}data", link_prefix))
    })format!("{}data", link_prefix);
1719    let link_reserve_total = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve_total", link_prefix))
    })format!("{}reserve_total", link_prefix);
1720    let link_set_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}set_len", link_prefix))
    })format!("{}set_len", link_prefix);
1721    let link_truncate = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}truncate", link_prefix))
    })format!("{}truncate", link_prefix);
1722
1723    let (impl_generics, inner_with_generics) =
1724        generics::split_for_impl(key, conditional_impl, types);
1725
1726    let cfg = conditional_impl.cfg.into_attr();
1727    let begin_span = conditional_impl
1728        .explicit_impl
1729        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1730    let end_span = conditional_impl
1731        .explicit_impl
1732        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1733    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1734    let prevent_unwind_drop_label =
1735        ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop",
                generics::local_type(key.inner).rust))
    })format!("::{} as Drop>::drop", generics::local_type(key.inner).rust);
1736
1737    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "automatically_derived");
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ImplVec");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_new, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__new");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ptr");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "write");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "private");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "RustVec");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let _: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::TokenStream::new()
                                        });
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_drop, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "concat");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "module_path");
                            ::quote::__private::push_bang_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
                                &mut _s);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "prevent_unwind");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__fn");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_or_or_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "unsafe");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ptr");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "drop_in_place");
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            let _span: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                                "this");
                                            _s
                                        });
                                    _s
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_len, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__len");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "len");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_capacity, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__capacity");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "capacity");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_data, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__data");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "as_ptr");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_reserve_total, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__reserve_total");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new_cap");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "primitive");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "usize");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "reserve_total");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new_cap");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_set_len, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__set_len");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "len");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "primitive");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "usize");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "set_len");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "len");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&cfg, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "doc");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "hidden");
                            _s
                        });
                    _s
                });
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "export_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_truncate, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__truncate");
            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "RustVec");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "len");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "primitive");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "usize");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__fn");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "concat");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "module_path");
                            ::quote::__private::push_bang_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
                                &mut _s);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "private");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "prevent_unwind");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__fn");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_or_or_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "unsafe");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Brace,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            let _span: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::push_star_spanned(&mut _s, _span);
                                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                                "this");
                                            _s
                                        });
                                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "truncate");
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let mut _s = ::quote::__private::TokenStream::new();
                                            let _span: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                                "len");
                                            _s
                                        });
                                    _s
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            _s
        });
    _s
}quote_spanned!(end_span=> {
1738        #cfg
1739        #[automatically_derived]
1740        #[doc(hidden)]
1741        #unsafe_token impl #impl_generics ::cxx::private::ImplVec for #inner_with_generics {}
1742
1743        #cfg
1744        #[doc(hidden)]
1745        #[unsafe(export_name = #link_new)]
1746        unsafe extern "C" fn __new #impl_generics(this: *mut ::cxx::private::RustVec<#inner_with_generics>) {
1747            // No prevent_unwind: cannot panic.
1748            unsafe {
1749                ::cxx::core::ptr::write(this, ::cxx::private::RustVec::new());
1750            }
1751        }
1752
1753        #cfg
1754        #[doc(hidden)]
1755        #[unsafe(export_name = #link_drop)]
1756        unsafe extern "C" fn __drop #impl_generics(this: *mut ::cxx::private::RustVec<#inner_with_generics>) {
1757            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1758            ::cxx::private::prevent_unwind(
1759                __fn,
1760                || unsafe { ::cxx::core::ptr::drop_in_place(this) },
1761            );
1762        }
1763
1764        #cfg
1765        #[doc(hidden)]
1766        #[unsafe(export_name = #link_len)]
1767        unsafe extern "C" fn __len #impl_generics(this: *const ::cxx::private::RustVec<#inner_with_generics>) -> ::cxx::core::primitive::usize {
1768            // No prevent_unwind: cannot panic.
1769            unsafe { (*this).len() }
1770        }
1771
1772        #cfg
1773        #[doc(hidden)]
1774        #[unsafe(export_name = #link_capacity)]
1775        unsafe extern "C" fn __capacity #impl_generics(this: *const ::cxx::private::RustVec<#inner_with_generics>) -> ::cxx::core::primitive::usize {
1776            // No prevent_unwind: cannot panic.
1777            unsafe { (*this).capacity() }
1778        }
1779
1780        #cfg
1781        #[doc(hidden)]
1782        #[unsafe(export_name = #link_data)]
1783        unsafe extern "C" fn __data #impl_generics(this: *const ::cxx::private::RustVec<#inner_with_generics>) -> *const #inner_with_generics {
1784            // No prevent_unwind: cannot panic.
1785            unsafe { (*this).as_ptr() }
1786        }
1787
1788        #cfg
1789        #[doc(hidden)]
1790        #[unsafe(export_name = #link_reserve_total)]
1791        unsafe extern "C" fn __reserve_total #impl_generics(this: *mut ::cxx::private::RustVec<#inner_with_generics>, new_cap: ::cxx::core::primitive::usize) {
1792            // No prevent_unwind: the global allocator is not allowed to panic.
1793            unsafe {
1794                (*this).reserve_total(new_cap);
1795            }
1796        }
1797
1798        #cfg
1799        #[doc(hidden)]
1800        #[unsafe(export_name = #link_set_len)]
1801        unsafe extern "C" fn __set_len #impl_generics(this: *mut ::cxx::private::RustVec<#inner_with_generics>, len: ::cxx::core::primitive::usize) {
1802            // No prevent_unwind: cannot panic.
1803            unsafe {
1804                (*this).set_len(len);
1805            }
1806        }
1807
1808        #cfg
1809        #[doc(hidden)]
1810        #[unsafe(export_name = #link_truncate)]
1811        unsafe extern "C" fn __truncate #impl_generics(this: *mut ::cxx::private::RustVec<#inner_with_generics>, len: ::cxx::core::primitive::usize) {
1812            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1813            ::cxx::private::prevent_unwind(
1814                __fn,
1815                || unsafe { (*this).truncate(len) },
1816            );
1817        }
1818    })
1819}
1820
1821fn expand_unique_ptr(
1822    key: &NamedImplKey,
1823    types: &Types,
1824    conditional_impl: &ConditionalImpl,
1825) -> TokenStream {
1826    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr${0}$",
                key.symbol))
    })format!("cxxbridge1$unique_ptr${}$", key.symbol);
1827    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
1828    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
1829    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
1830    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
1831    let link_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", prefix))
    })format!("{}release", prefix);
1832    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
1833
1834    let name = generics::concise_rust_name(key.inner);
1835    let (impl_generics, inner_with_generics) =
1836        generics::split_for_impl(key, conditional_impl, types);
1837
1838    let can_construct_from_value = types.is_maybe_trivial(key.inner);
1839    let new_method = if can_construct_from_value {
1840        Some({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_ident(&mut _s, "__new");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "value");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Self");
            _s
        });
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mem");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "MaybeUninit");
    ::quote::__private::push_lt(&mut _s);
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    ::quote::__private::push_gt(&mut _s);
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "unsafe");
            ::quote::__private::push_ident(&mut _s, "extern");
            ::quote::__private::parse(&mut _s, "\"C\"");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_pound(&mut _s);
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Bracket,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "link_name");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::ToTokens::to_tokens(&link_uninit, &mut _s);
                            _s
                        });
                    ::quote::__private::push_ident(&mut _s, "fn");
                    ::quote::__private::push_ident(&mut _s, "__uninit");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "this");
                            ::quote::__private::push_colon(&mut _s);
                            ::quote::__private::push_star(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "mut");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "cxx");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "core");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "mem");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "MaybeUninit");
                            ::quote::__private::push_lt(&mut _s);
                            ::quote::__private::push_star(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "mut");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "cxx");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "core");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "ffi");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "c_void");
                            ::quote::__private::push_gt(&mut _s);
                            _s
                        });
                    ::quote::__private::push_rarrow(&mut _s);
                    ::quote::__private::push_star(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "mut");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cxx");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "core");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "ffi");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "c_void");
                    ::quote::__private::push_semi(&mut _s);
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "let");
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_ident(&mut _s, "repr");
            ::quote::__private::push_eq(&mut _s);
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "mem");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "MaybeUninit");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "uninit");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Parenthesis,
                ::quote::__private::TokenStream::new());
            ::quote::__private::push_semi(&mut _s);
            ::quote::__private::push_ident(&mut _s, "unsafe");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "__uninit");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_and(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "raw");
                            ::quote::__private::push_ident(&mut _s, "mut");
                            ::quote::__private::push_ident(&mut _s, "repr");
                            _s
                        });
                    ::quote::__private::push_dot(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cast");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_lt(&mut _s);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt(&mut _s);
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        ::quote::__private::TokenStream::new());
                    ::quote::__private::push_dot(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "write");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "value");
                            _s
                        });
                    ::quote::__private::push_semi(&mut _s);
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "repr");
            _s
        });
    _s
}quote! {
1841            fn __new(value: Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1842                unsafe extern "C" {
1843                    #[link_name = #link_uninit]
1844                    fn __uninit(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1845                }
1846                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1847                unsafe {
1848                    __uninit(&raw mut repr).cast::<#inner_with_generics>().write(value);
1849                }
1850                repr
1851            }
1852        })
1853    } else {
1854        None
1855    };
1856
1857    let cfg = conditional_impl.cfg.into_attr();
1858    let begin_span = conditional_impl
1859        .explicit_impl
1860        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1861    let end_span = conditional_impl
1862        .explicit_impl
1863        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1864    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1865
1866    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtrTarget");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__typename");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fmt");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Formatter");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_lifetime_spanned(&mut _s, _span,
                        "\'_");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "write_str");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::ToTokens::to_tokens(&name, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_null, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "uninit");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    _s
                });
            ::quote::ToTokens::to_tokens(&new_method, &mut _s);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__raw");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "raw");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_raw, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "uninit");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cast");
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let _: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::TokenStream::new()
                                        });
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__get");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_get, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "const");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__release");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_release, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__release");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__release");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_drop, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
1867        #cfg
1868        #[automatically_derived]
1869        #unsafe_token impl #impl_generics ::cxx::memory::UniquePtrTarget for #inner_with_generics {
1870            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1871                f.write_str(#name)
1872            }
1873            fn __null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1874                unsafe extern "C" {
1875                    #[link_name = #link_null]
1876                    fn __null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1877                }
1878                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1879                unsafe {
1880                    __null(&raw mut repr);
1881                }
1882                repr
1883            }
1884            #new_method
1885            unsafe fn __raw(raw: *mut Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1886                unsafe extern "C" {
1887                    #[link_name = #link_raw]
1888                    fn __raw(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::core::ffi::c_void);
1889                }
1890                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1891                unsafe {
1892                    __raw(&raw mut repr, raw.cast());
1893                }
1894                repr
1895            }
1896            unsafe fn __get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const Self {
1897                unsafe extern "C" {
1898                    #[link_name = #link_get]
1899                    fn __get(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::core::ffi::c_void;
1900                }
1901                unsafe { __get(&raw const repr).cast() }
1902            }
1903            unsafe fn __release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut Self {
1904                unsafe extern "C" {
1905                    #[link_name = #link_release]
1906                    fn __release(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1907                }
1908                unsafe { __release(&raw mut repr).cast() }
1909            }
1910            unsafe fn __drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
1911                unsafe extern "C" {
1912                    #[link_name = #link_drop]
1913                    fn __drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1914                }
1915                unsafe {
1916                    __drop(&raw mut repr);
1917                }
1918            }
1919        }
1920    }
1921}
1922
1923fn expand_shared_ptr(
1924    key: &NamedImplKey,
1925    types: &Types,
1926    conditional_impl: &ConditionalImpl,
1927) -> TokenStream {
1928    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$shared_ptr${0}$",
                key.symbol))
    })format!("cxxbridge1$shared_ptr${}$", key.symbol);
1929    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
1930    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
1931    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
1932    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
1933    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
1934    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
1935
1936    let name = generics::concise_rust_name(key.inner);
1937    let (impl_generics, inner_with_generics) =
1938        generics::split_for_impl(key, conditional_impl, types);
1939
1940    let can_construct_from_value = types.is_maybe_trivial(key.inner);
1941    let new_method = if can_construct_from_value {
1942        Some({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "unsafe");
    ::quote::__private::push_ident(&mut _s, "fn");
    ::quote::__private::push_ident(&mut _s, "__new");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "value");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_ident(&mut _s, "Self");
            ::quote::__private::push_comma(&mut _s);
            ::quote::__private::push_ident(&mut _s, "new");
            ::quote::__private::push_colon(&mut _s);
            ::quote::__private::push_star(&mut _s);
            ::quote::__private::push_ident(&mut _s, "mut");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "cxx");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "core");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "ffi");
            ::quote::__private::push_colon2(&mut _s);
            ::quote::__private::push_ident(&mut _s, "c_void");
            _s
        });
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            ::quote::__private::push_ident(&mut _s, "unsafe");
            ::quote::__private::push_ident(&mut _s, "extern");
            ::quote::__private::parse(&mut _s, "\"C\"");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_pound(&mut _s);
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Bracket,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "link_name");
                            ::quote::__private::push_eq(&mut _s);
                            ::quote::ToTokens::to_tokens(&link_uninit, &mut _s);
                            _s
                        });
                    ::quote::__private::push_ident(&mut _s, "fn");
                    ::quote::__private::push_ident(&mut _s, "__uninit");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "new");
                            ::quote::__private::push_colon(&mut _s);
                            ::quote::__private::push_star(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "mut");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "cxx");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "core");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "ffi");
                            ::quote::__private::push_colon2(&mut _s);
                            ::quote::__private::push_ident(&mut _s, "c_void");
                            _s
                        });
                    ::quote::__private::push_rarrow(&mut _s);
                    ::quote::__private::push_star(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "mut");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cxx");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "core");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "ffi");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "c_void");
                    ::quote::__private::push_semi(&mut _s);
                    _s
                });
            ::quote::__private::push_ident(&mut _s, "unsafe");
            ::quote::__private::push_group(&mut _s,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    ::quote::__private::push_ident(&mut _s, "__uninit");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "new");
                            _s
                        });
                    ::quote::__private::push_dot(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "cast");
                    ::quote::__private::push_colon2(&mut _s);
                    ::quote::__private::push_lt(&mut _s);
                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                    ::quote::__private::push_gt(&mut _s);
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        ::quote::__private::TokenStream::new());
                    ::quote::__private::push_dot(&mut _s);
                    ::quote::__private::push_ident(&mut _s, "write");
                    ::quote::__private::push_group(&mut _s,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            ::quote::__private::push_ident(&mut _s, "value");
                            _s
                        });
                    ::quote::__private::push_semi(&mut _s);
                    _s
                });
            _s
        });
    _s
}quote! {
1943            unsafe fn __new(value: Self, new: *mut ::cxx::core::ffi::c_void) {
1944                unsafe extern "C" {
1945                    #[link_name = #link_uninit]
1946                    fn __uninit(new: *mut ::cxx::core::ffi::c_void) -> *mut ::cxx::core::ffi::c_void;
1947                }
1948                unsafe {
1949                    __uninit(new).cast::<#inner_with_generics>().write(value);
1950                }
1951            }
1952        })
1953    } else {
1954        None
1955    };
1956
1957    let cfg = conditional_impl.cfg.into_attr();
1958    let begin_span = conditional_impl
1959        .explicit_impl
1960        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1961    let end_span = conditional_impl
1962        .explicit_impl
1963        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1964    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1965
1966    let not_destructible_err = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0} is not destructible",
                generics::concise_cxx_name(key.inner, types)))
    })format!(
1967        "{} is not destructible",
1968        generics::concise_cxx_name(key.inner, types),
1969    );
1970
1971    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "SharedPtrTarget");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__typename");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fmt");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Formatter");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_lifetime_spanned(&mut _s, _span,
                        "\'_");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "write_str");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::ToTokens::to_tokens(&name, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_null, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&new_method, &mut _s);
            ::quote::__private::push_pound_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Bracket,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "track_caller");
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__raw");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "raw");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_raw, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "primitive");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "bool");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "if");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cast");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    ::quote::__private::push_group_spanned(&mut _s, _span,
                                        ::quote::__private::Delimiter::Parenthesis,
                                        {
                                            let _: ::quote::__private::Span =
                                                ::quote::__private::get_span(_span).__into_span();
                                            ::quote::__private::TokenStream::new()
                                        });
                                    _s
                                });
                            _s
                        });
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "panic");
                            ::quote::__private::push_bang_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::ToTokens::to_tokens(&not_destructible_err,
                                        &mut _s);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__clone");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_clone, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__clone");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__clone");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__get");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_get, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "const");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_drop, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
1972        #cfg
1973        #[automatically_derived]
1974        #unsafe_token impl #impl_generics ::cxx::memory::SharedPtrTarget for #inner_with_generics {
1975            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1976                f.write_str(#name)
1977            }
1978            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
1979                unsafe extern "C" {
1980                    #[link_name = #link_null]
1981                    fn __null(new: *mut ::cxx::core::ffi::c_void);
1982                }
1983                unsafe {
1984                    __null(new);
1985                }
1986            }
1987            #new_method
1988            #[track_caller]
1989            unsafe fn __raw(new: *mut ::cxx::core::ffi::c_void, raw: *mut Self) {
1990                unsafe extern "C" {
1991                    #[link_name = #link_raw]
1992                    fn __raw(new: *const ::cxx::core::ffi::c_void, raw: *mut ::cxx::core::ffi::c_void) -> ::cxx::core::primitive::bool;
1993                }
1994                if !unsafe { __raw(new, raw.cast::<::cxx::core::ffi::c_void>()) } {
1995                    ::cxx::core::panic!(#not_destructible_err);
1996                }
1997            }
1998            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
1999                unsafe extern "C" {
2000                    #[link_name = #link_clone]
2001                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2002                }
2003                unsafe {
2004                    __clone(this, new);
2005                }
2006            }
2007            unsafe fn __get(this: *const ::cxx::core::ffi::c_void) -> *const Self {
2008                unsafe extern "C" {
2009                    #[link_name = #link_get]
2010                    fn __get(this: *const ::cxx::core::ffi::c_void) -> *const ::cxx::core::ffi::c_void;
2011                }
2012                unsafe { __get(this).cast() }
2013            }
2014            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2015                unsafe extern "C" {
2016                    #[link_name = #link_drop]
2017                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2018                }
2019                unsafe {
2020                    __drop(this);
2021                }
2022            }
2023        }
2024    }
2025}
2026
2027fn expand_weak_ptr(
2028    key: &NamedImplKey,
2029    types: &Types,
2030    conditional_impl: &ConditionalImpl,
2031) -> TokenStream {
2032    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$weak_ptr${0}$",
                key.symbol))
    })format!("cxxbridge1$weak_ptr${}$", key.symbol);
2033    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
2034    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
2035    let link_downgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}downgrade", prefix))
    })format!("{}downgrade", prefix);
2036    let link_upgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}upgrade", prefix))
    })format!("{}upgrade", prefix);
2037    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
2038
2039    let name = generics::concise_rust_name(key.inner);
2040    let (impl_generics, inner_with_generics) =
2041        generics::split_for_impl(key, conditional_impl, types);
2042
2043    let cfg = conditional_impl.cfg.into_attr();
2044    let begin_span = conditional_impl
2045        .explicit_impl
2046        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2047    let end_span = conditional_impl
2048        .explicit_impl
2049        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2050    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
2051
2052    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "WeakPtrTarget");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__typename");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fmt");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Formatter");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_lifetime_spanned(&mut _s, _span,
                        "\'_");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "write_str");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::ToTokens::to_tokens(&name, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_null, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__clone");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_clone, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__clone");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__clone");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__downgrade");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "shared");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "weak");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_downgrade, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__downgrade");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "shared");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "weak");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__downgrade");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "shared");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "weak");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__upgrade");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "weak");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "const");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "shared");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_upgrade, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__upgrade");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "weak");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "shared");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__upgrade");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "weak");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "shared");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "this");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_drop, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
2053        #cfg
2054        #[automatically_derived]
2055        #unsafe_token impl #impl_generics ::cxx::memory::WeakPtrTarget for #inner_with_generics {
2056            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2057                f.write_str(#name)
2058            }
2059            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
2060                unsafe extern "C" {
2061                    #[link_name = #link_null]
2062                    fn __null(new: *mut ::cxx::core::ffi::c_void);
2063                }
2064                unsafe {
2065                    __null(new);
2066                }
2067            }
2068            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2069                unsafe extern "C" {
2070                    #[link_name = #link_clone]
2071                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2072                }
2073                unsafe {
2074                    __clone(this, new);
2075                }
2076            }
2077            unsafe fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void) {
2078                unsafe extern "C" {
2079                    #[link_name = #link_downgrade]
2080                    fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void);
2081                }
2082                unsafe {
2083                    __downgrade(shared, weak);
2084                }
2085            }
2086            unsafe fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void) {
2087                unsafe extern "C" {
2088                    #[link_name = #link_upgrade]
2089                    fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void);
2090                }
2091                unsafe {
2092                    __upgrade(weak, shared);
2093                }
2094            }
2095            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2096                unsafe extern "C" {
2097                    #[link_name = #link_drop]
2098                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2099                }
2100                unsafe {
2101                    __drop(this);
2102                }
2103            }
2104        }
2105    }
2106}
2107
2108fn expand_cxx_vector(
2109    key: &NamedImplKey,
2110    conditional_impl: &ConditionalImpl,
2111    types: &Types,
2112) -> TokenStream {
2113    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$std$vector${0}$",
                key.symbol))
    })format!("cxxbridge1$std$vector${}$", key.symbol);
2114    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", prefix))
    })format!("{}new", prefix);
2115    let link_size = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}size", prefix))
    })format!("{}size", prefix);
2116    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", prefix))
    })format!("{}capacity", prefix);
2117    let link_get_unchecked = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get_unchecked", prefix))
    })format!("{}get_unchecked", prefix);
2118    let link_reserve = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve", prefix))
    })format!("{}reserve", prefix);
2119    let link_push_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}push_back", prefix))
    })format!("{}push_back", prefix);
2120    let link_pop_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}pop_back", prefix))
    })format!("{}pop_back", prefix);
2121    let unique_ptr_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr$std$vector${0}$",
                key.symbol))
    })format!("cxxbridge1$unique_ptr$std$vector${}$", key.symbol);
2122    let link_unique_ptr_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", unique_ptr_prefix))
    })format!("{}null", unique_ptr_prefix);
2123    let link_unique_ptr_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", unique_ptr_prefix))
    })format!("{}raw", unique_ptr_prefix);
2124    let link_unique_ptr_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", unique_ptr_prefix))
    })format!("{}get", unique_ptr_prefix);
2125    let link_unique_ptr_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", unique_ptr_prefix))
    })format!("{}release", unique_ptr_prefix);
2126    let link_unique_ptr_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", unique_ptr_prefix))
    })format!("{}drop", unique_ptr_prefix);
2127
2128    let name = generics::concise_rust_name(key.inner);
2129    let (impl_generics, inner_with_generics) =
2130        generics::split_for_impl(key, conditional_impl, types);
2131
2132    let cfg = conditional_impl.cfg.into_attr();
2133    let begin_span = conditional_impl
2134        .explicit_impl
2135        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2136    let end_span = conditional_impl
2137        .explicit_impl
2138        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2139    let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
                ::alloc::fmt::format(format_args!("unsafe"))
            }),
    ::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
2140
2141    let can_pass_element_by_value = types.is_maybe_trivial(key.inner);
2142    let by_value_methods = if can_pass_element_by_value {
2143        Some({
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__push_back");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "this");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "CxxVector");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_shr_spanned(&mut _s, _span);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "value");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "ManuallyDrop");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            _s
        });
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_pound_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Bracket,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "link_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_push_back, &mut _s);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fn");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__push_back");
                    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "this");
                            ::quote::__private::push_colon_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "pin");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Pin");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_and_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "CxxVector");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                            ::quote::__private::push_shr_spanned(&mut _s, _span);
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "value");
                            ::quote::__private::push_colon_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__push_back");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "this");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ptr");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "from_mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mem");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ManuallyDrop");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Self");
                            ::quote::__private::push_shr_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "value");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            _s
        });
    ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "__pop_back");
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Parenthesis,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "this");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "CxxVector");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_shr_spanned(&mut _s, _span);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "out");
            ::quote::__private::push_colon_spanned(&mut _s, _span);
            ::quote::__private::push_and_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_comma_spanned(&mut _s, _span);
            _s
        });
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
            ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_pound_spanned(&mut _s, _span);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Bracket,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "link_name");
                            ::quote::__private::push_eq_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&link_pop_back, &mut _s);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fn");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__pop_back");
                    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "this");
                            ::quote::__private::push_colon_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "pin");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Pin");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_and_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "CxxVector");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                            ::quote::__private::push_shr_spanned(&mut _s, _span);
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "out");
                            ::quote::__private::push_colon_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "__pop_back");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "this");
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ptr");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "from_mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mem");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "MaybeUninit");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Self");
                            ::quote::__private::push_shr_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "out");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_comma_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    _s
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
2144            unsafe fn __push_back(
2145                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2146                value: &mut ::cxx::core::mem::ManuallyDrop<Self>,
2147            ) {
2148                unsafe extern "C" {
2149                    #[link_name = #link_push_back]
2150                    fn __push_back #impl_generics(
2151                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#inner_with_generics>>,
2152                        value: *mut ::cxx::core::ffi::c_void,
2153                    );
2154                }
2155                unsafe {
2156                    __push_back(
2157                        this,
2158                        ::cxx::core::ptr::from_mut::<::cxx::core::mem::ManuallyDrop<Self>>(value).cast::<::cxx::core::ffi::c_void>(),
2159                    );
2160                }
2161            }
2162            unsafe fn __pop_back(
2163                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2164                out: &mut ::cxx::core::mem::MaybeUninit<Self>,
2165            ) {
2166                unsafe extern "C" {
2167                    #[link_name = #link_pop_back]
2168                    fn __pop_back #impl_generics(
2169                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#inner_with_generics>>,
2170                        out: *mut ::cxx::core::ffi::c_void,
2171                    );
2172                }
2173                unsafe {
2174                    __pop_back(
2175                        this,
2176                        ::cxx::core::ptr::from_mut::<::cxx::core::mem::MaybeUninit<Self>>(out).cast::<::cxx::core::ffi::c_void>(),
2177                    );
2178                }
2179            }
2180        })
2181    } else {
2182        None
2183    };
2184
2185    let not_move_constructible_err = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0} is not move constructible",
                generics::concise_cxx_name(key.inner, types)))
    })format!(
2186        "{} is not move constructible",
2187        generics::concise_cxx_name(key.inner, types),
2188    );
2189
2190    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::ToTokens::to_tokens(&cfg, &mut _s);
    ::quote::__private::push_pound_spanned(&mut _s, _span);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Bracket,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "automatically_derived");
            _s
        });
    ::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
    ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "vector");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "VectorElement");
    ::quote::__private::push_ident_spanned(&mut _s, _span, "for");
    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
    ::quote::__private::push_group_spanned(&mut _s, _span,
        ::quote::__private::Delimiter::Brace,
        {
            let mut _s = ::quote::__private::TokenStream::new();
            let _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__typename");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "fmt");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Formatter");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_lifetime_spanned(&mut _s, _span,
                        "\'_");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "f");
                    ::quote::__private::push_dot_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "write_str");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::ToTokens::to_tokens(&name, &mut _s);
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__vector_new");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "CxxVector");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_new, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_new");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "CxxVector");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_new");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__vector_size");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "CxxVector");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_size, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_size");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_underscore_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "CxxVector");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "primitive");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "usize");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_size");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__vector_capacity");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "CxxVector");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "primitive");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_capacity, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_capacity");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_underscore_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "CxxVector");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "primitive");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "usize");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__vector_capacity");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__get_unchecked");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "CxxVector");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "pos");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "primitive");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "usize");
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_get_unchecked, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get_unchecked");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "CxxVector");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "pos");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "primitive");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "usize");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "ffi");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "c_void");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__get_unchecked");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "pos");
                                    _s
                                });
                            ::quote::__private::push_dot_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cast");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "Self");
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::TokenStream::new()
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__reserve");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "pin");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Pin");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_and_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "CxxVector");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    ::quote::__private::push_shr_spanned(&mut _s, _span);
                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "new_cap");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "primitive");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "usize");
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_reserve, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__reserve");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "pin");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "Pin");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "CxxVector");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                                    ::quote::__private::push_shr_spanned(&mut _s, _span);
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new_cap");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "primitive");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "usize");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "primitive");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "bool");
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "if");
                    ::quote::__private::push_bang_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__reserve");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span, "v");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "new_cap");
                                    _s
                                });
                            _s
                        });
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "core");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "panic");
                            ::quote::__private::push_bang_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::ToTokens::to_tokens(&not_move_constructible_err,
                                        &mut _s);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            ::quote::ToTokens::to_tokens(&by_value_methods, &mut _s);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__unique_ptr_null");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let _: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::TokenStream::new()
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_unique_ptr_null,
                                        &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "uninit");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_null");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__unique_ptr_raw");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "raw");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "CxxVector");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "Self");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "MaybeUninit");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_unique_ptr_raw, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_raw");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "CxxVector");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "let");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "uninit");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Parenthesis,
                        {
                            let _: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::TokenStream::new()
                        });
                    ::quote::__private::push_semi_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_raw");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    ::quote::__private::push_comma_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__unique_ptr_get");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "CxxVector");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_unique_ptr_get, &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_get");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "const");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "CxxVector");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_get");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "const");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__unique_ptr_release");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
            ::quote::__private::push_star_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
            ::quote::__private::push_colon2_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "CxxVector");
            ::quote::__private::push_lt_spanned(&mut _s, _span);
            ::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
            ::quote::__private::push_gt_spanned(&mut _s, _span);
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_unique_ptr_release,
                                        &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_release");
                            ::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_rarrow_spanned(&mut _s, _span);
                            ::quote::__private::push_star_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "mut");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "cxx");
                            ::quote::__private::push_colon2_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "CxxVector");
                            ::quote::__private::push_lt_spanned(&mut _s, _span);
                            ::quote::ToTokens::to_tokens(&inner_with_generics, &mut _s);
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_release");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            _s
                        });
                    _s
                });
            ::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
            ::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
            ::quote::__private::push_ident_spanned(&mut _s, _span,
                "__unique_ptr_drop");
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Parenthesis,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "repr");
                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mem");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "MaybeUninit");
                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                    ::quote::__private::push_star_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "mut");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "cxx");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "core");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "ffi");
                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "c_void");
                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                    _s
                });
            ::quote::__private::push_group_spanned(&mut _s, _span,
                ::quote::__private::Delimiter::Brace,
                {
                    let mut _s = ::quote::__private::TokenStream::new();
                    let _span: ::quote::__private::Span =
                        ::quote::__private::get_span(_span).__into_span();
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "extern");
                    ::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_pound_spanned(&mut _s, _span);
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Bracket,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "link_name");
                                    ::quote::__private::push_eq_spanned(&mut _s, _span);
                                    ::quote::ToTokens::to_tokens(&link_unique_ptr_drop,
                                        &mut _s);
                                    _s
                                });
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "fn");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "this");
                                    ::quote::__private::push_colon_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mem");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "MaybeUninit");
                                    ::quote::__private::push_lt_spanned(&mut _s, _span);
                                    ::quote::__private::push_star_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "cxx");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "core");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "ffi");
                                    ::quote::__private::push_colon2_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "c_void");
                                    ::quote::__private::push_gt_spanned(&mut _s, _span);
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                        "unsafe");
                    ::quote::__private::push_group_spanned(&mut _s, _span,
                        ::quote::__private::Delimiter::Brace,
                        {
                            let mut _s = ::quote::__private::TokenStream::new();
                            let _span: ::quote::__private::Span =
                                ::quote::__private::get_span(_span).__into_span();
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "__unique_ptr_drop");
                            ::quote::__private::push_group_spanned(&mut _s, _span,
                                ::quote::__private::Delimiter::Parenthesis,
                                {
                                    let mut _s = ::quote::__private::TokenStream::new();
                                    let _span: ::quote::__private::Span =
                                        ::quote::__private::get_span(_span).__into_span();
                                    ::quote::__private::push_and_spanned(&mut _s, _span);
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "raw");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "mut");
                                    ::quote::__private::push_ident_spanned(&mut _s, _span,
                                        "repr");
                                    _s
                                });
                            ::quote::__private::push_semi_spanned(&mut _s, _span);
                            _s
                        });
                    _s
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
2191        #cfg
2192        #[automatically_derived]
2193        #unsafe_token impl #impl_generics ::cxx::vector::VectorElement for #inner_with_generics {
2194            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2195                f.write_str(#name)
2196            }
2197            fn __vector_new() -> *mut ::cxx::CxxVector<Self> {
2198                unsafe extern "C" {
2199                    #[link_name = #link_new]
2200                    fn __vector_new #impl_generics() -> *mut ::cxx::CxxVector<#inner_with_generics>;
2201                }
2202                unsafe { __vector_new() }
2203            }
2204            fn __vector_size(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2205                unsafe extern "C" {
2206                    #[link_name = #link_size]
2207                    fn __vector_size #impl_generics(_: &::cxx::CxxVector<#inner_with_generics>) -> ::cxx::core::primitive::usize;
2208                }
2209                unsafe { __vector_size(v) }
2210            }
2211            fn __vector_capacity(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2212                unsafe extern "C" {
2213                    #[link_name = #link_capacity]
2214                    fn __vector_capacity #impl_generics(_: &::cxx::CxxVector<#inner_with_generics>) -> ::cxx::core::primitive::usize;
2215                }
2216                unsafe { __vector_capacity(v) }
2217            }
2218            unsafe fn __get_unchecked(v: *mut ::cxx::CxxVector<Self>, pos: ::cxx::core::primitive::usize) -> *mut Self {
2219                unsafe extern "C" {
2220                    #[link_name = #link_get_unchecked]
2221                    fn __get_unchecked #impl_generics(
2222                        v: *mut ::cxx::CxxVector<#inner_with_generics>,
2223                        pos: ::cxx::core::primitive::usize,
2224                    ) -> *mut ::cxx::core::ffi::c_void;
2225                }
2226                unsafe { __get_unchecked(v, pos).cast::<Self>() }
2227            }
2228            unsafe fn __reserve(v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>, new_cap: ::cxx::core::primitive::usize) {
2229                unsafe extern "C" {
2230                    #[link_name = #link_reserve]
2231                    fn __reserve #impl_generics(
2232                        v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#inner_with_generics>>,
2233                        new_cap: ::cxx::core::primitive::usize,
2234                    ) -> ::cxx::core::primitive::bool;
2235                }
2236                if !unsafe { __reserve(v, new_cap) } {
2237                    ::cxx::core::panic!(#not_move_constructible_err);
2238                }
2239            }
2240            #by_value_methods
2241            fn __unique_ptr_null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2242                unsafe extern "C" {
2243                    #[link_name = #link_unique_ptr_null]
2244                    fn __unique_ptr_null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2245                }
2246                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2247                unsafe {
2248                    __unique_ptr_null(&raw mut repr);
2249                }
2250                repr
2251            }
2252            unsafe fn __unique_ptr_raw(raw: *mut ::cxx::CxxVector<Self>) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2253                unsafe extern "C" {
2254                    #[link_name = #link_unique_ptr_raw]
2255                    fn __unique_ptr_raw #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::CxxVector<#inner_with_generics>);
2256                }
2257                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2258                unsafe {
2259                    __unique_ptr_raw(&raw mut repr, raw);
2260                }
2261                repr
2262            }
2263            unsafe fn __unique_ptr_get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<Self> {
2264                unsafe extern "C" {
2265                    #[link_name = #link_unique_ptr_get]
2266                    fn __unique_ptr_get #impl_generics(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<#inner_with_generics>;
2267                }
2268                unsafe { __unique_ptr_get(&raw const repr) }
2269            }
2270            unsafe fn __unique_ptr_release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<Self> {
2271                unsafe extern "C" {
2272                    #[link_name = #link_unique_ptr_release]
2273                    fn __unique_ptr_release #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<#inner_with_generics>;
2274                }
2275                unsafe { __unique_ptr_release(&raw mut repr) }
2276            }
2277            unsafe fn __unique_ptr_drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
2278                unsafe extern "C" {
2279                    #[link_name = #link_unique_ptr_drop]
2280                    fn __unique_ptr_drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2281                }
2282                unsafe {
2283                    __unique_ptr_drop(&raw mut repr);
2284                }
2285            }
2286        }
2287    }
2288}
2289
2290fn expand_return_type(ret: &Option<Type>) -> TokenStream {
2291    match ret {
2292        Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(-> #ret),
2293        None => TokenStream::new(),
2294    }
2295}
2296
2297fn indirect_return(sig: &Signature, types: &Types, lang: Lang) -> bool {
2298    sig.ret.as_ref().is_some_and(|ret| {
2299        sig.throws
2300            || types.needs_indirect_abi(ret)
2301            || match lang {
2302                Lang::Cxx | Lang::CxxUnwind => types.contains_elided_lifetime(ret),
2303                Lang::Rust => false,
2304            }
2305    })
2306}
2307
2308fn expand_extern_type(ty: &Type, types: &Types, proper: bool) -> TokenStream {
2309    match ty {
2310        Type::Ident(ident) if ident.rust == RustString => {
2311            let span = ident.rust.span();
2312            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    _s
}quote_spanned!(span=> ::cxx::private::RustString)
2313        }
2314        Type::RustBox(ty) | Type::UniquePtr(ty) => {
2315            let span = ty.name.span();
2316            if proper && types.is_considered_improper_ctype(&ty.inner) {
2317                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "core");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
    _s
}quote_spanned!(span=> *mut ::cxx::core::ffi::c_void)
2318            } else {
2319                let inner = expand_extern_type(&ty.inner, types, proper);
2320                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    _s
}quote_spanned!(span=> *mut #inner)
2321            }
2322        }
2323        Type::RustVec(ty) => {
2324            // Replace Vec<Foo> with ::cxx::private::RustVec<Foo>. Both have the
2325            // same layout but only the latter has a predictable ABI. Note that
2326            // the overall size and alignment are independent of the element
2327            // type, but the field order inside of Vec may not be.
2328            let span = ty.name.span();
2329            let langle = ty.langle;
2330            let elem = &ty.inner;
2331            let rangle = ty.rangle;
2332            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::ToTokens::to_tokens(&langle, &mut _s);
    ::quote::ToTokens::to_tokens(&elem, &mut _s);
    ::quote::ToTokens::to_tokens(&rangle, &mut _s);
    _s
}quote_spanned!(span=> ::cxx::private::RustVec #langle #elem #rangle)
2333        }
2334        Type::Ref(ty) => {
2335            let ampersand = ty.ampersand;
2336            let lifetime = &ty.lifetime;
2337            let mutability = ty.mutability;
2338            match &ty.inner {
2339                Type::Ident(ident) if ident.rust == RustString => {
2340                    let span = ident.rust.span();
2341                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetime, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
    _s
}quote_spanned!(span=> #ampersand #lifetime #mutability ::cxx::private::RustString)
2342                }
2343                Type::RustVec(ty) => {
2344                    let span = ty.name.span();
2345                    let langle = ty.langle;
2346                    let inner = &ty.inner;
2347                    let rangle = ty.rangle;
2348                    {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::ToTokens::to_tokens(&ampersand, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetime, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
    ::quote::ToTokens::to_tokens(&langle, &mut _s);
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::ToTokens::to_tokens(&rangle, &mut _s);
    _s
}quote_spanned!(span=> #ampersand #lifetime #mutability ::cxx::private::RustVec #langle #inner #rangle)
2349                }
2350                inner if proper && types.is_considered_improper_ctype(inner) => {
2351                    let star = ::syn::token::StarToken![*](ampersand.span);
2352                    match ty.mutable {
2353                        false => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&star, &mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    _s
}quote!(#star const ::cxx::core::ffi::c_void),
2354                        true => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&star, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    _s
}quote!(#star #mutability ::cxx::core::ffi::c_void),
2355                    }
2356                }
2357                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2358            }
2359        }
2360        Type::Ptr(ty) => {
2361            if proper && types.is_considered_improper_ctype(&ty.inner) {
2362                let star = ty.star;
2363                let mutability = ty.mutability;
2364                let constness = ty.constness;
2365                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&star, &mut _s);
    ::quote::ToTokens::to_tokens(&mutability, &mut _s);
    ::quote::ToTokens::to_tokens(&constness, &mut _s);
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "cxx");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "core");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "ffi");
    ::quote::__private::push_colon2(&mut _s);
    ::quote::__private::push_ident(&mut _s, "c_void");
    _s
}quote!(#star #mutability #constness ::cxx::core::ffi::c_void)
2366            } else {
2367                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty)
2368            }
2369        }
2370        Type::Str(ty) => {
2371            let span = ty.ampersand.span;
2372            let rust_str = Ident::new("RustStr", syn::spanned::Spanned::span(&ty.inner));
2373            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&rust_str, &mut _s);
    _s
}quote_spanned!(span=> ::cxx::private::#rust_str)
2374        }
2375        Type::SliceRef(ty) => {
2376            let span = ty.ampersand.span;
2377            let rust_slice = Ident::new("RustSlice", ty.bracket.span.join());
2378            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "private");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::ToTokens::to_tokens(&rust_slice, &mut _s);
    _s
}quote_spanned!(span=> ::cxx::private::#rust_slice)
2379        }
2380        _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2381    }
2382}
2383
2384fn expand_extern_return_type(
2385    sig: &Signature,
2386    types: &Types,
2387    proper: bool,
2388    lang: Lang,
2389) -> TokenStream {
2390    let ret = match &sig.ret {
2391        Some(ret) if !indirect_return(sig, types, lang) => ret,
2392        _ => return TokenStream::new(),
2393    };
2394    let ty = expand_extern_type(ret, types, proper);
2395    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(-> #ty)
2396}
2397
2398pub(crate) fn display_namespaced(name: &Pair) -> impl Display + '_ {
2399    struct Namespaced<'a>(&'a Pair);
2400
2401    impl<'a> Display for Namespaced<'a> {
2402        fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2403            for segment in &self.0.namespace {
2404                formatter.write_fmt(format_args!("{0}::", segment))write!(formatter, "{segment}::")?;
2405            }
2406            formatter.write_fmt(format_args!("{0}", self.0.cxx))write!(formatter, "{}", self.0.cxx)
2407        }
2408    }
2409
2410    Namespaced(name)
2411}