Header guards are no more

This commit is contained in:
Андреев Григорий 2026-01-28 17:21:48 +03:00
parent f9159abded
commit 64487a873a

View File

@ -11,26 +11,13 @@ typedef struct {
} GeneratedHeader;
NODISCARD GeneratedHeader begin_header(SpanU8 filename) {
VecU8 res = VecU8_new();
VecU8 guard = VecU8_from_cstr("PROTOTYPE1_GEN_");
for (size_t i = 0; i < filename.len; i++) {
char ch = (char)*SpanU8_at(filename, i);
if (ch == '.' || ch == '/' || ch == '-' || ch == ',')
VecU8_append(&guard, '_');
else
VecU8_append(&guard, ch);
}
VecU8_append_span(&res, cstr("#ifndef "));
VecU8_append_span(&res, VecU8_to_span(&guard));
VecU8_append_span(&res, cstr("\n#define "));
VecU8_append_vec(&res, guard);
VecU8_append_span(&res, cstr("\n/* Automatically generated file. Do not edit it. */\n\n"));
VecU8 res = vcstr("#pragma once\n"
"/* Automatically generated file. Do not edit it. */\n\n");
return (GeneratedHeader){.result = res, .filename = VecU8_from_span(filename) };
}
/* Codegen script's working directory should be `gen` */
void finish_header(GeneratedHeader header) {
VecU8_append_span(&header.result, cstr("#endif\n"));
write_file_by_path(header.filename, VecU8_to_span(&header.result));
VecU8_drop(header.result);
}