1use crate::syntax::atom::Atom::*;
2use crate::syntax::attrs::{self, OtherAttrs};
3use crate::syntax::cfg::{CfgExpr, ComputedCfg};
4use crate::syntax::file::Module;
5use crate::syntax::instantiate::{ImplKey, NamedImplKey};
6use crate::syntax::map::OrderedMap;
7use crate::syntax::message::Message;
8use crate::syntax::namespace::Namespace;
9use crate::syntax::qualified::QualifiedName;
10use crate::syntax::report::Errors;
11use crate::syntax::set::UnorderedSet;
12use crate::syntax::symbol::Symbol;
13use crate::syntax::trivial::TrivialReason;
14use crate::syntax::types::ConditionalImpl;
15use crate::syntax::unpin::UnpinReason;
16use crate::syntax::{
17 self, check, mangle, Api, Doc, Enum, ExternFn, ExternType, FnKind, Lang, Pair, Signature,
18 Struct, Trait, Type, TypeAlias, Types,
19};
20use crate::type_id::Crate;
21use crate::{derive, generics};
22use proc_macro2::{Ident, Span, TokenStream};
23use quote::{format_ident, quote, quote_spanned, ToTokens};
24use std::fmt::{self, Display};
25use std::mem;
26use syn::{parse_quote, GenericParam, Generics, Lifetime, Result, Token, Visibility};
27
28pub(crate) fn bridge(mut ffi: Module) -> Result<TokenStream> {
29 let ref mut errors = Errors::new();
30
31 let mut cfg = CfgExpr::Unconditional;
32 let mut doc = Doc::new();
33 let attrs = attrs::parse(
34 errors,
35 mem::take(&mut ffi.attrs),
36 attrs::Parser {
37 cfg: Some(&mut cfg),
38 doc: Some(&mut doc),
39 ..Default::default()
40 },
41 );
42
43 let content = mem::take(&mut ffi.content);
44 let trusted = ffi.unsafety.is_some();
45 let namespace = &ffi.namespace;
46 let ref mut apis = syntax::parse_items(errors, content, trusted, namespace);
47 let ref types = Types::collect(errors, apis);
48 errors.propagate()?;
49
50 let generator = check::Generator::Macro;
51 check::typecheck(errors, apis, types, generator);
52 errors.propagate()?;
53
54 Ok(expand(ffi, doc, attrs, apis, types))
55}
56
57fn expand(ffi: Module, doc: Doc, attrs: OtherAttrs, apis: &[Api], types: &Types) -> TokenStream {
58 let mut expanded = TokenStream::new();
59 let mut hidden = TokenStream::new();
60 let mut forbid = TokenStream::new();
61
62 for api in apis {
63 if let Api::RustType(ety) = api {
64 expanded.extend(expand_rust_type_import(ety));
65 hidden.extend(expand_rust_type_assert_unpin(ety, types));
66 }
67 }
68
69 for api in apis {
70 match api {
71 Api::Include(_) | Api::Impl(_) => {}
72 Api::Struct(strct) => {
73 expanded.extend(expand_struct(strct));
74 expanded.extend(expand_associated_functions(&strct.name.rust, types));
75 hidden.extend(expand_struct_nonempty(strct));
76 hidden.extend(expand_struct_operators(strct));
77 forbid.extend(expand_struct_forbid_drop(strct));
78 }
79 Api::Enum(enm) => expanded.extend(expand_enum(enm)),
80 Api::CxxType(ety) => {
81 let ident = &ety.name.rust;
82 if types.structs.contains_key(ident) {
83 hidden.extend(expand_extern_shared_struct(ety, &ffi));
84 } else if !types.enums.contains_key(ident) {
85 expanded.extend(expand_cxx_type(ety));
86 expanded.extend(expand_associated_functions(&ety.name.rust, types));
87 hidden.extend(expand_cxx_type_assert_pinned(ety, types));
88 }
89 }
90 Api::CxxFunction(efn) => {
91 if efn.self_type().is_none() {
92 expanded.extend(expand_cxx_function_shim(efn, types));
93 }
94 }
95 Api::RustType(ety) => {
96 expanded.extend(expand_rust_type_impl(ety));
97 expanded.extend(expand_associated_functions(&ety.name.rust, types));
98 hidden.extend(expand_rust_type_layout(ety, types));
99 }
100 Api::RustFunction(efn) => hidden.extend(expand_rust_function_shim(efn, types)),
101 Api::TypeAlias(alias) => {
102 expanded.extend(expand_type_alias(alias));
103 expanded.extend(expand_associated_functions(&alias.name.rust, types));
104 hidden.extend(expand_type_alias_verify(alias, types));
105 }
106 }
107 }
108
109 for (impl_key, conditional_impl) in &types.impls {
110 match impl_key {
111 ImplKey::RustBox(ident) => {
112 hidden.extend(expand_rust_box(ident, types, conditional_impl));
113 }
114 ImplKey::RustVec(ident) => {
115 hidden.extend(expand_rust_vec(ident, types, conditional_impl));
116 }
117 ImplKey::UniquePtr(ident) => {
118 expanded.extend(expand_unique_ptr(ident, types, conditional_impl));
119 }
120 ImplKey::SharedPtr(ident) => {
121 expanded.extend(expand_shared_ptr(ident, types, conditional_impl));
122 }
123 ImplKey::WeakPtr(ident) => {
124 expanded.extend(expand_weak_ptr(ident, types, conditional_impl));
125 }
126 ImplKey::CxxVector(ident) => {
127 expanded.extend(expand_cxx_vector(ident, conditional_impl, types));
128 }
129 }
130 }
131
132 if !forbid.is_empty() {
133 hidden.extend(expand_forbid(forbid));
134 }
135
136 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 let vis = field.visibility;
187 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&doc, &mut _s);
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::ToTokens::to_tokens(&vis, &mut _s);
::quote::ToTokens::to_tokens(&field, &mut _s);
_s
}quote!(#doc #all_attrs #vis #field)
188 });
189 let mut derives = None;
190 let derived_traits = derive::expand_struct(strct, &mut derives);
191
192 let span = ident.span();
193 let visibility = strct.visibility;
194 let struct_token = strct.struct_token;
195 let struct_def = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&visibility, &mut _s);
::quote::ToTokens::to_tokens(&struct_token, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut fields, i) = fields.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let fields =
match fields.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&fields, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
_s
});
_s
}quote_spanned! {span=>
196 #visibility #struct_token #ident #generics {
197 #(#fields,)*
198 }
199 };
200
201 let align = strct.align.as_ref().map(|align| {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "align");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&align, &mut _s);
_s
});
_s
}quote!(, align(#align)));
202
203 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&doc, &mut _s);
::quote::ToTokens::to_tokens(&derives, &mut _s);
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "repr");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "C");
::quote::ToTokens::to_tokens(&align, &mut _s);
_s
});
_s
});
::quote::ToTokens::to_tokens(&struct_def, &mut _s);
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "automatically_derived");
_s
});
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ExternType");
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "allow");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s,
"unused_attributes");
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "doc");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "hidden");
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Id");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&type_id, &mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Kind");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "kind");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Trivial");
::quote::__private::push_semi(&mut _s);
_s
});
::quote::ToTokens::to_tokens(&derived_traits, &mut _s);
_s
}quote! {
204 #doc
205 #derives
206 #all_attrs
207 #[repr(C #align)]
208 #struct_def
209
210 #cfg_and_lint_attrs
211 #[automatically_derived]
212 unsafe impl #generics ::cxx::ExternType for #ident #generics {
213 #[allow(unused_attributes)] #[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 TokenStream::new()
239 } else {
240 let meta = cfg.as_meta();
241 let msg = "structs without any fields are not supported";
242 let error = syn::Error::new_spanned(strct, msg).into_compile_error();
243 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "cfg");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "not");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&meta, &mut _s);
_s
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&error, &mut _s);
_s
}quote! {
244 #[cfg(not(#meta))]
245 #error
246 }
247 }
248}
249
250fn expand_struct_operators(strct: &Struct) -> TokenStream {
251 let ident = &strct.name.rust;
252 let generics = &strct.generics;
253 let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
254 let mut operators = TokenStream::new();
255
256 for derive in &strct.derives {
257 let span = derive.span;
258 match derive.what {
259 Trait::PartialEq => {
260 let link_name = mangle::operator(&strct.name, "eq");
261 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_eq_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_eq_{}", strct.name.rust);
262 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialEq>::eq",
strct.name.rust))
})format!("::{} as PartialEq>::eq", strct.name.rust);
263 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_eq_eq_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
264 #cfg_and_lint_attrs
265 #[doc(hidden)]
266 #[unsafe(export_name = #link_name)]
267 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
268 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
269 ::cxx::private::prevent_unwind(__fn, || *lhs == *rhs)
270 }
271 });
272
273 if !derive::contains(&strct.derives, Trait::Eq) {
274 let link_name = mangle::operator(&strct.name, "ne");
275 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_ne_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_ne_{}", strct.name.rust);
276 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialEq>::ne",
strct.name.rust))
})format!("::{} as PartialEq>::ne", strct.name.rust);
277 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_ne_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
278 #cfg_and_lint_attrs
279 #[doc(hidden)]
280 #[unsafe(export_name = #link_name)]
281 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
282 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
283 ::cxx::private::prevent_unwind(__fn, || *lhs != *rhs)
284 }
285 });
286 }
287 }
288 Trait::PartialOrd => {
289 let link_name = mangle::operator(&strct.name, "lt");
290 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_lt_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_lt_{}", strct.name.rust);
291 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialOrd>::lt",
strct.name.rust))
})format!("::{} as PartialOrd>::lt", strct.name.rust);
292 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
293 #cfg_and_lint_attrs
294 #[doc(hidden)]
295 #[unsafe(export_name = #link_name)]
296 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
297 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
298 ::cxx::private::prevent_unwind(__fn, || *lhs < *rhs)
299 }
300 });
301
302 let link_name = mangle::operator(&strct.name, "le");
303 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_le_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_le_{}", strct.name.rust);
304 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialOrd>::le",
strct.name.rust))
})format!("::{} as PartialOrd>::le", strct.name.rust);
305 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_le_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
306 #cfg_and_lint_attrs
307 #[doc(hidden)]
308 #[unsafe(export_name = #link_name)]
309 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
310 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
311 ::cxx::private::prevent_unwind(__fn, || *lhs <= *rhs)
312 }
313 });
314
315 if !derive::contains(&strct.derives, Trait::Ord) {
316 let link_name = mangle::operator(&strct.name, "gt");
317 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_gt_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_gt_{}", strct.name.rust);
318 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialOrd>::gt",
strct.name.rust))
})format!("::{} as PartialOrd>::gt", strct.name.rust);
319 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
320 #cfg_and_lint_attrs
321 #[doc(hidden)]
322 #[unsafe(export_name = #link_name)]
323 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
324 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
325 ::cxx::private::prevent_unwind(__fn, || *lhs > *rhs)
326 }
327 });
328
329 let link_name = mangle::operator(&strct.name, "ge");
330 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_ge_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_ge_{}", strct.name.rust);
331 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as PartialOrd>::ge",
strct.name.rust))
})format!("::{} as PartialOrd>::ge", strct.name.rust);
332 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "lhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "rhs");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "bool");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"lhs");
::quote::__private::push_ge_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"rhs");
_s
});
_s
});
_s
}quote_spanned! {span=>
333 #cfg_and_lint_attrs
334 #[doc(hidden)]
335 #[unsafe(export_name = #link_name)]
336 extern "C" fn #local_name #generics(lhs: &#ident #generics, rhs: &#ident #generics) -> ::cxx::core::primitive::bool {
337 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
338 ::cxx::private::prevent_unwind(__fn, || *lhs >= *rhs)
339 }
340 });
341 }
342 }
343 Trait::Hash => {
344 let link_name = mangle::operator(&strct.name, "hash");
345 let local_name = match ::quote::__private::IdentFragmentAdapter(&strct.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__operator_hash_{0}",
arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__operator_hash_{}", strct.name.rust);
346 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as Hash>::hash",
strct.name.rust))
})format!("::{} as Hash>::hash", strct.name.rust);
347 operators.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "allow");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"clippy");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cast_possible_truncation");
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"hash");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
_s
});
_s
});
_s
}quote_spanned! {span=>
348 #cfg_and_lint_attrs
349 #[doc(hidden)]
350 #[unsafe(export_name = #link_name)]
351 #[allow(clippy::cast_possible_truncation)]
352 extern "C" fn #local_name #generics(this: &#ident #generics) -> ::cxx::core::primitive::usize {
353 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_label);
354 ::cxx::private::prevent_unwind(__fn, || ::cxx::private::hash(this))
355 }
356 });
357 }
358 _ => {}
359 }
360 }
361
362 operators
363}
364
365fn expand_struct_forbid_drop(strct: &Struct) -> TokenStream {
366 let ident = &strct.name.rust;
367 let generics = &strct.generics;
368 let cfg_and_lint_attrs = strct.attrs.cfg_and_lint();
369 let span = ident.span();
370 let impl_token = ::syn::token::ImplToken;
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;
405 let enum_repr = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "allow");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "missing_docs");
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "pub");
::quote::__private::push_ident(&mut _s, "repr");
::quote::__private::push_colon(&mut _s);
::quote::ToTokens::to_tokens(&repr, &mut _s);
::quote::__private::push_comma(&mut _s);
_s
}quote! {
406 #[allow(missing_docs)]
407 pub repr: #repr,
408 };
409 let enum_def = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&visibility, &mut _s);
::quote::ToTokens::to_tokens(&struct_token, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&enum_repr, &mut _s);
_s
});
_s
}quote_spanned! {span=>
410 #visibility #struct_token #ident {
411 #enum_repr
412 }
413 };
414
415 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&doc, &mut _s);
::quote::ToTokens::to_tokens(&derives, &mut _s);
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "repr");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "transparent");
_s
});
_s
});
::quote::ToTokens::to_tokens(&enum_def, &mut _s);
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "allow");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s,
"non_upper_case_globals");
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut variants, i) = variants.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let variants =
match variants.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&variants, &mut _s);
}
}
_s
});
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "automatically_derived");
_s
});
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "impl");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ExternType");
::quote::__private::push_ident(&mut _s, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "allow");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s,
"unused_attributes");
_s
});
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "doc");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "hidden");
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Id");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&type_id, &mut _s);
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "type");
::quote::__private::push_ident(&mut _s, "Kind");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "kind");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Trivial");
::quote::__private::push_semi(&mut _s);
_s
});
::quote::ToTokens::to_tokens(&derived_traits, &mut _s);
_s
}quote! {
416 #doc
417 #derives
418 #all_attrs
419 #[repr(transparent)]
420 #enum_def
421
422 #cfg_and_lint_attrs
423 #[allow(non_upper_case_globals)]
424 impl #ident {
425 #(#variants)*
426 }
427
428 #cfg_and_lint_attrs
429 #[automatically_derived]
430 unsafe impl ::cxx::ExternType for #ident {
431 #[allow(unused_attributes)] #[doc(hidden)]
433 type Id = #type_id;
434 type Kind = ::cxx::kind::Trivial;
435 }
436
437 #derived_traits
438 }
439}
440
441fn expand_cxx_type(ety: &ExternType) -> TokenStream {
442 let ident = &ety.name.rust;
443 let doc = &ety.doc;
444 let all_attrs = ety.attrs.all();
445 let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
446 let generics = &ety.generics;
447 let type_id = type_id(&ety.name);
448
449 let lifetime_fields = ety.generics.lifetimes.iter().map(|lifetime| {
450 let field = match ::quote::__private::IdentFragmentAdapter(&lifetime.ident) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("_lifetime_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("_lifetime_{}", lifetime.ident);
451 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&field, &mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "PhantomData");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_and(&mut _s);
::quote::ToTokens::to_tokens(&lifetime, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_gt(&mut _s);
_s
}quote!(#field: ::cxx::core::marker::PhantomData<&#lifetime ()>)
452 });
453 let repr_fields = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "_private");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Opaque");
::quote::__private::push_comma(&mut _s);
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut lifetime_fields, i) = lifetime_fields.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let lifetime_fields =
match lifetime_fields.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&lifetime_fields, &mut _s);
::quote::__private::push_comma(&mut _s);
}
}
_s
}quote! {
454 _private: ::cxx::private::Opaque,
455 #(#lifetime_fields,)*
456 };
457
458 let span = ident.span();
459 let visibility = &ety.visibility;
460 let struct_token = ::syn::token::StructToken;
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)] #[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);
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 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 <#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);
647 let impl_lt_token = efn.generics.lt_token;
648 let impl_gt_token = efn.generics.gt_token;
649 let self_type = efn.self_type().unwrap();
650 let function = expand_cxx_function_shim(efn, types);
651 tokens.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&self_type_cfg_attrs, &mut _s);
::quote::ToTokens::to_tokens(&impl_token, &mut _s);
::quote::ToTokens::to_tokens(&impl_lt_token, &mut _s);
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let impl_lifetimes =
match impl_lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 { ::quote::__private::push_comma(&mut _s); }
_i += 1;
::quote::ToTokens::to_tokens(&impl_lifetimes, &mut _s);
}
}
::quote::ToTokens::to_tokens(&impl_gt_token, &mut _s);
::quote::ToTokens::to_tokens(&self_type, &mut _s);
::quote::ToTokens::to_tokens(&self_lt_token, &mut _s);
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut self_type_lifetimes, i) =
self_type_lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let self_type_lifetimes =
match self_type_lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 { ::quote::__private::push_comma(&mut _s); }
_i += 1;
::quote::ToTokens::to_tokens(&self_type_lifetimes, &mut _s);
}
}
::quote::ToTokens::to_tokens(&self_gt_token, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&function, &mut _s);
_s
});
_s
}quote! {
652 #self_type_cfg_attrs
653 #impl_token #impl_lt_token #(#impl_lifetimes),* #impl_gt_token #self_type #self_lt_token #(#self_type_lifetimes),* #self_gt_token {
654 #function
655 }
656 });
657 }
658 }
659
660 for ((impl_lifetimes, self_type_lifetimes), functions) in &group_by_lifetimes {
661 let functions = functions
662 .iter()
663 .map(|efn| expand_cxx_function_shim(efn, types));
664 tokens.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&self_type_cfg_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "impl");
::quote::__private::push_lt(&mut _s);
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut impl_lifetimes, i) = impl_lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let impl_lifetimes =
match impl_lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 { ::quote::__private::push_comma(&mut _s); }
_i += 1;
::quote::ToTokens::to_tokens(&impl_lifetimes, &mut _s);
}
}
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&self_type, &mut _s);
::quote::__private::push_lt(&mut _s);
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut self_type_lifetimes, i) =
self_type_lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let self_type_lifetimes =
match self_type_lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 { ::quote::__private::push_comma(&mut _s); }
_i += 1;
::quote::ToTokens::to_tokens(&self_type_lifetimes, &mut _s);
}
}
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut functions, i) = functions.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let functions =
match functions.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&functions, &mut _s);
}
}
_s
});
_s
}quote! {
665 #self_type_cfg_attrs
666 impl <#(#impl_lifetimes),*> #self_type <#(#self_type_lifetimes),*> {
667 #(#functions)*
668 }
669 });
670 }
671
672 tokens
673}
674
675fn expand_cxx_function_decl(efn: &ExternFn, types: &Types) -> TokenStream {
676 let receiver = efn.receiver().into_iter().map(|receiver| {
677 if types.is_considered_improper_ctype(&receiver.ty) {
678 if receiver.mutable {
679 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
}quote!(_: *mut ::cxx::core::ffi::c_void)
680 } else {
681 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
}quote!(_: *const ::cxx::core::ffi::c_void)
682 }
683 } else {
684 let receiver_type = receiver.ty();
685 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
_s
}quote!(_: #receiver_type)
686 }
687 });
688 let args = efn.args.iter().map(|arg| {
689 let var = &arg.name.rust;
690 let colon = arg.colon_token;
691 let ty = expand_extern_type(&arg.ty, types, true);
692 if arg.ty == RustString {
693 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon *const #ty)
694 } else if let Type::RustVec(_) = arg.ty {
695 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon *const #ty)
696 } else if let Type::Fn(_) = arg.ty {
697 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "FatFunction");
_s
}quote!(#var #colon ::cxx::private::FatFunction)
698 } else if types.needs_indirect_abi(&arg.ty) {
699 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon *mut #ty)
700 } else {
701 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon #ty)
702 }
703 });
704 let all_args = receiver.chain(args);
705 let ret = if efn.throws {
706 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Result");
_s
}quote!(-> ::cxx::private::Result)
707 } else {
708 expand_extern_return_type(efn, types, true, efn.lang)
709 };
710 let mut outparam = None;
711 if indirect_return(efn, types, efn.lang) {
712 let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
713 outparam = Some({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__return");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::ToTokens::to_tokens(&ret, &mut _s);
_s
}quote!(__return: *mut #ret));
714 }
715 let link_name = mangle::extern_fn(efn, types);
716 let local_name = match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust);
717 let lt_token = efn.generics.lt_token.unwrap_or_default();
718 let undeclared_lifetimes = efn.undeclared_lifetimes().into_iter();
719 let declared_lifetimes = &efn.generics.params;
720 let gt_token = efn.generics.gt_token.unwrap_or_default();
721 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "link_name");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(<_token, &mut _s);
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut undeclared_lifetimes, i) =
undeclared_lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let undeclared_lifetimes =
match undeclared_lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&undeclared_lifetimes, &mut _s);
::quote::__private::push_comma(&mut _s);
}
}
::quote::ToTokens::to_tokens(&declared_lifetimes, &mut _s);
::quote::ToTokens::to_tokens(>_token, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut all_args, i) = all_args.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let all_args =
match all_args.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&all_args, &mut _s);
::quote::__private::push_comma(&mut _s);
}
}
::quote::ToTokens::to_tokens(&outparam, &mut _s);
_s
});
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
722 #[link_name = #link_name]
723 fn #local_name #lt_token #(#undeclared_lifetimes,)* #declared_lifetimes #gt_token(#(#all_args,)* #outparam) #ret;
724 }
725}
726
727fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
728 let doc = &efn.doc;
729 let all_attrs = efn.attrs.all();
730 let decl = expand_cxx_function_decl(efn, types);
731 let receiver = efn.receiver().into_iter().map(|receiver| {
732 let var = receiver.var;
733 if receiver.pinned {
734 let colon = receiver.colon_token;
735 let ty = receiver.ty_self();
736 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon #ty)
737 } else {
738 let ampersand = receiver.ampersand;
739 let lifetime = &receiver.lifetime;
740 let mutability = receiver.mutability;
741 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&ersand, &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 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "new");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {span=>
857 let mut #var = ::cxx::core::mem::MaybeUninit::new(#var);
858 }
859 })
860 .collect::<TokenStream>();
861 let local_name = match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust);
862 let span = efn.semi_token.span;
863 let call = if indirect_return {
864 let ret = expand_extern_type(efn.ret.as_ref().unwrap(), types, true);
865 setup.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {span=>
866 let mut __return = ::cxx::core::mem::MaybeUninit::<#ret>::uninit();
867 });
868 setup.extend(if efn.throws {
869 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&vars, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
::quote::__private::push_ident_spanned(&mut _s, _span,
"__return");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as_mut_ptr");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "exception");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_question_spanned(&mut _s, _span);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {span=>
870 #local_name(#(#vars,)* __return.as_mut_ptr()).exception()?;
871 }
872 } else {
873 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&vars, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
::quote::__private::push_ident_spanned(&mut _s, _span,
"__return");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as_mut_ptr");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {span=>
874 #local_name(#(#vars,)* __return.as_mut_ptr());
875 }
876 });
877 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "assume_init");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> __return.assume_init())
878 } else if efn.throws {
879 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 {
::quote::__private::push_comma_spanned(&mut _s, _span);
}
_i += 1;
::quote::ToTokens::to_tokens(&vars, &mut _s);
}
}
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "exception");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned! {span=>
880 #local_name(#(#vars),*).exception()
881 }
882 } else {
883 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 {
::quote::__private::push_comma_spanned(&mut _s, _span);
}
_i += 1;
::quote::ToTokens::to_tokens(&vars, &mut _s);
}
}
_s
});
_s
}quote_spanned! {span=>
884 #local_name(#(#vars),*)
885 }
886 };
887 let mut expr;
888 if let Some(ret) = &efn.ret {
889 expr = match ret {
890 Type::Ident(ident) if ident.rust == RustString => {
891 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "into_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.into_string())
892 }
893 Type::RustBox(ty) => {
894 if types.is_considered_improper_ctype(&ty.inner) {
895 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#call.cast()))
896 } else {
897 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#call))
898 }
899 }
900 Type::RustVec(_) => {
901 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "into_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.into_vec())
902 }
903 Type::UniquePtr(ty) => {
904 if types.is_considered_improper_ctype(&ty.inner) {
905 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#call.cast()))
906 } else {
907 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#call))
908 }
909 }
910 Type::Ref(ty) => match &ty.inner {
911 Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
912 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_string()),
913 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_mut_string()),
914 },
915 Type::RustVec(_) => match ty.mutable {
916 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_vec()),
917 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_mut_vec()),
918 },
919 inner if types.is_considered_improper_ctype(inner) => {
920 let mutability = ty.mutability;
921 let deref_mut = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> &#mutability *#call.cast());
922 match ty.pinned {
923 false => deref_mut,
924 true => {
925 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "new_unchecked");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&deref_mut, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::core::pin::Pin::new_unchecked(#deref_mut))
926 }
927 }
928 }
929 _ => call,
930 },
931 Type::Ptr(ty) => {
932 if types.is_considered_improper_ctype(&ty.inner) {
933 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.cast())
934 } else {
935 call
936 }
937 }
938 Type::Str(_) => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_str()),
939 Type::SliceRef(slice) => {
940 let inner = &slice.inner;
941 match slice.mutable {
942 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_slice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_slice::<#inner>()),
943 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_slice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #call.as_mut_slice::<#inner>()),
944 }
945 }
946 _ => call,
947 };
948 if efn.throws {
949 expr = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "result");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Ok");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::core::result::Result::Ok(#expr));
950 }
951 } else if efn.throws {
952 expr = call;
953 } else {
954 expr = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! { #call; };
955 }
956 let dispatch = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&setup, &mut _s);
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned!(span=> unsafe { #setup #expr });
957 let visibility = efn.visibility;
958 let unsafety = &efn.unsafety;
959 let fn_token = efn.fn_token;
960 let ident = &efn.name.rust;
961 let lt_token = efn.generics.lt_token;
962 let lifetimes = {
963 let mut self_type_lifetimes = UnorderedSet::new();
964 if let FnKind::Method(receiver) = &efn.kind {
965 self_type_lifetimes.extend(&receiver.ty.generics.lifetimes);
966 }
967 efn.generics
968 .params
969 .pairs()
970 .filter(move |param| match param.value() {
971 GenericParam::Lifetime(param) => !self_type_lifetimes.contains(¶m.lifetime),
972 GenericParam::Type(_) | GenericParam::Const(_) => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
973 })
974 };
975 let gt_token = efn.generics.gt_token;
976 let arg_list = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(efn.paren_token.span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut all_args, i) = all_args.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let all_args =
match all_args.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&all_args, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
_s
});
_s
}quote_spanned!(efn.paren_token.span=> (#(#all_args,)*));
977 let calling_conv = match efn.lang {
978 Lang::Cxx => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
_s
}quote_spanned!(span=> "C"),
979 Lang::CxxUnwind => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"C-unwind\"");
_s
}quote_spanned!(span=> "C-unwind"),
980 Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
981 };
982 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&doc, &mut _s);
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::ToTokens::to_tokens(&visibility, &mut _s);
::quote::ToTokens::to_tokens(&unsafety, &mut _s);
::quote::ToTokens::to_tokens(&fn_token, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(<_token, &mut _s);
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut lifetimes, i) = lifetimes.quote_into_iter();
let has_iter = has_iter | i;
<_ as ::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let lifetimes =
match lifetimes.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
}
}
::quote::ToTokens::to_tokens(>_token, &mut _s);
::quote::ToTokens::to_tokens(&arg_list, &mut _s);
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::ToTokens::to_tokens(&calling_conv, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&decl, &mut _s);
_s
});
::quote::ToTokens::to_tokens(&trampolines, &mut _s);
::quote::ToTokens::to_tokens(&dispatch, &mut _s);
_s
});
_s
}quote_spanned! {span=>
983 #doc
984 #all_attrs
985 #visibility #unsafety #fn_token #ident #lt_token #(#lifetimes)* #gt_token #arg_list #ret {
986 unsafe extern #calling_conv {
987 #decl
988 }
989 #trampolines
990 #dispatch
991 }
992 }
993}
994
995fn expand_function_pointer_trampoline(
996 efn: &ExternFn,
997 var: &Pair,
998 sig: &Signature,
999 types: &Types,
1000) -> TokenStream {
1001 let c_trampoline = mangle::c_trampoline(efn, var, types);
1002 let r_trampoline = mangle::r_trampoline(efn, var, types);
1003 let local_name = ::syn::__private::parse_quote({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__");
_s
})parse_quote!(__);
1004 let prevent_unwind_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0}::{1}", efn.name.rust,
var.rust))
})format!("::{}::{}", efn.name.rust, var.rust);
1005 let body_span = efn.semi_token.span;
1006 let shim = expand_rust_function_shim_impl(
1007 sig,
1008 types,
1009 &r_trampoline,
1010 local_name,
1011 prevent_unwind_label,
1012 None,
1013 Some(&efn.generics),
1014 &efn.attrs,
1015 body_span,
1016 );
1017 let calling_conv = match efn.lang {
1018 Lang::Cxx => "C",
1019 Lang::CxxUnwind => "C-unwind",
1020 Lang::Rust => ::core::panicking::panic("internal error: entered unreachable code")unreachable!(),
1021 };
1022 let var = &var.rust;
1023
1024 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "let");
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "FatFunction");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "trampoline");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "extern");
::quote::ToTokens::to_tokens(&calling_conv, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "link_name");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&c_trampoline, &mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "trampoline");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_semi(&mut _s);
_s
});
::quote::ToTokens::to_tokens(&shim, &mut _s);
::quote::__private::push_ident(&mut _s, "trampoline");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "primitive");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "usize");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
});
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "ptr");
::quote::__private::push_colon(&mut _s);
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "primitive");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "usize");
::quote::__private::push_ident(&mut _s, "as");
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
::quote::__private::push_comma(&mut _s);
_s
});
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1025 let #var = ::cxx::private::FatFunction {
1026 trampoline: {
1027 unsafe extern #calling_conv {
1028 #[link_name = #c_trampoline]
1029 fn trampoline();
1030 }
1031 #shim
1032 trampoline as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void
1033 },
1034 ptr: #var as ::cxx::core::primitive::usize as *const ::cxx::core::ffi::c_void,
1035 };
1036 }
1037}
1038
1039fn expand_rust_type_import(ety: &ExternType) -> TokenStream {
1040 let ident = &ety.name.rust;
1041 let all_attrs = ety.attrs.all();
1042 let span = ident.span();
1043
1044 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "use");
::quote::__private::push_ident_spanned(&mut _s, _span, "super");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {span=>
1045 #all_attrs
1046 use super::#ident;
1047 }
1048}
1049
1050fn expand_rust_type_impl(ety: &ExternType) -> TokenStream {
1051 let ident = &ety.name.rust;
1052 let generics = &ety.generics;
1053 let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1054 let span = ident.span();
1055 let unsafe_impl = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(ety.type_token.span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
_s
}quote_spanned!(ety.type_token.span=> unsafe impl);
1056
1057 let mut impls = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::ToTokens::to_tokens(&unsafe_impl, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustType");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned! {span=>
1058 #cfg_and_lint_attrs
1059 #[automatically_derived]
1060 #[doc(hidden)]
1061 #unsafe_impl #generics ::cxx::private::RustType for #ident #generics {}
1062 };
1063
1064 for derive in &ety.derives {
1065 if derive.what == Trait::ExternType {
1066 let type_id = type_id(&ety.name);
1067 let span = derive.span;
1068 impls.extend({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ExternType");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"allow");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unused_attributes");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "type");
::quote::__private::push_ident_spanned(&mut _s, _span, "Id");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&type_id, &mut _s);
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "type");
::quote::__private::push_ident_spanned(&mut _s, _span, "Kind");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "kind");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Opaque");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
}quote_spanned! {span=>
1069 #cfg_and_lint_attrs
1070 #[automatically_derived]
1071 unsafe impl #generics ::cxx::ExternType for #ident #generics {
1072 #[allow(unused_attributes)] #[doc(hidden)]
1074 type Id = #type_id;
1075 type Kind = ::cxx::kind::Opaque;
1076 }
1077 });
1078 }
1079 }
1080
1081 impls
1082}
1083
1084fn expand_rust_type_assert_unpin(ety: &ExternType, types: &Types) -> TokenStream {
1085 let ident = &ety.name.rust;
1086 let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1087
1088 let resolve = types.resolve(ident);
1089 let lifetimes = resolve.generics.to_underscore_lifetimes();
1090
1091 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(ident.span()).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_underscore_spanned(&mut _s, _span);
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "require_unpin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
}quote_spanned! {ident.span()=>
1092 #cfg_and_lint_attrs
1093 const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1094 }
1095}
1096
1097fn expand_rust_type_layout(ety: &ExternType, types: &Types) -> TokenStream {
1098 let ident = &ety.name.rust;
1107 let cfg_and_lint_attrs = ety.attrs.cfg_and_lint();
1108 let begin_span = ::syn::token::PathSepToken;
1109 let sized = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(ety.semi_token.span).__into_span();
::quote::ToTokens::to_tokens(&begin_span, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "marker");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Sized");
_s
}quote_spanned! {ety.semi_token.span=>
1110 #begin_span cxx::core::marker::Sized
1111 };
1112
1113 let link_sizeof = mangle::operator(&ety.name, "sizeof");
1114 let link_alignof = mangle::operator(&ety.name, "alignof");
1115
1116 let local_sizeof = match ::quote::__private::IdentFragmentAdapter(&ety.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__sizeof_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__sizeof_{}", ety.name.rust);
1117 let local_alignof = match ::quote::__private::IdentFragmentAdapter(&ety.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__alignof_{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__alignof_{}", ety.name.rust);
1118
1119 let resolve = types.resolve(ident);
1120 let lifetimes = resolve.generics.to_underscore_lifetimes();
1121
1122 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(ident.span()).__into_span();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"allow");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"clippy");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"needless_maybe_sized");
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__AssertSized");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "T");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_question_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&sized, &mut _s);
::quote::__private::push_add_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&sized, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Layout");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Layout");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "T");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_sizeof, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_sizeof, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__AssertSized");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"size");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_alignof, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_alignof, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__AssertSized");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"align");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
_s
}quote_spanned! {ident.span()=>
1123 #cfg_and_lint_attrs
1124 {
1125 #[doc(hidden)]
1126 #[allow(clippy::needless_maybe_sized)]
1127 fn __AssertSized<T: ?#sized + #sized>() -> ::cxx::core::alloc::Layout {
1128 ::cxx::core::alloc::Layout::new::<T>()
1129 }
1130 #[doc(hidden)]
1131 #[unsafe(export_name = #link_sizeof)]
1132 extern "C" fn #local_sizeof() -> ::cxx::core::primitive::usize {
1133 __AssertSized::<#ident #lifetimes>().size()
1134 }
1135 #[doc(hidden)]
1136 #[unsafe(export_name = #link_alignof)]
1137 extern "C" fn #local_alignof() -> ::cxx::core::primitive::usize {
1138 __AssertSized::<#ident #lifetimes>().align()
1139 }
1140 }
1141 }
1142}
1143
1144fn expand_forbid(impls: TokenStream) -> TokenStream {
1145 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "mod");
::quote::__private::push_ident(&mut _s, "forbid");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "pub");
::quote::__private::push_ident(&mut _s, "trait");
::quote::__private::push_ident(&mut _s, "Drop");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s,
"automatically_derived");
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "allow");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "drop_bounds");
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_question(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Sized");
::quote::__private::push_add(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ops");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Drop");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_ident(&mut _s, "self");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Drop");
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
::quote::ToTokens::to_tokens(&impls, &mut _s);
_s
});
_s
}quote! {
1146 mod forbid {
1147 pub trait Drop {}
1148 #[automatically_derived]
1149 #[allow(drop_bounds)]
1150 impl<T: ?::cxx::core::marker::Sized + ::cxx::core::ops::Drop> self::Drop for T {}
1151 #impls
1152 }
1153 }
1154}
1155
1156fn expand_rust_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
1157 let link_name = mangle::extern_fn(efn, types);
1158 let local_name = match efn.self_type() {
1159 None => match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__{0}", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("__{}", efn.name.rust),
1160 Some(self_type) => match ::quote::__private::IdentFragmentAdapter(&self_type) {
arg =>
match ::quote::__private::IdentFragmentAdapter(&efn.name.rust) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("__{0}__{1}", arg, arg))
}),
::quote::__private::Option::None.or(arg.span()).or(arg.span())),
},
}format_ident!("__{}__{}", self_type, efn.name.rust),
1161 };
1162 let prevent_unwind_label = match efn.self_type() {
1163 None => ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0}", efn.name.rust))
})format!("::{}", efn.name.rust),
1164 Some(self_type) => ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0}::{1}", self_type,
efn.name.rust))
})format!("::{}::{}", self_type, efn.name.rust),
1165 };
1166 let invoke = Some(&efn.name.rust);
1167 let body_span = efn.semi_token.span;
1168 expand_rust_function_shim_impl(
1169 efn,
1170 types,
1171 &link_name,
1172 local_name,
1173 prevent_unwind_label,
1174 invoke,
1175 None,
1176 &efn.attrs,
1177 body_span,
1178 )
1179}
1180
1181fn expand_rust_function_shim_impl(
1182 sig: &Signature,
1183 types: &Types,
1184 link_name: &Symbol,
1185 local_name: Ident,
1186 prevent_unwind_label: String,
1187 invoke: Option<&Ident>,
1188 outer_generics: Option<&Generics>,
1189 attrs: &OtherAttrs,
1190 body_span: Span,
1191) -> TokenStream {
1192 let all_attrs = attrs.all();
1193 let generics = outer_generics.unwrap_or(&sig.generics);
1194 let receiver_var = sig
1195 .receiver()
1196 .map(|receiver| {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(receiver.var.span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__self");
_s
}quote_spanned!(receiver.var.span=> __self));
1197 let receiver = sig.receiver().map(|receiver| {
1198 let colon = receiver.colon_token;
1199 let receiver_type = receiver.ty();
1200 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&receiver_var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
_s
}quote!(#receiver_var #colon #receiver_type)
1201 });
1202 let args = sig.args.iter().map(|arg| {
1203 let var = &arg.name.rust;
1204 let colon = arg.colon_token;
1205 let ty = expand_extern_type(&arg.ty, types, false);
1206 if types.needs_indirect_abi(&arg.ty) {
1207 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon *mut #ty)
1208 } else {
1209 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::ToTokens::to_tokens(&colon, &mut _s);
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#var #colon #ty)
1210 }
1211 });
1212 let all_args = receiver.into_iter().chain(args);
1213
1214 let mut requires_unsafe = false;
1215 let arg_vars = sig.args.iter().map(|arg| {
1216 let var = &arg.name.rust;
1217 let span = var.span();
1218 match &arg.ty {
1219 Type::Ident(i) if i.rust == RustString => {
1220 requires_unsafe = true;
1221 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "take");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as_mut_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
}quote_spanned!(span=> ::cxx::core::mem::take((*#var).as_mut_string()))
1222 }
1223 Type::RustBox(_) => {
1224 requires_unsafe = true;
1225 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::from_raw(#var))
1226 }
1227 Type::RustVec(_) => {
1228 requires_unsafe = true;
1229 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "take");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as_mut_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
}quote_spanned!(span=> ::cxx::core::mem::take((*#var).as_mut_vec()))
1230 }
1231 Type::UniquePtr(_) => {
1232 requires_unsafe = true;
1233 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::UniquePtr::from_raw(#var))
1234 }
1235 Type::Ref(ty) => match &ty.inner {
1236 Type::Ident(i) if i.rust == RustString => match ty.mutable {
1237 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_string()),
1238 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_string");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_mut_string()),
1239 },
1240 Type::RustVec(_) => match ty.mutable {
1241 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_vec()),
1242 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_vec");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_mut_vec()),
1243 },
1244 _ => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
}quote!(#var),
1245 },
1246 Type::Str(_) => {
1247 requires_unsafe = true;
1248 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_str())
1249 }
1250 Type::SliceRef(slice) => {
1251 requires_unsafe = true;
1252 let inner = &slice.inner;
1253 match slice.mutable {
1254 false => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_slice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_slice::<#inner>()),
1255 true => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "as_mut_slice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> #var.as_mut_slice::<#inner>()),
1256 }
1257 }
1258 ty if types.needs_indirect_abi(ty) => {
1259 requires_unsafe = true;
1260 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "read");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::core::ptr::read(#var))
1261 }
1262 _ => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&var, &mut _s);
_s
}quote!(#var),
1263 }
1264 });
1265 let vars: Vec<_> = receiver_var.into_iter().chain(arg_vars).collect();
1266
1267 let mut requires_closure;
1268 let mut call = match invoke {
1269 Some(_) => {
1270 requires_closure = false;
1271 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
_s
}quote!(#local_name)
1272 }
1273 None => {
1274 requires_closure = true;
1275 requires_unsafe = true;
1276 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "mem");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "transmute");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_comma(&mut _s);
::quote::ToTokens::to_tokens(&sig, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__extern");
_s
});
_s
}quote!(::cxx::core::mem::transmute::<*const (), #sig>(__extern))
1277 }
1278 };
1279 requires_closure |= !vars.is_empty();
1280 call.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
{
use ::quote::__private::ext::*;
let mut _i = 0usize;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
if _i > 0 { ::quote::__private::push_comma(&mut _s); }
_i += 1;
::quote::ToTokens::to_tokens(&vars, &mut _s);
}
}
_s
});
_s
}quote! { (#(#vars),*) });
1281
1282 let wrap_super = invoke.map(|invoke| {
1283 let unsafety = sig.unsafety.filter(|_| requires_closure);
1286 expand_rust_function_shim_super(sig, &local_name, invoke, unsafety)
1287 });
1288
1289 let span = body_span;
1290 let conversion = sig.ret.as_ref().and_then(|ret| match ret {
1291 Type::Ident(ident) if ident.rust == RustString => {
1292 Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from");
_s
}quote_spanned!(span=> ::cxx::private::RustString::from))
1293 }
1294 Type::RustBox(_) => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
_s
}quote_spanned!(span=> ::cxx::alloc::boxed::Box::into_raw)),
1295 Type::RustVec(_) => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from");
_s
}quote_spanned!(span=> ::cxx::private::RustVec::from)),
1296 Type::UniquePtr(_) => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "into_raw");
_s
}quote_spanned!(span=> ::cxx::UniquePtr::into_raw)),
1297 Type::Ref(ty) => match &ty.inner {
1298 Type::Ident(ident) if ident.rust == RustString => match ty.mutable {
1299 false => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
_s
}quote_spanned!(span=> ::cxx::private::RustString::from_ref)),
1300 true => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
_s
}quote_spanned!(span=> ::cxx::private::RustString::from_mut)),
1301 },
1302 Type::RustVec(_) => match ty.mutable {
1303 false => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
_s
}quote_spanned!(span=> ::cxx::private::RustVec::from_ref)),
1304 true => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
_s
}quote_spanned!(span=> ::cxx::private::RustVec::from_mut)),
1305 },
1306 _ => None,
1307 },
1308 Type::Str(_) => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustStr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from");
_s
}quote_spanned!(span=> ::cxx::private::RustStr::from)),
1309 Type::SliceRef(ty) => match ty.mutable {
1310 false => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_ref");
_s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_ref)),
1311 true => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustSlice");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "from_mut");
_s
}quote_spanned!(span=> ::cxx::private::RustSlice::from_mut)),
1312 },
1313 _ => None,
1314 });
1315
1316 let mut expr = match conversion {
1317 None => call,
1318 Some(conversion) if !sig.throws => {
1319 requires_closure = true;
1320 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&conversion, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
_s
});
_s
}quote_spanned!(span=> #conversion(#call))
1321 }
1322 Some(conversion) => {
1323 requires_closure = true;
1324 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "result");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "map");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&conversion, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::core::result::Result::map(#call, #conversion))
1325 }
1326 };
1327
1328 let mut outparam = None;
1329 let indirect_return = indirect_return(sig, types, Lang::Rust);
1330 if indirect_return {
1331 let ret = expand_extern_type(sig.ret.as_ref().unwrap(), types, false);
1332 outparam = Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
}quote_spanned!(span=> __return: *mut #ret,));
1333 }
1334 if sig.throws {
1335 let out = match sig.ret {
1336 Some(_) => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__return");
_s
}quote_spanned!(span=> __return),
1337 None => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> &mut ()),
1338 };
1339 requires_closure = true;
1340 requires_unsafe = true;
1341 expr = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "r#try");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&out, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::private::r#try(#out, #expr));
1342 } else if indirect_return {
1343 requires_closure = true;
1344 requires_unsafe = true;
1345 expr = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "write");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__return");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::core::ptr::write(__return, #expr));
1346 }
1347
1348 if requires_unsafe {
1349 expr = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned!(span=> unsafe { #expr });
1350 }
1351
1352 let closure = if requires_closure {
1353 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "move");
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
}quote_spanned!(span=> move || #expr)
1354 } else {
1355 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&local_name, &mut _s);
_s
}quote!(#local_name)
1356 };
1357
1358 expr = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&closure, &mut _s);
_s
});
_s
}quote_spanned!(span=> ::cxx::private::prevent_unwind(__fn, #closure));
1359
1360 let ret = if sig.throws {
1361 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Result");
_s
}quote!(-> ::cxx::private::Result)
1362 } else {
1363 expand_extern_return_type(sig, types, false, Lang::Rust)
1364 };
1365
1366 let pointer = match invoke {
1367 None => Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "__extern");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
}quote_spanned!(span=> __extern: *const ())),
1368 Some(_) => None,
1369 };
1370
1371 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut all_args, i) = all_args.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let all_args =
match all_args.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&all_args, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
::quote::ToTokens::to_tokens(&outparam, &mut _s);
::quote::ToTokens::to_tokens(&pointer, &mut _s);
_s
});
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&wrap_super, &mut _s);
::quote::ToTokens::to_tokens(&expr, &mut _s);
_s
});
_s
}quote_spanned! {span=>
1372 #all_attrs
1373 #[doc(hidden)]
1374 #[unsafe(export_name = #link_name)]
1375 unsafe extern "C" fn #local_name #generics(#(#all_args,)* #outparam #pointer) #ret {
1376 let __fn = ::cxx::core::concat!(::cxx::core::module_path!(), #prevent_unwind_label);
1377 #wrap_super
1378 #expr
1379 }
1380 }
1381}
1382
1383fn expand_rust_function_shim_super(
1386 sig: &Signature,
1387 local_name: &Ident,
1388 invoke: &Ident,
1389 unsafety: Option<Token![unsafe]>,
1390) -> TokenStream {
1391 let generics = &sig.generics;
1392
1393 let receiver_var = sig
1394 .receiver()
1395 .map(|receiver| Ident::new("__self", receiver.var.span));
1396 let receiver = sig.receiver().into_iter().map(|receiver| {
1397 let receiver_type = receiver.ty();
1398 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&receiver_var, &mut _s);
::quote::__private::push_colon(&mut _s);
::quote::ToTokens::to_tokens(&receiver_type, &mut _s);
_s
}quote!(#receiver_var: #receiver_type)
1399 });
1400 let args = sig.args.iter().map(|arg| {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&arg, &mut _s);
_s
}quote!(#arg));
1401 let all_args = receiver.chain(args);
1402
1403 let ret = if let Some((result, _langle, rangle)) = sig.throws_tokens {
1404 let ok = match &sig.ret {
1405 Some(ret) => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&ret, &mut _s);
_s
}quote!(#ret),
1406 None => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
_s
}quote!(()),
1407 };
1408 let result_begin = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(result.span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "result");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ok, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
_s
}quote_spanned!(result.span=> ::cxx::core::result::Result<#ok, impl);
1411 let result_end = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(rangle.span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Display");
::quote::__private::push_add_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "use");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_shr_spanned(&mut _s, _span);
_s
}quote_spanned!(rangle.span=> ::cxx::core::fmt::Display + use<>>);
1412 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_rarrow(&mut _s);
::quote::ToTokens::to_tokens(&result_begin, &mut _s);
::quote::ToTokens::to_tokens(&result_end, &mut _s);
_s
}quote!(-> #result_begin #result_end)
1413 } else {
1414 expand_return_type(&sig.ret)
1415 };
1416
1417 let arg_vars = sig.args.iter().map(|arg| &arg.name.rust);
1418 let vars = receiver_var.iter().chain(arg_vars);
1419
1420 let span = invoke.span();
1421 let call = match sig.self_type() {
1422 None => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "super");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&invoke, &mut _s);
_s
}quote_spanned!(span=> super::#invoke),
1423 Some(self_type) => {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&self_type, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&invoke, &mut _s);
_s
}quote_spanned!(span=> #self_type::#invoke),
1424 };
1425
1426 let mut body = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&call, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut vars, i) = vars.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let vars =
match vars.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&vars, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
_s
});
_s
}quote_spanned!(span=> #call(#(#vars,)*));
1427 let mut allow_unused_unsafe = None;
1428 if sig.unsafety.is_some() {
1429 body = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&body, &mut _s);
_s
});
_s
}quote_spanned!(span=> unsafe { #body });
1430 allow_unused_unsafe = Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "allow");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unused_unsafe");
_s
});
_s
});
_s
}quote_spanned!(span=> #[allow(unused_unsafe)]));
1431 }
1432
1433 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&allow_unused_unsafe, &mut _s);
::quote::ToTokens::to_tokens(&unsafety, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_name, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
{
use ::quote::__private::ext::*;
let has_iter = ::quote::__private::HasIterator::<false>;
#[allow(unused_mut)]
let (mut all_args, i) = all_args.quote_into_iter();
let has_iter = has_iter | i;
<_ as
::quote::__private::CheckHasIterator<true>>::check(has_iter);
while true {
let all_args =
match all_args.next() {
Some(_x) => ::quote::__private::RepInterp(_x),
None => break,
};
::quote::ToTokens::to_tokens(&all_args, &mut _s);
::quote::__private::push_comma_spanned(&mut _s, _span);
}
}
_s
});
::quote::ToTokens::to_tokens(&ret, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&body, &mut _s);
_s
});
_s
}quote_spanned! {span=>
1434 #allow_unused_unsafe
1435 #unsafety fn #local_name #generics(#(#all_args,)*) #ret {
1436 #body
1437 }
1438 }
1439}
1440
1441fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
1442 let doc = &alias.doc;
1443 let all_attrs = alias.attrs.all();
1444 let visibility = alias.visibility;
1445 let type_token = alias.type_token;
1446 let ident = &alias.name.rust;
1447 let generics = &alias.generics;
1448 let eq_token = alias.eq_token;
1449 let ty = &alias.ty;
1450 let semi_token = alias.semi_token;
1451
1452 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&doc, &mut _s);
::quote::ToTokens::to_tokens(&all_attrs, &mut _s);
::quote::ToTokens::to_tokens(&visibility, &mut _s);
::quote::ToTokens::to_tokens(&type_token, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&generics, &mut _s);
::quote::ToTokens::to_tokens(&eq_token, &mut _s);
::quote::ToTokens::to_tokens(&ty, &mut _s);
::quote::ToTokens::to_tokens(&semi_token, &mut _s);
_s
}quote! {
1453 #doc
1454 #all_attrs
1455 #visibility #type_token #ident #generics #eq_token #ty #semi_token
1456 }
1457}
1458
1459fn expand_type_alias_verify(alias: &TypeAlias, types: &Types) -> TokenStream {
1460 let cfg_and_lint_attrs = alias.attrs.cfg_and_lint();
1461 let ident = &alias.name.rust;
1462 let type_id = type_id(&alias.name);
1463 let begin_span = alias.type_token.span;
1464 let end_span = alias.semi_token.span;
1465 let begin = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(begin_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"verify_extern_type");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
_s
}quote_spanned!(begin_span=> ::cxx::private::verify_extern_type::<);
1466 let end = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
}quote_spanned!(end_span=> >);
1467
1468 let resolve = types.resolve(ident);
1469 let lifetimes = resolve.generics.to_underscore_lifetimes();
1470
1471 let mut verify = {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&begin, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::ToTokens::to_tokens(&type_id, &mut _s);
::quote::ToTokens::to_tokens(&end, &mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1472 #cfg_and_lint_attrs
1473 const _: fn() = #begin #ident #lifetimes, #type_id #end;
1474 };
1475
1476 let mut require_unpin = false;
1477 let mut require_box = false;
1478 let mut require_vec = false;
1479 let mut require_extern_type_trivial = false;
1480 let mut require_rust_type_or_trivial = None;
1481 if let Some(reasons) = types.required_trivial.get(&alias.name.rust) {
1482 for reason in reasons {
1483 match reason {
1484 TrivialReason::BoxTarget { local: true }
1485 | TrivialReason::VecElement { local: true } => require_unpin = true,
1486 TrivialReason::BoxTarget { local: false } => require_box = true,
1487 TrivialReason::VecElement { local: false } => require_vec = true,
1488 TrivialReason::StructField(_)
1489 | TrivialReason::FunctionArgument(_)
1490 | TrivialReason::FunctionReturn(_) => require_extern_type_trivial = true,
1491 TrivialReason::SliceElement(slice) => require_rust_type_or_trivial = Some(slice),
1492 }
1493 }
1494 }
1495
1496 'unpin: {
1497 if let Some(reason) = types.required_unpin.get(ident) {
1498 let ampersand;
1499 let reference_lifetime;
1500 let mutability;
1501 let mut inner;
1502 let generics;
1503 let shorthand;
1504 match reason {
1505 UnpinReason::Receiver(receiver) => {
1506 ampersand = &receiver.ampersand;
1507 reference_lifetime = &receiver.lifetime;
1508 mutability = &receiver.mutability;
1509 inner = receiver.ty.rust.clone();
1510 generics = &receiver.ty.generics;
1511 shorthand = receiver.shorthand;
1512 if receiver.shorthand {
1513 inner.set_span(receiver.var.span);
1514 }
1515 }
1516 UnpinReason::Ref(mutable_reference) => {
1517 ampersand = &mutable_reference.ampersand;
1518 reference_lifetime = &mutable_reference.lifetime;
1519 mutability = &mutable_reference.mutability;
1520 let Type::Ident(inner_type) = &mutable_reference.inner else {
1521 ::core::panicking::panic("internal error: entered unreachable code");unreachable!();
1522 };
1523 inner = inner_type.rust.clone();
1524 generics = &inner_type.generics;
1525 shorthand = false;
1526 }
1527 UnpinReason::Slice(mutable_slice) => {
1528 ampersand = &mutable_slice.ampersand;
1529 mutability = &mutable_slice.mutability;
1530 let inner = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(mutable_slice.bracket.span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
_s
});
_s
}quote_spanned!(mutable_slice.bracket.span=> [#ident #lifetimes]);
1531 let trait_name = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("SliceOfUnpin_{0}", ident))
}), ::quote::__private::Option::None)format_ident!("SliceOfUnpin_{ident}");
1532 let label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("requires `{0}: Unpin`", ident))
})format!("requires `{ident}: Unpin`");
1533 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "let");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_eq(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "on_unimplemented");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "message");
::quote::__private::push_eq(&mut _s);
::quote::__private::parse(&mut _s,
"\"mutable slice of pinned type is not supported\"");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "label");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&label, &mut _s);
::quote::__private::push_comma(&mut _s);
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "trait");
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "check_unpin");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'a");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_question(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Sized");
::quote::__private::push_add(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Unpin");
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'a");
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ersand, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_ident(&mut _s, "as");
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "check_unpin");
_s
});
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1534 #cfg_and_lint_attrs
1535 let _ = {
1536 #[diagnostic::on_unimplemented(
1537 message = "mutable slice of pinned type is not supported",
1538 label = #label,
1539 )]
1540 trait #trait_name {
1541 fn check_unpin() {}
1542 }
1543 #[diagnostic::do_not_recommend]
1544 impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a #mutability T {}
1545 <#ampersand #mutability #inner as #trait_name>::check_unpin
1546 };
1547 });
1548 require_unpin = false;
1549 break 'unpin;
1550 }
1551 }
1552 let trait_name = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("ReferenceToUnpin_{0}",
ident))
}), ::quote::__private::Option::None)format_ident!("ReferenceToUnpin_{ident}");
1553 let message =
1554 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("mutable reference to C++ type requires a pin -- use Pin<&mut {0}>",
ident))
})format!("mutable reference to C++ type requires a pin -- use Pin<&mut {ident}>");
1555 let label = {
1556 let mut label = Message::new();
1557 label.write_fmt(format_args!("use `"));write!(label, "use `");
1558 if shorthand {
1559 label.write_fmt(format_args!("self: "));write!(label, "self: ");
1560 }
1561 label.write_fmt(format_args!("Pin<&"));write!(label, "Pin<&");
1562 if let Some(reference_lifetime) = reference_lifetime {
1563 label.write_fmt(format_args!("{0} ", reference_lifetime));write!(label, "{reference_lifetime} ");
1564 }
1565 label.write_fmt(format_args!("mut {0}", ident));write!(label, "mut {ident}");
1566 if !generics.lifetimes.is_empty() {
1567 label.write_fmt(format_args!("<"));write!(label, "<");
1568 for (i, lifetime) in generics.lifetimes.iter().enumerate() {
1569 if i > 0 {
1570 label.write_fmt(format_args!(", "));write!(label, ", ");
1571 }
1572 label.write_fmt(format_args!("{0}", lifetime));write!(label, "{lifetime}");
1573 }
1574 label.write_fmt(format_args!(">"));write!(label, ">");
1575 } else if shorthand && !alias.generics.lifetimes.is_empty() {
1576 label.write_fmt(format_args!("<"));write!(label, "<");
1577 for i in 0..alias.generics.lifetimes.len() {
1578 if i > 0 {
1579 label.write_fmt(format_args!(", "));write!(label, ", ");
1580 }
1581 label.write_fmt(format_args!("\'_"));write!(label, "'_");
1582 }
1583 label.write_fmt(format_args!(">"));write!(label, ">");
1584 }
1585 label.write_fmt(format_args!(">`"));write!(label, ">`");
1586 label
1587 };
1588 let lifetimes = generics.to_underscore_lifetimes();
1589 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "let");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_eq(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "on_unimplemented");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "message");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&message, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "label");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&label, &mut _s);
_s
});
_s
});
::quote::__private::push_ident(&mut _s, "trait");
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "check_unpin");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
_s
});
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "diagnostic");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "do_not_recommend");
_s
});
::quote::__private::push_ident(&mut _s, "impl");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'a");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_question(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Sized");
::quote::__private::push_add(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "marker");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Unpin");
::quote::__private::push_gt(&mut _s);
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_ident(&mut _s, "for");
::quote::__private::push_and(&mut _s);
::quote::__private::push_lifetime(&mut _s, "\'a");
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_ident(&mut _s, "T");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
::quote::__private::TokenStream::new());
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ersand, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_ident(&mut _s, "as");
::quote::ToTokens::to_tokens(&trait_name, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "check_unpin");
_s
});
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1590 #cfg_and_lint_attrs
1591 let _ = {
1592 #[diagnostic::on_unimplemented(message = #message, label = #label)]
1593 trait #trait_name {
1594 fn check_unpin() {}
1595 }
1596 #[diagnostic::do_not_recommend]
1597 impl<'a, T: ?::cxx::core::marker::Sized + ::cxx::core::marker::Unpin> #trait_name for &'a mut T {}
1598 <#ampersand #mutability #inner #lifetimes as #trait_name>::check_unpin
1599 };
1600 });
1601 require_unpin = false;
1602 }
1603 }
1604
1605 if require_unpin {
1606 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "require_unpin");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1607 #cfg_and_lint_attrs
1608 const _: fn() = ::cxx::private::require_unpin::<#ident #lifetimes>;
1609 });
1610 }
1611
1612 if require_box {
1613 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "require_box");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1614 #cfg_and_lint_attrs
1615 const _: fn() = ::cxx::private::require_box::<#ident #lifetimes>;
1616 });
1617 }
1618
1619 if require_vec {
1620 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "require_vec");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1621 #cfg_and_lint_attrs
1622 const _: fn() = ::cxx::private::require_vec::<#ident #lifetimes>;
1623 });
1624 }
1625
1626 if require_extern_type_trivial {
1627 let begin = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(begin_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"verify_extern_kind");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_lt_spanned(&mut _s, _span);
_s
}quote_spanned!(begin_span=> ::cxx::private::verify_extern_kind::<);
1628 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&begin, &mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_comma(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "kind");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "Trivial");
::quote::ToTokens::to_tokens(&end, &mut _s);
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1629 #cfg_and_lint_attrs
1630 const _: fn() = #begin #ident #lifetimes, ::cxx::kind::Trivial #end;
1631 });
1632 } else if let Some(slice_type) = require_rust_type_or_trivial {
1633 let ampersand = &slice_type.ampersand;
1634 let mutability = &slice_type.mutability;
1635 let inner = {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(slice_type.bracket.span.join()).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
_s
});
_s
}quote_spanned!(slice_type.bracket.span.join()=> [#ident #lifetimes]);
1636 verify.extend({
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&cfg_and_lint_attrs, &mut _s);
::quote::__private::push_ident(&mut _s, "let");
::quote::__private::push_underscore(&mut _s);
::quote::__private::push_eq(&mut _s);
::quote::__private::push_or_or(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "private");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "with");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&lifetimes, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_dot(&mut _s);
::quote::__private::push_ident(&mut _s, "check_slice");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ersand, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_semi(&mut _s);
_s
}quote! {
1637 #cfg_and_lint_attrs
1638 let _ = || ::cxx::private::with::<#ident #lifetimes>().check_slice::<#ampersand #mutability #inner>();
1639 });
1640 }
1641
1642 verify
1643}
1644
1645fn type_id(name: &Pair) -> TokenStream {
1646 let namespace_segments = name.namespace.iter();
1647 let mut segments = Vec::with_capacity(namespace_segments.len() + 1);
1648 segments.extend(namespace_segments.cloned());
1649 segments.push(Ident::new(&name.cxx.to_string(), Span::call_site()));
1650 let qualified = QualifiedName { segments };
1651 crate::type_id::expand(Crate::Cxx, qualified)
1652}
1653
1654fn expand_rust_box(
1655 key: &NamedImplKey,
1656 types: &Types,
1657 conditional_impl: &ConditionalImpl,
1658) -> TokenStream {
1659 let ident = key.rust;
1660 let resolve = types.resolve(ident);
1661 let link_prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$box${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$box${}$", resolve.name.to_symbol());
1662 let link_alloc = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}alloc", link_prefix))
})format!("{}alloc", link_prefix);
1663 let link_dealloc = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}dealloc", link_prefix))
})format!("{}dealloc", link_prefix);
1664 let link_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", link_prefix))
})format!("{}drop", link_prefix);
1665
1666 let local_prefix = match ::quote::__private::IdentFragmentAdapter(&ident) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}__box_", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}__box_", ident);
1667 let local_alloc = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}alloc", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}alloc", local_prefix);
1668 let local_dealloc = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}dealloc", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}dealloc", local_prefix);
1669 let local_drop = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}drop", local_prefix);
1670
1671 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1672
1673 let cfg = conditional_impl.cfg.into_attr();
1674 let begin_span = conditional_impl
1675 .explicit_impl
1676 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1677 let end_span = conditional_impl
1678 .explicit_impl
1679 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1680 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1681 let prevent_unwind_drop_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as Drop>::drop", ident))
})format!("::{} as Drop>::drop", ident);
1682
1683 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ImplBox");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_alloc, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_alloc, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"into_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_dealloc, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_dealloc, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "ptr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_underscore_spanned(&mut _s, _span);
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Box");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"from_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"ptr");
_s
});
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_drop, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_drop, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "alloc");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "boxed");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Box");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ptr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"drop_in_place");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
_s
});
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
}quote_spanned! {end_span=>
1684 #cfg
1685 #[automatically_derived]
1686 #[doc(hidden)]
1687 #unsafe_token impl #impl_generics ::cxx::private::ImplBox for #ident #ty_generics {}
1688
1689 #cfg
1690 #[doc(hidden)]
1691 #[unsafe(export_name = #link_alloc)]
1692 unsafe extern "C" fn #local_alloc #impl_generics() -> *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics> {
1693 ::cxx::alloc::boxed::Box::into_raw(::cxx::alloc::boxed::Box::new(::cxx::core::mem::MaybeUninit::uninit()))
1699 }
1700
1701 #cfg
1702 #[doc(hidden)]
1703 #[unsafe(export_name = #link_dealloc)]
1704 unsafe extern "C" fn #local_dealloc #impl_generics(ptr: *mut ::cxx::core::mem::MaybeUninit<#ident #ty_generics>) {
1705 let _ = unsafe { ::cxx::alloc::boxed::Box::from_raw(ptr) };
1707 }
1708
1709 #cfg
1710 #[doc(hidden)]
1711 #[unsafe(export_name = #link_drop)]
1712 unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::alloc::boxed::Box<#ident #ty_generics>) {
1713 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1714 ::cxx::private::prevent_unwind(__fn, || unsafe { ::cxx::core::ptr::drop_in_place(this) });
1715 }
1716 }
1717}
1718
1719fn expand_rust_vec(
1720 key: &NamedImplKey,
1721 types: &Types,
1722 conditional_impl: &ConditionalImpl,
1723) -> TokenStream {
1724 let elem = key.rust;
1725 let resolve = types.resolve(elem);
1726 let link_prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$rust_vec${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$rust_vec${}$", resolve.name.to_symbol());
1727 let link_new = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}new", link_prefix))
})format!("{}new", link_prefix);
1728 let link_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", link_prefix))
})format!("{}drop", link_prefix);
1729 let link_len = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}len", link_prefix))
})format!("{}len", link_prefix);
1730 let link_capacity = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}capacity", link_prefix))
})format!("{}capacity", link_prefix);
1731 let link_data = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}data", link_prefix))
})format!("{}data", link_prefix);
1732 let link_reserve_total = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}reserve_total", link_prefix))
})format!("{}reserve_total", link_prefix);
1733 let link_set_len = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}set_len", link_prefix))
})format!("{}set_len", link_prefix);
1734 let link_truncate = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}truncate", link_prefix))
})format!("{}truncate", link_prefix);
1735
1736 let local_prefix = match ::quote::__private::IdentFragmentAdapter(&elem) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}__vec_", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}__vec_", elem);
1737 let local_new = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}new", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}new", local_prefix);
1738 let local_drop = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}drop", local_prefix);
1739 let local_len = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}len", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}len", local_prefix);
1740 let local_capacity = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}capacity", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}capacity", local_prefix);
1741 let local_data = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}data", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}data", local_prefix);
1742 let local_reserve_total = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}reserve_total", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}reserve_total", local_prefix);
1743 let local_set_len = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}set_len", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}set_len", local_prefix);
1744 let local_truncate = match ::quote::__private::IdentFragmentAdapter(&local_prefix) {
arg =>
::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}truncate", arg))
}), ::quote::__private::Option::None.or(arg.span())),
}format_ident!("{}truncate", local_prefix);
1745
1746 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1747
1748 let cfg = conditional_impl.cfg.into_attr();
1749 let begin_span = conditional_impl
1750 .explicit_impl
1751 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1752 let end_span = conditional_impl
1753 .explicit_impl
1754 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1755 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1756 let prevent_unwind_drop_label = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("::{0} as Drop>::drop", elem))
})format!("::{} as Drop>::drop", elem);
1757
1758 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ImplVec");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_new, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_new, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ptr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"write");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"RustVec");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_drop, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_drop, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ptr");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"drop_in_place");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
_s
});
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_len, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_len, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"len");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_capacity, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_capacity, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"capacity");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_data, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_data, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as_ptr");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_reserve_total, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_reserve_total, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "new_cap");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"reserve_total");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new_cap");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_set_len, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_set_len, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "len");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"set_len");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"len");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "doc");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"hidden");
_s
});
_s
});
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"export_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_truncate, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::ToTokens::to_tokens(&local_truncate, &mut _s);
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "len");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "let");
::quote::__private::push_ident_spanned(&mut _s, _span, "__fn");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "concat");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::parse_spanned(&mut _s, _span, "\"<\"");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"module_path");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&prevent_unwind_drop_label,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"prevent_unwind");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__fn");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_or_or_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"truncate");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"len");
_s
});
_s
});
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
}quote_spanned! {end_span=>
1759 #cfg
1760 #[automatically_derived]
1761 #[doc(hidden)]
1762 #unsafe_token impl #impl_generics ::cxx::private::ImplVec for #elem #ty_generics {}
1763
1764 #cfg
1765 #[doc(hidden)]
1766 #[unsafe(export_name = #link_new)]
1767 unsafe extern "C" fn #local_new #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1768 unsafe {
1770 ::cxx::core::ptr::write(this, ::cxx::private::RustVec::new());
1771 }
1772 }
1773
1774 #cfg
1775 #[doc(hidden)]
1776 #[unsafe(export_name = #link_drop)]
1777 unsafe extern "C" fn #local_drop #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>) {
1778 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1779 ::cxx::private::prevent_unwind(
1780 __fn,
1781 || unsafe { ::cxx::core::ptr::drop_in_place(this) },
1782 );
1783 }
1784
1785 #cfg
1786 #[doc(hidden)]
1787 #[unsafe(export_name = #link_len)]
1788 unsafe extern "C" fn #local_len #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1789 unsafe { (*this).len() }
1791 }
1792
1793 #cfg
1794 #[doc(hidden)]
1795 #[unsafe(export_name = #link_capacity)]
1796 unsafe extern "C" fn #local_capacity #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> ::cxx::core::primitive::usize {
1797 unsafe { (*this).capacity() }
1799 }
1800
1801 #cfg
1802 #[doc(hidden)]
1803 #[unsafe(export_name = #link_data)]
1804 unsafe extern "C" fn #local_data #impl_generics(this: *const ::cxx::private::RustVec<#elem #ty_generics>) -> *const #elem #ty_generics {
1805 unsafe { (*this).as_ptr() }
1807 }
1808
1809 #cfg
1810 #[doc(hidden)]
1811 #[unsafe(export_name = #link_reserve_total)]
1812 unsafe extern "C" fn #local_reserve_total #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, new_cap: ::cxx::core::primitive::usize) {
1813 unsafe {
1815 (*this).reserve_total(new_cap);
1816 }
1817 }
1818
1819 #cfg
1820 #[doc(hidden)]
1821 #[unsafe(export_name = #link_set_len)]
1822 unsafe extern "C" fn #local_set_len #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1823 unsafe {
1825 (*this).set_len(len);
1826 }
1827 }
1828
1829 #cfg
1830 #[doc(hidden)]
1831 #[unsafe(export_name = #link_truncate)]
1832 unsafe extern "C" fn #local_truncate #impl_generics(this: *mut ::cxx::private::RustVec<#elem #ty_generics>, len: ::cxx::core::primitive::usize) {
1833 let __fn = ::cxx::core::concat!("<", ::cxx::core::module_path!(), #prevent_unwind_drop_label);
1834 ::cxx::private::prevent_unwind(
1835 __fn,
1836 || unsafe { (*this).truncate(len) },
1837 );
1838 }
1839 }
1840}
1841
1842fn expand_unique_ptr(
1843 key: &NamedImplKey,
1844 types: &Types,
1845 conditional_impl: &ConditionalImpl,
1846) -> TokenStream {
1847 let ident = key.rust;
1848 let name = ident.to_string();
1849 let resolve = types.resolve(ident);
1850 let prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$unique_ptr${}$", resolve.name.to_symbol());
1851 let link_null = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}null", prefix))
})format!("{}null", prefix);
1852 let link_uninit = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}uninit", prefix))
})format!("{}uninit", prefix);
1853 let link_raw = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}raw", prefix))
})format!("{}raw", prefix);
1854 let link_get = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}get", prefix))
})format!("{}get", prefix);
1855 let link_release = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}release", prefix))
})format!("{}release", prefix);
1856 let link_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", prefix))
})format!("{}drop", prefix);
1857
1858 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1859
1860 let can_construct_from_value = types.is_maybe_trivial(ident);
1861 let new_method = if can_construct_from_value {
1862 Some({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "__new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "value");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "mem");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "MaybeUninit");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "extern");
::quote::__private::parse(&mut _s, "\"C\"");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "link_name");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&link_uninit, &mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "__uninit");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "this");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "mem");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "MaybeUninit");
::quote::__private::push_lt(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
::quote::__private::push_gt(&mut _s);
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
::quote::__private::push_semi(&mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "let");
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_ident(&mut _s, "repr");
::quote::__private::push_eq(&mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "mem");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "MaybeUninit");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "uninit");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_semi(&mut _s);
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__uninit");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_and(&mut _s);
::quote::__private::push_ident(&mut _s, "raw");
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_ident(&mut _s, "repr");
_s
});
::quote::__private::push_dot(&mut _s);
::quote::__private::push_ident(&mut _s, "cast");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_dot(&mut _s);
::quote::__private::push_ident(&mut _s, "write");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "value");
_s
});
::quote::__private::push_semi(&mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "repr");
_s
});
_s
}quote! {
1863 fn __new(value: Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1864 unsafe extern "C" {
1865 #[link_name = #link_uninit]
1866 fn __uninit(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1867 }
1868 let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1869 unsafe {
1870 __uninit(&raw mut repr).cast::<#ident #ty_generics>().write(value);
1871 }
1872 repr
1873 }
1874 })
1875 } else {
1876 None
1877 };
1878
1879 let cfg = conditional_impl.cfg.into_attr();
1880 let begin_span = conditional_impl
1881 .explicit_impl
1882 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1883 let end_span = conditional_impl
1884 .explicit_impl
1885 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1886 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1887
1888 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "UniquePtrTarget");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__typename");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Formatter");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_lifetime_spanned(&mut _s, _span,
"\'_");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"write_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_null, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"let");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::ToTokens::to_tokens(&new_method, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_raw, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"let");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_get, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__release");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_release, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__release");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__release");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_drop, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
_s
});
_s
}quote_spanned! {end_span=>
1889 #cfg
1890 #[automatically_derived]
1891 #unsafe_token impl #impl_generics ::cxx::memory::UniquePtrTarget for #ident #ty_generics {
1892 fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1893 f.write_str(#name)
1894 }
1895 fn __null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1896 unsafe extern "C" {
1897 #[link_name = #link_null]
1898 fn __null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1899 }
1900 let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1901 unsafe {
1902 __null(&raw mut repr);
1903 }
1904 repr
1905 }
1906 #new_method
1907 unsafe fn __raw(raw: *mut Self) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
1908 unsafe extern "C" {
1909 #[link_name = #link_raw]
1910 fn __raw(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::core::ffi::c_void);
1911 }
1912 let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
1913 unsafe {
1914 __raw(&raw mut repr, raw.cast());
1915 }
1916 repr
1917 }
1918 unsafe fn __get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const Self {
1919 unsafe extern "C" {
1920 #[link_name = #link_get]
1921 fn __get(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::core::ffi::c_void;
1922 }
1923 unsafe { __get(&raw const repr).cast() }
1924 }
1925 unsafe fn __release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut Self {
1926 unsafe extern "C" {
1927 #[link_name = #link_release]
1928 fn __release(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::core::ffi::c_void;
1929 }
1930 unsafe { __release(&raw mut repr).cast() }
1931 }
1932 unsafe fn __drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
1933 unsafe extern "C" {
1934 #[link_name = #link_drop]
1935 fn __drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
1936 }
1937 unsafe {
1938 __drop(&raw mut repr);
1939 }
1940 }
1941 }
1942 }
1943}
1944
1945fn expand_shared_ptr(
1946 key: &NamedImplKey,
1947 types: &Types,
1948 conditional_impl: &ConditionalImpl,
1949) -> TokenStream {
1950 let ident = key.rust;
1951 let name = ident.to_string();
1952 let resolve = types.resolve(ident);
1953 let prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$shared_ptr${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$shared_ptr${}$", resolve.name.to_symbol());
1954 let link_null = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}null", prefix))
})format!("{}null", prefix);
1955 let link_uninit = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}uninit", prefix))
})format!("{}uninit", prefix);
1956 let link_raw = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}raw", prefix))
})format!("{}raw", prefix);
1957 let link_clone = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}clone", prefix))
})format!("{}clone", prefix);
1958 let link_get = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}get", prefix))
})format!("{}get", prefix);
1959 let link_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", prefix))
})format!("{}drop", prefix);
1960
1961 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
1962
1963 let can_construct_from_value = types.is_maybe_trivial(ident);
1964 let new_method = if can_construct_from_value {
1965 Some({
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "__new");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "value");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_ident(&mut _s, "Self");
::quote::__private::push_comma(&mut _s);
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
});
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_ident(&mut _s, "extern");
::quote::__private::parse(&mut _s, "\"C\"");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_pound(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "link_name");
::quote::__private::push_eq(&mut _s);
::quote::ToTokens::to_tokens(&link_uninit, &mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "fn");
::quote::__private::push_ident(&mut _s, "__uninit");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "new");
::quote::__private::push_colon(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
});
::quote::__private::push_rarrow(&mut _s);
::quote::__private::push_star(&mut _s);
::quote::__private::push_ident(&mut _s, "mut");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
::quote::__private::push_semi(&mut _s);
_s
});
::quote::__private::push_ident(&mut _s, "unsafe");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "__uninit");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "new");
_s
});
::quote::__private::push_dot(&mut _s);
::quote::__private::push_ident(&mut _s, "cast");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_lt(&mut _s);
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt(&mut _s);
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
::quote::__private::TokenStream::new());
::quote::__private::push_dot(&mut _s);
::quote::__private::push_ident(&mut _s, "write");
::quote::__private::push_group(&mut _s,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_ident(&mut _s, "value");
_s
});
::quote::__private::push_semi(&mut _s);
_s
});
_s
});
_s
}quote! {
1966 unsafe fn __new(value: Self, new: *mut ::cxx::core::ffi::c_void) {
1967 unsafe extern "C" {
1968 #[link_name = #link_uninit]
1969 fn __uninit(new: *mut ::cxx::core::ffi::c_void) -> *mut ::cxx::core::ffi::c_void;
1970 }
1971 unsafe {
1972 __uninit(new).cast::<#ident #ty_generics>().write(value);
1973 }
1974 }
1975 })
1976 } else {
1977 None
1978 };
1979
1980 let cfg = conditional_impl.cfg.into_attr();
1981 let begin_span = conditional_impl
1982 .explicit_impl
1983 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
1984 let end_span = conditional_impl
1985 .explicit_impl
1986 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
1987 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
1988 let not_destructible_err = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0} is not destructible",
display_namespaced(resolve.name)))
})format!("{} is not destructible", display_namespaced(resolve.name));
1989
1990 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "SharedPtrTarget");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__typename");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Formatter");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_lifetime_spanned(&mut _s, _span,
"\'_");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"write_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_null, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::ToTokens::to_tokens(&new_method, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"track_caller");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_raw, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"bool");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"if");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"panic");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(¬_destructible_err,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_clone, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_get, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cast");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_drop, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
_s
});
_s
}quote_spanned! {end_span=>
1991 #cfg
1992 #[automatically_derived]
1993 #unsafe_token impl #impl_generics ::cxx::memory::SharedPtrTarget for #ident #ty_generics {
1994 fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
1995 f.write_str(#name)
1996 }
1997 unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
1998 unsafe extern "C" {
1999 #[link_name = #link_null]
2000 fn __null(new: *mut ::cxx::core::ffi::c_void);
2001 }
2002 unsafe {
2003 __null(new);
2004 }
2005 }
2006 #new_method
2007 #[track_caller]
2008 unsafe fn __raw(new: *mut ::cxx::core::ffi::c_void, raw: *mut Self) {
2009 unsafe extern "C" {
2010 #[link_name = #link_raw]
2011 fn __raw(new: *const ::cxx::core::ffi::c_void, raw: *mut ::cxx::core::ffi::c_void) -> ::cxx::core::primitive::bool;
2012 }
2013 if !unsafe { __raw(new, raw as *mut ::cxx::core::ffi::c_void) } {
2014 ::cxx::core::panic!(#not_destructible_err);
2015 }
2016 }
2017 unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2018 unsafe extern "C" {
2019 #[link_name = #link_clone]
2020 fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2021 }
2022 unsafe {
2023 __clone(this, new);
2024 }
2025 }
2026 unsafe fn __get(this: *const ::cxx::core::ffi::c_void) -> *const Self {
2027 unsafe extern "C" {
2028 #[link_name = #link_get]
2029 fn __get(this: *const ::cxx::core::ffi::c_void) -> *const ::cxx::core::ffi::c_void;
2030 }
2031 unsafe { __get(this).cast() }
2032 }
2033 unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2034 unsafe extern "C" {
2035 #[link_name = #link_drop]
2036 fn __drop(this: *mut ::cxx::core::ffi::c_void);
2037 }
2038 unsafe {
2039 __drop(this);
2040 }
2041 }
2042 }
2043 }
2044}
2045
2046fn expand_weak_ptr(
2047 key: &NamedImplKey,
2048 types: &Types,
2049 conditional_impl: &ConditionalImpl,
2050) -> TokenStream {
2051 let ident = key.rust;
2052 let name = ident.to_string();
2053 let resolve = types.resolve(ident);
2054 let prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$weak_ptr${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$weak_ptr${}$", resolve.name.to_symbol());
2055 let link_null = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}null", prefix))
})format!("{}null", prefix);
2056 let link_clone = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}clone", prefix))
})format!("{}clone", prefix);
2057 let link_downgrade = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}downgrade", prefix))
})format!("{}downgrade", prefix);
2058 let link_upgrade = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}upgrade", prefix))
})format!("{}upgrade", prefix);
2059 let link_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", prefix))
})format!("{}drop", prefix);
2060
2061 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2062
2063 let cfg = conditional_impl.cfg.into_attr();
2064 let begin_span = conditional_impl
2065 .explicit_impl
2066 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2067 let end_span = conditional_impl
2068 .explicit_impl
2069 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2070 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
2071
2072 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "memory");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "WeakPtrTarget");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&ident, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__typename");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Formatter");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_lifetime_spanned(&mut _s, _span,
"\'_");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"write_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_null, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_clone, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__clone");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__downgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_downgrade, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__downgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__downgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__upgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_upgrade, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__upgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__upgrade");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"weak");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"shared");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_drop, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
_s
});
_s
}quote_spanned! {end_span=>
2073 #cfg
2074 #[automatically_derived]
2075 #unsafe_token impl #impl_generics ::cxx::memory::WeakPtrTarget for #ident #ty_generics {
2076 fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2077 f.write_str(#name)
2078 }
2079 unsafe fn __null(new: *mut ::cxx::core::ffi::c_void) {
2080 unsafe extern "C" {
2081 #[link_name = #link_null]
2082 fn __null(new: *mut ::cxx::core::ffi::c_void);
2083 }
2084 unsafe {
2085 __null(new);
2086 }
2087 }
2088 unsafe fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void) {
2089 unsafe extern "C" {
2090 #[link_name = #link_clone]
2091 fn __clone(this: *const ::cxx::core::ffi::c_void, new: *mut ::cxx::core::ffi::c_void);
2092 }
2093 unsafe {
2094 __clone(this, new);
2095 }
2096 }
2097 unsafe fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void) {
2098 unsafe extern "C" {
2099 #[link_name = #link_downgrade]
2100 fn __downgrade(shared: *const ::cxx::core::ffi::c_void, weak: *mut ::cxx::core::ffi::c_void);
2101 }
2102 unsafe {
2103 __downgrade(shared, weak);
2104 }
2105 }
2106 unsafe fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void) {
2107 unsafe extern "C" {
2108 #[link_name = #link_upgrade]
2109 fn __upgrade(weak: *const ::cxx::core::ffi::c_void, shared: *mut ::cxx::core::ffi::c_void);
2110 }
2111 unsafe {
2112 __upgrade(weak, shared);
2113 }
2114 }
2115 unsafe fn __drop(this: *mut ::cxx::core::ffi::c_void) {
2116 unsafe extern "C" {
2117 #[link_name = #link_drop]
2118 fn __drop(this: *mut ::cxx::core::ffi::c_void);
2119 }
2120 unsafe {
2121 __drop(this);
2122 }
2123 }
2124 }
2125 }
2126}
2127
2128fn expand_cxx_vector(
2129 key: &NamedImplKey,
2130 conditional_impl: &ConditionalImpl,
2131 types: &Types,
2132) -> TokenStream {
2133 let elem = key.rust;
2134 let name = elem.to_string();
2135 let resolve = types.resolve(elem);
2136 let prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$std$vector${0}$",
resolve.name.to_symbol()))
})format!("cxxbridge1$std$vector${}$", resolve.name.to_symbol());
2137 let link_new = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}new", prefix))
})format!("{}new", prefix);
2138 let link_size = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}size", prefix))
})format!("{}size", prefix);
2139 let link_capacity = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}capacity", prefix))
})format!("{}capacity", prefix);
2140 let link_get_unchecked = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}get_unchecked", prefix))
})format!("{}get_unchecked", prefix);
2141 let link_reserve = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}reserve", prefix))
})format!("{}reserve", prefix);
2142 let link_push_back = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}push_back", prefix))
})format!("{}push_back", prefix);
2143 let link_pop_back = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}pop_back", prefix))
})format!("{}pop_back", prefix);
2144 let unique_ptr_prefix = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cxxbridge1$unique_ptr$std$vector${0}$",
resolve.name.to_symbol()))
})format!(
2145 "cxxbridge1$unique_ptr$std$vector${}$",
2146 resolve.name.to_symbol(),
2147 );
2148 let link_unique_ptr_null = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}null", unique_ptr_prefix))
})format!("{}null", unique_ptr_prefix);
2149 let link_unique_ptr_raw = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}raw", unique_ptr_prefix))
})format!("{}raw", unique_ptr_prefix);
2150 let link_unique_ptr_get = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}get", unique_ptr_prefix))
})format!("{}get", unique_ptr_prefix);
2151 let link_unique_ptr_release = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}release", unique_ptr_prefix))
})format!("{}release", unique_ptr_prefix);
2152 let link_unique_ptr_drop = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}drop", unique_ptr_prefix))
})format!("{}drop", unique_ptr_prefix);
2153
2154 let (impl_generics, ty_generics) = generics::split_for_impl(key, conditional_impl, resolve);
2155
2156 let cfg = conditional_impl.cfg.into_attr();
2157 let begin_span = conditional_impl
2158 .explicit_impl
2159 .map_or(key.begin_span, |explicit| explicit.impl_token.span);
2160 let end_span = conditional_impl
2161 .explicit_impl
2162 .map_or(key.end_span, |explicit| explicit.brace_token.span.join());
2163 let unsafe_token = ::quote::__private::mk_ident(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unsafe"))
}),
::quote::__private::Option::Some::<::quote::__private::Span>(begin_span))format_ident!("unsafe", span = begin_span);
2164
2165 let can_pass_element_by_value = types.is_maybe_trivial(elem);
2166 let by_value_methods = if can_pass_element_by_value {
2167 Some({
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__push_back");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "value");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ManuallyDrop");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_push_back, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__push_back");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"value");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__push_back");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"value");
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ManuallyDrop");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span, "__pop_back");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "out");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_pop_back, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__pop_back");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"out");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__pop_back");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"out");
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
_s
}quote_spanned! {end_span=>
2168 unsafe fn __push_back(
2169 this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2170 value: &mut ::cxx::core::mem::ManuallyDrop<Self>,
2171 ) {
2172 unsafe extern "C" {
2173 #[link_name = #link_push_back]
2174 fn __push_back #impl_generics(
2175 this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2176 value: *mut ::cxx::core::ffi::c_void,
2177 );
2178 }
2179 unsafe {
2180 __push_back(
2181 this,
2182 value as *mut ::cxx::core::mem::ManuallyDrop<Self> as *mut ::cxx::core::ffi::c_void,
2183 );
2184 }
2185 }
2186 unsafe fn __pop_back(
2187 this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>,
2188 out: &mut ::cxx::core::mem::MaybeUninit<Self>,
2189 ) {
2190 unsafe extern "C" {
2191 #[link_name = #link_pop_back]
2192 fn __pop_back #impl_generics(
2193 this: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2194 out: *mut ::cxx::core::ffi::c_void,
2195 );
2196 }
2197 unsafe {
2198 __pop_back(
2199 this,
2200 out as *mut ::cxx::core::mem::MaybeUninit<Self> as *mut ::cxx::core::ffi::c_void,
2201 );
2202 }
2203 }
2204 })
2205 } else {
2206 None
2207 };
2208
2209 let not_move_constructible_err = ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0} is not move constructible",
display_namespaced(resolve.name)))
})format!(
2210 "{} is not move constructible",
2211 display_namespaced(resolve.name),
2212 );
2213
2214 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(end_span).__into_span();
::quote::ToTokens::to_tokens(&cfg, &mut _s);
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"automatically_derived");
_s
});
::quote::ToTokens::to_tokens(&unsafe_token, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "impl");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "vector");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "VectorElement");
::quote::__private::push_ident_spanned(&mut _s, _span, "for");
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__typename");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Formatter");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_lifetime_spanned(&mut _s, _span,
"\'_");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "fmt");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Result");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "f");
::quote::__private::push_dot_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"write_str");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(&name, &mut _s);
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_new");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_new, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_new");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_new");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_size");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_size, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_size");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_underscore_spanned(&mut _s, _span);
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_size");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
_s
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_capacity");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "usize");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_capacity, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_capacity");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_underscore_spanned(&mut _s, _span);
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__vector_capacity");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
_s
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get_unchecked");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pos");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_get_unchecked, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get_unchecked");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pos");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__get_unchecked");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pos");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"as");
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__reserve");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new_cap");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_reserve, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__reserve");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"pin");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Pin");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_shr_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new_cap");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"usize");
::quote::__private::push_comma_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"primitive");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"bool");
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"if");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__reserve");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span, "v");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"new_cap");
_s
});
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"panic");
::quote::__private::push_bang_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::ToTokens::to_tokens(¬_move_constructible_err,
&mut _s);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
::quote::ToTokens::to_tokens(&by_value_methods, &mut _s);
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_unique_ptr_null,
&mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"let");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_null");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_unique_ptr_raw, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_raw");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"let");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"uninit");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let _: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::TokenStream::new()
});
::quote::__private::push_semi_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_raw");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_comma_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_unique_ptr_get, &mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_get");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_get");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"const");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_release");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "Self");
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_unique_ptr_release,
&mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_release");
::quote::ToTokens::to_tokens(&impl_generics, &mut _s);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_rarrow_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"CxxVector");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&ty_generics, &mut _s);
::quote::__private::push_gt_spanned(&mut _s, _span);
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_release");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
_s
});
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span, "unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span, "fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_ident_spanned(&mut _s, _span,
"extern");
::quote::__private::parse_spanned(&mut _s, _span, "\"C\"");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_pound_spanned(&mut _s, _span);
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Bracket,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"link_name");
::quote::__private::push_eq_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&link_unique_ptr_drop,
&mut _s);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"fn");
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"this");
::quote::__private::push_colon_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mem");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"MaybeUninit");
::quote::__private::push_lt_spanned(&mut _s, _span);
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"c_void");
::quote::__private::push_gt_spanned(&mut _s, _span);
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
::quote::__private::push_ident_spanned(&mut _s, _span,
"unsafe");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Brace,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_ident_spanned(&mut _s, _span,
"__unique_ptr_drop");
::quote::__private::push_group_spanned(&mut _s, _span,
::quote::__private::Delimiter::Parenthesis,
{
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(_span).__into_span();
::quote::__private::push_and_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span,
"raw");
::quote::__private::push_ident_spanned(&mut _s, _span,
"mut");
::quote::__private::push_ident_spanned(&mut _s, _span,
"repr");
_s
});
::quote::__private::push_semi_spanned(&mut _s, _span);
_s
});
_s
});
_s
});
_s
}quote_spanned! {end_span=>
2215 #cfg
2216 #[automatically_derived]
2217 #unsafe_token impl #impl_generics ::cxx::vector::VectorElement for #elem #ty_generics {
2218 fn __typename(f: &mut ::cxx::core::fmt::Formatter<'_>) -> ::cxx::core::fmt::Result {
2219 f.write_str(#name)
2220 }
2221 fn __vector_new() -> *mut ::cxx::CxxVector<Self> {
2222 unsafe extern "C" {
2223 #[link_name = #link_new]
2224 fn __vector_new #impl_generics() -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2225 }
2226 unsafe { __vector_new() }
2227 }
2228 fn __vector_size(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2229 unsafe extern "C" {
2230 #[link_name = #link_size]
2231 fn __vector_size #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2232 }
2233 unsafe { __vector_size(v) }
2234 }
2235 fn __vector_capacity(v: &::cxx::CxxVector<Self>) -> ::cxx::core::primitive::usize {
2236 unsafe extern "C" {
2237 #[link_name = #link_capacity]
2238 fn __vector_capacity #impl_generics(_: &::cxx::CxxVector<#elem #ty_generics>) -> ::cxx::core::primitive::usize;
2239 }
2240 unsafe { __vector_capacity(v) }
2241 }
2242 unsafe fn __get_unchecked(v: *mut ::cxx::CxxVector<Self>, pos: ::cxx::core::primitive::usize) -> *mut Self {
2243 unsafe extern "C" {
2244 #[link_name = #link_get_unchecked]
2245 fn __get_unchecked #impl_generics(
2246 v: *mut ::cxx::CxxVector<#elem #ty_generics>,
2247 pos: ::cxx::core::primitive::usize,
2248 ) -> *mut ::cxx::core::ffi::c_void;
2249 }
2250 unsafe { __get_unchecked(v, pos) as *mut Self }
2251 }
2252 unsafe fn __reserve(v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<Self>>, new_cap: ::cxx::core::primitive::usize) {
2253 unsafe extern "C" {
2254 #[link_name = #link_reserve]
2255 fn __reserve #impl_generics(
2256 v: ::cxx::core::pin::Pin<&mut ::cxx::CxxVector<#elem #ty_generics>>,
2257 new_cap: ::cxx::core::primitive::usize,
2258 ) -> ::cxx::core::primitive::bool;
2259 }
2260 if !unsafe { __reserve(v, new_cap) } {
2261 ::cxx::core::panic!(#not_move_constructible_err);
2262 }
2263 }
2264 #by_value_methods
2265 fn __unique_ptr_null() -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2266 unsafe extern "C" {
2267 #[link_name = #link_unique_ptr_null]
2268 fn __unique_ptr_null(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2269 }
2270 let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2271 unsafe {
2272 __unique_ptr_null(&raw mut repr);
2273 }
2274 repr
2275 }
2276 unsafe fn __unique_ptr_raw(raw: *mut ::cxx::CxxVector<Self>) -> ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void> {
2277 unsafe extern "C" {
2278 #[link_name = #link_unique_ptr_raw]
2279 fn __unique_ptr_raw #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>, raw: *mut ::cxx::CxxVector<#elem #ty_generics>);
2280 }
2281 let mut repr = ::cxx::core::mem::MaybeUninit::uninit();
2282 unsafe {
2283 __unique_ptr_raw(&raw mut repr, raw);
2284 }
2285 repr
2286 }
2287 unsafe fn __unique_ptr_get(repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<Self> {
2288 unsafe extern "C" {
2289 #[link_name = #link_unique_ptr_get]
2290 fn __unique_ptr_get #impl_generics(this: *const ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *const ::cxx::CxxVector<#elem #ty_generics>;
2291 }
2292 unsafe { __unique_ptr_get(&raw const repr) }
2293 }
2294 unsafe fn __unique_ptr_release(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<Self> {
2295 unsafe extern "C" {
2296 #[link_name = #link_unique_ptr_release]
2297 fn __unique_ptr_release #impl_generics(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) -> *mut ::cxx::CxxVector<#elem #ty_generics>;
2298 }
2299 unsafe { __unique_ptr_release(&raw mut repr) }
2300 }
2301 unsafe fn __unique_ptr_drop(mut repr: ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>) {
2302 unsafe extern "C" {
2303 #[link_name = #link_unique_ptr_drop]
2304 fn __unique_ptr_drop(this: *mut ::cxx::core::mem::MaybeUninit<*mut ::cxx::core::ffi::c_void>);
2305 }
2306 unsafe {
2307 __unique_ptr_drop(&raw mut repr);
2308 }
2309 }
2310 }
2311 }
2312}
2313
2314fn expand_return_type(ret: &Option<Type>) -> TokenStream {
2315 match ret {
2316 Some(ret) => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_rarrow(&mut _s);
::quote::ToTokens::to_tokens(&ret, &mut _s);
_s
}quote!(-> #ret),
2317 None => TokenStream::new(),
2318 }
2319}
2320
2321fn indirect_return(sig: &Signature, types: &Types, lang: Lang) -> bool {
2322 sig.ret.as_ref().is_some_and(|ret| {
2323 sig.throws
2324 || types.needs_indirect_abi(ret)
2325 || match lang {
2326 Lang::Cxx | Lang::CxxUnwind => types.contains_elided_lifetime(ret),
2327 Lang::Rust => false,
2328 }
2329 })
2330}
2331
2332fn expand_extern_type(ty: &Type, types: &Types, proper: bool) -> TokenStream {
2333 match ty {
2334 Type::Ident(ident) if ident.rust == RustString => {
2335 let span = ident.rust.span();
2336 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
_s
}quote_spanned!(span=> ::cxx::private::RustString)
2337 }
2338 Type::RustBox(ty) | Type::UniquePtr(ty) => {
2339 let span = ty.name.span();
2340 if proper && types.is_considered_improper_ctype(&ty.inner) {
2341 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "core");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "ffi");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "c_void");
_s
}quote_spanned!(span=> *mut ::cxx::core::ffi::c_void)
2342 } else {
2343 let inner = expand_extern_type(&ty.inner, types, proper);
2344 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_star_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "mut");
::quote::ToTokens::to_tokens(&inner, &mut _s);
_s
}quote_spanned!(span=> *mut #inner)
2345 }
2346 }
2347 Type::RustVec(ty) => {
2348 let span = ty.name.span();
2353 let langle = ty.langle;
2354 let elem = &ty.inner;
2355 let rangle = ty.rangle;
2356 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::ToTokens::to_tokens(&langle, &mut _s);
::quote::ToTokens::to_tokens(&elem, &mut _s);
::quote::ToTokens::to_tokens(&rangle, &mut _s);
_s
}quote_spanned!(span=> ::cxx::private::RustVec #langle #elem #rangle)
2357 }
2358 Type::Ref(ty) => {
2359 let ampersand = ty.ampersand;
2360 let lifetime = &ty.lifetime;
2361 let mutability = ty.mutability;
2362 match &ty.inner {
2363 Type::Ident(ident) if ident.rust == RustString => {
2364 let span = ident.rust.span();
2365 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&ersand, &mut _s);
::quote::ToTokens::to_tokens(&lifetime, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustString");
_s
}quote_spanned!(span=> #ampersand #lifetime #mutability ::cxx::private::RustString)
2366 }
2367 Type::RustVec(ty) => {
2368 let span = ty.name.span();
2369 let langle = ty.langle;
2370 let inner = &ty.inner;
2371 let rangle = ty.rangle;
2372 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::ToTokens::to_tokens(&ersand, &mut _s);
::quote::ToTokens::to_tokens(&lifetime, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "RustVec");
::quote::ToTokens::to_tokens(&langle, &mut _s);
::quote::ToTokens::to_tokens(&inner, &mut _s);
::quote::ToTokens::to_tokens(&rangle, &mut _s);
_s
}quote_spanned!(span=> #ampersand #lifetime #mutability ::cxx::private::RustVec #langle #inner #rangle)
2373 }
2374 inner if proper && types.is_considered_improper_ctype(inner) => {
2375 let star = ::syn::token::StarToken;
2376 match ty.mutable {
2377 false => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&star, &mut _s);
::quote::__private::push_ident(&mut _s, "const");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
}quote!(#star const ::cxx::core::ffi::c_void),
2378 true => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&star, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
}quote!(#star #mutability ::cxx::core::ffi::c_void),
2379 }
2380 }
2381 _ => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#ty),
2382 }
2383 }
2384 Type::Ptr(ty) => {
2385 if proper && types.is_considered_improper_ctype(&ty.inner) {
2386 let star = ty.star;
2387 let mutability = ty.mutability;
2388 let constness = ty.constness;
2389 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&star, &mut _s);
::quote::ToTokens::to_tokens(&mutability, &mut _s);
::quote::ToTokens::to_tokens(&constness, &mut _s);
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "cxx");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "core");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "ffi");
::quote::__private::push_colon2(&mut _s);
::quote::__private::push_ident(&mut _s, "c_void");
_s
}quote!(#star #mutability #constness ::cxx::core::ffi::c_void)
2390 } else {
2391 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#ty)
2392 }
2393 }
2394 Type::Str(ty) => {
2395 let span = ty.ampersand.span;
2396 let rust_str = Ident::new("RustStr", syn::spanned::Spanned::span(&ty.inner));
2397 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&rust_str, &mut _s);
_s
}quote_spanned!(span=> ::cxx::private::#rust_str)
2398 }
2399 Type::SliceRef(ty) => {
2400 let span = ty.ampersand.span;
2401 let rust_slice = Ident::new("RustSlice", ty.bracket.span.join());
2402 {
let mut _s = ::quote::__private::TokenStream::new();
let _span: ::quote::__private::Span =
::quote::__private::get_span(span).__into_span();
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "cxx");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::__private::push_ident_spanned(&mut _s, _span, "private");
::quote::__private::push_colon2_spanned(&mut _s, _span);
::quote::ToTokens::to_tokens(&rust_slice, &mut _s);
_s
}quote_spanned!(span=> ::cxx::private::#rust_slice)
2403 }
2404 _ => {
let mut _s = ::quote::__private::TokenStream::new();
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(#ty),
2405 }
2406}
2407
2408fn expand_extern_return_type(
2409 sig: &Signature,
2410 types: &Types,
2411 proper: bool,
2412 lang: Lang,
2413) -> TokenStream {
2414 let ret = match &sig.ret {
2415 Some(ret) if !indirect_return(sig, types, lang) => ret,
2416 _ => return TokenStream::new(),
2417 };
2418 let ty = expand_extern_type(ret, types, proper);
2419 {
let mut _s = ::quote::__private::TokenStream::new();
::quote::__private::push_rarrow(&mut _s);
::quote::ToTokens::to_tokens(&ty, &mut _s);
_s
}quote!(-> #ty)
2420}
2421
2422fn display_namespaced(name: &Pair) -> impl Display + '_ {
2423 struct Namespaced<'a>(&'a Pair);
2424
2425 impl<'a> Display for Namespaced<'a> {
2426 fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2427 for segment in &self.0.namespace {
2428 formatter.write_fmt(format_args!("{0}::", segment))write!(formatter, "{segment}::")?;
2429 }
2430 formatter.write_fmt(format_args!("{0}", self.0.cxx))write!(formatter, "{}", self.0.cxx)
2431 }
2432 }
2433
2434 Namespaced(name)
2435}