Lines Matching full:out
3 use crate::gen::out::{Content, OutFile};
44 pub(super) fn write(out: &mut OutFile) { in write()
45 if out.builtin == Default::default() { in write()
49 let include = &mut out.include; in write()
50 let builtin = &mut out.builtin; in write()
51 let out = &mut builtin.content; in write() localVariable
144 out.begin_block(Block::Namespace("rust")); in write()
145 out.begin_block(Block::InlineNamespace("cxxbridge1")); in write()
149 writeln!(out, "// #include \"rust/cxx.h\""); in write()
151 ifndef::write(out, builtin.panic, "CXXBRIDGE1_PANIC"); in write()
154 out.next_section(); in write()
155 writeln!(out, "struct unsafe_bitcopy_t;"); in write()
159 out.begin_block(Block::AnonymousNamespace); in write()
160 writeln!(out, "template <typename T>"); in write()
161 writeln!(out, "class impl;"); in write()
162 out.end_block(Block::AnonymousNamespace); in write()
165 out.next_section(); in write()
167 writeln!(out, "class String;"); in write()
170 writeln!(out, "class Opaque;"); in write()
174 out.next_section(); in write()
175 writeln!(out, "template <typename T>"); in write()
176 writeln!(out, "::std::size_t size_of();"); in write()
177 writeln!(out, "template <typename T>"); in write()
178 writeln!(out, "::std::size_t align_of();"); in write()
181 ifndef::write(out, builtin.rust_string, "CXXBRIDGE1_RUST_STRING"); in write()
182 ifndef::write(out, builtin.rust_str, "CXXBRIDGE1_RUST_STR"); in write()
183 ifndef::write(out, builtin.rust_slice, "CXXBRIDGE1_RUST_SLICE"); in write()
184 ifndef::write(out, builtin.rust_box, "CXXBRIDGE1_RUST_BOX"); in write()
185 ifndef::write(out, builtin.unsafe_bitcopy_t, "CXXBRIDGE1_RUST_BITCOPY_T"); in write()
186 ifndef::write(out, builtin.unsafe_bitcopy, "CXXBRIDGE1_RUST_BITCOPY"); in write()
187 ifndef::write(out, builtin.rust_vec, "CXXBRIDGE1_RUST_VEC"); in write()
188 ifndef::write(out, builtin.rust_fn, "CXXBRIDGE1_RUST_FN"); in write()
189 ifndef::write(out, builtin.rust_error, "CXXBRIDGE1_RUST_ERROR"); in write()
190 ifndef::write(out, builtin.rust_isize, "CXXBRIDGE1_RUST_ISIZE"); in write()
191 ifndef::write(out, builtin.opaque, "CXXBRIDGE1_RUST_OPAQUE"); in write()
192 ifndef::write(out, builtin.is_complete, "CXXBRIDGE1_IS_COMPLETE"); in write()
193 ifndef::write(out, builtin.layout, "CXXBRIDGE1_LAYOUT"); in write()
194 ifndef::write(out, builtin.relocatable, "CXXBRIDGE1_RELOCATABLE"); in write()
198 out.next_section(); in write()
199 writeln!(out, "class Str::uninit {{}};"); in write()
200 writeln!(out, "inline Str::Str(uninit) noexcept {{}}"); in write()
204 out.next_section(); in write()
205 writeln!(out, "template <typename T>"); in write()
206 writeln!(out, "class Slice<T>::uninit {{}};"); in write()
207 writeln!(out, "template <typename T>"); in write()
208 writeln!(out, "inline Slice<T>::Slice(uninit) noexcept {{}}"); in write()
211 out.begin_block(Block::Namespace("repr")); in write()
216 out.next_section(); in write()
217 writeln!(out, "using Fat = ::std::array<::std::uintptr_t, 2>;"); in write()
222 out.next_section(); in write()
223 writeln!(out, "struct PtrLen final {{"); in write()
224 writeln!(out, " void *ptr;"); in write()
225 writeln!(out, " ::std::size_t len;"); in write()
226 writeln!(out, "}};"); in write()
229 out.end_block(Block::Namespace("repr")); in write()
231 out.begin_block(Block::Namespace("detail")); in write()
236 out.next_section(); in write()
237 writeln!(out, "template <typename T, typename = void *>"); in write()
238 writeln!(out, "struct operator_new {{"); in write()
240 out, in write()
243 writeln!(out, "}};"); in write()
244 out.next_section(); in write()
245 writeln!(out, "template <typename T>"); in write()
247 out, in write()
251 out, in write()
254 writeln!(out, "}};"); in write()
259 out.next_section(); in write()
260 writeln!(out, "class Fail final {{"); in write()
261 writeln!(out, " ::rust::repr::PtrLen &throw$;"); in write()
262 writeln!(out, "public:"); in write()
264 out, in write()
267 writeln!(out, " void operator()(char const *) noexcept;"); in write()
268 writeln!(out, " void operator()(std::string const &) noexcept;"); in write()
269 writeln!(out, "}};"); in write()
272 out.end_block(Block::Namespace("detail")); in write()
275 out.next_section(); in write()
277 writeln!(out, "template <typename T>"); in write()
278 writeln!(out, "union ManuallyDrop {{"); in write()
279 writeln!(out, " T value;"); in write()
281 out, in write()
284 writeln!(out, " ~ManuallyDrop() {{}}"); in write()
285 writeln!(out, "}};"); in write()
290 out.next_section(); in write()
291 writeln!(out, "template <typename T>"); in write()
292 writeln!(out, "union MaybeUninit {{"); in write()
293 writeln!(out, " T value;"); in write()
295 out, in write()
298 writeln!(out, " MaybeUninit() {{}}"); in write()
299 writeln!(out, " ~MaybeUninit() {{}}"); in write()
300 writeln!(out, "}};"); in write()
303 out.begin_block(Block::AnonymousNamespace); in write()
306 out.next_section(); in write()
307 writeln!(out, "template <>"); in write()
308 writeln!(out, "class impl<Str> final {{"); in write()
309 writeln!(out, "public:"); in write()
312 out, in write()
315 writeln!(out, " Str str = Str::uninit{{}};"); in write()
316 writeln!(out, " str.repr = repr;"); in write()
317 writeln!(out, " return str;"); in write()
318 writeln!(out, " }}"); in write()
321 writeln!(out, " static repr::Fat repr(Str str) noexcept {{"); in write()
322 writeln!(out, " return str.repr;"); in write()
323 writeln!(out, " }}"); in write()
325 writeln!(out, "}};"); in write()
329 out.next_section(); in write()
330 writeln!(out, "template <typename T>"); in write()
331 writeln!(out, "class impl<Slice<T>> final {{"); in write()
332 writeln!(out, "public:"); in write()
334 writeln!(out, " static Slice<T> slice(repr::Fat repr) noexcept {{"); in write()
335 writeln!(out, " Slice<T> slice = typename Slice<T>::uninit{{}};"); in write()
336 writeln!(out, " slice.repr = repr;"); in write()
337 writeln!(out, " return slice;"); in write()
338 writeln!(out, " }}"); in write()
341 writeln!(out, " static repr::Fat repr(Slice<T> slice) noexcept {{"); in write()
342 writeln!(out, " return slice.repr;"); in write()
343 writeln!(out, " }}"); in write()
345 writeln!(out, "}};"); in write()
349 out.next_section(); in write()
350 writeln!(out, "template <>"); in write()
351 writeln!(out, "class impl<Error> final {{"); in write()
352 writeln!(out, "public:"); in write()
353 writeln!(out, " static Error error(repr::PtrLen repr) noexcept {{"); in write()
354 writeln!(out, " Error error;"); in write()
355 writeln!(out, " error.msg = static_cast<char const *>(repr.ptr);"); in write()
356 writeln!(out, " error.len = repr.len;"); in write()
357 writeln!(out, " return error;"); in write()
358 writeln!(out, " }}"); in write()
359 writeln!(out, "}};"); in write()
363 out.next_section(); in write()
364 writeln!(out, "template <typename T>"); in write()
365 writeln!(out, "void destroy(T *ptr) {{"); in write()
366 writeln!(out, " ptr->~T();"); in write()
367 writeln!(out, "}}"); in write()
371 out.next_section(); in write()
372 writeln!(out, "template <bool> struct deleter_if {{"); in write()
373 writeln!(out, " template <typename T> void operator()(T *) {{}}"); in write()
374 writeln!(out, "}};"); in write()
375 out.next_section(); in write()
376 writeln!(out, "template <> struct deleter_if<true> {{"); in write()
378 out, in write()
381 writeln!(out, "}};"); in write()
385 out.next_section(); in write()
386 writeln!(out, "template <typename T>"); in write()
387 writeln!(out, "struct IsRelocatableOrArray : IsRelocatable<T> {{}};"); in write()
388 writeln!(out, "template <typename T, ::std::size_t N>"); in write()
390 out, in write()
395 out.end_block(Block::AnonymousNamespace); in write()
396 out.end_block(Block::InlineNamespace("cxxbridge1")); in write()
399 out.begin_block(Block::Namespace("behavior")); in write()
403 writeln!(out, "class missing {{}};"); in write()
404 writeln!(out, "missing trycatch(...);"); in write()
405 writeln!(out); in write()
406 writeln!(out, "template <typename Try, typename Fail>"); in write()
407 writeln!(out, "static typename ::std::enable_if<"); in write()
409 out, in write()
412 writeln!(out, " missing>::value>::type"); in write()
413 writeln!(out, "trycatch(Try &&func, Fail &&fail) noexcept try {{"); in write()
414 writeln!(out, " func();"); in write()
415 writeln!(out, "}} catch (::std::exception const &e) {{"); in write()
416 writeln!(out, " fail(e.what());"); in write()
417 writeln!(out, "}}"); in write()
418 out.end_block(Block::Namespace("behavior")); in write()
421 out.end_block(Block::Namespace("rust")); in write()