mirror of
https://github.com/Ed94/gencpp.git
synced 2025-06-14 18:51:47 -07:00
dependency impl compiles for C11 library (doing components next)
This commit is contained in:
@ -172,6 +172,19 @@ int gen_main()
|
||||
|
||||
case CT_Enum:
|
||||
{
|
||||
if (entry->Name.is_equal(txt("ETypenameTag")))
|
||||
{
|
||||
#pragma push_macro("enum_underlying")
|
||||
#undef enum_underlying
|
||||
entry->UnderlyingTypeMacro = untyped_str(token_fmt("type", entry->UnderlyingType->Name, stringize(enum_underlying(<type>))));
|
||||
entry->UnderlyingType = CodeTypename{nullptr};
|
||||
types.append(entry);
|
||||
#pragma pop_macro("enum_underlying")
|
||||
|
||||
CodeTypedef entry_td = parse_typedef(code( typedef u16 ETypenameTag; ));
|
||||
types.append(entry_td);
|
||||
continue;
|
||||
}
|
||||
//log_fmt("Detected ENUM: %S", entry->Name);
|
||||
convert_cpp_enum_to_c(cast(CodeEnum, entry), types);
|
||||
}
|
||||
@ -735,6 +748,89 @@ do \
|
||||
break;
|
||||
}
|
||||
|
||||
CodeBody array_adt_node = gen_array(txt("ADT_Node"), txt("Array_ADT_Node"));
|
||||
|
||||
CodeBody parsed_parsing = parse_file( project_dir "dependencies/parsing.hpp" );
|
||||
CodeBody parsing = def_body(CT_Global_Body);
|
||||
for ( Code entry = parsed_parsing.begin(); entry != parsed_parsing.end(); ++ entry ) switch (entry->Type)
|
||||
{
|
||||
case CT_Preprocess_Pragma:
|
||||
{
|
||||
if ( entry->Content.contains(txt("ADT")) )
|
||||
{
|
||||
parsing.append(entry);
|
||||
parsing.append(fmt_newline);
|
||||
|
||||
// Add ADT_Node forward and typedef early.
|
||||
CodeStruct adt_node_fwd = parse_struct(code( struct ADT_Node; ));
|
||||
CodeTypedef adt_node_typedef = parse_typedef(code( typedef struct ADT_Node ADT_Node; ));
|
||||
parsing.append(adt_node_fwd);
|
||||
parsing.append(adt_node_typedef);
|
||||
|
||||
// Skip typedef since we added it
|
||||
b32 continue_for = true;
|
||||
for (Code array_entry = array_adt_node.begin(); continue_for && array_entry != array_adt_node.end(); ++ array_entry) switch (array_entry->Type)
|
||||
{
|
||||
case CT_Typedef:
|
||||
{
|
||||
// pop the array entry
|
||||
array_adt_node->NumEntries -= 1;
|
||||
Code next = array_entry->Next;
|
||||
Code prev = array_entry->Prev;
|
||||
next->Prev = array_entry->Prev;
|
||||
prev->Next = next;
|
||||
if ( array_adt_node->Front == array_entry )
|
||||
array_adt_node->Front = next;
|
||||
|
||||
parsing.append(array_entry);
|
||||
continue_for = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CT_Enum:
|
||||
{
|
||||
convert_cpp_enum_to_c(cast(CodeEnum, entry), parsing);
|
||||
}
|
||||
break;
|
||||
|
||||
case CT_Struct:
|
||||
{
|
||||
CodeStruct struct_def = cast(CodeStruct, entry);
|
||||
if ( struct_def->Name.is_equal(txt("ADT_Node") ) )
|
||||
{
|
||||
parsing.append(entry);
|
||||
|
||||
// We need to define the array for ADT_Node right here.
|
||||
parsing.append(array_adt_node);
|
||||
parsing.append(fmt_newline);
|
||||
continue;
|
||||
}
|
||||
|
||||
StrC type_str = codetype_to_keyword_str(entry->Type);
|
||||
StrC formated_tmpl = token_fmt_impl( 3,
|
||||
"type", type_str
|
||||
, "name", entry->Name,
|
||||
stringize(
|
||||
typedef <type> <name> <name>;
|
||||
));
|
||||
CodeTypedef tdef = parse_typedef(formated_tmpl);
|
||||
parsing.append(entry);
|
||||
parsing.append(tdef);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
parsing.append(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
CodeBody array_string_cached = gen_array(txt("StringCached"), txt("Array_StringCached"));
|
||||
|
||||
CodeBody containers = def_body(CT_Global_Body);
|
||||
@ -776,6 +872,19 @@ do \
|
||||
header.print( dump_to_scratch_and_retireve(strings));
|
||||
header.print( dump_to_scratch_and_retireve(filesystem));
|
||||
header.print( timing );
|
||||
|
||||
// CodeStruct fwd = parse_struct(txt("struct ADT_Node;"));
|
||||
|
||||
header.print_fmt( "\n#pragma region Parsing\n" );
|
||||
|
||||
// header.print( fwd );
|
||||
// header.print( adt_node_typedef );
|
||||
// header.print( fmt_newline );
|
||||
// header.print(dump_to_scratch_and_retireve(array_adt_node));
|
||||
|
||||
header.print( dump_to_scratch_and_retireve(parsing) );
|
||||
header.print_fmt( "#pragma endregion Parsing\n\n" );
|
||||
|
||||
header.print_fmt( "\nGEN_NS_END\n" );
|
||||
header.print_fmt( roll_own_dependencies_guard_end );
|
||||
#pragma endregion Print Dependencies
|
||||
@ -834,7 +943,7 @@ do \
|
||||
Code strings = scan_file( project_dir "dependencies/strings.cpp" );
|
||||
Code filesystem = scan_file( project_dir "dependencies/filesystem.cpp" );
|
||||
Code timing = scan_file( project_dir "dependencies/timing.cpp" );
|
||||
#pragma region Scan, Parse, and Generate Dependencies
|
||||
#pragma endregion Scan, Parse, and Generate Dependencies
|
||||
|
||||
#pragma region Scan, Parse, and Generate Components
|
||||
Code static_data = scan_file( project_dir "components/static_data.cpp" );
|
||||
@ -873,7 +982,38 @@ do \
|
||||
#pragma endregion Print Dependencies
|
||||
|
||||
#pragma region Print Components
|
||||
#if 0
|
||||
CodeBody etoktype = gen_etoktype( project_dir "enums/ETokType.csv", project_dir "enums/AttributeTokens.csv" );
|
||||
|
||||
header.print_fmt( "\nGEN_NS_BEGIN\n");
|
||||
header.print( static_data );
|
||||
|
||||
header.print_fmt( "#pragma region AST\n\n" );
|
||||
header.print( ast_case_macros );
|
||||
header.print( ast );
|
||||
header.print( code );
|
||||
header.print_fmt( "#pragma endregion AST\n\n" );
|
||||
|
||||
header.print_fmt( "#pragma region Interface\n" );
|
||||
header.print( interface );
|
||||
header.print( upfront );
|
||||
header.print_fmt( "\n#pragma region Parsing\n\n" );
|
||||
header.print( dump_to_scratch_and_retireve(parser_nspace) );
|
||||
header.print( lexer );
|
||||
header.print( parser );
|
||||
header.print( parsing_interface );
|
||||
header.print_fmt( "\n#pragma endregion Parsing\n" );
|
||||
header.print( untyped );
|
||||
header.print_fmt( "\n#pragma endregion Interface\n\n");
|
||||
|
||||
header.print_fmt( "#pragma region Builder\n" );
|
||||
header.print( scan_file( project_dir "auxillary/builder.cpp" ) );
|
||||
header.print_fmt( "\n#pragma endregion Builder\n\n" );
|
||||
|
||||
header.print_fmt( "\n#pragma region Scanner\n" );
|
||||
header.print( scan_file( project_dir "auxillary/scanner.hpp" ) );
|
||||
header.print_fmt( "#pragma endregion Scanner\n\n" );
|
||||
#endif
|
||||
#pragma endregion Print Components
|
||||
|
||||
header.print_fmt( implementation_guard_end );
|
||||
@ -882,8 +1022,6 @@ do \
|
||||
header.print( pop_ignores );
|
||||
header.write();
|
||||
|
||||
//k
|
||||
|
||||
gen::deinit();
|
||||
return 0;
|
||||
#undef project_dir
|
||||
|
@ -402,7 +402,9 @@ CodeBody gen_array_generic_selection_interface()
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_init"), GenericSel_Direct_Type ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_init_reserve"), GenericSel_Direct_Type ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_append"), GenericSel_By_Ref ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_append_at"), GenericSel_By_Ref ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_append_items"), GenericSel_By_Ref ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_append_items_at"), GenericSel_By_Ref ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_back"), GenericSel_Default, GenericSel_One_Arg ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_clear"), GenericSel_Default, GenericSel_One_Arg ));
|
||||
interface_defines.append( gen_generic_selection_function_macro( Array_DefinitionCounter, txt("array_fill")) );
|
||||
|
Reference in New Issue
Block a user