// #pragma once // #include "../project/gen.hpp" // using namespace gen; using SwapContentProc = CodeBody(void); b32 ignore_preprocess_cond_block( StrC cond_sig, Code& entry_iter, CodeBody& body ) { CodePreprocessCond cond = entry_iter.cast(); if ( cond->Content.contains(cond_sig) ) { s32 depth = 1; ++ entry_iter; for(b32 continue_for = true; continue_for && entry_iter != body.end(); ++ entry_iter) switch (entry_iter->Type) { case ECode::Preprocess_If: case ECode::Preprocess_IfDef: case ECode::Preprocess_IfNotDef: depth ++; break; case ECode::Preprocess_EndIf: { depth --; if (depth == 0) { continue_for = false; } } break; } } return entry_iter != body.end(); } void swap_pragma_region_implementation( StrC region_name, SwapContentProc* swap_content, Code& entry_iter, CodeBody& body ) { CodePragma possible_region = entry_iter.cast(); String region_sig = string_fmt_buf(GlobalAllocator, "region %s", region_name.Ptr); String endregion_sig = string_fmt_buf(GlobalAllocator, "endregion %s", region_name.Ptr); if ( possible_region->Content.contains(region_sig)) { body.append(possible_region); body.append(swap_content()); ++ entry_iter; for(b32 continue_for = true; continue_for; ++entry_iter) switch (entry_iter->Type) { case ECode::Preprocess_Pragma: { CodePragma possible_end_region = entry_iter.cast(); if ( possible_end_region->Content.contains(endregion_sig) ) { body.append(possible_end_region); continue_for = false; } } break; } } body.append(entry_iter); }