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, "ptr_as_ptr");
                    ::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, "ref_as_ptr");
                    ::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::ptr_as_ptr,
165            clippy::ref_as_ptr,
166            clippy::unsafe_derive_deserialize,
167            clippy::upper_case_acronyms,
168            clippy::use_self,
169        )]
170        #vis #mod_token #ident #expanded
171    }
172}
173
174fn expand_struct(strct: &Struct) -> TokenStream {
175    let ident = &strct.name.rust;
176    let doc = &strct.doc;
177    let all_attrs = strct.attrs.all();
178    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
179    let generics = &strct.generics;
180    let type_id = type_id(&strct.name);
181    let fields = strct.fields.iter().map(|field| {
182        let doc = &field.doc;
183        let all_attrs = field.attrs.all();
184        // This span on the pub makes "private type in public interface" errors
185        // appear in the right place.
186        let vis = field.visibility;
187        {
    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)
188    });
189    let mut derives = None;
190    let derived_traits = derive::expand_struct(strct, &mut derives);
191
192    let span = ident.span();
193    let visibility = strct.visibility;
194    let struct_token = strct.struct_token;
195    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=>
196        #visibility #struct_token #ident #generics {
197            #(#fields,)*
198        }
199    };
200
201    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)));
202
203    {
    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! {
204        #doc
205        #derives
206        #all_attrs
207        #[repr(C #align)]
208        #struct_def
209
210        #cfg_and_lint_attrs
211        #[automatically_derived]
212        unsafe impl #generics ::cxx::ExternType for #ident #generics {
213            #[allow(unused_attributes)] // incorrect lint
214            #[doc(hidden)]
215            type Id = #type_id;
216            type Kind = ::cxx::kind::Trivial;
217        }
218
219        #derived_traits
220    }
221}
222
223fn expand_struct_nonempty(strct: &Struct) -> TokenStream {
224    let has_unconditional_field = strct
225        .fields
226        .iter()
227        .any(|field| #[allow(non_exhaustive_omitted_patterns)] match field.cfg {
    CfgExpr::Unconditional => true,
    _ => false,
}matches!(field.cfg, CfgExpr::Unconditional));
228    if has_unconditional_field {
229        return TokenStream::new();
230    }
231
232    let mut fields = strct.fields.iter();
233    let mut cfg = ComputedCfg::from(&fields.next().unwrap().cfg);
234    fields.for_each(|field| cfg.merge_or(&field.cfg));
235
236    if let ComputedCfg::Leaf(CfgExpr::Unconditional) = cfg {
237        // At least one field is unconditional, nothing to check.
238        TokenStream::new()
239    } else {
240        let meta = cfg.as_meta();
241        let msg = "structs without any fields are not supported";
242        let error = syn::Error::new_spanned(strct, msg).into_compile_error();
243        {
    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! {
244            #[cfg(not(#meta))]
245            #error
246        }
247    }
248}
249
250fn expand_struct_operators(strct: &Struct) -> TokenStream {
251    let ident = &strct.name.rust;
252    let generics = &strct.generics;
253    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
254    let mut operators = TokenStream::new();
255
256    for derive in &strct.derives {
257        let span = derive.span;
258        match derive.what {
259            Trait::PartialEq => {
260                let link_name = mangle::operator(&strct.name, "eq");
261                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);
262                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);
263                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=>
264                    #cfg_and_lint_attrs
265                    #[doc(hidden)]
266                    #[unsafe(export_name = #link_name)]
267                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
268                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
269                        ::cxx::private::prevent_unwind(__fn, || *lhs == *rhs)
270                    }
271                });
272
273                if !derive::contains(&strct.derives, Trait::Eq) {
274                    let link_name = mangle::operator(&strct.name, "ne");
275                    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);
276                    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);
277                    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=>
278                        #cfg_and_lint_attrs
279                        #[doc(hidden)]
280                        #[unsafe(export_name = #link_name)]
281                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
282                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
283                            ::cxx::private::prevent_unwind(__fn, || *lhs != *rhs)
284                        }
285                    });
286                }
287            }
288            Trait::PartialOrd => {
289                let link_name = mangle::operator(&strct.name, "lt");
290                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);
291                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);
292                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=>
293                    #cfg_and_lint_attrs
294                    #[doc(hidden)]
295                    #[unsafe(export_name = #link_name)]
296                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
297                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
298                        ::cxx::private::prevent_unwind(__fn, || *lhs < *rhs)
299                    }
300                });
301
302                let link_name = mangle::operator(&strct.name, "le");
303                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);
304                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);
305                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=>
306                    #cfg_and_lint_attrs
307                    #[doc(hidden)]
308                    #[unsafe(export_name = #link_name)]
309                    extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
310                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
311                        ::cxx::private::prevent_unwind(__fn, || *lhs <= *rhs)
312                    }
313                });
314
315                if !derive::contains(&strct.derives, Trait::Ord) {
316                    let link_name = mangle::operator(&strct.name, "gt");
317                    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);
318                    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);
319                    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=>
320                        #cfg_and_lint_attrs
321                        #[doc(hidden)]
322                        #[unsafe(export_name = #link_name)]
323                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
324                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
325                            ::cxx::private::prevent_unwind(__fn, || *lhs > *rhs)
326                        }
327                    });
328
329                    let link_name = mangle::operator(&strct.name, "ge");
330                    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);
331                    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);
332                    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=>
333                        #cfg_and_lint_attrs
334                        #[doc(hidden)]
335                        #[unsafe(export_name = #link_name)]
336                        extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
337                            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
338                            ::cxx::private::prevent_unwind(__fn, || *lhs >= *rhs)
339                        }
340                    });
341                }
342            }
343            Trait::Hash => {
344                let link_name = mangle::operator(&strct.name, "hash");
345                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);
346                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);
347                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=>
348                    #cfg_and_lint_attrs
349                    #[doc(hidden)]
350                    #[unsafe(export_name = #link_name)]
351                    #[allow(clippy::cast_possible_truncation)]
352                    extern "C" fn #local_name #generics(this: &#ident #generics) -> ::cxx::core::primitive::usize {
353                        let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
354                        ::cxx::private::prevent_unwind(__fn, || ::cxx::private::hash(this))
355                    }
356                });
357            }
358            _ => {}
359        }
360    }
361
362    operators
363}
364
365fn expand_struct_forbid_drop(strct: &Struct) -> TokenStream {
366    let ident = &strct.name.rust;
367    let generics = &strct.generics;
368    let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
369    let span = ident.span();
370    let impl_token = ::syn::token::ImplToken![impl](strct.visibility.span);
371
372    {
    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=>
373        #cfg_and_lint_attrs
374        #[automatically_derived]
375        #impl_token #generics self::Drop for super::#ident #generics {}
376    }
377}
378
379fn expand_enum(enm: &Enum) -> TokenStream {
380    let ident = &enm.name.rust;
381    let doc = &enm.doc;
382    let all_attrs = enm.attrs.all();
383    let cfg_and_lint_attrs = enm.attrs.cfg_and_lint();
384    let repr = &enm.repr;
385    let type_id = type_id(&enm.name);
386    let variants = enm.variants.iter().map(|variant| {
387        let doc = &variant.doc;
388        let all_attrs = variant.attrs.all();
389        let variant_ident = &variant.name.rust;
390        let discriminant = &variant.discriminant;
391        let span = variant_ident.span();
392        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=>
393            #doc
394            #all_attrs
395            #[allow(dead_code)]
396            pub const #variant_ident: Self = #ident { repr: #discriminant };
397        })
398    });
399    let mut derives = None;
400    let derived_traits = derive::expand_enum(enm, &mut derives);
401
402    let span = ident.span();
403    let visibility = enm.visibility;
404    let struct_token = ::syn::token::StructToken![struct](enm.enum_token.span);
405    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! {
406        #[allow(missing_docs)]
407        pub repr: #repr,
408    };
409    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=>
410        #visibility #struct_token #ident {
411            #enum_repr
412        }
413    };
414
415    {
    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! {
416        #doc
417        #derives
418        #all_attrs
419        #[repr(transparent)]
420        #enum_def
421
422        #cfg_and_lint_attrs
423        #[allow(non_upper_case_globals)]
424        impl #ident {
425            #(#variants)*
426        }
427
428        #cfg_and_lint_attrs
429        #[automatically_derived]
430        unsafe impl ::cxx::ExternType for #ident {
431            #[allow(unused_attributes)] // incorrect lint
432            #[doc(hidden)]
433            type Id = #type_id;
434            type Kind = ::cxx::kind::Trivial;
435        }
436
437        #derived_traits
438    }
439}
440
441fn expand_cxx_type(ety: &ExternType) -> TokenStream {
442    let ident = &ety.name.rust;
443    let doc = &ety.doc;
444    let all_attrs = ety.attrs.all();
445    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
446    let generics = &ety.generics;
447    let type_id = type_id(&ety.name);
448
449    let lifetime_fields = ety.generics.lifetimes.iter().map(|lifetime| {
450        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);
451        {
    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 ()>)
452    });
453    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! {
454        _private: ::cxx::private::Opaque,
455        #(#lifetime_fields,)*
456    };
457
458    let span = ident.span();
459    let visibility = &ety.visibility;
460    let struct_token = ::syn::token::StructToken![struct](ety.type_token.span);
461    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=>
462        #visibility #struct_token #ident #generics {
463            #repr_fields
464        }
465    };
466
467    {
    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! {
468        #doc
469        #all_attrs
470        #[repr(C)]
471        #extern_type_def
472
473        #cfg_and_lint_attrs
474        #[automatically_derived]
475        unsafe impl #generics ::cxx::ExternType for #ident #generics {
476            #[allow(unused_attributes)] // incorrect lint
477            #[doc(hidden)]
478            type Id = #type_id;
479            type Kind = ::cxx::kind::Opaque;
480        }
481    }
482}
483
484fn expand_cxx_type_assert_pinned(ety: &ExternType, types: &Types) -> TokenStream {
485    let ident = &ety.name.rust;
486    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
487    let infer = ::syn::token::UnderscoreToken![_](ident.span());
488
489    let resolve = types.resolve(ident);
490    let lifetimes = resolve.generics.to_underscore_lifetimes();
491
492    {
    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! {
493        #cfg_and_lint_attrs
494        let _: fn() = {
495            // Derived from https://github.com/nvzqz/static-assertions-rs.
496            trait __AmbiguousIfImpl<A> {
497                fn infer() {}
498            }
499
500            #[automatically_derived]
501            impl<T> __AmbiguousIfImpl<()> for T
502            where
503                T: ?::cxx::core::marker::Sized
504            {}
505
506            #[allow(dead_code)]
507            struct __Invalid;
508
509            #[automatically_derived]
510            impl<T> __AmbiguousIfImpl<__Invalid> for T
511            where
512                T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin,
513            {}
514
515            // If there is only one specialized trait impl, type inference with
516            // `_` can be resolved and this can compile. Fails to compile if
517            // user has added a manual Unpin impl for their opaque C++ type as
518            // then `__AmbiguousIfImpl<__Invalid>` also exists.
519            <#ident #lifetimes as __AmbiguousIfImpl<#infer>>::infer
520        };
521    }
522}
523
524fn expand_extern_shared_struct(ety: &ExternType, ffi: &Module) -> TokenStream {
525    let module = &ffi.ident;
526    let name = &ety.name.rust;
527    let namespaced_name = display_namespaced(&ety.name);
528    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
529
530    let visibility = match &ffi.vis {
531        Visibility::Public(_) => "pub ".to_owned(),
532        Visibility::Restricted(vis) => {
533            ::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!(
534                "pub(in {}) ",
535                vis.path
536                    .segments
537                    .iter()
538                    .map(|segment| segment.ident.to_string())
539                    .collect::<Vec<_>>()
540                    .join("::"),
541            )
542        }
543        Visibility::Inherited => String::new(),
544    };
545
546    let namespace_attr = if ety.name.namespace == Namespace::ROOT {
547        String::new()
548    } else {
549        ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("#[namespace = \"{0}\"]\n        ",
                ety.name.namespace.iter().map(Ident::to_string).collect::<Vec<_>>().join("::")))
    })format!(
550            "#[namespace = \"{}\"]\n        ",
551            ety.name
552                .namespace
553                .iter()
554                .map(Ident::to_string)
555                .collect::<Vec<_>>()
556                .join("::"),
557        )
558    };
559
560    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!(
561        "\
562        \nShared struct redeclared as an unsafe extern C++ type is deprecated.\
563        \nIf this is intended to be a shared struct, remove this `type {name}`.\
564        \nIf this is intended to be an extern type, change it to:\
565        \n\
566        \n    use cxx::ExternType;\
567        \n    \
568        \n    #[repr(C)]\
569        \n    {visibility}struct {name} {{\
570        \n        ...\
571        \n    }}\
572        \n    \
573        \n    unsafe impl ExternType for {name} {{\
574        \n        type Id = cxx::type_id!(\"{namespaced_name}\");\
575        \n        type Kind = cxx::kind::Trivial;\
576        \n    }}\
577        \n    \
578        \n    {visibility}mod {module} {{\
579        \n        {namespace_attr}extern \"C++\" {{\
580        \n            type {name} = crate::{name};\
581        \n        }}\
582        \n        ...\
583        \n    }}",
584    );
585
586    {
    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! {
587        #cfg_and_lint_attrs
588        #[deprecated = #message]
589        struct #name {}
590
591        #cfg_and_lint_attrs
592        let _ = #name {};
593    }
594}
595
596fn expand_associated_functions(self_type: &Ident, types: &Types) -> TokenStream {
597    let Some(functions) = types.associated_fn.get(self_type) else {
598        return TokenStream::new();
599    };
600
601    let resolve = types.resolve(self_type);
602    let self_type_cfg_attrs = resolve.attrs.cfg();
603    let elided_lifetime = Lifetime::new("'_", Span::call_site());
604    let mut group_by_lifetimes = OrderedMap::new();
605    let mut tokens = TokenStream::new();
606
607    for efn in functions {
608        match efn.lang {
609            Lang::Cxx | Lang::CxxUnwind => {}
610            Lang::Rust => continue,
611        }
612        let mut impl_lifetimes = Vec::new();
613        let mut self_type_lifetimes = Vec::new();
614        let self_lt_token;
615        let self_gt_token;
616        match &efn.kind {
617            FnKind::Method(receiver) if receiver.ty.generics.lt_token.is_some() => {
618                for lifetime in &receiver.ty.generics.lifetimes {
619                    if lifetime.ident != "_"
620                        && efn
621                            .generics
622                            .lifetimes()
623                            .any(|param| param.lifetime == *lifetime)
624                    {
625                        impl_lifetimes.push(lifetime);
626                    }
627                    self_type_lifetimes.push(lifetime);
628                }
629                self_lt_token = receiver.ty.generics.lt_token;
630                self_gt_token = receiver.ty.generics.gt_token;
631            }
632            _ => {
633                self_type_lifetimes.resize(resolve.generics.lifetimes.len(), &elided_lifetime);
634                self_lt_token = resolve.generics.lt_token;
635                self_gt_token = resolve.generics.gt_token;
636            }
637        }
638        if efn.undeclared_lifetimes().is_empty()
639            && self_type_lifetimes.len() == resolve.generics.lifetimes.len()
640        {
641            group_by_lifetimes
642                .entry((impl_lifetimes, self_type_lifetimes))
643                .or_insert_with(Vec::new)
644                .push(efn);
645        } else {
646            let impl_token = ::syn::token::ImplToken![impl](efn.name.rust.span());
647            let impl_lt_token = efn.generics.lt_token;
648            let impl_gt_token = efn.generics.gt_token;
649            let self_type = efn.self_type().unwrap();
650            let function = expand_cxx_function_shim(efn, types);
651            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! {
652                #self_type_cfg_attrs
653                #impl_token #impl_lt_token #(#impl_lifetimes),* #impl_gt_token #self_type #self_lt_token #(#self_type_lifetimes),* #self_gt_token {
654                    #function
655                }
656            });
657        }
658    }
659
660    for ((impl_lifetimes, self_type_lifetimes), functions) in &group_by_lifetimes {
661        let functions = functions
662            .iter()
663            .map(|efn| expand_cxx_function_shim(efn, types));
664        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! {
665            #self_type_cfg_attrs
666            impl <#(#impl_lifetimes),*> #self_type <#(#self_type_lifetimes),*> {
667                #(#functions)*
668            }
669        });
670    }
671
672    tokens
673}
674
675fn expand_cxx_function_decl(efn: &ExternFn, types: &Types) -> TokenStream {
676    let receiver = efn.receiver().into_iter().map(|receiver| {
677        if types.is_considered_improper_ctype(&receiver.ty) {
678            if receiver.mutable {
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, "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)
680            } else {
681                {
    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)
682            }
683        } else {
684            let receiver_type = receiver.ty();
685            {
    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)
686        }
687    });
688    let args = efn.args.iter().map(|arg| {
689        let var = &arg.name.rust;
690        let colon = arg.colon_token;
691        let ty = expand_extern_type(&arg.ty, types, true);
692        if arg.ty == RustString {
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::RustVec(_) = 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_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#var #colon *const #ty)
696        } else if let Type::Fn(_) = 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_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)
698        } else if types.needs_indirect_abi(&arg.ty) {
699            {
    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)
700        } else {
701            {
    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)
702        }
703    });
704    let all_args = receiver.chain(args);
705    let ret = if efn.throws {
706        {
    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)
707    } else {
708        expand_extern_return_type(efn, types, true, efn.lang)
709    };
710    let mut outparam = None;
711    if indirect_return(efn, types, efn.lang) {
712        let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
713        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));
714    }
715    let link_name = mangle::extern_fn(efn, types);
716    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);
717    let lt_token = efn.generics.lt_token.unwrap_or_default();
718    let undeclared_lifetimes = efn.undeclared_lifetimes().into_iter();
719    let declared_lifetimes = &efn.generics.params;
720    let gt_token = efn.generics.gt_token.unwrap_or_default();
721    {
    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! {
722        #[link_name = #link_name]
723        fn #local_name #lt_token #(#undeclared_lifetimes,)* #declared_lifetimes #gt_token(#(#all_args,)* #outparam) #ret;
724    }
725}
726
727fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
728    let doc = &efn.doc;
729    let all_attrs = efn.attrs.all();
730    let decl = expand_cxx_function_decl(efn, types);
731    let receiver = efn.receiver().into_iter().map(|receiver| {
732        let var = receiver.var;
733        if receiver.pinned {
734            let colon = receiver.colon_token;
735            let ty = receiver.ty_self();
736            {
    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)
737        } else {
738            let ampersand = receiver.ampersand;
739            let lifetime = &receiver.lifetime;
740            let mutability = receiver.mutability;
741            {
    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)
742        }
743    });
744    let args = efn.args.iter().map(|arg| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&arg, &mut _s);
    _s
}quote!(#arg));
745    let all_args = receiver.chain(args);
746    let ret = if efn.throws {
747        let ok = match &efn.ret {
748            Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(#ret),
749            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(()),
750        };
751        {
    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>)
752    } else {
753        expand_return_type(&efn.ret)
754    };
755    let indirect_return = indirect_return(efn, types, efn.lang);
756    let receiver_var = efn.receiver().into_iter().map(|receiver| {
757        if types.is_considered_improper_ctype(&receiver.ty) {
758            let var = receiver.var;
759            let ty = &receiver.ty.rust;
760            let resolve = types.resolve(ty);
761            let lifetimes = resolve.generics.to_underscore_lifetimes();
762            if receiver.pinned {
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, "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
        });
    ::quote::__private::push_ident(&mut _s, "as");
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_ident(&mut _s, "as");
    ::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!(::cxx::core::pin::Pin::into_inner_unchecked(#var) as *mut #ty #lifetimes as *mut ::cxx::core::ffi::c_void)
764            } else if receiver.mutable {
765                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_ident(&mut _s, "as");
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::quote::__private::push_ident(&mut _s, "as");
    ::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!(#var as *mut #ty #lifetimes as *mut ::cxx::core::ffi::c_void)
766            } else {
767                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    ::quote::__private::push_ident(&mut _s, "as");
    ::quote::__private::push_star(&mut _s);
    ::quote::__private::push_ident(&mut _s, "const");
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    ::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
    ::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!(#var as *const #ty #lifetimes as *const ::cxx::core::ffi::c_void)
768            }
769        } else {
770            receiver.var.to_token_stream()
771        }
772    });
773    let arg_vars = efn.args.iter().map(|arg| {
774        let var = &arg.name.rust;
775        let span = var.span();
776        match &arg.ty {
777            Type::Ident(ident) if ident.rust == RustString => {
778                {
    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_ident_spanned(&mut _s, _span, "as");
    ::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, "RustString");
    _s
}quote_spanned!(span=> #var.as_mut_ptr() as *const ::cxx::private::RustString)
779            }
780            Type::RustBox(ty) => {
781                if types.is_considered_improper_ctype(&ty.inner) {
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
        });
    ::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())
783                } else {
784                    {
    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))
785                }
786            }
787            Type::UniquePtr(ty) => {
788                if types.is_considered_improper_ctype(&ty.inner) {
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
        });
    ::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())
790                } else {
791                    {
    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))
792                }
793            }
794            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_ident_spanned(&mut _s, _span, "as");
    ::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::__private::push_underscore_spanned(&mut _s, _span);
    ::quote::__private::push_gt_spanned(&mut _s, _span);
    _s
}quote_spanned!(span=> #var.as_mut_ptr() as *const ::cxx::private::RustVec<_>),
795            Type::Ref(ty) => match &ty.inner {
796                Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
797                    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)),
798                    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)),
799                },
800                Type::RustVec(_) => match ty.mutable {
801                    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)),
802                    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)),
803                },
804                inner if types.is_considered_improper_ctype(inner) => {
805                    let var = match ty.pinned {
806                        false => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
807                        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)),
808                    };
809                    match ty.mutable {
810                        false => {
811                            {
    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_ident_spanned(&mut _s, _span, "as");
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "const");
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as");
    ::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_spanned!(span=> #var as *const #inner as *const ::cxx::core::ffi::c_void)
812                        }
813                        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_ident_spanned(&mut _s, _span, "as");
    ::quote::__private::push_star_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    ::quote::ToTokens::to_tokens(&inner, &mut _s);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "as");
    ::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=> #var as *mut #inner as *mut ::cxx::core::ffi::c_void),
814                    }
815                }
816                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
817            },
818            Type::Ptr(ty) => {
819                if types.is_considered_improper_ctype(&ty.inner) {
820                    {
    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())
821                } else {
822                    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var)
823                }
824            }
825            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)),
826            Type::SliceRef(ty) => match ty.mutable {
827                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)),
828                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)),
829            },
830            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()),
831            _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
832        }
833    });
834    let vars = receiver_var.chain(arg_vars);
835    let trampolines = efn
836        .args
837        .iter()
838        .filter_map(|arg| {
839            if let Type::Fn(f) = &arg.ty {
840                let var = &arg.name;
841                Some(expand_function_pointer_trampoline(efn, var, f, types))
842            } else {
843                None
844            }
845        })
846        .collect::<TokenStream>();
847    let mut setup = efn
848        .args
849        .iter()
850        .filter(|arg| types.needs_indirect_abi(&arg.ty))
851        .map(|arg| {
852            let var = &arg.name.rust;
853            let span = var.span();
854            // These are arguments for which C++ has taken ownership of the data
855            // behind the mut reference it received.
856            {
    let mut _s = ::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=>
857                let mut #var = ::cxx::core::mem::MaybeUninit::new(#var);
858            }
859        })
860        .collect::<TokenStream>();
861    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);
862    let span = efn.semi_token.span;
863    let call = if indirect_return {
864        let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
865        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=>
866            let mut __return = ::cxx::core::mem::MaybeUninit::<#ret>::uninit();
867        });
868        setup.extend(if efn.throws {
869            {
    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=>
870                #local_name(#(#vars,)* __return.as_mut_ptr()).exception()?;
871            }
872        } else {
873            {
    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=>
874                #local_name(#(#vars,)* __return.as_mut_ptr());
875            }
876        });
877        {
    let mut _s = ::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())
878    } else if efn.throws {
879        {
    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=>
880            #local_name(#(#vars),*).exception()
881        }
882    } else {
883        {
    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=>
884            #local_name(#(#vars),*)
885        }
886    };
887    let mut expr;
888    if let Some(ret) = &efn.ret {
889        expr = match ret {
890            Type::Ident(ident) if ident.rust == RustString => {
891                {
    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())
892            }
893            Type::RustBox(ty) => {
894                if types.is_considered_improper_ctype(&ty.inner) {
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 _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()))
896                } else {
897                    {
    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))
898                }
899            }
900            Type::RustVec(_) => {
901                {
    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())
902            }
903            Type::UniquePtr(ty) => {
904                if types.is_considered_improper_ctype(&ty.inner) {
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 _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()))
906                } else {
907                    {
    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))
908                }
909            }
910            Type::Ref(ty) => match &ty.inner {
911                Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
912                    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()),
913                    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()),
914                },
915                Type::RustVec(_) => match ty.mutable {
916                    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()),
917                    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()),
918                },
919                inner if types.is_considered_improper_ctype(inner) => {
920                    let mutability = ty.mutability;
921                    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());
922                    match ty.pinned {
923                        false => deref_mut,
924                        true => {
925                            {
    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))
926                        }
927                    }
928                }
929                _ => call,
930            },
931            Type::Ptr(ty) => {
932                if types.is_considered_improper_ctype(&ty.inner) {
933                    {
    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())
934                } else {
935                    call
936                }
937            }
938            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()),
939            Type::SliceRef(slice) => {
940                let inner = &slice.inner;
941                match slice.mutable {
942                    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>()),
943                    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>()),
944                }
945            }
946            _ => call,
947        };
948        if efn.throws {
949            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));
950        }
951    } else if efn.throws {
952        expr = call;
953    } else {
954        expr = {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&call, &mut _s);
    ::quote::__private::push_semi(&mut _s);
    _s
}quote! { #call; };
955    }
956    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 });
957    let visibility = efn.visibility;
958    let unsafety = &efn.unsafety;
959    let fn_token = efn.fn_token;
960    let ident = &efn.name.rust;
961    let lt_token = efn.generics.lt_token;
962    let lifetimes = {
963        let mut self_type_lifetimes = UnorderedSet::new();
964        if let FnKind::Method(receiver) = &efn.kind {
965            self_type_lifetimes.extend(&receiver.ty.generics.lifetimes);
966        }
967        efn.generics
968            .params
969            .pairs()
970            .filter(move |param| match param.value() {
971                GenericParam::Lifetime(param) => !self_type_lifetimes.contains(&param.lifetime),
972                GenericParam::Type(_) | GenericParam::Const(_) => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
973            })
974    };
975    let gt_token = efn.generics.gt_token;
976    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,)*));
977    let calling_conv = match efn.lang {
978        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"),
979        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"),
980        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
981    };
982    {
    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=>
983        #doc
984        #all_attrs
985        #visibility #unsafety #fn_token #ident #lt_token #(#lifetimes)* #gt_token #arg_list #ret {
986            unsafe extern #calling_conv {
987                #decl
988            }
989            #trampolines
990            #dispatch
991        }
992    }
993}
994
995fn expand_function_pointer_trampoline(
996    efn: &ExternFn,
997    var: &Pair,
998    sig: &Signature,
999    types: &Types,
1000) -> TokenStream {
1001    let c_trampoline = mangle::c_trampoline(efn, var, types);
1002    let r_trampoline = mangle::r_trampoline(efn, var, types);
1003    let local_name = ::syn::__private::parse_quote({
        let mut _s = ::quote::__private::TokenStream::new();
        ::quote::__private::push_ident(&mut _s, "__");
        _s
    })parse_quote!(__);
1004    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);
1005    let body_span = efn.semi_token.span;
1006    let shim = expand_rust_function_shim_impl(
1007        sig,
1008        types,
1009        &r_trampoline,
1010        local_name,
1011        prevent_unwind_label,
1012        None,
1013        Some(&efn.generics),
1014        &efn.attrs,
1015        body_span,
1016    );
1017    let calling_conv = match efn.lang {
1018        Lang::Cxx => "C",
1019        Lang::CxxUnwind => "C-unwind",
1020        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
1021    };
1022    let var = &var.rust;
1023
1024    {
    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! {
1025        let #var = ::cxx::private::FatFunction {
1026            trampoline: {
1027                unsafe extern #calling_conv {
1028                    #[link_name = #c_trampoline]
1029                    fn trampoline();
1030                }
1031                #shim
1032                trampoline as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void
1033            },
1034            ptr: #var as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void,
1035        };
1036    }
1037}
1038
1039fn expand_rust_type_import(ety: &ExternType) -> TokenStream {
1040    let ident = &ety.name.rust;
1041    let all_attrs = ety.attrs.all();
1042    let span = ident.span();
1043
1044    {
    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=>
1045        #all_attrs
1046        use super::#ident;
1047    }
1048}
1049
1050fn expand_rust_type_impl(ety: &ExternType) -> TokenStream {
1051    let ident = &ety.name.rust;
1052    let generics = &ety.generics;
1053    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1054    let span = ident.span();
1055    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);
1056
1057    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=>
1058        #cfg_and_lint_attrs
1059        #[automatically_derived]
1060        #[doc(hidden)]
1061        #unsafe_impl #generics ::cxx::private::RustType for #ident #generics {}
1062    };
1063
1064    for derive in &ety.derives {
1065        if derive.what == Trait::ExternType {
1066            let type_id = type_id(&ety.name);
1067            let span = derive.span;
1068            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=>
1069                #cfg_and_lint_attrs
1070                #[automatically_derived]
1071                unsafe impl #generics ::cxx::ExternType for #ident #generics {
1072                    #[allow(unused_attributes)] // incorrect lint
1073                    #[doc(hidden)]
1074                    type Id = #type_id;
1075                    type Kind = ::cxx::kind::Opaque;
1076                }
1077            });
1078        }
1079    }
1080
1081    impls
1082}
1083
1084fn expand_rust_type_assert_unpin(ety: &ExternType, types: &Types) -> TokenStream {
1085    let ident = &ety.name.rust;
1086    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1087
1088    let resolve = types.resolve(ident);
1089    let lifetimes = resolve.generics.to_underscore_lifetimes();
1090
1091    {
    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()=>
1092        #cfg_and_lint_attrs
1093        const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1094    }
1095}
1096
1097fn expand_rust_type_layout(ety: &ExternType, types: &Types) -> TokenStream {
1098    // Rustc will render as follows if not sized:
1099    //
1100    //     type TheirType;
1101    //     -----^^^^^^^^^-
1102    //     |    |
1103    //     |    doesn't have a size known at compile-time
1104    //     required by this bound in `__AssertSized`
1105
1106    let ident = &ety.name.rust;
1107    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1108    let begin_span = ::syn::token::PathSepToken![::](ety.type_token.span);
1109    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=>
1110        #begin_span cxx::core::marker::Sized
1111    };
1112
1113    let link_sizeof = mangle::operator(&ety.name, "sizeof");
1114    let link_alignof = mangle::operator(&ety.name, "alignof");
1115
1116    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);
1117    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);
1118
1119    let resolve = types.resolve(ident);
1120    let lifetimes = resolve.generics.to_underscore_lifetimes();
1121
1122    {
    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()=>
1123        #cfg_and_lint_attrs
1124        {
1125            #[doc(hidden)]
1126            #[allow(clippy::needless_maybe_sized)]
1127            fn __AssertSized<T: ?#sized + #sized>() -> ::cxx::core::alloc::Layout {
1128                ::cxx::core::alloc::Layout::new::<T>()
1129            }
1130            #[doc(hidden)]
1131            #[unsafe(export_name = #link_sizeof)]
1132            extern "C" fn #local_sizeof() -> ::cxx::core::primitive::usize {
1133                __AssertSized::<#ident #lifetimes>().size()
1134            }
1135            #[doc(hidden)]
1136            #[unsafe(export_name = #link_alignof)]
1137            extern "C" fn #local_alignof() -> ::cxx::core::primitive::usize {
1138                __AssertSized::<#ident #lifetimes>().align()
1139            }
1140        }
1141    }
1142}
1143
1144fn expand_forbid(impls: TokenStream) -> TokenStream {
1145    {
    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! {
1146        mod forbid {
1147            pub trait Drop {}
1148            #[automatically_derived]
1149            #[allow(drop_bounds)]
1150            impl<T: ?::cxx::core::marker::Sized + ::cxx::core::ops::Drop> self::Drop for T {}
1151            #impls
1152        }
1153    }
1154}
1155
1156fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
1157    let link_name = mangle::extern_fn(efn, types);
1158    let local_name = match efn.self_type() {
1159        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),
1160        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),
1161    };
1162    let prevent_unwind_label = match efn.self_type() {
1163        None => ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0}", efn.name.rust))
    })format!("::{}", efn.name.rust),
1164        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),
1165    };
1166    let invoke = Some(&efn.name.rust);
1167    let body_span = efn.semi_token.span;
1168    expand_rust_function_shim_impl(
1169        efn,
1170        types,
1171        &link_name,
1172        local_name,
1173        prevent_unwind_label,
1174        invoke,
1175        None,
1176        &efn.attrs,
1177        body_span,
1178    )
1179}
1180
1181fn expand_rust_function_shim_impl(
1182    sig: &Signature,
1183    types: &Types,
1184    link_name: &Symbol,
1185    local_name: Ident,
1186    prevent_unwind_label: String,
1187    invoke: Option<&Ident>,
1188    outer_generics: Option<&Generics>,
1189    attrs: &OtherAttrs,
1190    body_span: Span,
1191) -> TokenStream {
1192    let all_attrs = attrs.all();
1193    let generics = outer_generics.unwrap_or(&sig.generics);
1194    let receiver_var = sig
1195        .receiver()
1196        .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));
1197    let receiver = sig.receiver().map(|receiver| {
1198        let colon = receiver.colon_token;
1199        let receiver_type = receiver.ty();
1200        {
    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)
1201    });
1202    let args = sig.args.iter().map(|arg| {
1203        let var = &arg.name.rust;
1204        let colon = arg.colon_token;
1205        let ty = expand_extern_type(&arg.ty, types, false);
1206        if types.needs_indirect_abi(&arg.ty) {
1207            {
    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)
1208        } else {
1209            {
    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)
1210        }
1211    });
1212    let all_args = receiver.into_iter().chain(args);
1213
1214    let mut requires_unsafe = false;
1215    let arg_vars = sig.args.iter().map(|arg| {
1216        let var = &arg.name.rust;
1217        let span = var.span();
1218        match &arg.ty {
1219            Type::Ident(i) if i.rust == RustString => {
1220                requires_unsafe = true;
1221                {
    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()))
1222            }
1223            Type::RustBox(_) => {
1224                requires_unsafe = true;
1225                {
    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))
1226            }
1227            Type::RustVec(_) => {
1228                requires_unsafe = true;
1229                {
    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()))
1230            }
1231            Type::UniquePtr(_) => {
1232                requires_unsafe = true;
1233                {
    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))
1234            }
1235            Type::Ref(ty) => match &ty.inner {
1236                Type::Ident(i) if i.rust == RustString => match ty.mutable {
1237                    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()),
1238                    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()),
1239                },
1240                Type::RustVec(_) => match ty.mutable {
1241                    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()),
1242                    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()),
1243                },
1244                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1245            },
1246            Type::Str(_) => {
1247                requires_unsafe = true;
1248                {
    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())
1249            }
1250            Type::SliceRef(slice) => {
1251                requires_unsafe = true;
1252                let inner = &slice.inner;
1253                match slice.mutable {
1254                    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>()),
1255                    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>()),
1256                }
1257            }
1258            ty if types.needs_indirect_abi(ty) => {
1259                requires_unsafe = true;
1260                {
    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))
1261            }
1262            _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1263        }
1264    });
1265    let vars: Vec<_> = receiver_var.into_iter().chain(arg_vars).collect();
1266
1267    let mut requires_closure;
1268    let mut call = match invoke {
1269        Some(_) => {
1270            requires_closure = false;
1271            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1272        }
1273        None => {
1274            requires_closure = true;
1275            requires_unsafe = true;
1276            {
    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))
1277        }
1278    };
1279    requires_closure |= !vars.is_empty();
1280    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),*) });
1281
1282    let wrap_super = invoke.map(|invoke| {
1283        // If the wrapper function is being passed directly to prevent_unwind,
1284        // it must implement `FnOnce() -> R` and cannot be an unsafe fn.
1285        let unsafety = sig.unsafety.filter(|_| requires_closure);
1286        expand_rust_function_shim_super(sig, &local_name, invoke, unsafety)
1287    });
1288
1289    let span = body_span;
1290    let conversion = sig.ret.as_ref().and_then(|ret| match ret {
1291        Type::Ident(ident) if ident.rust == RustString => {
1292            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))
1293        }
1294        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)),
1295        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)),
1296        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)),
1297        Type::Ref(ty) => match &ty.inner {
1298            Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
1299                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)),
1300                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)),
1301            },
1302            Type::RustVec(_) => match ty.mutable {
1303                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)),
1304                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)),
1305            },
1306            _ => None,
1307        },
1308        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)),
1309        Type::SliceRef(ty) => match ty.mutable {
1310            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)),
1311            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)),
1312        },
1313        _ => None,
1314    });
1315
1316    let mut expr = match conversion {
1317        None => call,
1318        Some(conversion) if !sig.throws => {
1319            requires_closure = true;
1320            {
    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))
1321        }
1322        Some(conversion) => {
1323            requires_closure = true;
1324            {
    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))
1325        }
1326    };
1327
1328    let mut outparam = None;
1329    let indirect_return = indirect_return(sig, types, Lang::Rust);
1330    if indirect_return {
1331        let ret = expand_extern_type(sig.ret.as_ref().unwrap(), types, false);
1332        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,));
1333    }
1334    if sig.throws {
1335        let out = match sig.ret {
1336            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),
1337            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 ()),
1338        };
1339        requires_closure = true;
1340        requires_unsafe = true;
1341        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));
1342    } else if indirect_return {
1343        requires_closure = true;
1344        requires_unsafe = true;
1345        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));
1346    }
1347
1348    if requires_unsafe {
1349        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 });
1350    }
1351
1352    let closure = if requires_closure {
1353        {
    let mut _s = ::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)
1354    } else {
1355        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1356    };
1357
1358    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));
1359
1360    let ret = if sig.throws {
1361        {
    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)
1362    } else {
1363        expand_extern_return_type(sig, types, false, Lang::Rust)
1364    };
1365
1366    let pointer = match invoke {
1367        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 ())),
1368        Some(_) => None,
1369    };
1370
1371    {
    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=>
1372        #all_attrs
1373        #[doc(hidden)]
1374        #[unsafe(export_name = #link_name)]
1375        unsafe extern "C" fn #local_name #generics(#(#all_args,)* #outparam #pointer) #ret {
1376            let __fn = ::cxx::core::concat!(::cxx::core::module_path!(), #prevent_unwind_label);
1377            #wrap_super
1378            #expr
1379        }
1380    }
1381}
1382
1383// A wrapper like `fn f(x: Arg) { super::f(x) }` just to ensure we have the
1384// accurate unsafety declaration and no problematic elided lifetimes.
1385fn expand_rust_function_shim_super(
1386    sig: &Signature,
1387    local_name: &Ident,
1388    invoke: &Ident,
1389    unsafety: Option<Token![unsafe]>,
1390) -> TokenStream {
1391    let generics = &sig.generics;
1392
1393    let receiver_var = sig
1394        .receiver()
1395        .map(|receiver| Ident::new("__self", receiver.var.span));
1396    let receiver = sig.receiver().into_iter().map(|receiver| {
1397        let receiver_type = receiver.ty();
1398        {
    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)
1399    });
1400    let args = sig.args.iter().map(|arg| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&arg, &mut _s);
    _s
}quote!(#arg));
1401    let all_args = receiver.chain(args);
1402
1403    let ret = if let Some((result, _langle, rangle)) = sig.throws_tokens {
1404        let ok = match &sig.ret {
1405            Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(#ret),
1406            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(()),
1407        };
1408        // Set spans that result in the `Result<...>` written by the user being
1409        // highlighted as the cause if their error type has no Display impl.
1410        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);
1411        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<>>);
1412        {
    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)
1413    } else {
1414        expand_return_type(&sig.ret)
1415    };
1416
1417    let arg_vars = sig.args.iter().map(|arg| &arg.name.rust);
1418    let vars = receiver_var.iter().chain(arg_vars);
1419
1420    let span = invoke.span();
1421    let call = match sig.self_type() {
1422        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),
1423        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),
1424    };
1425
1426    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,)*));
1427    let mut allow_unused_unsafe = None;
1428    if sig.unsafety.is_some() {
1429        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 });
1430        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)]));
1431    }
1432
1433    {
    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=>
1434        #allow_unused_unsafe
1435        #unsafety fn #local_name #generics(#(#all_args,)*) #ret {
1436            #body
1437        }
1438    }
1439}
1440
1441fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
1442    let doc = &alias.doc;
1443    let all_attrs = alias.attrs.all();
1444    let visibility = alias.visibility;
1445    let type_token = alias.type_token;
1446    let ident = &alias.name.rust;
1447    let generics = &alias.generics;
1448    let eq_token = alias.eq_token;
1449    let ty = &alias.ty;
1450    let semi_token = alias.semi_token;
1451
1452    {
    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! {
1453        #doc
1454        #all_attrs
1455        #visibility #type_token #ident #generics #eq_token #ty #semi_token
1456    }
1457}
1458
1459fn expand_type_alias_verify(alias: &TypeAlias, types: &Types) -> TokenStream {
1460    let cfg_and_lint_attrs = alias.attrs.cfg_and_lint();
1461    let ident = &alias.name.rust;
1462    let type_id = type_id(&alias.name);
1463    let begin_span = alias.type_token.span;
1464    let end_span = alias.semi_token.span;
1465    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::<);
1466    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=> >);
1467
1468    let resolve = types.resolve(ident);
1469    let lifetimes = resolve.generics.to_underscore_lifetimes();
1470
1471    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! {
1472        #cfg_and_lint_attrs
1473        const _: fn() = #begin #ident #lifetimes, #type_id #end;
1474    };
1475
1476    let mut require_unpin = false;
1477    let mut require_box = false;
1478    let mut require_vec = false;
1479    let mut require_extern_type_trivial = false;
1480    let mut require_rust_type_or_trivial = None;
1481    if let Some(reasons) = types.required_trivial.get(&alias.name.rust) {
1482        for reason in reasons {
1483            match reason {
1484                TrivialReason::BoxTarget { local: true }
1485                | TrivialReason::VecElement { local: true } => require_unpin = true,
1486                TrivialReason::BoxTarget { local: false } => require_box = true,
1487                TrivialReason::VecElement { local: false } => require_vec = true,
1488                TrivialReason::StructField(_)
1489                | TrivialReason::FunctionArgument(_)
1490                | TrivialReason::FunctionReturn(_) => require_extern_type_trivial = true,
1491                TrivialReason::SliceElement(slice) => require_rust_type_or_trivial = Some(slice),
1492            }
1493        }
1494    }
1495
1496    'unpin: {
1497        if let Some(reason) = types.required_unpin.get(ident) {
1498            let ampersand;
1499            let reference_lifetime;
1500            let mutability;
1501            let mut inner;
1502            let generics;
1503            let shorthand;
1504            match reason {
1505                UnpinReason::Receiver(receiver) => {
1506                    ampersand = &receiver.ampersand;
1507                    reference_lifetime = &receiver.lifetime;
1508                    mutability = &receiver.mutability;
1509                    inner = receiver.ty.rust.clone();
1510                    generics = &receiver.ty.generics;
1511                    shorthand = receiver.shorthand;
1512                    if receiver.shorthand {
1513                        inner.set_span(receiver.var.span);
1514                    }
1515                }
1516                UnpinReason::Ref(mutable_reference) => {
1517                    ampersand = &mutable_reference.ampersand;
1518                    reference_lifetime = &mutable_reference.lifetime;
1519                    mutability = &mutable_reference.mutability;
1520                    let Type::Ident(inner_type) = &mutable_reference.inner else {
1521                        ::core::panicking::panic("internal error: entered unreachable code");unreachable!();
1522                    };
1523                    inner = inner_type.rust.clone();
1524                    generics = &inner_type.generics;
1525                    shorthand = false;
1526                }
1527                UnpinReason::Slice(mutable_slice) => {
1528                    ampersand = &mutable_slice.ampersand;
1529                    mutability = &mutable_slice.mutability;
1530                    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]);
1531                    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}");
1532                    let label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("requires `{0}: Unpin`", ident))
    })format!("requires `{ident}: Unpin`");
1533                    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! {
1534                        #cfg_and_lint_attrs
1535                        let _ = {
1536                            #[diagnostic::on_unimplemented(
1537                                message = "mutable slice of pinned type is not supported",
1538                                label = #label,
1539                            )]
1540                            trait #trait_name {
1541                                fn check_unpin() {}
1542                            }
1543                            #[diagnostic::do_not_recommend]
1544                            impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a #mutability T {}
1545                            <#ampersand #mutability #inner as #trait_name>::check_unpin
1546                        };
1547                    });
1548                    require_unpin = false;
1549                    break 'unpin;
1550                }
1551            }
1552            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}");
1553            let message =
1554                ::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}>");
1555            let label = {
1556                let mut label = Message::new();
1557                label.write_fmt(format_args!("use `"));write!(label, "use `");
1558                if shorthand {
1559                    label.write_fmt(format_args!("self: "));write!(label, "self: ");
1560                }
1561                label.write_fmt(format_args!("Pin<&"));write!(label, "Pin<&");
1562                if let Some(reference_lifetime) = reference_lifetime {
1563                    label.write_fmt(format_args!("{0} ", reference_lifetime));write!(label, "{reference_lifetime} ");
1564                }
1565                label.write_fmt(format_args!("mut {0}", ident));write!(label, "mut {ident}");
1566                if !generics.lifetimes.is_empty() {
1567                    label.write_fmt(format_args!("<"));write!(label, "<");
1568                    for (i, lifetime) in generics.lifetimes.iter().enumerate() {
1569                        if i > 0 {
1570                            label.write_fmt(format_args!(", "));write!(label, ", ");
1571                        }
1572                        label.write_fmt(format_args!("{0}", lifetime));write!(label, "{lifetime}");
1573                    }
1574                    label.write_fmt(format_args!(">"));write!(label, ">");
1575                } else if shorthand && !alias.generics.lifetimes.is_empty() {
1576                    label.write_fmt(format_args!("<"));write!(label, "<");
1577                    for i in 0..alias.generics.lifetimes.len() {
1578                        if i > 0 {
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                }
1585                label.write_fmt(format_args!(">`"));write!(label, ">`");
1586                label
1587            };
1588            let lifetimes = generics.to_underscore_lifetimes();
1589            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! {
1590                #cfg_and_lint_attrs
1591                let _ = {
1592                    #[diagnostic::on_unimplemented(message = #message, label = #label)]
1593                    trait #trait_name {
1594                        fn check_unpin() {}
1595                    }
1596                    #[diagnostic::do_not_recommend]
1597                    impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a mut T {}
1598                    <#ampersand #mutability #inner #lifetimes as #trait_name>::check_unpin
1599                };
1600            });
1601            require_unpin = false;
1602        }
1603    }
1604
1605    if require_unpin {
1606        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! {
1607            #cfg_and_lint_attrs
1608            const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1609        });
1610    }
1611
1612    if require_box {
1613        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! {
1614            #cfg_and_lint_attrs
1615            const _: fn() = ::cxx::private::require_box::<#ident #lifetimes>;
1616        });
1617    }
1618
1619    if require_vec {
1620        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! {
1621            #cfg_and_lint_attrs
1622            const _: fn() = ::cxx::private::require_vec::<#ident #lifetimes>;
1623        });
1624    }
1625
1626    if require_extern_type_trivial {
1627        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::<);
1628        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! {
1629            #cfg_and_lint_attrs
1630            const _: fn() = #begin #ident #lifetimes, ::cxx::kind::Trivial #end;
1631        });
1632    } else if let Some(slice_type) = require_rust_type_or_trivial {
1633        let ampersand = &slice_type.ampersand;
1634        let mutability = &slice_type.mutability;
1635        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]);
1636        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! {
1637            #cfg_and_lint_attrs
1638            let _ = || ::cxx::private::with::<#ident #lifetimes>().check_slice::<#ampersand #mutability #inner>();
1639        });
1640    }
1641
1642    verify
1643}
1644
1645fn type_id(name: &Pair) -> TokenStream {
1646    let namespace_segments = name.namespace.iter();
1647    let mut segments = Vec::with_capacity(namespace_segments.len() + 1);
1648    segments.extend(namespace_segments.cloned());
1649    segments.push(Ident::new(&name.cxx.to_string(), Span::call_site()));
1650    let qualified = QualifiedName { segments };
1651    crate::type_id::expand(Crate::Cxx, qualified)
1652}
1653
1654fn expand_rust_box(
1655    key: &NamedImplKey,
1656    types: &Types,
1657    conditional_impl: &ConditionalImpl,
1658) -> TokenStream {
1659    let ident = key.rust;
1660    let resolve = types.resolve(ident);
1661    let link_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$box${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$box${}$", resolve.name.to_symbol());
1662    let link_alloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}alloc", link_prefix))
    })format!("{}alloc", link_prefix);
1663    let link_dealloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}dealloc", link_prefix))
    })format!("{}dealloc", link_prefix);
1664    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1665
1666    let local_prefix = match ::quote::__private::IdentFragmentAdapter(&ident) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}__box_", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}__box_", ident);
1667    let local_alloc = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}alloc", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}alloc", local_prefix);
1668    let local_dealloc = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}dealloc", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}dealloc", local_prefix);
1669    let local_drop = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}drop", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}drop", local_prefix);
1670
1671    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1672
1673    let cfg = conditional_impl.cfg.into_attr();
1674    let begin_span = conditional_impl
1675        .explicit_impl
1676        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1677    let end_span = conditional_impl
1678        .explicit_impl
1679        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1680    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);
1681    let prevent_unwind_drop_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop", ident))
    })format!("::{} as Drop>::drop", ident);
1682
1683    {
    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::__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(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_alloc, &mut _s);
    ::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(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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");
                    ::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,
                                "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()
                                });
                            _s
                        });
                    _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::ToTokens::to_tokens(&local_dealloc, &mut _s);
    ::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(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_drop, &mut _s);
    ::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(&ident, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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
}quote_spanned! {end_span=>
1684        #cfg
1685        #[automatically_derived]
1686        #[doc(hidden)]
1687        #unsafe_token impl #impl_generics ::cxx::private::ImplBox for #ident #ty_generics {}
1688
1689        #cfg
1690        #[doc(hidden)]
1691        #[unsafe(export_name = #link_alloc)]
1692        unsafe extern "C" fn #local_alloc #impl_generics() -> *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics> {
1693            // No prevent_unwind: the global allocator is not allowed to panic.
1694            //
1695            // TODO: replace with Box::new_uninit when stable.
1696            // https://doc.rust-lang.org/std/boxed/struct.Box.html#method.new_uninit
1697            // https://github.com/rust-lang/rust/issues/63291
1698            ::cxx::alloc::boxed::Box::into_raw(::cxx::alloc::boxed::Box::new(::cxx::core::mem::MaybeUninit::uninit()))
1699        }
1700
1701        #cfg
1702        #[doc(hidden)]
1703        #[unsafe(export_name = #link_dealloc)]
1704        unsafe extern "C" fn #local_dealloc #impl_generics(ptr: *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics>) {
1705            // No prevent_unwind: the global allocator is not allowed to panic.
1706            let _ = unsafe { ::cxx::alloc::boxed::Box::from_raw(ptr) };
1707        }
1708
1709        #cfg
1710        #[doc(hidden)]
1711        #[unsafe(export_name = #link_drop)]
1712        unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::alloc::boxed::Box<#ident #ty_generics>) {
1713            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1714            ::cxx::private::prevent_unwind(__fn, || unsafe { ::cxx::core::ptr::drop_in_place(this) });
1715        }
1716    }
1717}
1718
1719fn expand_rust_vec(
1720    key: &NamedImplKey,
1721    types: &Types,
1722    conditional_impl: &ConditionalImpl,
1723) -> TokenStream {
1724    let elem = key.rust;
1725    let resolve = types.resolve(elem);
1726    let link_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$rust_vec${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$rust_vec${}$", resolve.name.to_symbol());
1727    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", link_prefix))
    })format!("{}new", link_prefix);
1728    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1729    let link_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}len", link_prefix))
    })format!("{}len", link_prefix);
1730    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", link_prefix))
    })format!("{}capacity", link_prefix);
1731    let link_data = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}data", link_prefix))
    })format!("{}data", link_prefix);
1732    let link_reserve_total = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve_total", link_prefix))
    })format!("{}reserve_total", link_prefix);
1733    let link_set_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}set_len", link_prefix))
    })format!("{}set_len", link_prefix);
1734    let link_truncate = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}truncate", link_prefix))
    })format!("{}truncate", link_prefix);
1735
1736    let local_prefix = match ::quote::__private::IdentFragmentAdapter(&elem) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}__vec_", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}__vec_", elem);
1737    let local_new = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}new", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}new", local_prefix);
1738    let local_drop = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}drop", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}drop", local_prefix);
1739    let local_len = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}len", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}len", local_prefix);
1740    let local_capacity = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}capacity", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}capacity", local_prefix);
1741    let local_data = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}data", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}data", local_prefix);
1742    let local_reserve_total = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}reserve_total", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}reserve_total", local_prefix);
1743    let local_set_len = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}set_len", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}set_len", local_prefix);
1744    let local_truncate = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
    arg =>
        ::quote::__private::mk_ident(&::alloc::__export::must_use({
                        ::alloc::fmt::format(format_args!("{0}truncate", arg))
                    }), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}truncate", local_prefix);
1745
1746    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1747
1748    let cfg = conditional_impl.cfg.into_attr();
1749    let begin_span = conditional_impl
1750        .explicit_impl
1751        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1752    let end_span = conditional_impl
1753        .explicit_impl
1754        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1755    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);
1756    let prevent_unwind_drop_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop", elem))
    })format!("::{} as Drop>::drop", elem);
1757
1758    {
    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::__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(&elem, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_new, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_drop, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_len, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_capacity, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_data, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_reserve_total, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_set_len, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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::ToTokens::to_tokens(&local_truncate, &mut _s);
    ::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(&elem, &mut _s);
            ::quote::ToTokens::to_tokens(&ty_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
}quote_spanned! {end_span=>
1759        #cfg
1760        #[automatically_derived]
1761        #[doc(hidden)]
1762        #unsafe_token impl #impl_generics ::cxx::private::ImplVec for #elem #ty_generics {}
1763
1764        #cfg
1765        #[doc(hidden)]
1766        #[unsafe(export_name = #link_new)]
1767        unsafe extern "C" fn #local_new #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1768            // No prevent_unwind: cannot panic.
1769            unsafe {
1770                ::cxx::core::ptr::write(this, ::cxx::private::RustVec::new());
1771            }
1772        }
1773
1774        #cfg
1775        #[doc(hidden)]
1776        #[unsafe(export_name = #link_drop)]
1777        unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1778            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1779            ::cxx::private::prevent_unwind(
1780                __fn,
1781                || unsafe { ::cxx::core::ptr::drop_in_place(this) },
1782            );
1783        }
1784
1785        #cfg
1786        #[doc(hidden)]
1787        #[unsafe(export_name = #link_len)]
1788        unsafe extern "C" fn #local_len #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1789            // No prevent_unwind: cannot panic.
1790            unsafe { (*this).len() }
1791        }
1792
1793        #cfg
1794        #[doc(hidden)]
1795        #[unsafe(export_name = #link_capacity)]
1796        unsafe extern "C" fn #local_capacity #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1797            // No prevent_unwind: cannot panic.
1798            unsafe { (*this).capacity() }
1799        }
1800
1801        #cfg
1802        #[doc(hidden)]
1803        #[unsafe(export_name = #link_data)]
1804        unsafe extern "C" fn #local_data #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> *const #elem #ty_generics {
1805            // No prevent_unwind: cannot panic.
1806            unsafe { (*this).as_ptr() }
1807        }
1808
1809        #cfg
1810        #[doc(hidden)]
1811        #[unsafe(export_name = #link_reserve_total)]
1812        unsafe extern "C" fn #local_reserve_total #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, new_cap: ::cxx::core::primitive::usize) {
1813            // No prevent_unwind: the global allocator is not allowed to panic.
1814            unsafe {
1815                (*this).reserve_total(new_cap);
1816            }
1817        }
1818
1819        #cfg
1820        #[doc(hidden)]
1821        #[unsafe(export_name = #link_set_len)]
1822        unsafe extern "C" fn #local_set_len #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1823            // No prevent_unwind: cannot panic.
1824            unsafe {
1825                (*this).set_len(len);
1826            }
1827        }
1828
1829        #cfg
1830        #[doc(hidden)]
1831        #[unsafe(export_name = #link_truncate)]
1832        unsafe extern "C" fn #local_truncate #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1833            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1834            ::cxx::private::prevent_unwind(
1835                __fn,
1836                || unsafe { (*this).truncate(len) },
1837            );
1838        }
1839    }
1840}
1841
1842fn expand_unique_ptr(
1843    key: &NamedImplKey,
1844    types: &Types,
1845    conditional_impl: &ConditionalImpl,
1846) -> TokenStream {
1847    let ident = key.rust;
1848    let name = ident.to_string();
1849    let resolve = types.resolve(ident);
1850    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$unique_ptr${}$", resolve.name.to_symbol());
1851    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
1852    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
1853    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
1854    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
1855    let link_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", prefix))
    })format!("{}release", prefix);
1856    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
1857
1858    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1859
1860    let can_construct_from_value = types.is_maybe_trivial(ident);
1861    let new_method = if can_construct_from_value {
1862        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(&ident, &mut _s);
                    ::quote::ToTokens::to_tokens(&ty_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! {
1863            fn __new(value: Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1864                unsafe extern "C" {
1865                    #[link_name = #link_uninit]
1866                    fn __uninit(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1867                }
1868                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1869                unsafe {
1870                    __uninit(&raw mut repr).cast::<#ident #ty_generics>().write(value);
1871                }
1872                repr
1873            }
1874        })
1875    } else {
1876        None
1877    };
1878
1879    let cfg = conditional_impl.cfg.into_attr();
1880    let begin_span = conditional_impl
1881        .explicit_impl
1882        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1883    let end_span = conditional_impl
1884        .explicit_impl
1885        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1886    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);
1887
1888    {
    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(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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=>
1889        #cfg
1890        #[automatically_derived]
1891        #unsafe_token impl #impl_generics ::cxx::memory::UniquePtrTarget for #ident #ty_generics {
1892            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1893                f.write_str(#name)
1894            }
1895            fn __null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1896                unsafe extern "C" {
1897                    #[link_name = #link_null]
1898                    fn __null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1899                }
1900                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1901                unsafe {
1902                    __null(&raw mut repr);
1903                }
1904                repr
1905            }
1906            #new_method
1907            unsafe fn __raw(raw: *mut Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1908                unsafe extern "C" {
1909                    #[link_name = #link_raw]
1910                    fn __raw(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::core::ffi::c_void);
1911                }
1912                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1913                unsafe {
1914                    __raw(&raw mut repr, raw.cast());
1915                }
1916                repr
1917            }
1918            unsafe fn __get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const Self {
1919                unsafe extern "C" {
1920                    #[link_name = #link_get]
1921                    fn __get(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::core::ffi::c_void;
1922                }
1923                unsafe { __get(&raw const repr).cast() }
1924            }
1925            unsafe fn __release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut Self {
1926                unsafe extern "C" {
1927                    #[link_name = #link_release]
1928                    fn __release(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1929                }
1930                unsafe { __release(&raw mut repr).cast() }
1931            }
1932            unsafe fn __drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
1933                unsafe extern "C" {
1934                    #[link_name = #link_drop]
1935                    fn __drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1936                }
1937                unsafe {
1938                    __drop(&raw mut repr);
1939                }
1940            }
1941        }
1942    }
1943}
1944
1945fn expand_shared_ptr(
1946    key: &NamedImplKey,
1947    types: &Types,
1948    conditional_impl: &ConditionalImpl,
1949) -> TokenStream {
1950    let ident = key.rust;
1951    let name = ident.to_string();
1952    let resolve = types.resolve(ident);
1953    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$shared_ptr${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$shared_ptr${}$", resolve.name.to_symbol());
1954    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
1955    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
1956    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
1957    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
1958    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
1959    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
1960
1961    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1962
1963    let can_construct_from_value = types.is_maybe_trivial(ident);
1964    let new_method = if can_construct_from_value {
1965        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(&ident, &mut _s);
                    ::quote::ToTokens::to_tokens(&ty_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! {
1966            unsafe fn __new(value: Self, new: *mut ::cxx::core::ffi::c_void) {
1967                unsafe extern "C" {
1968                    #[link_name = #link_uninit]
1969                    fn __uninit(new: *mut ::cxx::core::ffi::c_void) -> *mut ::cxx::core::ffi::c_void;
1970                }
1971                unsafe {
1972                    __uninit(new).cast::<#ident #ty_generics>().write(value);
1973                }
1974            }
1975        })
1976    } else {
1977        None
1978    };
1979
1980    let cfg = conditional_impl.cfg.into_attr();
1981    let begin_span = conditional_impl
1982        .explicit_impl
1983        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1984    let end_span = conditional_impl
1985        .explicit_impl
1986        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1987    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);
1988    let not_destructible_err = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0} is not destructible",
                display_namespaced(resolve.name)))
    })format!("{} is not destructible", display_namespaced(resolve.name));
1989
1990    {
    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(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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_ident_spanned(&mut _s, _span,
                                        "as");
                                    ::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
                                });
                            _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=>
1991        #cfg
1992        #[automatically_derived]
1993        #unsafe_token impl #impl_generics ::cxx::memory::SharedPtrTarget for #ident #ty_generics {
1994            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1995                f.write_str(#name)
1996            }
1997            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
1998                unsafe extern "C" {
1999                    #[link_name = #link_null]
2000                    fn __null(new: *mut ::cxx::core::ffi::c_void);
2001                }
2002                unsafe {
2003                    __null(new);
2004                }
2005            }
2006            #new_method
2007            #[track_caller]
2008            unsafe fn __raw(new: *mut ::cxx::core::ffi::c_void, raw: *mut Self) {
2009                unsafe extern "C" {
2010                    #[link_name = #link_raw]
2011                    fn __raw(new: *const ::cxx::core::ffi::c_void, raw: *mut ::cxx::core::ffi::c_void) -> ::cxx::core::primitive::bool;
2012                }
2013                if !unsafe { __raw(new, raw as *mut ::cxx::core::ffi::c_void) } {
2014                    ::cxx::core::panic!(#not_destructible_err);
2015                }
2016            }
2017            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2018                unsafe extern "C" {
2019                    #[link_name = #link_clone]
2020                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2021                }
2022                unsafe {
2023                    __clone(this, new);
2024                }
2025            }
2026            unsafe fn __get(this: *const ::cxx::core::ffi::c_void) -> *const Self {
2027                unsafe extern "C" {
2028                    #[link_name = #link_get]
2029                    fn __get(this: *const ::cxx::core::ffi::c_void) -> *const ::cxx::core::ffi::c_void;
2030                }
2031                unsafe { __get(this).cast() }
2032            }
2033            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2034                unsafe extern "C" {
2035                    #[link_name = #link_drop]
2036                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2037                }
2038                unsafe {
2039                    __drop(this);
2040                }
2041            }
2042        }
2043    }
2044}
2045
2046fn expand_weak_ptr(
2047    key: &NamedImplKey,
2048    types: &Types,
2049    conditional_impl: &ConditionalImpl,
2050) -> TokenStream {
2051    let ident = key.rust;
2052    let name = ident.to_string();
2053    let resolve = types.resolve(ident);
2054    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$weak_ptr${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$weak_ptr${}$", resolve.name.to_symbol());
2055    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
2056    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
2057    let link_downgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}downgrade", prefix))
    })format!("{}downgrade", prefix);
2058    let link_upgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}upgrade", prefix))
    })format!("{}upgrade", prefix);
2059    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
2060
2061    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2062
2063    let cfg = conditional_impl.cfg.into_attr();
2064    let begin_span = conditional_impl
2065        .explicit_impl
2066        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2067    let end_span = conditional_impl
2068        .explicit_impl
2069        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2070    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);
2071
2072    {
    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(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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=>
2073        #cfg
2074        #[automatically_derived]
2075        #unsafe_token impl #impl_generics ::cxx::memory::WeakPtrTarget for #ident #ty_generics {
2076            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2077                f.write_str(#name)
2078            }
2079            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
2080                unsafe extern "C" {
2081                    #[link_name = #link_null]
2082                    fn __null(new: *mut ::cxx::core::ffi::c_void);
2083                }
2084                unsafe {
2085                    __null(new);
2086                }
2087            }
2088            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2089                unsafe extern "C" {
2090                    #[link_name = #link_clone]
2091                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2092                }
2093                unsafe {
2094                    __clone(this, new);
2095                }
2096            }
2097            unsafe fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void) {
2098                unsafe extern "C" {
2099                    #[link_name = #link_downgrade]
2100                    fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void);
2101                }
2102                unsafe {
2103                    __downgrade(shared, weak);
2104                }
2105            }
2106            unsafe fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void) {
2107                unsafe extern "C" {
2108                    #[link_name = #link_upgrade]
2109                    fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void);
2110                }
2111                unsafe {
2112                    __upgrade(weak, shared);
2113                }
2114            }
2115            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2116                unsafe extern "C" {
2117                    #[link_name = #link_drop]
2118                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2119                }
2120                unsafe {
2121                    __drop(this);
2122                }
2123            }
2124        }
2125    }
2126}
2127
2128fn expand_cxx_vector(
2129    key: &NamedImplKey,
2130    conditional_impl: &ConditionalImpl,
2131    types: &Types,
2132) -> TokenStream {
2133    let elem = key.rust;
2134    let name = elem.to_string();
2135    let resolve = types.resolve(elem);
2136    let prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$std$vector${0}$",
                resolve.name.to_symbol()))
    })format!("cxxbridge1$std$vector${}$", resolve.name.to_symbol());
2137    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", prefix))
    })format!("{}new", prefix);
2138    let link_size = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}size", prefix))
    })format!("{}size", prefix);
2139    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", prefix))
    })format!("{}capacity", prefix);
2140    let link_get_unchecked = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get_unchecked", prefix))
    })format!("{}get_unchecked", prefix);
2141    let link_reserve = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve", prefix))
    })format!("{}reserve", prefix);
2142    let link_push_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}push_back", prefix))
    })format!("{}push_back", prefix);
2143    let link_pop_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}pop_back", prefix))
    })format!("{}pop_back", prefix);
2144    let unique_ptr_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr$std$vector${0}$",
                resolve.name.to_symbol()))
    })format!(
2145        "cxxbridge1$unique_ptr$std$vector${}$",
2146        resolve.name.to_symbol(),
2147    );
2148    let link_unique_ptr_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", unique_ptr_prefix))
    })format!("{}null", unique_ptr_prefix);
2149    let link_unique_ptr_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", unique_ptr_prefix))
    })format!("{}raw", unique_ptr_prefix);
2150    let link_unique_ptr_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", unique_ptr_prefix))
    })format!("{}get", unique_ptr_prefix);
2151    let link_unique_ptr_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", unique_ptr_prefix))
    })format!("{}release", unique_ptr_prefix);
2152    let link_unique_ptr_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", unique_ptr_prefix))
    })format!("{}drop", unique_ptr_prefix);
2153
2154    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2155
2156    let cfg = conditional_impl.cfg.into_attr();
2157    let begin_span = conditional_impl
2158        .explicit_impl
2159        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2160    let end_span = conditional_impl
2161        .explicit_impl
2162        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2163    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);
2164
2165    let can_pass_element_by_value = types.is_maybe_trivial(elem);
2166    let by_value_methods = if can_pass_element_by_value {
2167        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(&elem, &mut _s);
                            ::quote::ToTokens::to_tokens(&ty_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_ident_spanned(&mut _s, _span,
                                "value");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "as");
                            ::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,
                                "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_ident_spanned(&mut _s, _span,
                                "as");
                            ::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
                });
            _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(&elem, &mut _s);
                            ::quote::ToTokens::to_tokens(&ty_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_ident_spanned(&mut _s, _span,
                                "out");
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "as");
                            ::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_ident_spanned(&mut _s, _span,
                                "Self");
                            ::quote::__private::push_gt_spanned(&mut _s, _span);
                            ::quote::__private::push_ident_spanned(&mut _s, _span,
                                "as");
                            ::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
                });
            _s
        });
    _s
}quote_spanned! {end_span=>
2168            unsafe fn __push_back(
2169                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2170                value: &mut ::cxx::core::mem::ManuallyDrop<Self>,
2171            ) {
2172                unsafe extern "C" {
2173                    #[link_name = #link_push_back]
2174                    fn __push_back #impl_generics(
2175                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2176                        value: *mut ::cxx::core::ffi::c_void,
2177                    );
2178                }
2179                unsafe {
2180                    __push_back(
2181                        this,
2182                        value as *mut ::cxx::core::mem::ManuallyDrop<Self> as *mut ::cxx::core::ffi::c_void,
2183                    );
2184                }
2185            }
2186            unsafe fn __pop_back(
2187                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2188                out: &mut ::cxx::core::mem::MaybeUninit<Self>,
2189            ) {
2190                unsafe extern "C" {
2191                    #[link_name = #link_pop_back]
2192                    fn __pop_back #impl_generics(
2193                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2194                        out: *mut ::cxx::core::ffi::c_void,
2195                    );
2196                }
2197                unsafe {
2198                    __pop_back(
2199                        this,
2200                        out as *mut ::cxx::core::mem::MaybeUninit<Self> as *mut ::cxx::core::ffi::c_void,
2201                    );
2202                }
2203            }
2204        })
2205    } else {
2206        None
2207    };
2208
2209    let not_move_constructible_err = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0} is not move constructible",
                display_namespaced(resolve.name)))
    })format!(
2210        "{} is not move constructible",
2211        display_namespaced(resolve.name),
2212    );
2213
2214    {
    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(&elem, &mut _s);
    ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                            ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                                    ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                                    ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                                    ::quote::ToTokens::to_tokens(&ty_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_ident_spanned(&mut _s, _span,
                                "as");
                            ::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
                        });
                    _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(&elem, &mut _s);
                                    ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                                    ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                            ::quote::ToTokens::to_tokens(&ty_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(&elem, &mut _s);
                            ::quote::ToTokens::to_tokens(&ty_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=>
2215        #cfg
2216        #[automatically_derived]
2217        #unsafe_token impl #impl_generics ::cxx::vector::VectorElement for #elem #ty_generics {
2218            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2219                f.write_str(#name)
2220            }
2221            fn __vector_new() -> *mut ::cxx::CxxVector<Self> {
2222                unsafe extern "C" {
2223                    #[link_name = #link_new]
2224                    fn __vector_new #impl_generics() -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2225                }
2226                unsafe { __vector_new() }
2227            }
2228            fn __vector_size(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2229                unsafe extern "C" {
2230                    #[link_name = #link_size]
2231                    fn __vector_size #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2232                }
2233                unsafe { __vector_size(v) }
2234            }
2235            fn __vector_capacity(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2236                unsafe extern "C" {
2237                    #[link_name = #link_capacity]
2238                    fn __vector_capacity #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2239                }
2240                unsafe { __vector_capacity(v) }
2241            }
2242            unsafe fn __get_unchecked(v: *mut ::cxx::CxxVector<Self>, pos: ::cxx::core::primitive::usize) -> *mut Self {
2243                unsafe extern "C" {
2244                    #[link_name = #link_get_unchecked]
2245                    fn __get_unchecked #impl_generics(
2246                        v: *mut ::cxx::CxxVector<#elem #ty_generics>,
2247                        pos: ::cxx::core::primitive::usize,
2248                    ) -> *mut ::cxx::core::ffi::c_void;
2249                }
2250                unsafe { __get_unchecked(v, pos) as *mut Self }
2251            }
2252            unsafe fn __reserve(v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>, new_cap: ::cxx::core::primitive::usize) {
2253                unsafe extern "C" {
2254                    #[link_name = #link_reserve]
2255                    fn __reserve #impl_generics(
2256                        v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2257                        new_cap: ::cxx::core::primitive::usize,
2258                    ) -> ::cxx::core::primitive::bool;
2259                }
2260                if !unsafe { __reserve(v, new_cap) } {
2261                    ::cxx::core::panic!(#not_move_constructible_err);
2262                }
2263            }
2264            #by_value_methods
2265            fn __unique_ptr_null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2266                unsafe extern "C" {
2267                    #[link_name = #link_unique_ptr_null]
2268                    fn __unique_ptr_null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2269                }
2270                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2271                unsafe {
2272                    __unique_ptr_null(&raw mut repr);
2273                }
2274                repr
2275            }
2276            unsafe fn __unique_ptr_raw(raw: *mut ::cxx::CxxVector<Self>) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2277                unsafe extern "C" {
2278                    #[link_name = #link_unique_ptr_raw]
2279                    fn __unique_ptr_raw #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::CxxVector<#elem #ty_generics>);
2280                }
2281                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2282                unsafe {
2283                    __unique_ptr_raw(&raw mut repr, raw);
2284                }
2285                repr
2286            }
2287            unsafe fn __unique_ptr_get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<Self> {
2288                unsafe extern "C" {
2289                    #[link_name = #link_unique_ptr_get]
2290                    fn __unique_ptr_get #impl_generics(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<#elem #ty_generics>;
2291                }
2292                unsafe { __unique_ptr_get(&raw const repr) }
2293            }
2294            unsafe fn __unique_ptr_release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<Self> {
2295                unsafe extern "C" {
2296                    #[link_name = #link_unique_ptr_release]
2297                    fn __unique_ptr_release #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2298                }
2299                unsafe { __unique_ptr_release(&raw mut repr) }
2300            }
2301            unsafe fn __unique_ptr_drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
2302                unsafe extern "C" {
2303                    #[link_name = #link_unique_ptr_drop]
2304                    fn __unique_ptr_drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2305                }
2306                unsafe {
2307                    __unique_ptr_drop(&raw mut repr);
2308                }
2309            }
2310        }
2311    }
2312}
2313
2314fn expand_return_type(ret: &Option<Type>) -> TokenStream {
2315    match ret {
2316        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),
2317        None => TokenStream::new(),
2318    }
2319}
2320
2321fn indirect_return(sig: &Signature, types: &Types, lang: Lang) -> bool {
2322    sig.ret.as_ref().is_some_and(|ret| {
2323        sig.throws
2324            || types.needs_indirect_abi(ret)
2325            || match lang {
2326                Lang::Cxx | Lang::CxxUnwind => types.contains_elided_lifetime(ret),
2327                Lang::Rust => false,
2328            }
2329    })
2330}
2331
2332fn expand_extern_type(ty: &Type, types: &Types, proper: bool) -> TokenStream {
2333    match ty {
2334        Type::Ident(ident) if ident.rust == RustString => {
2335            let span = ident.rust.span();
2336            {
    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)
2337        }
2338        Type::RustBox(ty) | Type::UniquePtr(ty) => {
2339            let span = ty.name.span();
2340            if proper && types.is_considered_improper_ctype(&ty.inner) {
2341                {
    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)
2342            } else {
2343                let inner = expand_extern_type(&ty.inner, types, proper);
2344                {
    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)
2345            }
2346        }
2347        Type::RustVec(ty) => {
2348            // Replace Vec<Foo> with ::cxx::private::RustVec<Foo>. Both have the
2349            // same layout but only the latter has a predictable ABI. Note that
2350            // the overall size and alignment are independent of the element
2351            // type, but the field order inside of Vec may not be.
2352            let span = ty.name.span();
2353            let langle = ty.langle;
2354            let elem = &ty.inner;
2355            let rangle = ty.rangle;
2356            {
    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)
2357        }
2358        Type::Ref(ty) => {
2359            let ampersand = ty.ampersand;
2360            let lifetime = &ty.lifetime;
2361            let mutability = ty.mutability;
2362            match &ty.inner {
2363                Type::Ident(ident) if ident.rust == RustString => {
2364                    let span = ident.rust.span();
2365                    {
    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)
2366                }
2367                Type::RustVec(ty) => {
2368                    let span = ty.name.span();
2369                    let langle = ty.langle;
2370                    let inner = &ty.inner;
2371                    let rangle = ty.rangle;
2372                    {
    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)
2373                }
2374                inner if proper && types.is_considered_improper_ctype(inner) => {
2375                    let star = ::syn::token::StarToken![*](ampersand.span);
2376                    match ty.mutable {
2377                        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),
2378                        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),
2379                    }
2380                }
2381                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2382            }
2383        }
2384        Type::Ptr(ty) => {
2385            if proper && types.is_considered_improper_ctype(&ty.inner) {
2386                let star = ty.star;
2387                let mutability = ty.mutability;
2388                let constness = ty.constness;
2389                {
    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)
2390            } else {
2391                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty)
2392            }
2393        }
2394        Type::Str(ty) => {
2395            let span = ty.ampersand.span;
2396            let rust_str = Ident::new("RustStr", syn::spanned::Spanned::span(&ty.inner));
2397            {
    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)
2398        }
2399        Type::SliceRef(ty) => {
2400            let span = ty.ampersand.span;
2401            let rust_slice = Ident::new("RustSlice", ty.bracket.span.join());
2402            {
    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)
2403        }
2404        _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2405    }
2406}
2407
2408fn expand_extern_return_type(
2409    sig: &Signature,
2410    types: &Types,
2411    proper: bool,
2412    lang: Lang,
2413) -> TokenStream {
2414    let ret = match &sig.ret {
2415        Some(ret) if !indirect_return(sig, types, lang) => ret,
2416        _ => return TokenStream::new(),
2417    };
2418    let ty = expand_extern_type(ret, types, proper);
2419    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(-> #ty)
2420}
2421
2422fn display_namespaced(name: &Pair) -> impl Display + '_ {
2423    struct Namespaced<'a>(&'a Pair);
2424
2425    impl<'a> Display for Namespaced<'a> {
2426        fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2427            for segment in &self.0.namespace {
2428                formatter.write_fmt(format_args!("{0}::", segment))write!(formatter, "{segment}::")?;
2429            }
2430            formatter.write_fmt(format_args!("{0}", self.0.cxx))write!(formatter, "{}", self.0.cxx)
2431        }
2432    }
2433
2434    Namespaced(name)
2435}