cxx_build/gen/
ifndef.rs

1use crate::gen::include::HEADER;
2use crate::gen::out::Content;
3
4pub(super) fn write(out: &mut Content, needed: bool, guard: &str) {
5    let ifndef = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("#ifndef {0}", guard))
    })format!("#ifndef {}", guard);
6    let define = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("#define {0}", guard))
    })format!("#define {}", guard);
7    let endif = ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("#endif // {0}", guard))
    })format!("#endif // {}", guard);
8
9    let mut offset = 0;
10    loop {
11        let begin = find_line(offset, &ifndef);
12        let end = find_line(offset, &endif);
13        if let (Some(begin), Some(end)) = (begin, end) {
14            if !needed {
15                return;
16            }
17            out.next_section();
18            if offset == 0 {
19                out.write_fmt(format_args!("{0}\n", ifndef));writeln!(out, "{}", ifndef);
20                out.write_fmt(format_args!("{0}\n", define));writeln!(out, "{}", define);
21            }
22            for line in HEADER[begin + ifndef.len()..end].trim().lines() {
23                if line != define && !line.trim_start().starts_with("//") {
24                    out.write_fmt(format_args!("{0}\n", line));writeln!(out, "{}", line);
25                }
26            }
27            offset = end + endif.len();
28        } else if offset == 0 {
29            {
    ::core::panicking::panic_fmt(format_args!("not found in cxx.h header: {0}",
            guard));
}panic!("not found in cxx.h header: {}", guard)
30        } else {
31            out.write_fmt(format_args!("{0}\n", endif));writeln!(out, "{}", endif);
32            return;
33        }
34    }
35}
36
37fn find_line(mut offset: usize, line: &str) -> Option<usize> {
38    loop {
39        offset += HEADER[offset..].find(line)?;
40        let rest = &HEADER[offset + line.len()..];
41        if rest.starts_with('\n') || rest.starts_with('\r') {
42            return Some(offset);
43        }
44        offset += line.len();
45    }
46}