diff --git a/code/base/context_cracking.h b/code/base/context_cracking.h index fbf7f4c..60e8c7d 100644 --- a/code/base/context_cracking.h +++ b/code/base/context_cracking.h @@ -72,7 +72,7 @@ #pragma endregion Build Options -#pragma region Compiler Vendor +#pragma region Vendor #if defined( _MSC_VER ) # pragma message("Detected MSVC") @@ -128,7 +128,7 @@ # define GCC_VERSION_CHECK(major,minor,patch) (0) #endif -#pragma endregion Compiler Vendor +#pragma endregion Vendor #pragma region Language diff --git a/code/base/markup.h b/code/base/markup.h index 268d808..bfaf878 100644 --- a/code/base/markup.h +++ b/code/base/markup.h @@ -25,4 +25,4 @@ set_thread_namef(char *fmt, ...) } #define thread_namef(...) (set_thread_namef(__VA_ARGS__)) -#define thraed_name(str) (set_thread_name(str)) +#define thread_name(str) (set_thread_name(str)) diff --git a/code/base/strings.c b/code/base/strings.c index 7a58a8d..fd756a0 100644 --- a/code/base/strings.c +++ b/code/base/strings.c @@ -4,12 +4,8 @@ # include "debug.h" # include "strings.h" # include "thread_context.h" -//////////////////////////////// -//~ rjf: Third Party Includes # define STB_SPRINTF_IMPLEMENTATION -# if BUILD_STATIC -# #define STB_SPRINTF_STATIC -# endif +# define STB_SPRINTF_STATIC # include "third_party/stb/stb_sprintf.h" #endif diff --git a/code/base/time.h b/code/base/time.h index 4f3628a..c580462 100644 --- a/code/base/time.h +++ b/code/base/time.h @@ -7,7 +7,7 @@ //~ allen: Time typedef enum WeekDay WeekDay; -enum Weekday +enum WeekDay { WeekDay_Sun, WeekDay_Mon, @@ -101,15 +101,15 @@ date_time_from_dense_time(DenseTime time) { inline DateTime date_time_from_micro_seconds(U64 time){ - DateTime result = {0}; - result.micro_sec = time % 1000; time /= 1000; - result.msec = time % 1000; time /= 1000; - result.sec = time % 60; time /= 60; - result.min = time % 60; time /= 60; - result.hour = time % 24; time /= 24; - result.day = time % 31; time /= 31; - result.mon = time % 12; time /= 12; - assert(time <= MAX_U32); - result.year = (U32)time; - return(result); + DateTime result = {0}; + result.micro_sec = time % 1000; time /= 1000; + result.msec = time % 1000; time /= 1000; + result.sec = time % 60; time /= 60; + result.min = time % 60; time /= 60; + result.hour = time % 24; time /= 24; + result.day = time % 31; time /= 31; + result.mon = time % 12; time /= 12; + assert(time <= MAX_U32); + result.year = (U32)time; + return(result); } diff --git a/code/mdesk/mdesk.h b/code/mdesk/mdesk.h index b40526c..05d921a 100644 --- a/code/mdesk/mdesk.h +++ b/code/mdesk/mdesk.h @@ -1,4 +1,4 @@ -#if INTELLISENSE_DIRECTIVES +#ifdef INTELLISENSE_DIRECTIVES # pragma once # include "os/os.h" #endif diff --git a/gen_c11/c11.refactor b/gen_c11/c11.refactor index 2b27eab..446650f 100644 --- a/gen_c11/c11.refactor +++ b/gen_c11/c11.refactor @@ -48,6 +48,8 @@ word scast, md_scast word enum_underlying, md_enum_underlying word nullptr, md_nullptr +word PARAM_DEFAULT, MD_PARAM_DEFAULT + word force_inline, md_force_inline word never_inline, md_never_inline @@ -68,6 +70,7 @@ word glue_, md_glue_ word do_once, md_do_once word do_once_defer, md_do_once_defer word do_once_start, md_do_once_start +word do_once_end, md_do_once_end // base/generic_macros.h @@ -80,7 +83,8 @@ word resolved_function_call, md_resolved_function_call word if_generic_selector_defined_include_slot, md_if_generic_selector_defined_include_slot -word UNRESOLVED_GENERIC_SELECTION, MD_UNRESOLVED_GENERIC_SELECTION +word UNRESOLVED_GENERIC_SELECTION, MD_UNRESOLVED_GENERIC_SELECTION +word assert_generic_selection_fail, md_assert_generic_selection_fail namespace GENERIC_SLOT_1__, MD_GENERIC_SLOT_1__ namespace generic_example_hash_, md_generic_example_hash_ @@ -92,6 +96,7 @@ word distinct, md_distinct // base/profiling.h +word PROFILE_TELEMETRY, MD_PROFILE_TELEMETRY word MARKUP_LAYER_COLOR, MD_MARKUP_LAYER_COLOR namespace prof_, md_prof_ @@ -111,6 +116,8 @@ word S128, MD_S128 word USIZE, MD_USIZE word SSIZE, MD_SSIZE +word sizeo_of, md_size_of + word SPTR, MD_SPTR word UPTR, MD_UPTR @@ -311,7 +318,8 @@ namespace ring_, md_ring_ word trap, md_trap word assert_always, md_assert_always -word assert, md_asert +word assert, md_assert +word assert_msg, md_assert_msg word invalid_path, md_invalid_path word not_implemented, md_not_implemented @@ -342,6 +350,7 @@ word clamp_top, md_clamp_top word clamp_bot, md_clamp_bot word clamp, md_clamp +word member, md_member word align_of, md_align_of word offset_of, md_offset_of word member_from_offset, md_member_from_offset @@ -358,7 +367,7 @@ word memory_copy_type, md_memory_copy_type word memory_zero, md_memory_zero word memory_zero_struct, md_memory_zero_struct -word memroy_zero_array, md_memory_zero_array +word memory_zero_array, md_memory_zero_array word memory_zero_type, md_memory_zero_type word memory_match, md_memory_match @@ -381,7 +390,8 @@ word set_nil, md_set_nil namespace dll_, md_dll_ namespace sll_, md_sll_ -word NO_ASAN, MD_NO_ASAN +word NO_ASAN, MD_NO_ASAN +word ASAN_ENABLED, MD_ASAN_ENABLED namespace asan_, md_asan_ @@ -489,11 +499,13 @@ word mfree, md_mfree namespace VARENA_, MD_VARENA_ -word VArenaFlags, MD_VArenaFlags -word VArena, MD_VArena +word VArenaParams, MD_VArenaParams +word VArenaFlags, MD_VArenaFlags +word VArena, MD_VArena namespace VArenaFlag_, MD_VArenaFlag_ +word varena_alloc, md_varena_alloc word varena__alloc, md_varena__alloc word varena_commit, md_varena_commit word varena_release, md_varena_release @@ -510,6 +522,10 @@ word farena_from_memory, md_farena_from_memory // base/arena.h +namespace ArenaFlag, MD_ArenaFlag + +word ARENA_DEFAULT_BLOCK_SIZE, MD_ARENA_DEFAULT_BLOCK_SIZE + word ArenaFlags, MD_ArenaFlags word ArenaParams, MD_ArenaParams word Arena, MD_Arena @@ -539,8 +555,8 @@ namespace Axis2_, MD_Axis2_ namespace Corner_, MD_Corner_ namespace Dir2_, MD_Dir2_ -word axis_from_dir2, md_axis_from_dir2 -word side_from_dir2, md_side_from_dir2 +word axis2_from_dir2, md_axis2_from_dir2 +word side_from_dir2, md_side_from_dir2 word sign_from_side_f32, md_side_from_side_f32 wrod sign_from_side_f64, md_side_from_side_f64 @@ -592,9 +608,29 @@ word round_f32, md_round_f32 word abs_f32, md_abs_f32 word radians_from_turns_f32, md_radians_from_turns_f32 +word turns_from_radians_f32, md_turns_from_radians_f32 +word degrees_from_turns_f32, md_degrees_from_turns_f32 +word turns_from_degrees_f32, md_turns_from_degrees_f32 + +word degrees_from_radians_f32, md_degrees_from_radians_f32 +word radians_from_degrees_f32, md_radians_from_degrees_f32 + +word sin_f32, md_sin_f32 +word cos_f32, md_cos_f32 +word tan_f32, md_tan_f32 + +word radians_from_turns_f64, md_radians_from_turns_f64 word turns_from_radians_f64, md_turns_from_radians_f64 word degrees_from_turns_f64, md_degrees_from_turns_f64 -word turns_from_degrees_f64, md_turns_from_degrees_f64 +word degrees_from_turns_f64, md_degrees_from_turns_f64 + +word sqrt_f64, md_sqrt_f64 +word mod_f64, md_mod_f64 +word pow_f64, md_pow_f64 +word ceil_f64, md_ceil_f64 +word floor_f64, md_floor_f64 +word round_f64, md_round_f64 +word abs_f64, md_abs_f64 word degrees_from_radians_f64, md_degrees_from_radians_f64 word radians_from_degrees_f64, md_radians_from_degrees_f64 @@ -603,6 +639,10 @@ word sin_f64, md_sin_f64 word cos_f64, md_cos_f64 word tan_f64, md_tan_f64 +word sin_f32, md_sin_f32 +word cos_f32, md_cos_f32 +word tan_f32, md_tan_f32 + word mix_1f32, md_mix_1f32 word mix_1f64, md_mix_1f64 @@ -857,7 +897,7 @@ word contains_2s64, md_contains_2s64 word dim_2s64, md_dim_2s64 word union_2s64, md_union_2s64 word intersect_2s64, md_intersect_2s64 -word clamp_2s32, md_clamp_2s32 +word clamp_2s64, md_clamp_2s64 word hsv_from_rgb, md_hsv_from_rgb word rgb_from_hsv, md_rgb_from_hsv @@ -868,11 +908,16 @@ word u32_from_rgba, md_u32_from_rgba namespace rgba_from_, md_rgba_from_ -word rng1s64_list_push, md_rng1s64_list_push -word rng1s64_array_from_list, md_rng1s64_array_from_list +namespace rng1s64_list_push_, md_rng1s64_list_push_ +namespace rng1s64_array_from_list_, md_rng1s64_array_from_list_ + word rng1s64_list_alloc, md_rng1s64_list_alloc word rng1s64_array_from_list_alloc, md_rng1s64_array_from_list_alloc +// base/sort.h + +word quick_sort, md_quick_sort + // base/toolchain.h word OperatingSystem, MD_OperatingSystem @@ -893,6 +938,11 @@ word compiler_from_context, md_compiler_from_context // base/strings.h +word integer_symbols, md_integer_symbols +word base64, md_base64 +word base64_reverse, md_base64_reverse +word integer_symbol_reverse, md_integer_symbol_reverse + word String8, MD_String8 word String16, MD_String16 word String32, MD_String32 @@ -912,13 +962,24 @@ namespace StringMatchFlag_, MD_StringMatchFlag_ namespace StringSplitFlag_, MD_StringSplitFlag_ namespace PathStyle_, MD_PathStyle_ -namepsace char_, md_char_ +namespace char_, md_char_ word cstring8_length, md_cstring8_length word cstring16_length, md_cstring16_length word cstring32_length, md_cstring32_length word cstring_length, md_cstring_length +word str8, md_str8 +word str16, md_str16 + +word str8fv__arena, md_str8fv__arena +word str8f__arena, md_str8f__arena +word str8fv__ainfo, md_str8fv__ainfo +word str8f__ainfo, md_str8f__ainfo + +word str8fv, md_str8fv +word str8f, md_str8f + namespace str8_, md_str8_ namespace str16_, md_str16_ namespace str32_, md_str32_ @@ -944,12 +1005,31 @@ namespace hex_string_, md_hex_string_ //namespace rgba_from_, md_rgba_from_ (done by math.h) namespace fuzzy_match_, md_fuzzy_match_ +word path_style_from_str8, md_path_style_from_str8 + +namespace utf8_, md_utf8_ +namespace utf16_, md_utf16_ + +word operating_system_from_string, md_operating_system_from_string + +namespace file_name_date_time_string_, md_file_name_date_time_string_ + +// base/text.h + +word TxtRng, MD_TxtRng +word TxtPt, MD_TxtPt +word String8TxtPtPair, MD_String8TxtPtPair + +namespace txt_, md_txt_ + // base/thread_context.h word TCTX, MD_TCTX namespace tctx, md_tctx +namespace scratch_begin_, md_scratch_begin_ + word scratch_begin, md_scratch_begin word scratch_begin_alloc, md_scratch_begin_alloc @@ -975,8 +1055,7 @@ word LogScope, MD_LogScope word LogScopeResult, MD_LogScopeResult word Log, MD_Log -namespace LogMsgKind_, MD_LogMsgKind_ - +namespace LogMsgKind_, MD_LogMsgKind_ namespace LOG_DEFAULT_, MD_LOG_DEFAULT_ namespace log_, md_log_ diff --git a/gen_c11/gen_c11.c b/gen_c11/gen_c11.c index a8bf657..cdcac09 100644 --- a/gen_c11/gen_c11.c +++ b/gen_c11/gen_c11.c @@ -103,7 +103,7 @@ int main() gen_Code mdesk_c = gen_scan_file(path_mdesk "mdesk.c"); - #pragma region Refactored / Formatted +#pragma region Refactored / Formatted gen_Code r_tp_stb_sprintf_h = refactor(tp_stb_sprintf_h); gen_Code r_base_context_cracking_h = refactor(base_context_cracking_h); @@ -116,9 +116,9 @@ int main() gen_Code r_base_ring_h = refactor(base_ring_h); gen_Code r_base_debug_h = refactor(base_debug_h); gen_Code r_base_memory_h = refactor(base_memory_h); - gen_Code r_base_memory_substrate_h = refactor(base_memory_substrate_h); + gen_Code r_base_memory_substrate_h = refactor_and_format(base_memory_substrate_h); gen_Code r_base_arena_h = refactor(base_arena_h); - gen_Code r_base_space_h = refactor(base_space_h); + gen_Code r_base_space_h = refactor_and_format(base_space_h); gen_Code r_base_math_h = refactor_and_format(base_math_h); gen_Code r_base_sort_h = refactor(base_sort_h); gen_Code r_base_toolchain_h = refactor(base_toolchain_h); @@ -128,17 +128,17 @@ int main() gen_Code r_base_thread_context_h = refactor(base_thread_context_h); gen_Code r_base_command_line_h = refactor(base_command_line_h); gen_Code r_base_markup_h = refactor(base_markup_h); - gen_Code r_base_logger_h = refactor(base_logger_h); + gen_Code r_base_logger_h = refactor_and_format(base_logger_h); gen_Code r_base_entry_point_h = refactor(base_entry_point_h); gen_Code r_base_file_h = refactor(base_file_h); - gen_Code r_os_h = refactor(os_h); + gen_Code r_os_h = refactor_and_format(os_h); gen_Code r_os_win32_includes_h = refactor(os_win32_includes_h); - gen_Code r_os_win32_h = refactor(os_win32_h); + gen_Code r_os_win32_h = refactor_and_format(os_win32_h); gen_Code r_os_linux_includes_h = refactor(os_linux_includes_h); - gen_Code r_os_linux_h = refactor(os_linux_h); + gen_Code r_os_linux_h = refactor_and_format(os_linux_h); - gen_Code r_mdesk_h = refactor(mdesk_h); + gen_Code r_mdesk_h = refactor_and_format(mdesk_h); gen_Code r_base_platform_c = refactor(base_platfom_c); gen_Code r_base_debug_c = refactor(base_debug_c); @@ -157,14 +157,14 @@ int main() gen_Code r_os_linux_c = refactor(os_linux_c); gen_Code r_os_c = refactor(os_os_c); - gen_Code r_mdesk_c = refactor(mdesk_c); - #pragma endregion Refactored / Formatted + gen_Code r_mdesk_c = refactor_and_format(mdesk_c); +#pragma endregion Refactored / Formatted if (GENERATE_SINGLEHEADER) { - #define builder header - gen_Builder header_ = gen_builder_open(path_gen "metadesk_singleheader.h"); - gen_Builder* header = & header_; + #define builder header + gen_Builder header_ = gen_builder_open(path_gen "metadesk_singleheader.h"); + gen_Builder* header = & header_; gen_Str implementation_guard_start = lit( // "#pragma region METADESK IMPLEMENTATION GUARD\n" @@ -268,7 +268,7 @@ int main() comment("#elif OS_LINUX"); preprocess_endif(); - pragma_endregion("Operting System") + pragma_endregion("Operating System") new_line(); pragma_region("MDesk") @@ -339,12 +339,190 @@ int main() new_line(); gen_builder_write(header); - #undef builder + #undef builder } if (GENERATE_SEGEREGATED) { + // Dependencies + #define builder header_deps + gen_Builder header_deps_ = gen_builder_open(path_gen "metadesk_deps.h"); + gen_Builder* header_deps = & header_deps_; + + // Header files + + print_fmt("%S", generation_notice); + print(gen_pragma_once); + new_line(); + + pragma_region("Base"); + print(banner_base); + new_line(); + + print_section(r_base_context_cracking_h, lit("Context Cracking")); + print_section(r_base_platform_h, lit("platform")); + print_section(r_base_linkage_h, lit("Linkage")); + print_section(r_base_macros_h, lit("Macros")); + print_section(r_base_generic_macros_h, lit("_Generic Macros")); + print_section(r_base_profiling_h, lit("Profiling")); + + define(lit("STB_SPRINTF_DECORATE(name)"), MT_Expression, .content = lit("md_##name"), .flags = MF_Functional); + // print(); + preprocess_if("MD_BUILD_STATIC"); { + define(lit("STB_BUILD_STATIC"), MT_Statement); + } + preprocess_endif(); + new_line(); + + print_section(r_tp_stb_sprintf_h, lit("STB snprintf Header")); + new_line(); + + print_section(r_base_base_types_h, lit("Types")); + print_section(r_base_ring_h, lit("Ring")); + print_section(r_base_debug_h, lit("Debug")); + print_section(r_base_memory_h, lit("Memory")); + print_section(r_base_memory_substrate_h, lit("Memory Substrate")); + print_section(r_base_arena_h, lit("Arena")); + print_section(r_base_space_h, lit("Space")); + print_section(r_base_math_h, lit("Math")); + print_section(r_base_sort_h, lit("Sort")); + print_section(r_base_toolchain_h, lit("Toolchain")); + print_section(r_base_time_h, lit("Time")); + print_section(r_base_strings_h, lit("strings")); + print_section(r_base_text_h, lit("Text")); + print_section(r_base_thread_context_h, lit("Thread Context")); + print_section(r_base_command_line_h, lit("Command Line")); + print_section(r_base_markup_h, lit("Markup")); + print_section(r_base_logger_h, lit("Logger")); + print_section(r_base_entry_point_h, lit("Entry Point")); + print_section(r_base_file_h, lit("File")); + + pragma_endregion("Base"); + new_line(); + + pragma_region("Operating System"); + print(banner_os); + new_line(); + + print_section(r_os_h, lit("OS")); + + preprocess_if("!defined(MD_OS_FEATURE_GRAPHICAL)"); { + define(lit("MD_OS_FEATURE_GRAPHICAL"), MT_Expression, .content = lit("0") ); + } + preprocess_endif(); + new_line(); + + preprocess_if("!defined(MD_OS_GFX_STUB)"); { + define(lit("MD_OS_GFX_STUB"), MT_Expression, .content = lit("0") ); + } + preprocess_endif(); + new_line(); + + preprocess_if("MD_OS_WINDOWS"); { + print_section(r_os_win32_includes_h, lit("Win32 Includes")); + print_section(r_os_win32_h, lit("OS Win32")); + } + comment("#if MD_OS_WINDOWS"); new_line(); + preprocess_elif("MD_OS_LINUX"); { + print_section(r_os_linux_includes_h, lit("Linux Includes")); + print_section(r_os_linux_h, lit("OS Linux")); + } + comment("#elif OS_LINUX"); + preprocess_endif(); + + pragma_endregion("Operating System") + new_line(); + gen_builder_write(header_deps); + #undef builder + + #define builder header + gen_Builder header_ = gen_builder_open(path_gen "metadesk.h"); + gen_Builder* header = & header_; + + print(gen_scan_file(path_gen_c11 "banner_segregated.h")); + print(gen_pragma_once); + new_line(); + + include(lit("metadesk_deps.h")); + + print(r_mdesk_h); + + print(banner_mdesk); + new_line(); new_line(); + + gen_builder_write(header); + #undef builder + + // Source files + + #define builder source_deps + gen_Builder source_deps_ = gen_builder_open(path_gen "metadesk_deps.c"); + gen_Builder* source_deps = & source_deps_; + + include(lit("metadesk_deps.h")); + new_line(); + + pragma_region("Base"); + print(banner_base); + new_line(); + + define(lit("STB_SPRINTF_IMPLEMENTATION"), MT_Statement); + // print(); + preprocess_if("MD_BUILD_STATIC"); { + define(lit("STB_BUILD_STATIC"), MT_Statement); + } + preprocess_endif(); + new_line(); + + print_section(r_tp_stb_sprintf_h, lit("STB snprintf Header")); + new_line(); + + print_section(r_base_platform_c, lit("Platform")); + print_section(r_base_memory_substrate_c, lit("Memory Substrate")); + print_section(r_base_arena_c, lit("Arena")); + print_section(r_base_strings_c, lit("Strings")); + print_section(r_base_text_c, lit("Text")); + print_section(r_base_thread_context_c, lit("Thread Context")); + print_section(r_base_markup_c, lit("Markup")); + print_section(r_base_command_line_c, lit("Command Line")); + print_section(r_base_logger_c, lit("Logger")); + print_section(r_base_entry_point_c, lit("Entry Point")); + print_section(r_base_time_c, lit("Time")); + + pragma_endregion("Base"); + new_line(); + + pragma_region("Operating System"); + print(banner_os); + new_line(); + + preprocess_if("MD_OS_WINDOWS"); { + print(r_os_win32_c) + } + preprocess_elif("MD_OS_LINUX"); { + print(r_os_linux_c); + } + preprocess_endif(); + + print(r_os_c);; + + pragma_endregion("Operating System"); + new_line(); + gen_builder_write(source_deps); + #undef builder + + #define builder source + gen_Builder source_ = gen_builder_open(path_gen "metadesk.c"); + gen_Builder* source = & source_; + + include(lit("metadesk.h")); + + print(r_mdesk_c); + + new_line(); + gen_builder_write(source); + #undef builder } // gen_deinit(& ctx); diff --git a/gen_c11/gen_common.h b/gen_c11/gen_common.h index f3e5361..b377155 100644 --- a/gen_c11/gen_common.h +++ b/gen_c11/gen_common.h @@ -26,7 +26,6 @@ #define path_scratch_file path_gen "scratch.h" #define path_format_style path_bin ".clang-format " - // Codegen DSL #define lit gen_txt @@ -41,7 +40,7 @@ #define pragma_endregion(label) print(gen_def_pragma(str_fmt("endregion %S", lit(label)))) #define define(id, type, ...) print(gen_def__define(id, type, &(gen_Opts_def_define){ __VA_ARGS__ })) #define comment(content) print(gen_def_comment(lit(content))) -#define include gen_def_include +#define include(content, ...) print(gen_def__include(content, &(gen_Opts_def_include){ __VA_ARGS__})) #define preprocess_cond(type, expr) gen_def_preprocess_cond(type, expr) #define preprocess_if(expr) print(preprocess_cond(PreprocessCond_If, lit(expr))); new_line() #define preprocess_ifndef(expr) print(preprocess_cond(PreprocessCond_IfNotDef, lit(expr))); new_line() @@ -667,7 +666,7 @@ void register_library_macros() // base/markup.h gen_register_macros(args( ((gen_Macro) { lit("thread_namef"), MT_Expression, MF_Functional }), - ((gen_Macro) { lit("thraed_name"), MT_Expression, MF_Functional }) + ((gen_Macro) { lit("thread_name"), MT_Expression, MF_Functional }) )); // base/logger.h gen_register_macros(args( diff --git a/third_party/gencpp_c11/gencpp_c11.h b/third_party/gencpp_c11/gencpp_c11.h index 8619c0d..fd62485 100644 --- a/third_party/gencpp_c11/gencpp_c11.h +++ b/third_party/gencpp_c11/gencpp_c11.h @@ -9697,8 +9697,8 @@ struct gen_Opts_def_namespace }; typedef struct gen_Opts_def_namespace gen_Opts_def_namespace; -GEN_API gen_CodeInclude gen_def__include(gen_Str content, gen_Opts_def_include opts GEN_PARAM_DEFAULT); -#define gen_def_include(content, ...) gen_def__include(content, (gen_Opts_def_include) { __VA_ARGS__ }) +GEN_API gen_CodeInclude gen_def__include(gen_Str content, gen_Opts_def_include* opts GEN_PARAM_DEFAULT); +#define gen_def_include(content, ...) gen_def__include(content, &(gen_Opts_def_include) { __VA_ARGS__ }) GEN_API gen_CodeModule gen_def__module(gen_Str name, gen_Opts_def_module opts GEN_PARAM_DEFAULT); #define gen_def_module(name, ...) gen_def__module(name, (gen_Opts_def_module) { __VA_ARGS__ }) @@ -18830,8 +18830,10 @@ gen_CodeFn gen_def__function(gen_Str name, gen_Opts_def_function p) return result; } -gen_CodeInclude gen_def__include(gen_Str path, gen_Opts_def_include p) +gen_CodeInclude gen_def__include(gen_Str path, gen_Opts_def_include* opts) { + gen_Opts_def_include p = opts ? *opts : (gen_Opts_def_include){0}; + if (path.Len <= 0 || path.Ptr == gen_nullptr) { gen_log_failure("gen::gen_def_include: Invalid path provided - %d");