|
|
|
@ -65,19 +65,123 @@ int gen_main()
|
|
|
|
|
Context ctx {};
|
|
|
|
|
gen::init(& ctx);
|
|
|
|
|
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_API_C_BEGIN"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_API_C_END"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("Array("));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("HashTable("));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_NS_PARSER"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_NS_PARSER_BEGIN"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_NS_PARSER_END"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("Using_Code("));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("Using_CodeOps("));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_OPTIMIZE_MAPPINGS_BEGIN"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_OPITMIZE_MAPPINGS_END"));
|
|
|
|
|
ctx.PreprocessorDefines.append(txt("GEN_PARAM_DEFAULT"));
|
|
|
|
|
//PreprocessorDefines.append(txt("GEN_EXECUTION_EXPRESSION_SUPPORT"));
|
|
|
|
|
register_preprocess_macros( args(
|
|
|
|
|
(PreprocessorMacro { txt("bit"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("bitfield_is_set"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_C_LIKE_CPP"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("cast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("ccast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("rcast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("pcast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("scast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("stringize_va"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("stringize"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("do_once"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("do_once_defer"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("do_once_start"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("do_once_end"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("labeled_scope_start"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("labeled_scope_end"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("compiler_decorated_func_name"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("num_args_impl"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("num_args"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("count_of"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("clamp"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("is_between"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("size_of"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("min"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("max"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("offset_of"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("static_assert"), MT_Statement, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("typeof"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_API_C_BEGIN"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_API_C_END"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("nullptr"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_REMOVE_PTR"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_PARAM_DEFAULT"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("struct_init"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_OPTIMIZE_MAPPINGS_BEGIN"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_OPITMIZE_MAPPINGS_END"), MT_Statement, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("Array"), MT_Typename, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("HashTable"), MT_Typename, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("Using_Code"), MT_Statement, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("Using_CodeOps"), MT_Statement, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("kilobytes"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("megabytes"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("gigabytes"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("terabytes"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN__ONES"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN__HIGHS"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN__HAS_ZERO"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("zero_item"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("zero_array"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_DEFAULT_MEMORY_ALIGNMENT"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_DEFAULT_ALLOCATOR_FLAGS"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("alloc_item"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("alloc_array"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("malloc"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("mfree"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_PRINTF_MAXLEN"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("cast_to_str"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("current"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("txt"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_FILE_OPEN_PROC"), MT_Statement, MF_Functional | MF_Expects_Body }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_FILE_READ_AT_PROC"), MT_Statement, MF_Functional | MF_Expects_Body }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_FILE_WRITE_AT_PROC"), MT_Statement, MF_Functional | MF_Expects_Body }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_FILE_SEEK_PROC"), MT_Statement, MF_Functional | MF_Expects_Body }),
|
|
|
|
|
(PreprocessorMacro { txt("GEN_FILE_CLOSE_PROC"), MT_Statement, MF_Functional | MF_Expects_Body }),
|
|
|
|
|
(PreprocessorMacro { txt("log_failure"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("operator"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("InvalidCode"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("NullCode"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("Verify_POD"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("gen_main"), MT_Statement, MF_Null })
|
|
|
|
|
));
|
|
|
|
|
register_preprocess_macros( args(
|
|
|
|
|
(PreprocessorMacro { txt("name"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("code"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("args"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("code_str"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("code_fmt"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("parse_fmt"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("token_fmt"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_member_val"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_member_str"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_member_content"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_member_ast"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_params"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_param_eq_ret"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("specs"), MT_Expression, MF_Functional | MF_Allow_As_Identifier }),
|
|
|
|
|
(PreprocessorMacro { txt("name_check"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("null_check"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("def_body_start"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("def_body_code_array_start"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("move_forward"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("skip_whitespace"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("end_line"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check_parse_args"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("currtok_noskip"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("currtok"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("peektok"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("prevtok"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("nexttok"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("nexttok_noskip"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("eat"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("left"), MT_Expression, MF_Null | MF_Allow_As_Identifier }),
|
|
|
|
|
(PreprocessorMacro { txt("def_assign"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("CHECK_WAS_DEFINED"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("check_noskip"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("check"), MT_Expression, MF_Functional | MF_Allow_As_Identifier }),
|
|
|
|
|
(PreprocessorMacro { txt("push_scope"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("cut_length"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("cut_ptr"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("pos"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("move_fwd"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("Entry"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("CheckEndParams"), MT_Expression, MF_Functional }),
|
|
|
|
|
(PreprocessorMacro { txt("UseTemplateCapture"), MT_Expression, MF_Null }),
|
|
|
|
|
(PreprocessorMacro { txt("check_current"), MT_Expression, MF_Functional })
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
Code push_ignores = scan_file( path_base "helpers/push_ignores.inline.hpp" );
|
|
|
|
|
Code pop_ignores = scan_file( path_base "helpers/pop_ignores.inline.hpp" );
|
|
|
|
@ -139,8 +243,8 @@ int gen_main()
|
|
|
|
|
CodeTemplate tmpl = cast(CodeTemplate, entry);
|
|
|
|
|
if ( tmpl->Declaration->Name.contains(txt("swap")))
|
|
|
|
|
{
|
|
|
|
|
log_fmt("SWAPPED");
|
|
|
|
|
CodeBody macro_swap = parse_global_body( txt(R"(
|
|
|
|
|
register_preprocess_macro({ txt("swap"), MT_Expression, MF_Functional });
|
|
|
|
|
CodeDefine macro_swap = parse_define( txt(R"(
|
|
|
|
|
#define swap( a, b ) \
|
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
@ -241,7 +345,8 @@ do \
|
|
|
|
|
{
|
|
|
|
|
if ( str_contains(entry->Name, txt("Msg_Invalid_Value")))
|
|
|
|
|
{
|
|
|
|
|
CodeDefine define = def_define(entry->Name, entry->Value->Content);
|
|
|
|
|
Opts_def_define opts = { {}, entry->Value->Content };
|
|
|
|
|
CodeDefine define = def_define(entry->Name, MT_Expression, opts );
|
|
|
|
|
header_printing.append(define);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
@ -407,7 +512,8 @@ do \
|
|
|
|
|
CodeVar var = cast(CodeVar, entry);
|
|
|
|
|
if (var->Specs.has(Spec_Constexpr) > -1)
|
|
|
|
|
{
|
|
|
|
|
CodeDefine define = def_define(entry->Name, entry->Value->Content);
|
|
|
|
|
Opts_def_define opts = { {}, entry->Value->Content };
|
|
|
|
|
CodeDefine define = def_define(entry->Name, MT_Expression, opts);
|
|
|
|
|
header_filesystem.append(define);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
@ -811,7 +917,8 @@ R"(#define AST_ArrSpecs_Cap \
|
|
|
|
|
ast.append(def);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
CodeDefine def = def_define(var->Name, var->Value.to_strbuilder());
|
|
|
|
|
Opts_def_define opts = { {}, var->Value.to_strbuilder() };
|
|
|
|
|
CodeDefine def = def_define(var->Name, MT_Expression, opts );
|
|
|
|
|
ast.append(def);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -832,6 +939,7 @@ R"(#define AST_ArrSpecs_Cap \
|
|
|
|
|
txt("CodeClass"),
|
|
|
|
|
txt("CodeConstructor"),
|
|
|
|
|
txt("CodeDefine"),
|
|
|
|
|
txt("CodeDefineParams"),
|
|
|
|
|
txt("CodeDestructor"),
|
|
|
|
|
txt("CodeEnum"),
|
|
|
|
|
txt("CodeExec"),
|
|
|
|
@ -1209,8 +1317,10 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
|
|
|
|
if (var->Specs)
|
|
|
|
|
{
|
|
|
|
|
s32 constexpr_found = var->Specs.remove( Spec_Constexpr );
|
|
|
|
|
if (constexpr_found > -1) {
|
|
|
|
|
CodeDefine define = def_define(entry->Name, entry->Value->Content);
|
|
|
|
|
if (constexpr_found > -1)
|
|
|
|
|
{
|
|
|
|
|
Opts_def_define opts = { {}, entry->Value->Content };
|
|
|
|
|
CodeDefine define = def_define(entry->Name, MT_Expression, opts );
|
|
|
|
|
header_end.append(define);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|