Lines Matching refs:out

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