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, Lifetimes, Pair,
18    Signature, 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, punctuated, 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut fields, i) = fields.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                    #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                        #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                    #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                    #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                        #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                        #[#UnsafeAttr(#ExportNameAttr = #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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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                    #[#UnsafeAttr(#ExportNameAttr = #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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut variants, i) = variants.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut lifetime_fields, i) = lifetime_fields.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut self_type_lifetimes, i) =
            self_type_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut self_type_lifetimes, i) =
            self_type_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut functions, i) = functions.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut undeclared_lifetimes, i) =
            undeclared_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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 generics = &efn.generics;
962    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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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,)*));
963    let calling_conv = match efn.lang {
964        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"),
965        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"),
966        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
967    };
968    let fn_body = {
    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 _span: ::quote::__private::Span =
                ::quote::__private::get_span(_span).__into_span();
            ::quote::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
            ::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=> {
969        #UnsafeExtern extern #calling_conv {
970            #decl
971        }
972        #trampolines
973        #dispatch
974    });
975    match efn.self_type() {
976        None => {
977            {
    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(&unsafety, &mut _s);
    ::quote::ToTokens::to_tokens(&fn_token, &mut _s);
    ::quote::ToTokens::to_tokens(&ident, &mut _s);
    ::quote::ToTokens::to_tokens(&generics, &mut _s);
    ::quote::ToTokens::to_tokens(&arg_list, &mut _s);
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    ::quote::ToTokens::to_tokens(&fn_body, &mut _s);
    _s
}quote! {
978                #doc
979                #all_attrs
980                #visibility #unsafety #fn_token #ident #generics #arg_list #ret #fn_body
981            }
982        }
983        Some(self_type) => {
984            let elided_generics;
985            let resolve = types.resolve(self_type);
986            let self_type_generics = match &efn.kind {
987                FnKind::Method(receiver) if receiver.ty.generics.lt_token.is_some() => {
988                    &receiver.ty.generics
989                }
990                _ => {
991                    elided_generics = Lifetimes {
992                        lt_token: resolve.generics.lt_token,
993                        lifetimes: resolve
994                            .generics
995                            .lifetimes
996                            .pairs()
997                            .map(|pair| {
998                                let lifetime = Lifetime::new("'_", pair.value().apostrophe);
999                                let punct = pair.punct().map(|&&comma| comma);
1000                                punctuated::Pair::new(lifetime, punct)
1001                            })
1002                            .collect(),
1003                        gt_token: resolve.generics.gt_token,
1004                    };
1005                    &elided_generics
1006                }
1007            };
1008            let mut self_type_lifetimes = UnorderedSet::new();
1009            for lifetime in &self_type_generics.lifetimes {
1010                if lifetime.ident != "_" {
1011                    self_type_lifetimes.insert(lifetime);
1012                }
1013            }
1014            let fn_lifetimes = generics
1015                .lifetimes()
1016                .filter(|param| !self_type_lifetimes.contains(&param.lifetime));
1017            let lt_token = generics.lt_token;
1018            let gt_token = generics.gt_token;
1019            {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(ident.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 mut _i = 0usize;
        let has_iter = ::quote::__private::ThereIsNoIteratorInRepetition;
        #[allow(unused_mut)]
        let (mut fn_lifetimes, i) = fn_lifetimes.quote_into_iter();
        let has_iter = has_iter | i;
        let _: ::quote::__private::HasIterator = has_iter;
        while true {
            let fn_lifetimes =
                match fn_lifetimes.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(&fn_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::ToTokens::to_tokens(&fn_body, &mut _s);
    _s
}quote_spanned! {ident.span()=>
1020                #doc
1021                #all_attrs
1022                #visibility #unsafety #fn_token #ident #lt_token #(#fn_lifetimes),* #gt_token #arg_list #ret #fn_body
1023            }
1024        }
1025    }
1026}
1027
1028fn expand_function_pointer_trampoline(
1029    efn: &ExternFn,
1030    var: &Pair,
1031    sig: &Signature,
1032    types: &Types,
1033) -> TokenStream {
1034    let c_trampoline = mangle::c_trampoline(efn, var, types);
1035    let r_trampoline = mangle::r_trampoline(efn, var, types);
1036    let local_name = ::syn::__private::parse_quote({
        let mut _s = ::quote::__private::TokenStream::new();
        ::quote::__private::push_ident(&mut _s, "__");
        _s
    })parse_quote!(__);
1037    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);
1038    let body_span = efn.semi_token.span;
1039    let shim = expand_rust_function_shim_impl(
1040        sig,
1041        types,
1042        &r_trampoline,
1043        local_name,
1044        prevent_unwind_label,
1045        None,
1046        Some(&efn.generics),
1047        &efn.attrs,
1048        body_span,
1049    );
1050    let calling_conv = match efn.lang {
1051        Lang::Cxx => "C",
1052        Lang::CxxUnwind => "C-unwind",
1053        Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
1054    };
1055    let var = &var.rust;
1056
1057    {
    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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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! {
1058        let #var = ::cxx::private::FatFunction {
1059            trampoline: {
1060                #UnsafeExtern extern #calling_conv {
1061                    #[link_name = #c_trampoline]
1062                    fn trampoline();
1063                }
1064                #shim
1065                trampoline as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void
1066            },
1067            ptr: #var as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void,
1068        };
1069    }
1070}
1071
1072fn expand_rust_type_import(ety: &ExternType) -> TokenStream {
1073    let ident = &ety.name.rust;
1074    let all_attrs = ety.attrs.all();
1075    let span = ident.span();
1076
1077    {
    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=>
1078        #all_attrs
1079        use super::#ident;
1080    }
1081}
1082
1083fn expand_rust_type_impl(ety: &ExternType) -> TokenStream {
1084    let ident = &ety.name.rust;
1085    let generics = &ety.generics;
1086    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1087    let span = ident.span();
1088    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);
1089
1090    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=>
1091        #cfg_and_lint_attrs
1092        #[automatically_derived]
1093        #[doc(hidden)]
1094        #unsafe_impl #generics ::cxx::private::RustType for #ident #generics {}
1095    };
1096
1097    for derive in &ety.derives {
1098        if derive.what == Trait::ExternType {
1099            let type_id = type_id(&ety.name);
1100            let span = derive.span;
1101            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=>
1102                #cfg_and_lint_attrs
1103                #[automatically_derived]
1104                unsafe impl #generics ::cxx::ExternType for #ident #generics {
1105                    #[allow(unused_attributes)] // incorrect lint
1106                    #[doc(hidden)]
1107                    type Id = #type_id;
1108                    type Kind = ::cxx::kind::Opaque;
1109                }
1110            });
1111        }
1112    }
1113
1114    impls
1115}
1116
1117fn expand_rust_type_assert_unpin(ety: &ExternType, types: &Types) -> TokenStream {
1118    let ident = &ety.name.rust;
1119    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1120
1121    let resolve = types.resolve(ident);
1122    let lifetimes = resolve.generics.to_underscore_lifetimes();
1123
1124    {
    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()=>
1125        #cfg_and_lint_attrs
1126        const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1127    }
1128}
1129
1130fn expand_rust_type_layout(ety: &ExternType, types: &Types) -> TokenStream {
1131    // Rustc will render as follows if not sized:
1132    //
1133    //     type TheirType;
1134    //     -----^^^^^^^^^-
1135    //     |    |
1136    //     |    doesn't have a size known at compile-time
1137    //     required by this bound in `__AssertSized`
1138
1139    let ident = &ety.name.rust;
1140    let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1141    let begin_span = ::syn::token::PathSepToken![::](ety.type_token.span);
1142    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=>
1143        #begin_span cxx::core::marker::Sized
1144    };
1145
1146    let link_sizeof = mangle::operator(&ety.name, "sizeof");
1147    let link_alignof = mangle::operator(&ety.name, "alignof");
1148
1149    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);
1150    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);
1151
1152    let resolve = types.resolve(ident);
1153    let lifetimes = resolve.generics.to_underscore_lifetimes();
1154
1155    {
    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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                            ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                            ::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()=>
1156        #cfg_and_lint_attrs
1157        {
1158            #[doc(hidden)]
1159            #[allow(clippy::needless_maybe_sized)]
1160            fn __AssertSized<T: ?#sized + #sized>() -> ::cxx::core::alloc::Layout {
1161                ::cxx::core::alloc::Layout::new::<T>()
1162            }
1163            #[doc(hidden)]
1164            #[#UnsafeAttr(#ExportNameAttr = #link_sizeof)]
1165            extern "C" fn #local_sizeof() -> ::cxx::core::primitive::usize {
1166                __AssertSized::<#ident #lifetimes>().size()
1167            }
1168            #[doc(hidden)]
1169            #[#UnsafeAttr(#ExportNameAttr = #link_alignof)]
1170            extern "C" fn #local_alignof() -> ::cxx::core::primitive::usize {
1171                __AssertSized::<#ident #lifetimes>().align()
1172            }
1173        }
1174    }
1175}
1176
1177fn expand_forbid(impls: TokenStream) -> TokenStream {
1178    {
    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! {
1179        mod forbid {
1180            pub trait Drop {}
1181            #[automatically_derived]
1182            #[allow(drop_bounds)]
1183            impl<T: ?::cxx::core::marker::Sized + ::cxx::core::ops::Drop> self::Drop for T {}
1184            #impls
1185        }
1186    }
1187}
1188
1189fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
1190    let link_name = mangle::extern_fn(efn, types);
1191    let local_name = match efn.self_type() {
1192        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),
1193        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),
1194    };
1195    let prevent_unwind_label = match efn.self_type() {
1196        None => ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0}", efn.name.rust))
    })format!("::{}", efn.name.rust),
1197        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),
1198    };
1199    let invoke = Some(&efn.name.rust);
1200    let body_span = efn.semi_token.span;
1201    expand_rust_function_shim_impl(
1202        efn,
1203        types,
1204        &link_name,
1205        local_name,
1206        prevent_unwind_label,
1207        invoke,
1208        None,
1209        &efn.attrs,
1210        body_span,
1211    )
1212}
1213
1214fn expand_rust_function_shim_impl(
1215    sig: &Signature,
1216    types: &Types,
1217    link_name: &Symbol,
1218    local_name: Ident,
1219    prevent_unwind_label: String,
1220    invoke: Option<&Ident>,
1221    outer_generics: Option<&Generics>,
1222    attrs: &OtherAttrs,
1223    body_span: Span,
1224) -> TokenStream {
1225    let all_attrs = attrs.all();
1226    let generics = outer_generics.unwrap_or(&sig.generics);
1227    let receiver_var = sig
1228        .receiver()
1229        .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));
1230    let receiver = sig.receiver().map(|receiver| {
1231        let colon = receiver.colon_token;
1232        let receiver_type = receiver.ty();
1233        {
    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)
1234    });
1235    let args = sig.args.iter().map(|arg| {
1236        let var = &arg.name.rust;
1237        let colon = arg.colon_token;
1238        let ty = expand_extern_type(&arg.ty, types, false);
1239        if types.needs_indirect_abi(&arg.ty) {
1240            {
    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)
1241        } else {
1242            {
    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)
1243        }
1244    });
1245    let all_args = receiver.into_iter().chain(args);
1246
1247    let mut requires_unsafe = false;
1248    let arg_vars = sig.args.iter().map(|arg| {
1249        let var = &arg.name.rust;
1250        let span = var.span();
1251        match &arg.ty {
1252            Type::Ident(i) if i.rust == RustString => {
1253                requires_unsafe = true;
1254                {
    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()))
1255            }
1256            Type::RustBox(_) => {
1257                requires_unsafe = true;
1258                {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(span).__into_span();
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
    ::quote::__private::push_colon2_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "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))
1259            }
1260            Type::RustVec(_) => {
1261                requires_unsafe = true;
1262                {
    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()))
1263            }
1264            Type::UniquePtr(_) => {
1265                requires_unsafe = true;
1266                {
    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))
1267            }
1268            Type::Ref(ty) => match &ty.inner {
1269                Type::Ident(i) if i.rust == RustString => match ty.mutable {
1270                    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()),
1271                    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()),
1272                },
1273                Type::RustVec(_) => match ty.mutable {
1274                    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()),
1275                    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()),
1276                },
1277                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1278            },
1279            Type::Str(_) => {
1280                requires_unsafe = true;
1281                {
    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())
1282            }
1283            Type::SliceRef(slice) => {
1284                requires_unsafe = true;
1285                let inner = &slice.inner;
1286                match slice.mutable {
1287                    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>()),
1288                    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>()),
1289                }
1290            }
1291            ty if types.needs_indirect_abi(ty) => {
1292                requires_unsafe = true;
1293                {
    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))
1294            }
1295            _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&var, &mut _s);
    _s
}quote!(#var),
1296        }
1297    });
1298    let vars: Vec<_> = receiver_var.into_iter().chain(arg_vars).collect();
1299
1300    let mut requires_closure;
1301    let mut call = match invoke {
1302        Some(_) => {
1303            requires_closure = false;
1304            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1305        }
1306        None => {
1307            requires_closure = true;
1308            requires_unsafe = true;
1309            {
    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))
1310        }
1311    };
1312    requires_closure |= !vars.is_empty();
1313    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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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),*) });
1314
1315    let wrap_super = invoke.map(|invoke| {
1316        // If the wrapper function is being passed directly to prevent_unwind,
1317        // it must implement `FnOnce() -> R` and cannot be an unsafe fn.
1318        let unsafety = sig.unsafety.filter(|_| requires_closure);
1319        expand_rust_function_shim_super(sig, &local_name, invoke, unsafety)
1320    });
1321
1322    let span = body_span;
1323    let conversion = sig.ret.as_ref().and_then(|ret| match ret {
1324        Type::Ident(ident) if ident.rust == RustString => {
1325            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))
1326        }
1327        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)),
1328        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)),
1329        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)),
1330        Type::Ref(ty) => match &ty.inner {
1331            Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
1332                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)),
1333                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)),
1334            },
1335            Type::RustVec(_) => match ty.mutable {
1336                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)),
1337                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)),
1338            },
1339            _ => None,
1340        },
1341        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)),
1342        Type::SliceRef(ty) => match ty.mutable {
1343            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)),
1344            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)),
1345        },
1346        _ => None,
1347    });
1348
1349    let mut expr = match conversion {
1350        None => call,
1351        Some(conversion) if !sig.throws => {
1352            requires_closure = true;
1353            {
    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))
1354        }
1355        Some(conversion) => {
1356            requires_closure = true;
1357            {
    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))
1358        }
1359    };
1360
1361    let mut outparam = None;
1362    let indirect_return = indirect_return(sig, types, Lang::Rust);
1363    if indirect_return {
1364        let ret = expand_extern_type(sig.ret.as_ref().unwrap(), types, false);
1365        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,));
1366    }
1367    if sig.throws {
1368        let out = match sig.ret {
1369            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),
1370            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 ()),
1371        };
1372        requires_closure = true;
1373        requires_unsafe = true;
1374        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));
1375    } else if indirect_return {
1376        requires_closure = true;
1377        requires_unsafe = true;
1378        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));
1379    }
1380
1381    if requires_unsafe {
1382        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 });
1383    }
1384
1385    let closure = if requires_closure {
1386        {
    let mut _s = ::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)
1387    } else {
1388        {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&local_name, &mut _s);
    _s
}quote!(#local_name)
1389    };
1390
1391    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));
1392
1393    let ret = if sig.throws {
1394        {
    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)
1395    } else {
1396        expand_extern_return_type(sig, types, false, Lang::Rust)
1397    };
1398
1399    let pointer = match invoke {
1400        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 ())),
1401        Some(_) => None,
1402    };
1403
1404    {
    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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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=>
1405        #all_attrs
1406        #[doc(hidden)]
1407        #[#UnsafeAttr(#ExportNameAttr = #link_name)]
1408        unsafe extern "C" fn #local_name #generics(#(#all_args,)* #outparam #pointer) #ret {
1409            let __fn = ::cxx::core::concat!(::cxx::core::module_path!(), #prevent_unwind_label);
1410            #wrap_super
1411            #expr
1412        }
1413    }
1414}
1415
1416// A wrapper like `fn f(x: Arg) { super::f(x) }` just to ensure we have the
1417// accurate unsafety declaration and no problematic elided lifetimes.
1418fn expand_rust_function_shim_super(
1419    sig: &Signature,
1420    local_name: &Ident,
1421    invoke: &Ident,
1422    unsafety: Option<Token![unsafe]>,
1423) -> TokenStream {
1424    let generics = &sig.generics;
1425
1426    let receiver_var = sig
1427        .receiver()
1428        .map(|receiver| Ident::new("__self", receiver.var.span));
1429    let receiver = sig.receiver().into_iter().map(|receiver| {
1430        let receiver_type = receiver.ty();
1431        {
    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)
1432    });
1433    let args = sig.args.iter().map(|arg| {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&arg, &mut _s);
    _s
}quote!(#arg));
1434    let all_args = receiver.chain(args);
1435
1436    let ret = if let Some((result, _langle, rangle)) = sig.throws_tokens {
1437        let ok = match &sig.ret {
1438            Some(ret) => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ret, &mut _s);
    _s
}quote!(#ret),
1439            None => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    _s
}quote!(()),
1440        };
1441        // Set spans that result in the `Result<...>` written by the user being
1442        // highlighted as the cause if their error type has no Display impl.
1443        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);
1444        let result_end = if truerustversion::cfg!(since(1.82)) {
1445            // https://blog.rust-lang.org/2024/10/17/Rust-1.82.0.html#precise-capturing-use-syntax
1446            {
    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<>>)
1447        } else {
1448            {
    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_gt_spanned(&mut _s, _span);
    _s
}quote_spanned!(rangle.span=> ::cxx::core::fmt::Display>)
1449        };
1450        {
    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)
1451    } else {
1452        expand_return_type(&sig.ret)
1453    };
1454
1455    let arg_vars = sig.args.iter().map(|arg| &arg.name.rust);
1456    let vars = receiver_var.iter().chain(arg_vars);
1457
1458    let span = invoke.span();
1459    let call = match sig.self_type() {
1460        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),
1461        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),
1462    };
1463
1464    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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut vars, i) = vars.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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,)*));
1465    let mut allow_unused_unsafe = None;
1466    if sig.unsafety.is_some() {
1467        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 });
1468        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)]));
1469    }
1470
1471    {
    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::ThereIsNoIteratorInRepetition;
                #[allow(unused_mut)]
                let (mut all_args, i) = all_args.quote_into_iter();
                let has_iter = has_iter | i;
                let _: ::quote::__private::HasIterator = 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=>
1472        #allow_unused_unsafe
1473        #unsafety fn #local_name #generics(#(#all_args,)*) #ret {
1474            #body
1475        }
1476    }
1477}
1478
1479fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
1480    let doc = &alias.doc;
1481    let all_attrs = alias.attrs.all();
1482    let visibility = alias.visibility;
1483    let type_token = alias.type_token;
1484    let ident = &alias.name.rust;
1485    let generics = &alias.generics;
1486    let eq_token = alias.eq_token;
1487    let ty = &alias.ty;
1488    let semi_token = alias.semi_token;
1489
1490    {
    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! {
1491        #doc
1492        #all_attrs
1493        #visibility #type_token #ident #generics #eq_token #ty #semi_token
1494    }
1495}
1496
1497fn expand_type_alias_verify(alias: &TypeAlias, types: &Types) -> TokenStream {
1498    let cfg_and_lint_attrs = alias.attrs.cfg_and_lint();
1499    let ident = &alias.name.rust;
1500    let type_id = type_id(&alias.name);
1501    let begin_span = alias.type_token.span;
1502    let end_span = alias.semi_token.span;
1503    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::<);
1504    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=> >);
1505
1506    let resolve = types.resolve(ident);
1507    let lifetimes = resolve.generics.to_underscore_lifetimes();
1508
1509    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! {
1510        #cfg_and_lint_attrs
1511        const _: fn() = #begin #ident #lifetimes, #type_id #end;
1512    };
1513
1514    let mut require_unpin = false;
1515    let mut require_box = false;
1516    let mut require_vec = false;
1517    let mut require_extern_type_trivial = false;
1518    let mut require_rust_type_or_trivial = None;
1519    if let Some(reasons) = types.required_trivial.get(&alias.name.rust) {
1520        for reason in reasons {
1521            match reason {
1522                TrivialReason::BoxTarget { local: true }
1523                | TrivialReason::VecElement { local: true } => require_unpin = true,
1524                TrivialReason::BoxTarget { local: false } => require_box = true,
1525                TrivialReason::VecElement { local: false } => require_vec = true,
1526                TrivialReason::StructField(_)
1527                | TrivialReason::FunctionArgument(_)
1528                | TrivialReason::FunctionReturn(_) => require_extern_type_trivial = true,
1529                TrivialReason::SliceElement(slice) => require_rust_type_or_trivial = Some(slice),
1530            }
1531        }
1532    }
1533
1534    'unpin: {
1535        if let Some(reason) = types.required_unpin.get(ident) {
1536            let ampersand;
1537            let reference_lifetime;
1538            let mutability;
1539            let mut inner;
1540            let generics;
1541            let shorthand;
1542            match reason {
1543                UnpinReason::Receiver(receiver) => {
1544                    ampersand = &receiver.ampersand;
1545                    reference_lifetime = &receiver.lifetime;
1546                    mutability = &receiver.mutability;
1547                    inner = receiver.ty.rust.clone();
1548                    generics = &receiver.ty.generics;
1549                    shorthand = receiver.shorthand;
1550                    if receiver.shorthand {
1551                        inner.set_span(receiver.var.span);
1552                    }
1553                }
1554                UnpinReason::Ref(mutable_reference) => {
1555                    ampersand = &mutable_reference.ampersand;
1556                    reference_lifetime = &mutable_reference.lifetime;
1557                    mutability = &mutable_reference.mutability;
1558                    let Type::Ident(inner_type) = &mutable_reference.inner else {
1559                        ::core::panicking::panic("internal error: entered unreachable code");unreachable!();
1560                    };
1561                    inner = inner_type.rust.clone();
1562                    generics = &inner_type.generics;
1563                    shorthand = false;
1564                }
1565                UnpinReason::Slice(mutable_slice) => {
1566                    ampersand = &mutable_slice.ampersand;
1567                    mutability = &mutable_slice.mutability;
1568                    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]);
1569                    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}");
1570                    let label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("requires `{0}: Unpin`", ident))
    })format!("requires `{ident}: Unpin`");
1571                    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! {
1572                        #cfg_and_lint_attrs
1573                        let _ = {
1574                            #[diagnostic::on_unimplemented(
1575                                message = "mutable slice of pinned type is not supported",
1576                                label = #label,
1577                            )]
1578                            trait #trait_name {
1579                                fn check_unpin() {}
1580                            }
1581                            #[diagnostic::do_not_recommend]
1582                            impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a #mutability T {}
1583                            <#ampersand #mutability #inner as #trait_name>::check_unpin
1584                        };
1585                    });
1586                    require_unpin = false;
1587                    break 'unpin;
1588                }
1589            }
1590            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}");
1591            let message =
1592                ::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}>");
1593            let label = {
1594                let mut label = Message::new();
1595                label.write_fmt(format_args!("use `"));write!(label, "use `");
1596                if shorthand {
1597                    label.write_fmt(format_args!("self: "));write!(label, "self: ");
1598                }
1599                label.write_fmt(format_args!("Pin<&"));write!(label, "Pin<&");
1600                if let Some(reference_lifetime) = reference_lifetime {
1601                    label.write_fmt(format_args!("{0} ", reference_lifetime));write!(label, "{reference_lifetime} ");
1602                }
1603                label.write_fmt(format_args!("mut {0}", ident));write!(label, "mut {ident}");
1604                if !generics.lifetimes.is_empty() {
1605                    label.write_fmt(format_args!("<"));write!(label, "<");
1606                    for (i, lifetime) in generics.lifetimes.iter().enumerate() {
1607                        if i > 0 {
1608                            label.write_fmt(format_args!(", "));write!(label, ", ");
1609                        }
1610                        label.write_fmt(format_args!("{0}", lifetime));write!(label, "{lifetime}");
1611                    }
1612                    label.write_fmt(format_args!(">"));write!(label, ">");
1613                } else if shorthand && !alias.generics.lifetimes.is_empty() {
1614                    label.write_fmt(format_args!("<"));write!(label, "<");
1615                    for i in 0..alias.generics.lifetimes.len() {
1616                        if i > 0 {
1617                            label.write_fmt(format_args!(", "));write!(label, ", ");
1618                        }
1619                        label.write_fmt(format_args!("\'_"));write!(label, "'_");
1620                    }
1621                    label.write_fmt(format_args!(">"));write!(label, ">");
1622                }
1623                label.write_fmt(format_args!(">`"));write!(label, ">`");
1624                label
1625            };
1626            let lifetimes = generics.to_underscore_lifetimes();
1627            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! {
1628                #cfg_and_lint_attrs
1629                let _ = {
1630                    #[diagnostic::on_unimplemented(message = #message, label = #label)]
1631                    trait #trait_name {
1632                        fn check_unpin() {}
1633                    }
1634                    #[diagnostic::do_not_recommend]
1635                    impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a mut T {}
1636                    <#ampersand #mutability #inner #lifetimes as #trait_name>::check_unpin
1637                };
1638            });
1639            require_unpin = false;
1640        }
1641    }
1642
1643    if require_unpin {
1644        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! {
1645            #cfg_and_lint_attrs
1646            const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1647        });
1648    }
1649
1650    if require_box {
1651        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! {
1652            #cfg_and_lint_attrs
1653            const _: fn() = ::cxx::private::require_box::<#ident #lifetimes>;
1654        });
1655    }
1656
1657    if require_vec {
1658        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! {
1659            #cfg_and_lint_attrs
1660            const _: fn() = ::cxx::private::require_vec::<#ident #lifetimes>;
1661        });
1662    }
1663
1664    if require_extern_type_trivial {
1665        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::<);
1666        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! {
1667            #cfg_and_lint_attrs
1668            const _: fn() = #begin #ident #lifetimes, ::cxx::kind::Trivial #end;
1669        });
1670    } else if let Some(slice_type) = require_rust_type_or_trivial {
1671        let ampersand = &slice_type.ampersand;
1672        let mutability = &slice_type.mutability;
1673        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]);
1674        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! {
1675            #cfg_and_lint_attrs
1676            let _ = || ::cxx::private::with::<#ident #lifetimes>().check_slice::<#ampersand #mutability #inner>();
1677        });
1678    }
1679
1680    verify
1681}
1682
1683fn type_id(name: &Pair) -> TokenStream {
1684    let namespace_segments = name.namespace.iter();
1685    let mut segments = Vec::with_capacity(namespace_segments.len() + 1);
1686    segments.extend(namespace_segments.cloned());
1687    segments.push(Ident::new(&name.cxx.to_string(), Span::call_site()));
1688    let qualified = QualifiedName { segments };
1689    crate::type_id::expand(Crate::Cxx, qualified)
1690}
1691
1692fn expand_rust_box(
1693    key: &NamedImplKey,
1694    types: &Types,
1695    conditional_impl: &ConditionalImpl,
1696) -> TokenStream {
1697    let ident = key.rust;
1698    let resolve = types.resolve(ident);
1699    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());
1700    let link_alloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}alloc", link_prefix))
    })format!("{}alloc", link_prefix);
1701    let link_dealloc = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}dealloc", link_prefix))
    })format!("{}dealloc", link_prefix);
1702    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1703
1704    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);
1705    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);
1706    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);
1707    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);
1708
1709    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1710
1711    let cfg = conditional_impl.cfg.into_attr();
1712    let begin_span = conditional_impl
1713        .explicit_impl
1714        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1715    let end_span = conditional_impl
1716        .explicit_impl
1717        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1718    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);
1719    let prevent_unwind_drop_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop", ident))
    })format!("::{} as Drop>::drop", ident);
1720
1721    {
    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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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=>
1722        #cfg
1723        #[automatically_derived]
1724        #[doc(hidden)]
1725        #unsafe_token impl #impl_generics ::cxx::private::ImplBox for #ident #ty_generics {}
1726
1727        #cfg
1728        #[doc(hidden)]
1729        #[#UnsafeAttr(#ExportNameAttr = #link_alloc)]
1730        unsafe extern "C" fn #local_alloc #impl_generics() -> *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics> {
1731            // No prevent_unwind: the global allocator is not allowed to panic.
1732            //
1733            // TODO: replace with Box::new_uninit when stable.
1734            // https://doc.rust-lang.org/std/boxed/struct.Box.html#method.new_uninit
1735            // https://github.com/rust-lang/rust/issues/63291
1736            ::cxx::alloc::boxed::Box::into_raw(::cxx::alloc::boxed::Box::new(::cxx::core::mem::MaybeUninit::uninit()))
1737        }
1738
1739        #cfg
1740        #[doc(hidden)]
1741        #[#UnsafeAttr(#ExportNameAttr = #link_dealloc)]
1742        unsafe extern "C" fn #local_dealloc #impl_generics(ptr: *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics>) {
1743            // No prevent_unwind: the global allocator is not allowed to panic.
1744            let _ = unsafe { ::cxx::alloc::boxed::Box::from_raw(ptr) };
1745        }
1746
1747        #cfg
1748        #[doc(hidden)]
1749        #[#UnsafeAttr(#ExportNameAttr = #link_drop)]
1750        unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::alloc::boxed::Box<#ident #ty_generics>) {
1751            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1752            ::cxx::private::prevent_unwind(__fn, || unsafe { ::cxx::core::ptr::drop_in_place(this) });
1753        }
1754    }
1755}
1756
1757fn expand_rust_vec(
1758    key: &NamedImplKey,
1759    types: &Types,
1760    conditional_impl: &ConditionalImpl,
1761) -> TokenStream {
1762    let elem = key.rust;
1763    let resolve = types.resolve(elem);
1764    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());
1765    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", link_prefix))
    })format!("{}new", link_prefix);
1766    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", link_prefix))
    })format!("{}drop", link_prefix);
1767    let link_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}len", link_prefix))
    })format!("{}len", link_prefix);
1768    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", link_prefix))
    })format!("{}capacity", link_prefix);
1769    let link_data = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}data", link_prefix))
    })format!("{}data", link_prefix);
1770    let link_reserve_total = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve_total", link_prefix))
    })format!("{}reserve_total", link_prefix);
1771    let link_set_len = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}set_len", link_prefix))
    })format!("{}set_len", link_prefix);
1772    let link_truncate = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}truncate", link_prefix))
    })format!("{}truncate", link_prefix);
1773
1774    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);
1775    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);
1776    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);
1777    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);
1778    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);
1779    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);
1780    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);
1781    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);
1782    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);
1783
1784    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1785
1786    let cfg = conditional_impl.cfg.into_attr();
1787    let begin_span = conditional_impl
1788        .explicit_impl
1789        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1790    let end_span = conditional_impl
1791        .explicit_impl
1792        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1793    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);
1794    let prevent_unwind_drop_label = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("::{0} as Drop>::drop", elem))
    })format!("::{} as Drop>::drop", elem);
1795
1796    {
    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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeAttr, &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::ToTokens::to_tokens(&ExportNameAttr, &mut _s);
                    ::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=>
1797        #cfg
1798        #[automatically_derived]
1799        #[doc(hidden)]
1800        #unsafe_token impl #impl_generics ::cxx::private::ImplVec for #elem #ty_generics {}
1801
1802        #cfg
1803        #[doc(hidden)]
1804        #[#UnsafeAttr(#ExportNameAttr = #link_new)]
1805        unsafe extern "C" fn #local_new #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1806            // No prevent_unwind: cannot panic.
1807            unsafe {
1808                ::cxx::core::ptr::write(this, ::cxx::private::RustVec::new());
1809            }
1810        }
1811
1812        #cfg
1813        #[doc(hidden)]
1814        #[#UnsafeAttr(#ExportNameAttr = #link_drop)]
1815        unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1816            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1817            ::cxx::private::prevent_unwind(
1818                __fn,
1819                || unsafe { ::cxx::core::ptr::drop_in_place(this) },
1820            );
1821        }
1822
1823        #cfg
1824        #[doc(hidden)]
1825        #[#UnsafeAttr(#ExportNameAttr = #link_len)]
1826        unsafe extern "C" fn #local_len #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1827            // No prevent_unwind: cannot panic.
1828            unsafe { (*this).len() }
1829        }
1830
1831        #cfg
1832        #[doc(hidden)]
1833        #[#UnsafeAttr(#ExportNameAttr = #link_capacity)]
1834        unsafe extern "C" fn #local_capacity #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1835            // No prevent_unwind: cannot panic.
1836            unsafe { (*this).capacity() }
1837        }
1838
1839        #cfg
1840        #[doc(hidden)]
1841        #[#UnsafeAttr(#ExportNameAttr = #link_data)]
1842        unsafe extern "C" fn #local_data #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> *const #elem #ty_generics {
1843            // No prevent_unwind: cannot panic.
1844            unsafe { (*this).as_ptr() }
1845        }
1846
1847        #cfg
1848        #[doc(hidden)]
1849        #[#UnsafeAttr(#ExportNameAttr = #link_reserve_total)]
1850        unsafe extern "C" fn #local_reserve_total #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, new_cap: ::cxx::core::primitive::usize) {
1851            // No prevent_unwind: the global allocator is not allowed to panic.
1852            unsafe {
1853                (*this).reserve_total(new_cap);
1854            }
1855        }
1856
1857        #cfg
1858        #[doc(hidden)]
1859        #[#UnsafeAttr(#ExportNameAttr = #link_set_len)]
1860        unsafe extern "C" fn #local_set_len #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1861            // No prevent_unwind: cannot panic.
1862            unsafe {
1863                (*this).set_len(len);
1864            }
1865        }
1866
1867        #cfg
1868        #[doc(hidden)]
1869        #[#UnsafeAttr(#ExportNameAttr = #link_truncate)]
1870        unsafe extern "C" fn #local_truncate #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1871            let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1872            ::cxx::private::prevent_unwind(
1873                __fn,
1874                || unsafe { (*this).truncate(len) },
1875            );
1876        }
1877    }
1878}
1879
1880fn expand_unique_ptr(
1881    key: &NamedImplKey,
1882    types: &Types,
1883    conditional_impl: &ConditionalImpl,
1884) -> TokenStream {
1885    let ident = key.rust;
1886    let name = ident.to_string();
1887    let resolve = types.resolve(ident);
1888    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());
1889    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
1890    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
1891    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
1892    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
1893    let link_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", prefix))
    })format!("{}release", prefix);
1894    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
1895
1896    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1897
1898    let can_construct_from_value = types.is_maybe_trivial(ident);
1899    let new_method = if can_construct_from_value {
1900        let raw_mut = if truerustversion::cfg!(since(1.82)) {
1901            {
    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");
    _s
}quote!(&raw mut)
1902        } else {
1903            {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_and(&mut _s);
    ::quote::__private::push_ident(&mut _s, "mut");
    _s
}quote!(&mut)
1904        };
1905        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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
            ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                            ::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! {
1906            fn __new(value: Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1907                #UnsafeExtern extern "C" {
1908                    #[link_name = #link_uninit]
1909                    fn __uninit(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1910                }
1911                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1912                unsafe {
1913                    __uninit(#raw_mut repr).cast::<#ident #ty_generics>().write(value);
1914                }
1915                repr
1916            }
1917        })
1918    } else {
1919        None
1920    };
1921
1922    let cfg = conditional_impl.cfg.into_attr();
1923    let begin_span = conditional_impl
1924        .explicit_impl
1925        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1926    let end_span = conditional_impl
1927        .explicit_impl
1928        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1929    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);
1930    let raw_const = if truerustversion::cfg!(since(1.82)) {
1931        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_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");
    _s
}quote_spanned!(end_span=> &raw const)
1932    } else {
1933        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    _s
}quote_spanned!(end_span=> &)
1934    };
1935    let raw_mut = if truerustversion::cfg!(since(1.82)) {
1936        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_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");
    _s
}quote_spanned!(end_span=> &raw mut)
1937    } else {
1938        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    _s
}quote_spanned!(end_span=> &mut)
1939    };
1940
1941    {
    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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_const, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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=>
1942        #cfg
1943        #[automatically_derived]
1944        #unsafe_token impl #impl_generics ::cxx::memory::UniquePtrTarget for #ident #ty_generics {
1945            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1946                f.write_str(#name)
1947            }
1948            fn __null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1949                #UnsafeExtern extern "C" {
1950                    #[link_name = #link_null]
1951                    fn __null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1952                }
1953                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1954                unsafe {
1955                    __null(#raw_mut repr);
1956                }
1957                repr
1958            }
1959            #new_method
1960            unsafe fn __raw(raw: *mut Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1961                #UnsafeExtern extern "C" {
1962                    #[link_name = #link_raw]
1963                    fn __raw(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::core::ffi::c_void);
1964                }
1965                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1966                unsafe {
1967                    __raw(#raw_mut repr, raw.cast());
1968                }
1969                repr
1970            }
1971            unsafe fn __get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const Self {
1972                #UnsafeExtern extern "C" {
1973                    #[link_name = #link_get]
1974                    fn __get(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::core::ffi::c_void;
1975                }
1976                unsafe { __get(#raw_const repr).cast() }
1977            }
1978            unsafe fn __release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut Self {
1979                #UnsafeExtern extern "C" {
1980                    #[link_name = #link_release]
1981                    fn __release(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1982                }
1983                unsafe { __release(#raw_mut repr).cast() }
1984            }
1985            unsafe fn __drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
1986                #UnsafeExtern extern "C" {
1987                    #[link_name = #link_drop]
1988                    fn __drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1989                }
1990                unsafe {
1991                    __drop(#raw_mut repr);
1992                }
1993            }
1994        }
1995    }
1996}
1997
1998fn expand_shared_ptr(
1999    key: &NamedImplKey,
2000    types: &Types,
2001    conditional_impl: &ConditionalImpl,
2002) -> TokenStream {
2003    let ident = key.rust;
2004    let name = ident.to_string();
2005    let resolve = types.resolve(ident);
2006    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());
2007    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
2008    let link_uninit = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}uninit", prefix))
    })format!("{}uninit", prefix);
2009    let link_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", prefix))
    })format!("{}raw", prefix);
2010    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
2011    let link_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", prefix))
    })format!("{}get", prefix);
2012    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
2013
2014    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2015
2016    let can_construct_from_value = types.is_maybe_trivial(ident);
2017    let new_method = if can_construct_from_value {
2018        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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
            ::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! {
2019            unsafe fn __new(value: Self, new: *mut ::cxx::core::ffi::c_void) {
2020                #UnsafeExtern extern "C" {
2021                    #[link_name = #link_uninit]
2022                    fn __uninit(new: *mut ::cxx::core::ffi::c_void) -> *mut ::cxx::core::ffi::c_void;
2023                }
2024                unsafe {
2025                    __uninit(new).cast::<#ident #ty_generics>().write(value);
2026                }
2027            }
2028        })
2029    } else {
2030        None
2031    };
2032
2033    let cfg = conditional_impl.cfg.into_attr();
2034    let begin_span = conditional_impl
2035        .explicit_impl
2036        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2037    let end_span = conditional_impl
2038        .explicit_impl
2039        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2040    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);
2041    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));
2042
2043    {
    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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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=>
2044        #cfg
2045        #[automatically_derived]
2046        #unsafe_token impl #impl_generics ::cxx::memory::SharedPtrTarget for #ident #ty_generics {
2047            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2048                f.write_str(#name)
2049            }
2050            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
2051                #UnsafeExtern extern "C" {
2052                    #[link_name = #link_null]
2053                    fn __null(new: *mut ::cxx::core::ffi::c_void);
2054                }
2055                unsafe {
2056                    __null(new);
2057                }
2058            }
2059            #new_method
2060            #[track_caller]
2061            unsafe fn __raw(new: *mut ::cxx::core::ffi::c_void, raw: *mut Self) {
2062                #UnsafeExtern extern "C" {
2063                    #[link_name = #link_raw]
2064                    fn __raw(new: *const ::cxx::core::ffi::c_void, raw: *mut ::cxx::core::ffi::c_void) -> ::cxx::core::primitive::bool;
2065                }
2066                if !unsafe { __raw(new, raw as *mut ::cxx::core::ffi::c_void) } {
2067                    ::cxx::core::panic!(#not_destructible_err);
2068                }
2069            }
2070            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2071                #UnsafeExtern extern "C" {
2072                    #[link_name = #link_clone]
2073                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2074                }
2075                unsafe {
2076                    __clone(this, new);
2077                }
2078            }
2079            unsafe fn __get(this: *const ::cxx::core::ffi::c_void) -> *const Self {
2080                #UnsafeExtern extern "C" {
2081                    #[link_name = #link_get]
2082                    fn __get(this: *const ::cxx::core::ffi::c_void) -> *const ::cxx::core::ffi::c_void;
2083                }
2084                unsafe { __get(this).cast() }
2085            }
2086            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2087                #UnsafeExtern extern "C" {
2088                    #[link_name = #link_drop]
2089                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2090                }
2091                unsafe {
2092                    __drop(this);
2093                }
2094            }
2095        }
2096    }
2097}
2098
2099fn expand_weak_ptr(
2100    key: &NamedImplKey,
2101    types: &Types,
2102    conditional_impl: &ConditionalImpl,
2103) -> TokenStream {
2104    let ident = key.rust;
2105    let name = ident.to_string();
2106    let resolve = types.resolve(ident);
2107    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());
2108    let link_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", prefix))
    })format!("{}null", prefix);
2109    let link_clone = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}clone", prefix))
    })format!("{}clone", prefix);
2110    let link_downgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}downgrade", prefix))
    })format!("{}downgrade", prefix);
2111    let link_upgrade = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}upgrade", prefix))
    })format!("{}upgrade", prefix);
2112    let link_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", prefix))
    })format!("{}drop", prefix);
2113
2114    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2115
2116    let cfg = conditional_impl.cfg.into_attr();
2117    let begin_span = conditional_impl
2118        .explicit_impl
2119        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2120    let end_span = conditional_impl
2121        .explicit_impl
2122        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2123    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);
2124
2125    {
    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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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=>
2126        #cfg
2127        #[automatically_derived]
2128        #unsafe_token impl #impl_generics ::cxx::memory::WeakPtrTarget for #ident #ty_generics {
2129            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2130                f.write_str(#name)
2131            }
2132            unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
2133                #UnsafeExtern extern "C" {
2134                    #[link_name = #link_null]
2135                    fn __null(new: *mut ::cxx::core::ffi::c_void);
2136                }
2137                unsafe {
2138                    __null(new);
2139                }
2140            }
2141            unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2142                #UnsafeExtern extern "C" {
2143                    #[link_name = #link_clone]
2144                    fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2145                }
2146                unsafe {
2147                    __clone(this, new);
2148                }
2149            }
2150            unsafe fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void) {
2151                #UnsafeExtern extern "C" {
2152                    #[link_name = #link_downgrade]
2153                    fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void);
2154                }
2155                unsafe {
2156                    __downgrade(shared, weak);
2157                }
2158            }
2159            unsafe fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void) {
2160                #UnsafeExtern extern "C" {
2161                    #[link_name = #link_upgrade]
2162                    fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void);
2163                }
2164                unsafe {
2165                    __upgrade(weak, shared);
2166                }
2167            }
2168            unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2169                #UnsafeExtern extern "C" {
2170                    #[link_name = #link_drop]
2171                    fn __drop(this: *mut ::cxx::core::ffi::c_void);
2172                }
2173                unsafe {
2174                    __drop(this);
2175                }
2176            }
2177        }
2178    }
2179}
2180
2181fn expand_cxx_vector(
2182    key: &NamedImplKey,
2183    conditional_impl: &ConditionalImpl,
2184    types: &Types,
2185) -> TokenStream {
2186    let elem = key.rust;
2187    let name = elem.to_string();
2188    let resolve = types.resolve(elem);
2189    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());
2190    let link_new = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}new", prefix))
    })format!("{}new", prefix);
2191    let link_size = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}size", prefix))
    })format!("{}size", prefix);
2192    let link_capacity = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}capacity", prefix))
    })format!("{}capacity", prefix);
2193    let link_get_unchecked = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get_unchecked", prefix))
    })format!("{}get_unchecked", prefix);
2194    let link_reserve = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}reserve", prefix))
    })format!("{}reserve", prefix);
2195    let link_push_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}push_back", prefix))
    })format!("{}push_back", prefix);
2196    let link_pop_back = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}pop_back", prefix))
    })format!("{}pop_back", prefix);
2197    let unique_ptr_prefix = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr$std$vector${0}$",
                resolve.name.to_symbol()))
    })format!(
2198        "cxxbridge1$unique_ptr$std$vector${}$",
2199        resolve.name.to_symbol(),
2200    );
2201    let link_unique_ptr_null = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}null", unique_ptr_prefix))
    })format!("{}null", unique_ptr_prefix);
2202    let link_unique_ptr_raw = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}raw", unique_ptr_prefix))
    })format!("{}raw", unique_ptr_prefix);
2203    let link_unique_ptr_get = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}get", unique_ptr_prefix))
    })format!("{}get", unique_ptr_prefix);
2204    let link_unique_ptr_release = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}release", unique_ptr_prefix))
    })format!("{}release", unique_ptr_prefix);
2205    let link_unique_ptr_drop = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0}drop", unique_ptr_prefix))
    })format!("{}drop", unique_ptr_prefix);
2206
2207    let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2208
2209    let cfg = conditional_impl.cfg.into_attr();
2210    let begin_span = conditional_impl
2211        .explicit_impl
2212        .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2213    let end_span = conditional_impl
2214        .explicit_impl
2215        .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2216    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);
2217
2218    let can_pass_element_by_value = types.is_maybe_trivial(elem);
2219    let by_value_methods = if can_pass_element_by_value {
2220        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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
            ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
            ::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=>
2221            unsafe fn __push_back(
2222                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2223                value: &mut ::cxx::core::mem::ManuallyDrop<Self>,
2224            ) {
2225                #UnsafeExtern extern "C" {
2226                    #[link_name = #link_push_back]
2227                    fn __push_back #impl_generics(
2228                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2229                        value: *mut ::cxx::core::ffi::c_void,
2230                    );
2231                }
2232                unsafe {
2233                    __push_back(
2234                        this,
2235                        value as *mut ::cxx::core::mem::ManuallyDrop<Self> as *mut ::cxx::core::ffi::c_void,
2236                    );
2237                }
2238            }
2239            unsafe fn __pop_back(
2240                this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2241                out: &mut ::cxx::core::mem::MaybeUninit<Self>,
2242            ) {
2243                #UnsafeExtern extern "C" {
2244                    #[link_name = #link_pop_back]
2245                    fn __pop_back #impl_generics(
2246                        this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2247                        out: *mut ::cxx::core::ffi::c_void,
2248                    );
2249                }
2250                unsafe {
2251                    __pop_back(
2252                        this,
2253                        out as *mut ::cxx::core::mem::MaybeUninit<Self> as *mut ::cxx::core::ffi::c_void,
2254                    );
2255                }
2256            }
2257        })
2258    } else {
2259        None
2260    };
2261
2262    let raw_const = if truerustversion::cfg!(since(1.82)) {
2263        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_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");
    _s
}quote_spanned!(end_span=> &raw const)
2264    } else {
2265        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    _s
}quote_spanned!(end_span=> &)
2266    };
2267    let raw_mut = if truerustversion::cfg!(since(1.82)) {
2268        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_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");
    _s
}quote_spanned!(end_span=> &raw mut)
2269    } else {
2270        {
    let mut _s = ::quote::__private::TokenStream::new();
    let _span: ::quote::__private::Span =
        ::quote::__private::get_span(end_span).__into_span();
    ::quote::__private::push_and_spanned(&mut _s, _span);
    ::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
    _s
}quote_spanned!(end_span=> &mut)
2271    };
2272
2273    let not_move_constructible_err = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0} is not move constructible",
                display_namespaced(resolve.name)))
    })format!(
2274        "{} is not move constructible",
2275        display_namespaced(resolve.name),
2276    );
2277
2278    {
    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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_const, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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::ToTokens::to_tokens(&UnsafeExtern, &mut _s);
                    ::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::ToTokens::to_tokens(&raw_mut, &mut _s);
                                    ::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=>
2279        #cfg
2280        #[automatically_derived]
2281        #unsafe_token impl #impl_generics ::cxx::vector::VectorElement for #elem #ty_generics {
2282            fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2283                f.write_str(#name)
2284            }
2285            fn __vector_new() -> *mut ::cxx::CxxVector<Self> {
2286                #UnsafeExtern extern "C" {
2287                    #[link_name = #link_new]
2288                    fn __vector_new #impl_generics() -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2289                }
2290                unsafe { __vector_new() }
2291            }
2292            fn __vector_size(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2293                #UnsafeExtern extern "C" {
2294                    #[link_name = #link_size]
2295                    fn __vector_size #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2296                }
2297                unsafe { __vector_size(v) }
2298            }
2299            fn __vector_capacity(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2300                #UnsafeExtern extern "C" {
2301                    #[link_name = #link_capacity]
2302                    fn __vector_capacity #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2303                }
2304                unsafe { __vector_capacity(v) }
2305            }
2306            unsafe fn __get_unchecked(v: *mut ::cxx::CxxVector<Self>, pos: ::cxx::core::primitive::usize) -> *mut Self {
2307                #UnsafeExtern extern "C" {
2308                    #[link_name = #link_get_unchecked]
2309                    fn __get_unchecked #impl_generics(
2310                        v: *mut ::cxx::CxxVector<#elem #ty_generics>,
2311                        pos: ::cxx::core::primitive::usize,
2312                    ) -> *mut ::cxx::core::ffi::c_void;
2313                }
2314                unsafe { __get_unchecked(v, pos) as *mut Self }
2315            }
2316            unsafe fn __reserve(v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>, new_cap: ::cxx::core::primitive::usize) {
2317                #UnsafeExtern extern "C" {
2318                    #[link_name = #link_reserve]
2319                    fn __reserve #impl_generics(
2320                        v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2321                        new_cap: ::cxx::core::primitive::usize,
2322                    ) -> ::cxx::core::primitive::bool;
2323                }
2324                if !unsafe { __reserve(v, new_cap) } {
2325                    ::cxx::core::panic!(#not_move_constructible_err);
2326                }
2327            }
2328            #by_value_methods
2329            fn __unique_ptr_null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2330                #UnsafeExtern extern "C" {
2331                    #[link_name = #link_unique_ptr_null]
2332                    fn __unique_ptr_null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2333                }
2334                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2335                unsafe {
2336                    __unique_ptr_null(#raw_mut repr);
2337                }
2338                repr
2339            }
2340            unsafe fn __unique_ptr_raw(raw: *mut ::cxx::CxxVector<Self>) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2341                #UnsafeExtern extern "C" {
2342                    #[link_name = #link_unique_ptr_raw]
2343                    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>);
2344                }
2345                let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2346                unsafe {
2347                    __unique_ptr_raw(#raw_mut repr, raw);
2348                }
2349                repr
2350            }
2351            unsafe fn __unique_ptr_get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<Self> {
2352                #UnsafeExtern extern "C" {
2353                    #[link_name = #link_unique_ptr_get]
2354                    fn __unique_ptr_get #impl_generics(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<#elem #ty_generics>;
2355                }
2356                unsafe { __unique_ptr_get(#raw_const repr) }
2357            }
2358            unsafe fn __unique_ptr_release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<Self> {
2359                #UnsafeExtern extern "C" {
2360                    #[link_name = #link_unique_ptr_release]
2361                    fn __unique_ptr_release #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2362                }
2363                unsafe { __unique_ptr_release(#raw_mut repr) }
2364            }
2365            unsafe fn __unique_ptr_drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
2366                #UnsafeExtern extern "C" {
2367                    #[link_name = #link_unique_ptr_drop]
2368                    fn __unique_ptr_drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2369                }
2370                unsafe {
2371                    __unique_ptr_drop(#raw_mut repr);
2372                }
2373            }
2374        }
2375    }
2376}
2377
2378fn expand_return_type(ret: &Option<Type>) -> TokenStream {
2379    match ret {
2380        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),
2381        None => TokenStream::new(),
2382    }
2383}
2384
2385fn indirect_return(sig: &Signature, types: &Types, lang: Lang) -> bool {
2386    sig.ret.as_ref().is_some_and(|ret| {
2387        sig.throws
2388            || types.needs_indirect_abi(ret)
2389            || match lang {
2390                Lang::Cxx | Lang::CxxUnwind => types.contains_elided_lifetime(ret),
2391                Lang::Rust => false,
2392            }
2393    })
2394}
2395
2396fn expand_extern_type(ty: &Type, types: &Types, proper: bool) -> TokenStream {
2397    match ty {
2398        Type::Ident(ident) if ident.rust == RustString => {
2399            let span = ident.rust.span();
2400            {
    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)
2401        }
2402        Type::RustBox(ty) | Type::UniquePtr(ty) => {
2403            let span = ty.name.span();
2404            if proper && types.is_considered_improper_ctype(&ty.inner) {
2405                {
    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)
2406            } else {
2407                let inner = expand_extern_type(&ty.inner, types, proper);
2408                {
    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)
2409            }
2410        }
2411        Type::RustVec(ty) => {
2412            // Replace Vec<Foo> with ::cxx::private::RustVec<Foo>. Both have the
2413            // same layout but only the latter has a predictable ABI. Note that
2414            // the overall size and alignment are independent of the element
2415            // type, but the field order inside of Vec may not be.
2416            let span = ty.name.span();
2417            let langle = ty.langle;
2418            let elem = &ty.inner;
2419            let rangle = ty.rangle;
2420            {
    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)
2421        }
2422        Type::Ref(ty) => {
2423            let ampersand = ty.ampersand;
2424            let lifetime = &ty.lifetime;
2425            let mutability = ty.mutability;
2426            match &ty.inner {
2427                Type::Ident(ident) if ident.rust == RustString => {
2428                    let span = ident.rust.span();
2429                    {
    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)
2430                }
2431                Type::RustVec(ty) => {
2432                    let span = ty.name.span();
2433                    let langle = ty.langle;
2434                    let inner = &ty.inner;
2435                    let rangle = ty.rangle;
2436                    {
    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)
2437                }
2438                inner if proper && types.is_considered_improper_ctype(inner) => {
2439                    let star = ::syn::token::StarToken![*](ampersand.span);
2440                    match ty.mutable {
2441                        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),
2442                        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),
2443                    }
2444                }
2445                _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2446            }
2447        }
2448        Type::Ptr(ty) => {
2449            if proper && types.is_considered_improper_ctype(&ty.inner) {
2450                let star = ty.star;
2451                let mutability = ty.mutability;
2452                let constness = ty.constness;
2453                {
    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)
2454            } else {
2455                {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty)
2456            }
2457        }
2458        Type::Str(ty) => {
2459            let span = ty.ampersand.span;
2460            let rust_str = Ident::new("RustStr", syn::spanned::Spanned::span(&ty.inner));
2461            {
    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)
2462        }
2463        Type::SliceRef(ty) => {
2464            let span = ty.ampersand.span;
2465            let rust_slice = Ident::new("RustSlice", ty.bracket.span.join());
2466            {
    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)
2467        }
2468        _ => {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(#ty),
2469    }
2470}
2471
2472fn expand_extern_return_type(
2473    sig: &Signature,
2474    types: &Types,
2475    proper: bool,
2476    lang: Lang,
2477) -> TokenStream {
2478    let ret = match &sig.ret {
2479        Some(ret) if !indirect_return(sig, types, lang) => ret,
2480        _ => return TokenStream::new(),
2481    };
2482    let ty = expand_extern_type(ret, types, proper);
2483    {
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_rarrow(&mut _s);
    ::quote::ToTokens::to_tokens(&ty, &mut _s);
    _s
}quote!(-> #ty)
2484}
2485
2486fn display_namespaced(name: &Pair) -> impl Display + '_ {
2487    struct Namespaced<'a>(&'a Pair);
2488
2489    impl<'a> Display for Namespaced<'a> {
2490        fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2491            for segment in &self.0.namespace {
2492                formatter.write_fmt(format_args!("{0}::", segment))write!(formatter, "{segment}::")?;
2493            }
2494            formatter.write_fmt(format_args!("{0}", self.0.cxx))write!(formatter, "{}", self.0.cxx)
2495        }
2496    }
2497
2498    Namespaced(name)
2499}
2500
2501// #UnsafeExtern extern "C" {...}
2502// https://blog.rust-lang.org/2024/10/17/Rust-1.82.0.html#safe-items-with-unsafe-extern
2503struct UnsafeExtern;
2504
2505impl ToTokens for UnsafeExtern {
2506    fn to_tokens(&self, tokens: &mut TokenStream) {
2507        if truerustversion::cfg!(since(1.82)) {
2508            ::syn::token::UnsafeToken![unsafe](Span::call_site()).to_tokens(tokens);
2509        }
2510    }
2511}
2512
2513// #[#UnsafeAttr(#ExportNameAttr = "...")]
2514// https://blog.rust-lang.org/2024/10/17/Rust-1.82.0.html#unsafe-attributes
2515struct UnsafeAttr;
2516struct ExportNameAttr;
2517
2518impl ToTokens for UnsafeAttr {
2519    fn to_tokens(&self, tokens: &mut TokenStream) {
2520        if truerustversion::cfg!(since(1.82)) {
2521            ::syn::token::UnsafeToken![unsafe](Span::call_site()).to_tokens(tokens);
2522        } else {
2523            Ident::new("cfg_attr", Span::call_site()).to_tokens(tokens);
2524        }
2525    }
2526}
2527
2528impl ToTokens for ExportNameAttr {
2529    fn to_tokens(&self, tokens: &mut TokenStream) {
2530        if truerustversion::cfg!(since(1.82)) {
2531            Ident::new("export_name", Span::call_site()).to_tokens(tokens);
2532        } else {
2533            tokens.extend({
    let mut _s = ::quote::__private::TokenStream::new();
    ::quote::__private::push_ident(&mut _s, "all");
    ::quote::__private::push_group(&mut _s,
        ::quote::__private::Delimiter::Parenthesis,
        ::quote::__private::TokenStream::new());
    ::quote::__private::push_comma(&mut _s);
    ::quote::__private::push_ident(&mut _s, "export_name");
    _s
}quote!(all(), export_name));
2534        }
2535    }
2536}