mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	Update to c_library.cpp (now up to ast.hpp)
This commit is contained in:
		| @@ -105,6 +105,10 @@ int gen_main() | ||||
| 	PreprocessorDefines.append(txt("GEN_API_C_BEGIN")); | ||||
| 	PreprocessorDefines.append(txt("GEN_API_C_END")); | ||||
| 	PreprocessorDefines.append(txt("HashTable(")); | ||||
| 	PreprocessorDefines.append(txt("GEN_NS_PARSER")); | ||||
| 	PreprocessorDefines.append(txt("GEN_NS_PARSER_BEGIN")); | ||||
| 	PreprocessorDefines.append(txt("GEN_NS_PARSER_END")); | ||||
| 	//PreprocessorDefines.append(txt("GEN_EXECUTION_EXPRESSION_SUPPORT")); | ||||
|  | ||||
| 	Code push_ignores           = scan_file( project_dir "helpers/push_ignores.inline.hpp" ); | ||||
| 	Code pop_ignores            = scan_file( project_dir "helpers/pop_ignores.inline.hpp" ); | ||||
| @@ -121,8 +125,45 @@ int gen_main() | ||||
| 		header.print( c_library_header_start ); | ||||
|  | ||||
| #pragma region Scan, Parse, and Generate Components | ||||
| 		Code types      = scan_file( project_dir "components/types.hpp" ); | ||||
| 		Code ast        = scan_file( project_dir "components/ast.hpp" ); | ||||
| 		CodeBody parsed_types = parse_file( project_dir "components/types.hpp" ); | ||||
| 		CodeBody types        = def_body(CT_Global_Body); | ||||
| 		for ( Code entry = parsed_types.begin(); entry != parsed_types.end(); ++ entry ) | ||||
| 		{ | ||||
| 			switch(entry->Type) | ||||
| 			{ | ||||
| 				case CT_Using: | ||||
| 				{ | ||||
| 					CodeUsing using_ver = cast(CodeUsing, entry); | ||||
|  | ||||
| 					if (using_ver->UnderlyingType->ReturnType) | ||||
| 					{ | ||||
| 						CodeTypename type       = using_ver->UnderlyingType; | ||||
| 						CodeTypedef typedef_ver = parse_typedef(token_fmt(  | ||||
| 							"ReturnType", to_string(type->ReturnType).to_strc() | ||||
| 						,	"Name"      , using_ver->Name | ||||
| 						,	"Parameters", to_string(type->Params).to_strc() | ||||
| 						,	stringize( | ||||
| 								typedef <ReturnType>( * <Name>)(<Parameters>); | ||||
| 						))); | ||||
| 						types.append(typedef_ver); | ||||
| 						break; | ||||
| 					} | ||||
| 					CodeTypedef typedef_ver = def_typedef(using_ver->Name, using_ver->UnderlyingType); | ||||
| 					types.append(typedef_ver); | ||||
| 				} | ||||
| 				break; | ||||
|  | ||||
| 				case CT_Enum: | ||||
| 				{ | ||||
| 					CodeEnum    enum_def     = cast(CodeEnum, entry); | ||||
| 					CodeTypedef typedef_enum = parse_typedef(token_fmt("name", enum_def->Name, stringize( typedef enum <name> <name>; ))); | ||||
| 					types.append(enum_def); | ||||
| 					types.append(typedef_enum); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		Code ast_types  = scan_file( project_dir "components/ast_types.hpp" ); | ||||
| 		Code code_types = scan_file( project_dir "components/code_types.hpp" ); | ||||
| 		Code interface  = scan_file( project_dir "components/interface.hpp" ); | ||||
| @@ -133,6 +174,86 @@ int gen_main() | ||||
| 		CodeBody eoperator   = gen_eoperator ( project_dir "enums/EOperator.csv" ); | ||||
| 		CodeBody especifier  = gen_especifier( project_dir "enums/ESpecifier.csv" ); | ||||
| 		CodeBody ast_inlines = gen_ast_inlines(); | ||||
|  | ||||
| 		CodeBody parsed_ast = parse_file( project_dir "components/ast.hpp" ); | ||||
| 		CodeBody ast        = def_body(CT_Global_Body); | ||||
| 		for ( Code entry = parsed_ast.begin(); entry != parsed_ast.end(); ++ entry ) | ||||
| 		switch (entry->Type) | ||||
| 		{ | ||||
| 			case CT_Preprocess_If: | ||||
| 			{ | ||||
| 				CodePreprocessCond cond = cast(CodePreprocessCond, entry); | ||||
| 				if (cond->Content.contains(txt("GEN_COMPILER_C"))) | ||||
| 				{ | ||||
| 					//++ entry;         //  | ||||
| 					//ast.append(entry) // typedef | ||||
| 					//for ( ; entry != parsed_ast.end() && entry->Type != CT_Preprocess_EndIf; ++ entry) {} | ||||
| 					//++ entry;        // Consume endif | ||||
| 				} | ||||
|  | ||||
| 				b32 found = ignore_preprocess_cond_block(txt("GEN_SUPPORT_CPP_MEMBER_FEATURES"), entry, parsed_ast, ast ); | ||||
| 				if (found) break; | ||||
|  | ||||
| 				found = ignore_preprocess_cond_block(txt("GEN_SUPPORT_CPP_REFERENCES"), entry, parsed_ast, ast); | ||||
| 				if (found) break; | ||||
|  | ||||
| 				found = ignore_preprocess_cond_block(txt("GEN_COMPILER_CPP"), entry, parsed_ast, ast); | ||||
| 				if (found) break; | ||||
|  | ||||
| 				ast.append(entry); | ||||
| 			} | ||||
| 			break; | ||||
|  | ||||
| 			case CT_Struct_Fwd: | ||||
| 			{ | ||||
| 				CodeStruct fwd = cast(CodeStruct, entry); | ||||
| 				if (fwd->Name.starts_with(txt("AST"))) { | ||||
| 					ast.append(fwd); | ||||
| 					CodeTypedef td = parse_typedef(token_fmt("name", fwd->Name, stringize( typedef struct <name> <name>; ))); | ||||
| 					ast.append(td); | ||||
| 				} | ||||
| 			} | ||||
| 			break; | ||||
|  | ||||
| 			case CT_Variable: | ||||
| 			{ | ||||
| 				CodeVar var = cast(CodeVar, entry); | ||||
|  | ||||
| 				s32 constexpr_found = var->Specs.remove( Spec_Constexpr ); | ||||
| 				if (constexpr_found > -1) { | ||||
| 					log_fmt("Found constexpr: %S\n", entry.to_string()); | ||||
| 					if (var->Name.contains(txt("AST_ArrSpecs_Cap"))) | ||||
| 					{ | ||||
| 						Code def = untyped_str(txt( | ||||
| R"(#define AST_ArrSpecs_Cap       \ | ||||
| (                                 \ | ||||
|         AST_POD_Size              \ | ||||
| 		- sizeof(AST*) * 3        \ | ||||
| 		- sizeof(Token*)          \ | ||||
| 		- sizeof(AST*)            \ | ||||
| 		- sizeof(StringCached)    \ | ||||
| 		- sizeof(CodeType)        \ | ||||
| 		- sizeof(ModuleFlag)      \ | ||||
| 		- sizeof(int)             \ | ||||
| )                                 \ | ||||
| / sizeof(int) - 1 | ||||
| )" | ||||
| 						)); | ||||
| 						ast.append(def); | ||||
| 						break; | ||||
| 					} | ||||
| 					CodeDefine def = def_define(var->Name, var->Value.to_string()); | ||||
| 					ast.append(def); | ||||
| 					break; | ||||
| 				} | ||||
| 				ast.append(var); | ||||
| 			} | ||||
| 			break; | ||||
|  | ||||
| 			default: | ||||
| 				ast.append(entry); | ||||
| 			break; | ||||
| 		} | ||||
| #pragma endregion Scan, Parse, and Generate Components | ||||
|  | ||||
| #pragma region Scan, Parse, and Generate Dependencies | ||||
| @@ -464,19 +585,30 @@ int gen_main() | ||||
| 		header.print_fmt( roll_own_dependencies_guard_end ); | ||||
| #pragma endregion Print Dependencies | ||||
|  | ||||
| 		header.print(fmt_newline); | ||||
|  | ||||
| #if 1 | ||||
| #pragma region region Print Components | ||||
| 		header.print_fmt( "GEN_NS_BEGIN\n" ); | ||||
| 		header.print_fmt( "GEN_API_C_BEGIN\n\n" ); | ||||
|  | ||||
| #if 0 | ||||
| #region region Print Components | ||||
| 		header.print_fmt("#pragma region Types\n"); | ||||
| 		header.print( types ); | ||||
| 		header.print( dump_to_scratch_and_retireve(types) ); | ||||
| 		header.print( fmt_newline ); | ||||
| 		header.print( dump_to_scratch_and_retireve( ecode )); | ||||
| 		header.print( fmt_newline ); | ||||
| 		header.print( dump_to_scratch_and_retireve( eoperator )); | ||||
| 		header.print( fmt_newline ); | ||||
| 		header.print( dump_to_scratch_and_retireve( especifier )); | ||||
| 		header.print( fmt_newline ); | ||||
| 		header.print_fmt("#pragma endregion Types\n\n"); | ||||
|  | ||||
| 		header.print_fmt("#pragma region AST\n"); | ||||
| 		header.print( dump_to_scratch_and_retireve(ast) ); | ||||
| 		header.print_fmt("\n#pragma endregion AST\n"); | ||||
|  | ||||
| 		header.print_fmt( "\nGEN_API_C_END\n" ); | ||||
|  | ||||
| 		header.print_fmt( "GEN_NS_END\n\n" ); | ||||
| #pragma endregion Print Compoennts | ||||
| #endif | ||||
| 	} | ||||
|   | ||||
| @@ -181,7 +181,7 @@ CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("" | ||||
| 						continue; | ||||
| 					} | ||||
|  | ||||
|                     new_name.append_fmt("%SC_", to_str(spec)); | ||||
|                     new_name.append_fmt("%SC_", spec_to_str(spec)); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @@ -197,7 +197,7 @@ CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("" | ||||
|              spec != end(fn->Specs);  | ||||
|              ++spec) | ||||
|         { | ||||
|             new_name.append_fmt("%SC_", to_str(*spec)); | ||||
|             new_name.append_fmt("%SC_", spec_to_str(*spec)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user