mirror of
https://github.com/Ed94/gencpp.git
synced 2024-12-22 07:44:45 -08:00
c_library refacotring works, and compiles with all content from the base project.
I need to make the refactor step happen before formatting with clang-format in the metaprogram instead of calling it from powershell
This commit is contained in:
parent
5aaef0f1a2
commit
0046c4a223
@ -98,6 +98,8 @@ CodeBody parse_file( const char* path )
|
||||
|
||||
constexpr bool helper_use_c_definition = true;
|
||||
|
||||
constexpr bool will_refactor_to_gen_namespace = true;
|
||||
|
||||
int gen_main()
|
||||
{
|
||||
#define project_dir "../project/"
|
||||
@ -231,7 +233,7 @@ do \
|
||||
break;
|
||||
case CT_Preprocess_If:
|
||||
{
|
||||
b32 found = ignore_preprocess_cond_block(txt("! GEN_C_LIKE_CPP"), entry, parsed_header_memory, header_memory );
|
||||
b32 found = ignore_preprocess_cond_block(txt("GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP"), entry, parsed_header_memory, header_memory );
|
||||
if (found) break;
|
||||
|
||||
header_memory.append(entry);
|
||||
@ -289,8 +291,8 @@ do \
|
||||
break;
|
||||
}
|
||||
|
||||
Code array_ssize = gen_array(txt("ssize"), txt("Array_ssize"));
|
||||
Code array_string_cached = gen_array(txt("StringCached"), txt("Array_StringCached"));
|
||||
Code array_ssize = gen_array(txt("gen_ssize"), txt("Array_gen_ssize"));
|
||||
Code array_string_cached = gen_array(txt("gen_StringCached"), txt("Array_gen_StringCached"));
|
||||
|
||||
CodeBody parsed_header_strings = parse_file( project_dir "dependencies/strings.hpp" );
|
||||
CodeBody header_strings = def_body(CT_Global_Body);
|
||||
@ -383,7 +385,7 @@ do \
|
||||
CodeTypedef td = cast(CodeTypedef, entry);
|
||||
if (td->Name.contains(name_string_table))
|
||||
{
|
||||
CodeBody ht = gen_hashtable(txt("StrC"), name_string_table);
|
||||
CodeBody ht = gen_hashtable(txt("gen_StrC"), name_string_table);
|
||||
header_strings.append(ht);
|
||||
break;
|
||||
}
|
||||
@ -396,7 +398,7 @@ do \
|
||||
break;
|
||||
}
|
||||
|
||||
CodeBody array_u8 = gen_array(txt("u8"), txt("Array_u8"));
|
||||
CodeBody array_u8 = gen_array(txt("gen_u8"), txt("Array_gen_u8"));
|
||||
|
||||
CodeBody parsed_header_filesystem = parse_file( project_dir "dependencies/filesystem.hpp" );
|
||||
CodeBody header_filesystem = def_body(CT_Global_Body);
|
||||
@ -455,7 +457,7 @@ do \
|
||||
break;
|
||||
}
|
||||
|
||||
CodeBody array_adt_node = gen_array(txt("ADT_Node"), txt("Array_ADT_Node"));
|
||||
CodeBody array_adt_node = gen_array(txt("gen_ADT_Node"), txt("Array_gen_ADT_Node"));
|
||||
|
||||
CodeBody parsed_header_parsing = parse_file( project_dir "dependencies/parsing.hpp" );
|
||||
CodeBody header_parsing = def_body(CT_Global_Body);
|
||||
@ -478,8 +480,8 @@ do \
|
||||
header_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; ));
|
||||
CodeStruct adt_node_fwd = parse_struct(code( struct gen_ADT_Node; ));
|
||||
CodeTypedef adt_node_typedef = parse_typedef(code( typedef struct gen_ADT_Node gen_ADT_Node; ));
|
||||
header_parsing.append(adt_node_fwd);
|
||||
header_parsing.append(adt_node_typedef);
|
||||
|
||||
@ -644,12 +646,15 @@ do \
|
||||
case CT_Preprocess_If:
|
||||
{
|
||||
CodePreprocessCond cond = cast(CodePreprocessCond, entry);
|
||||
if (cond->Content.contains(txt("GEN_COMPILER_C")))
|
||||
if (cond->Content.is_equal(txt("GEN_COMPILER_C")))
|
||||
{
|
||||
//++ entry; //
|
||||
//ast.append(entry) // typedef
|
||||
//for ( ; entry != parsed_ast.end() && entry->Type != CT_Preprocess_EndIf; ++ entry) {}
|
||||
//++ entry; // Consume endif
|
||||
++ entry; // #if
|
||||
for ( ; entry != parsed_ast.end() && entry->Type != CT_Preprocess_Else; ++ entry) {
|
||||
ast.append(entry);
|
||||
}
|
||||
for ( ; entry != parsed_ast.end() && entry->Type != CT_Preprocess_EndIf; ++ entry) {}
|
||||
++ entry; // Consume endif
|
||||
continue;
|
||||
}
|
||||
|
||||
b32 found = ignore_preprocess_cond_block(txt("GEN_COMPILER_CPP"), entry, parsed_ast, ast);
|
||||
@ -1096,7 +1101,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
{
|
||||
CodeBody body = cast(CodeBody, entry->Body);
|
||||
CodeBody new_body = def_body(CT_Struct_Body);
|
||||
for ( Code body_entry = body.begin(); body.end(); ++ body_entry ) switch(body_entry->Type)
|
||||
for ( Code body_entry = body.begin(); body_entry != body.end(); ++ body_entry ) switch(body_entry->Type)
|
||||
{
|
||||
case CT_Preprocess_If:
|
||||
{
|
||||
@ -1124,7 +1129,6 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
s32 idx = 0;
|
||||
CodeBody parsed_header_end = parse_file( project_dir "components/header_end.hpp" );
|
||||
CodeBody header_end = def_body(CT_Global_Body);
|
||||
@ -1176,9 +1180,9 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
#pragma endregion Resolve Dependencies
|
||||
|
||||
#pragma region Resolve Components
|
||||
CodeBody array_arena = gen_array(txt("Arena"), txt("Array_Arena"));
|
||||
CodeBody array_pool = gen_array(txt("Pool"), txt("Array_Pool"));
|
||||
CodeBody array_token = gen_array(txt("Token"), txt("Array_Token"));
|
||||
CodeBody array_arena = gen_array(txt("gen_Arena"), txt("Array_gen_Arena"));
|
||||
CodeBody array_pool = gen_array(txt("gen_Pool"), txt("Array_gen_Pool"));
|
||||
CodeBody array_token = gen_array(txt("gen_Token"), txt("Array_gen_Token"));
|
||||
|
||||
Code src_static_data = scan_file( project_dir "components/static_data.cpp" );
|
||||
Code src_ast_case_macros = scan_file( project_dir "components/ast_case_macros.cpp" );
|
||||
@ -1367,7 +1371,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
break;
|
||||
}
|
||||
|
||||
CodeBody array_code_typename = gen_array(txt("CodeTypename"), txt("Array_CodeTypename"));
|
||||
CodeBody array_code_typename = gen_array(txt("gen_CodeTypename"), txt("Array_gen_CodeTypename"));
|
||||
|
||||
CodeBody parsed_src_parser = parse_file( project_dir "components/parser.cpp" );
|
||||
CodeBody src_parser = def_body(CT_Global_Body);
|
||||
@ -1464,7 +1468,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
header.print_fmt( "\n#pragma region Parsing\n" );
|
||||
header.print( format_code_to_untyped(header_parsing) );
|
||||
header.print_fmt( "#pragma endregion Parsing\n\n" );
|
||||
header.print_fmt( "#pragma endregion Parsing\n" );
|
||||
|
||||
header.print_fmt( "\nGEN_NS_END\n" );
|
||||
header.print_fmt( roll_own_dependencies_guard_end );
|
||||
@ -1493,6 +1497,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
header.print_fmt("\n#pragma endregion AST\n");
|
||||
|
||||
header.print( format_code_to_untyped(interface) );
|
||||
header.print(fmt_newline);
|
||||
|
||||
header.print_fmt("#pragma region Inlines\n");
|
||||
header.print( format_code_to_untyped(inlines) );
|
||||
@ -1500,16 +1505,14 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
header.print(fmt_newline);
|
||||
header.print( format_code_to_untyped(array_string_cached));
|
||||
header.print(fmt_newline);
|
||||
|
||||
header.print( format_code_to_untyped(header_end) );
|
||||
|
||||
header.print_fmt( "\n#pragma region Builder\n" );
|
||||
header.print( format_code_to_untyped(header_builder) );
|
||||
header.print_fmt( "#pragma endregion Builder\n" );
|
||||
header.print_fmt( "\n#pragma endregion Builder\n" );
|
||||
|
||||
header.print_fmt( "\nGEN_API_C_END\n" );
|
||||
|
||||
header.print_fmt( "GEN_NS_END\n\n" );
|
||||
#pragma endregion Print Compoennts
|
||||
}
|
||||
@ -1520,8 +1523,8 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
#pragma region Print Dependencies
|
||||
header.print_fmt( roll_own_dependencies_guard_start );
|
||||
header.print_fmt( "GEN_NS_BEGIN\n\n");
|
||||
header.print_fmt( "GEN_API_C_BEGIN\n\n" );
|
||||
header.print_fmt( "GEN_NS_BEGIN\n");
|
||||
header.print_fmt( "GEN_API_C_BEGIN\n" );
|
||||
|
||||
header.print( src_impl_start );
|
||||
header.print( src_debug );
|
||||
@ -1535,7 +1538,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
header.print_fmt( "\n#pragma region Parsing\n" );
|
||||
header.print( scan_file( project_dir "dependencies/parsing.cpp" ) );
|
||||
header.print_fmt( "#pragma endregion Parsing\n\n" );
|
||||
header.print_fmt( "\n#pragma endregion Parsing\n\n" );
|
||||
|
||||
header.print_fmt( "GEN_NS_END\n");
|
||||
header.print_fmt( roll_own_dependencies_guard_end );
|
||||
@ -1546,6 +1549,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
header.print_fmt( "\nGEN_NS_BEGIN\n");
|
||||
|
||||
header.print( fmt_newline);
|
||||
header.print( format_code_to_untyped(array_arena));
|
||||
header.print( fmt_newline);
|
||||
header.print( format_code_to_untyped(array_pool));
|
||||
@ -1576,13 +1580,13 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
||||
|
||||
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( "#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" );
|
||||
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" );
|
||||
|
||||
header.print_fmt( "\nGEN_API_C_END\n" );
|
||||
header.print_fmt( "GEN_API_C_END\n" );
|
||||
#pragma endregion Print Components
|
||||
|
||||
header.print_fmt( implementation_guard_end );
|
||||
|
545
gen_c_library/c_library.refactor
Normal file
545
gen_c_library/c_library.refactor
Normal file
@ -0,0 +1,545 @@
|
||||
__VERSION 1
|
||||
|
||||
// This is a example template to be used with the refactor program
|
||||
// Use it to refactor the naming convention of this library to your own.
|
||||
// Can be used as an aid to help use use your project's implementation if it fullfills the dependencies of this project.
|
||||
// Example: Most likely have a memory and string library already, just rename the functions and make sure the args are the same.
|
||||
// Program: https://github.com/Ed94/refactor
|
||||
|
||||
// NOTE: Due to the current limitations of the program, not every symbol in the library can be renamed.
|
||||
// This is due to the program not actually parsing C/C++.
|
||||
|
||||
// not : Ignore
|
||||
// include : #includes
|
||||
// word : Alphanumeric or underscore
|
||||
// namespace : Prefix search and replace (c-namspaces).
|
||||
// regex : Unavailable in __VERSION 1.
|
||||
|
||||
// Precedence (highest to lowest):
|
||||
// word, namespace, regex
|
||||
|
||||
// Gen Macro namespace
|
||||
// namespace GEN_, new_namespace_
|
||||
|
||||
// Macros
|
||||
|
||||
word global, gen_global
|
||||
word internal, gen_internal
|
||||
word local_persist, gen_local_persist
|
||||
word bit, gen_bit
|
||||
word bitfield_is_equal, gen_bitfield_is_equal
|
||||
word cast, gen_cast
|
||||
word ccast, gen_ccast
|
||||
word pcast, gen_pcast
|
||||
word rcast, gen_rcast
|
||||
word scast, gen_scast
|
||||
word stringize_va, gen_stringize_va
|
||||
word stringize, gen_stringize
|
||||
word do_once, gen_do_once
|
||||
word do_once_start, gen_do_once_start
|
||||
word do_once_end, gen_do_once_end
|
||||
word labeled_scope_start, gen_labeled_scope_start
|
||||
word labeled_scope_end, gen_labeled_scope_end
|
||||
word compiler_decorated_func_name, gen_compiler_decorated_func_name
|
||||
word num_args_impl, gen_num_args_impl
|
||||
word num_args, gen_num_args
|
||||
word clamp, gen_clamp
|
||||
word count_of, gen_count_of
|
||||
word is_between, gen_is_between
|
||||
word size_of, gen_size_of
|
||||
word max, gen_max
|
||||
word min, gen_min
|
||||
word offset_of, gen_offset_of
|
||||
word forceinline, gen_forceinline
|
||||
word neverinline, gen_neverinline
|
||||
word static_assert, gen_static_assert
|
||||
word thread_local, gen_thread_local
|
||||
word typeof, gen_typeof
|
||||
word enum_underlying, gen_enum_underlying
|
||||
word nullptr, gen_nullptr
|
||||
word struct_init, gen_struct_init
|
||||
word hash, gen_hash
|
||||
|
||||
// Basic Types
|
||||
|
||||
word u8, gen_u8
|
||||
word s8, gen_s8
|
||||
word u16, gen_u16
|
||||
word s16, gen_s16
|
||||
word u32, gen_u32
|
||||
word s32, gen_s32
|
||||
word u64, gen_u64
|
||||
word s64, gen_s64
|
||||
word usize, gen_usize
|
||||
word ssize, gen_ssize
|
||||
word sptr, gen_sptr
|
||||
word uptr, gen_uptr
|
||||
word f32, gen_f32
|
||||
word f64, gen_f64
|
||||
word b8, gen_b8
|
||||
word b16, gen_b16
|
||||
word b32, gen_b32
|
||||
word mem_ptr, gen_mem_ptr
|
||||
word mem_ptr_const, gen_mem_ptr_cnst
|
||||
|
||||
// Debug
|
||||
|
||||
word assert_handler, gen_assert_handler
|
||||
word assert_crash, gen_assert_crash
|
||||
word process_exit, gen_process_exit
|
||||
|
||||
// Memory
|
||||
|
||||
word kilobytes, gen_kilobytes
|
||||
word megabytes, gen_megabytes
|
||||
word gigabytes, gen_gigabytes
|
||||
word terabytes, gen_terabytes
|
||||
|
||||
word swap, gen_swap
|
||||
|
||||
word is_power_of_two, gen_is_power_of_two
|
||||
word align_forward, gen_align_forward
|
||||
word align_forward_by_value, gen_align_forward_by_value
|
||||
word pointer_add, gen_pointer_add
|
||||
word pointer_add_const, gen_pointer_add_const
|
||||
word pointer_diff, gen_pointer_diff
|
||||
word mem_copy, gen_mem_copy
|
||||
word mem_find, gen_mem_find
|
||||
word mem_move, gen_mem_move
|
||||
word mem_set, gen_mem_set
|
||||
word zero_size, gen_zero_size
|
||||
word zero_item, gen_zero_item
|
||||
word zero_array, gen_zero_array
|
||||
|
||||
word AllocType, gen_AllocType
|
||||
word AllocatorProc, gen_AllocatorProc
|
||||
word AllocatorInfo, gen_AllocatorInfo
|
||||
word AllocFlag, gen_AllocFlag
|
||||
|
||||
word alloc, gen_alloc
|
||||
word alloc_align, gen_alloc_align
|
||||
word allocator_free, gen_allocator_free
|
||||
word free_all, gen_free_all
|
||||
word resize, gen_resize
|
||||
word resize_align, gen_resize_align
|
||||
word alloc_item, gen_alloc_item
|
||||
word alloc_array, gen_alloc_array
|
||||
|
||||
word heap_stats_init, gen_heap_stats_init
|
||||
word heap_stats_used_memory, gen_heap_stats_used_memory
|
||||
word heap_stats_alloc_count, gen_heap_stats_alloc_count
|
||||
word heap_stats_check, gen_heap_stats_check
|
||||
word default_resize_align, gen_default_resize_align
|
||||
|
||||
word heap_allocator_proc, gen_heap_allocator_proc
|
||||
word heap, gen_heap
|
||||
word malloc, gen_malloc
|
||||
word mfree, gen_mfree
|
||||
|
||||
word VirtualMemory, gen_VirtualMemory
|
||||
word vm_from_memory, gen_vm_from_memory
|
||||
word vm_alloc, gen_vm_alloc
|
||||
word vm_free, gen_vm_free
|
||||
word vm_trim, gen_vm_trim
|
||||
word vm_purge, gen_vm_purge
|
||||
word virtual_memory_page_size, gen_virtual_memory_page_size
|
||||
|
||||
// Memory: Arena
|
||||
|
||||
word Arena, gen_Arena
|
||||
namespace arena_, gen_arena_
|
||||
|
||||
// word arena_allocator_info
|
||||
// word arena_init_from_memory
|
||||
// word arena_init_from_allocator
|
||||
// word arena_init_sub
|
||||
// word arena_alignment_of
|
||||
// word arena_check
|
||||
// word arena_size_remaining
|
||||
|
||||
// Memory: FixedArena
|
||||
|
||||
namespace FixedArena_, gen_FixedArena_
|
||||
namespace fixed_arena_, gen_fixed_arena_
|
||||
|
||||
// Memory: Pool
|
||||
|
||||
word Pool, gen_Pool
|
||||
namespace pool_, gen_pool_
|
||||
|
||||
// Printing
|
||||
|
||||
namespace str_, gen_str_
|
||||
|
||||
word PrintF_Buffer, gen_PrintF_Buffer
|
||||
word Msg_Invalid_Value, gen_Msg_Invalid_Value
|
||||
word log_fmt, gen_log_fmt
|
||||
|
||||
// String Ops
|
||||
|
||||
namespace char_, gen_char_
|
||||
|
||||
word digit_to_int, gen_digit_to_int
|
||||
word hex_digit_to_init, gen_hex_digit_to_init
|
||||
word i64_to_str, gen_i64_to_str
|
||||
word u64_to_str, gen_u64_to_str
|
||||
|
||||
// Containers
|
||||
|
||||
namespace GENERIC_SLOT_, GEN_GENERIC_SLOT_
|
||||
|
||||
word Array, gen_Array
|
||||
word Array_ssize, gen_Array_gen_ssize
|
||||
|
||||
word ArrayHeader, gen_ArrayHeader
|
||||
|
||||
namespace Array_, gen_Array_
|
||||
namespace array_, gen_array_
|
||||
|
||||
word HashTable, gen_HashTable
|
||||
|
||||
namespace HashTable_, gen_HashTable_
|
||||
namespace hashtable_, gen_hashtable_
|
||||
|
||||
namespace HT_, gen_HT_
|
||||
namespace HTE_, gen_HTE_
|
||||
namespace arr_hte_, gen_arr_hte_
|
||||
namespace Arr_HTE_, gen_Arr_HTE_
|
||||
|
||||
// Hashing
|
||||
|
||||
word crc32, gen_crc32
|
||||
word crc64, gen_crc64
|
||||
|
||||
// Strings
|
||||
|
||||
word StrC, gen_StrC
|
||||
|
||||
word to_strc_from_c_str, gen_to_strc_from_c_str
|
||||
|
||||
namespace strc_, gen_strc_
|
||||
|
||||
word cast_to_strc, gen_cast_to_strc
|
||||
|
||||
word StringHeader, gen_StringHeader
|
||||
word String, gen_String
|
||||
|
||||
namespace string_, gen_string_
|
||||
|
||||
word StringCached, gen_StringCached
|
||||
|
||||
word StringTable, gen_StringTable
|
||||
|
||||
namespace StringTable_, gen_StringTable_
|
||||
|
||||
// File Handling
|
||||
|
||||
word FileModeFlag, gen_FileModeFlag
|
||||
word SeekWhenceType, gen_SeekWhenceType
|
||||
word FileError, gen_FileError
|
||||
word FileDescriptor, gen_FileDescriptor
|
||||
word FileMode, gen_FileMode
|
||||
word FileOperations, gen_FileOperations
|
||||
word FileOperations, gen_FileOperations
|
||||
|
||||
default_file_operations
|
||||
|
||||
word FileTime, word FileTime
|
||||
|
||||
word DirType, gen_DirType
|
||||
word DirInfo, gen_DirInfo
|
||||
word DirEntry, gen_DirEntry
|
||||
word DirInfo, gen_DirInfo
|
||||
word FileInfo, gen_FileInfo
|
||||
word FileStandardType, gen_FileStandardType
|
||||
|
||||
namespace file_, gen_file_
|
||||
|
||||
word gen_FileContents, gen_FileContents
|
||||
|
||||
// Timing
|
||||
|
||||
word read_cpu_time_stamp_counter, gen_read_cpu_time_stamp_counter
|
||||
word time_rel, gen_time_rel
|
||||
word time_rel_ms, gen_time_rel_ms
|
||||
|
||||
// Parsing
|
||||
|
||||
// Parsing: ADT
|
||||
|
||||
word ADT_Node, gen_ADT_Node
|
||||
word ADT_Type, gen_ADT_Type
|
||||
word ADT_Props, gen_ADT_Props
|
||||
word ADT_NamingStyle, gen_ADT_NamingStyle
|
||||
word ADT_AssignStyle, gen_ADT_AssignStyle
|
||||
word ADT_DelimStyle, gen_ADT_DelimStyle
|
||||
word ADT_Error, gen_ADT_Error
|
||||
word ADT_Node, gen_ADT_Node
|
||||
|
||||
namespace adt_, gen_adt_
|
||||
|
||||
word CSV_Error, gen_CSV_Error
|
||||
word CSV_Object, gen_CSV_Object
|
||||
|
||||
namespace csv_, gen_csv_
|
||||
|
||||
// Types.hpp
|
||||
|
||||
word log_failure, gen_log_failure
|
||||
|
||||
word AccessSpec, gen_AccessSpec
|
||||
word access_spec_to_str, gen_access_spec_to_str
|
||||
|
||||
word CodeFlag, gen_CodeFlag
|
||||
word EnumDecl, gen_EnumDecl
|
||||
|
||||
word ModuleFlag, gen_ModuleFlag
|
||||
word module_flag_to_str, gen_module_flag_to_str
|
||||
|
||||
word EPreprocessCond, gen_EPreprocessCOnd
|
||||
word ETypenameTag, gen_ETypenameTag
|
||||
|
||||
word CodeType, gen_CodeType
|
||||
|
||||
word codetype_to_str, gen_codetype_to_str
|
||||
word codetype_to_keyword_str, gen_codetype_to_keyword_str
|
||||
|
||||
word Operator, gen_Operator
|
||||
word operator_to_str, gen_operator_to_str
|
||||
|
||||
word Specifier, gen_Specifier
|
||||
word spec_to_str, gen_spec_to_str
|
||||
word spec_is_trailing, gen_spec_is_trailing
|
||||
// word strc_to_specifier, gen_strc_to_specifier
|
||||
|
||||
// AST
|
||||
|
||||
word AST, gen_AST
|
||||
|
||||
namespace AST_, gen_AST_
|
||||
|
||||
word Code, gen_Code
|
||||
word Token, gen_Token
|
||||
|
||||
word CodeBody, gen_CodeBody
|
||||
word CodeAttributes, gen_CodeAttributes
|
||||
word CodeComment, gen_CodeComment
|
||||
word CodeClass, gen_CodeClass
|
||||
word CodeConstructor, gen_CodeConstructor
|
||||
word CodeDefine, gen_CodeDefine
|
||||
word CodeDestructor, gen_CodeDestructor
|
||||
word CodeEnum, gen_CodeEnum
|
||||
word CodeExec, gen_CodeExec
|
||||
word CodeExtern, gen_CodeExtern
|
||||
word CodeInclude, gen_CodeInclude
|
||||
word CodeFriend, gen_CodeFriend
|
||||
word CodeFn, gen_CodeFn
|
||||
word CodeModule, gen_CodeModule
|
||||
word CodeNS, gen_CodeNS
|
||||
word CodeOperator, gen_CodeOperator
|
||||
word CodeOpCast, gen_CodeOpCast
|
||||
word CodePragma, gen_CodePragma
|
||||
word CodeParam, gen_CodeParam
|
||||
word CodePreprocessCo, gen_CodePreprocessCo
|
||||
word CodeSpecifiers, gen_CodeSpecifiers
|
||||
word CodeTemplate, gen_CodeTemplate
|
||||
word CodeTypename, gen_CodeTypename
|
||||
word CodeTypedef, gen_CodeTypedef
|
||||
word CodeUnion, gen_CodeUnion
|
||||
word CodeUsing, gen_CodeUsing
|
||||
word CodeVar, gen_CodeVar
|
||||
|
||||
// Code Interface
|
||||
|
||||
namespace code_, gen_code_
|
||||
|
||||
word Code_Global, gen_Code_Global
|
||||
word Code_Invalid, gen_Code_Invalid
|
||||
|
||||
word Code_POD, gen_Code_POD
|
||||
|
||||
word AST_POD_Size, gen_AST_POD_Size
|
||||
word AST_ArrSpecs_Cap, gen_AST_ArrSpecs_Cap
|
||||
|
||||
word InvalidCode, gen_InvalidCode
|
||||
word NullCode, gen_NullCode
|
||||
|
||||
namespace begin_, gen_begin_
|
||||
namespace end_, gen_end_
|
||||
namespace next_, gen_next_
|
||||
|
||||
namespace body_, gen_body_
|
||||
namespace class_, gen_class_
|
||||
namespace params_, gen_params_
|
||||
namespace specifiers_, gen_specifiers_
|
||||
namespace struct_, gen_struct_
|
||||
namespace attributes_, gen_attributes_
|
||||
namespace comment_, gen_comment_
|
||||
namespace constructor, gen_constructor_
|
||||
namespace define_, gen_define_
|
||||
namespace destructor, gen_destructor_
|
||||
namespace enum_, gen_enum_
|
||||
namespace exec_, gen_exec_
|
||||
namespace extern_, gen_extern_
|
||||
namespace include_, gen_include_
|
||||
namespace friend_, gen_friend_
|
||||
namespace fn_, gen_fn_
|
||||
namespace module_, gen_module_
|
||||
namespace code_op, gen_code_op_
|
||||
namespace opcast_, gen_opcast_
|
||||
namespace pragma_, gen_pragma_
|
||||
namespace preprocess_, gen_preprocess_
|
||||
namespace template_, gen_template_
|
||||
namespace typename_, gen_typename_
|
||||
namespace typedef_, gen_typedef_
|
||||
namesapce union_, gen_union_
|
||||
namespace using_, gen_using_
|
||||
namespace var_, gen_var_
|
||||
|
||||
// Gen Interface
|
||||
|
||||
word init, gen_init
|
||||
word deinit, gen_deinit
|
||||
word reset, gen_reset
|
||||
|
||||
word get_cached_string, gen_get_cached_string
|
||||
|
||||
word make_code, gen_make_code
|
||||
|
||||
namespace set_allocator_, gen_set_allocator_
|
||||
|
||||
namespace def_, gen_def_
|
||||
namespace parse_, gen_parse_
|
||||
namespace token_, gen_token_
|
||||
namespace untyped_, gen_untyped_
|
||||
|
||||
// Constants
|
||||
|
||||
word TokenMap_FixedArena, gen_TokenMap_FixedArena
|
||||
word InitSize_DataArrays, gen_InitSize_DataArrays
|
||||
|
||||
word Global_BucketSize, gen_Global_BucketSize
|
||||
word CodePool_NumBlocks, gen_CodePool_NumBlocks
|
||||
word SizePer_StringArena, gen_SizePer_StringArena
|
||||
|
||||
word MaxCommentLineLength, gen_MaxCommentLineLength
|
||||
word MaxNameLength, gen_MaxNameLength
|
||||
word MaxUntypedStrLength, gen_MaxUntypedStrLength
|
||||
|
||||
word LexAllocator_Size, gen_LexAllocator_Size
|
||||
word Builder_StrBufferReserve, gen_Builder_StrBufferReserve
|
||||
|
||||
word access_public, gen_access_public
|
||||
word access_protected, gen_access_protected
|
||||
word access_private, gen_access_private
|
||||
|
||||
word attrib_api_export, gen_attrib_api_export
|
||||
word attrib_api_import, gen_attrib_api_import
|
||||
|
||||
word module_global_fragment, gen_module_global_fragment
|
||||
word module_private_fragment, gen_module_private_fragment
|
||||
|
||||
word fmt_newline, gen_fmt_newline
|
||||
word pragma_once, gen_pragma_once
|
||||
word param_varadic, gen_param_varadic
|
||||
word preprocess_else, gen_preprocess_else
|
||||
|
||||
namespace spec_, gen_spec_
|
||||
namespace t_, gen_t_
|
||||
|
||||
word PreprocessorDefines, gen_PreprocessorDefines
|
||||
|
||||
// Backend
|
||||
|
||||
word GlobalAllocator, gen_GlobalAllocator
|
||||
word Global_AllocatorBuckets, gen_Global_AllocatorBuckets
|
||||
word CodePools, gen_CodePools
|
||||
word StringArenas, gen_StringArenas
|
||||
word StringCache, gen_StringCache
|
||||
word LexArena, gen_LexArena
|
||||
word Allocator_DataArrays, gen_Allocator_DataArrays
|
||||
word Allocator_CodePool, gen_Allocator_CodePool
|
||||
word Allocator_Lexer, gen_Allocator_Lexer
|
||||
word Allocator_StringArena, gen_Allocator_StringArena
|
||||
word Allocator_StringTable, gen_Allocator_StringTable
|
||||
word Allocator_TypeTable, gen_Allocator_TypeTable
|
||||
|
||||
// Builder
|
||||
|
||||
word Builder, gen_Builder
|
||||
namespace builder_, gen_builder_
|
||||
|
||||
// Implementation (prviate)
|
||||
|
||||
word _format_info, gen__format_info
|
||||
|
||||
namespace _print_, gen__print_
|
||||
word _heap_stats, gen__heap_stats
|
||||
word _heap_alloc_info, gen__heap_alloc_info
|
||||
|
||||
word _crc32_table, gen__crc32_table
|
||||
word _crc64_table, gen__crc64_table
|
||||
|
||||
word _alloc_utf8_to_ucs2, gen__alloc_utf8_to_ucs2
|
||||
|
||||
word _win32_file_seek, gen__win32_file_seek
|
||||
word _win32_file_read, gen__win32_file_read
|
||||
word _win32_file_write, gen__win32_file_write
|
||||
word _win32_file_close, gen__win32_file_close
|
||||
word _win32_file_open, gen__win32_file_open
|
||||
|
||||
word _posix_file_seek, gen__posix_file_seek
|
||||
word _posix_file_read, gen__posix_file_read
|
||||
word _posix_file_write, gen__posix_file_write
|
||||
word _posix_file_close, gen__posix_file_close
|
||||
word _posix_file_open, gen__posix_file_open
|
||||
|
||||
word _dirinfo_free_entry, gen__dirinfo_free_entry
|
||||
word _std_file_set, gen__std_file_set
|
||||
|
||||
word _memory_fd, gen__memory_fd
|
||||
|
||||
word _file_stream_fd_make, gen__file_stream_fd_make
|
||||
word _file_stream_from_fd, gen__file_stream_from_fd
|
||||
word _memory_file_seek, gen__memory_file_seek
|
||||
word _memory_file_read, gen__memory_file_read
|
||||
word _memory_file_write, gen__memory_file_write
|
||||
word _memory_file_close, gen__memory_file_close
|
||||
|
||||
word _unix_gettime, gen__unix_gettime
|
||||
word _adt_fprintf, gen__adt_fprintf
|
||||
|
||||
word _adt_get_value, gen__adt_get_value
|
||||
word _adt_get_field, gen__adt_get_field
|
||||
|
||||
word _csv_write_record, gen__csv_write_record
|
||||
word _csv_write_header, gen__csv_write_header
|
||||
|
||||
word Global_Allocator_Proc, gen_Global_Allocator_Proc
|
||||
word define_constants, gen_define_constants
|
||||
word operator__validate, gen_operator__validate
|
||||
|
||||
word parser_init, gen_parser_init
|
||||
word parser_deinit, gen_parser_deinit
|
||||
|
||||
word TokType, gen_TokType
|
||||
word toktype_to_str, gen_toktype_to_str
|
||||
// word strc_to_toktype, gen_strc_to_toktype
|
||||
word NullToken, gen_NullToken
|
||||
|
||||
namespace tok_, gen_tok_
|
||||
|
||||
word TokArray, gen_TokArray
|
||||
|
||||
namespace lex_, gen_lex_
|
||||
namespace Lexer_, gen_Lexer_
|
||||
|
||||
word LexContext, gen_LexContext
|
||||
word lex, gen_lex
|
||||
|
||||
word StackNode, gen_StackNode
|
||||
word ParseContext, gen_ParseContext
|
||||
|
||||
// namespace parse_, gen_parse_
|
||||
|
||||
namespace parser_, gen_parser_
|
@ -21,7 +21,7 @@ CodeBody gen_array_base()
|
||||
|
||||
Code grow_formula = untyped_str( txt( "#define array_grow_formula( value ) ( 2 * value + 8 )\n" ));
|
||||
Code get_header = untyped_str( txt( "#define array_get_header( self ) ( (ArrayHeader*)( self ) - 1)\n" ));
|
||||
Code type_define = untyped_str( txt( "#define Array(Type) Array_##Type\n"));
|
||||
Code type_define = untyped_str( txt( "#define Array(Type) gen_Array_##Type\n"));
|
||||
|
||||
Code array_begin = def_define(txt("array_begin(array)"), code( (array) ));
|
||||
Code array_end = def_define(txt("array_end(array)"), code( (array + array_get_header(array)->Num ) ));
|
||||
|
@ -4,4 +4,5 @@
|
||||
int main()
|
||||
{
|
||||
// init();
|
||||
__debugbreak();
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<N10X>
|
||||
<Workspace>
|
||||
<IncludeFilter>*.*,</IncludeFilter>
|
||||
<ExcludeFilter>*.obj,*.lib,*.pch,*.dll,*.pdb,.vs,Debug,Release,x64,obj,*.user,Intermediate,**/sanity.gen.hpp,</ExcludeFilter>
|
||||
<IncludeFilter>&apos;.&apos;,**/project/**,</IncludeFilter>
|
||||
<ExcludeFilter>*.obj,*.lib,*.pch,*.dll,*.pdb,.vs,Debug,Release,x64,obj,*.user,Intermediate,**/sanity.gen.hpp,**/gen_c_library,**/gen_segmented,**/gen_singlheader,**/test,**/gen_unreal_engine,**/scripts,**/docs,</ExcludeFilter>
|
||||
<SyncFiles>true</SyncFiles>
|
||||
<Recursive>true</Recursive>
|
||||
<ShowEmptyFolders>true</ShowEmptyFolders>
|
||||
|
@ -39,7 +39,7 @@ void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va )
|
||||
|
||||
res = str_fmt_va( buf, count_of( buf ) - 1, fmt, va ) - 1;
|
||||
|
||||
string_append_c_str_len( (String*) & builder->Buffer, (char const*)buf, res);
|
||||
string_append_c_str_len( (String*) & (builder->Buffer), (char const*)buf, res);
|
||||
}
|
||||
|
||||
void builder_write(Builder* builder)
|
||||
|
@ -30,7 +30,10 @@ struct Builder
|
||||
|
||||
forceinline void print( Code code ) { return builder_print(this, code); }
|
||||
forceinline void print_fmt( char const* fmt, ... ) {
|
||||
|
||||
va_list va;
|
||||
va_start( va, fmt );
|
||||
builder_print_fmt_va( this, fmt, va );
|
||||
va_end( va );
|
||||
}
|
||||
|
||||
forceinline void write() { return builder_write(this); }
|
||||
|
@ -206,22 +206,22 @@ int gen_main()
|
||||
|
||||
Builder header_ecode = builder_open( "components/gen/ecode.hpp" );
|
||||
builder_print( & header_ecode, gen_component_header );
|
||||
builder_print( & header_ecode, ecode );
|
||||
builder_print( & header_ecode, dump_to_scratch_and_retireve(ecode) );
|
||||
builder_write( & header_ecode);
|
||||
|
||||
Builder header_eoperator = builder_open( "components/gen/eoperator.hpp" );
|
||||
builder_print( & header_eoperator, gen_component_header );
|
||||
builder_print( & header_eoperator, eoperator );
|
||||
builder_print( & header_eoperator, dump_to_scratch_and_retireve(eoperator) );
|
||||
builder_write( & header_eoperator );
|
||||
|
||||
Builder header_especifier = builder_open( "components/gen/especifier.hpp" );
|
||||
builder_print( & header_especifier, gen_component_header );
|
||||
builder_print( & header_especifier, especifier );
|
||||
builder_print( & header_especifier, dump_to_scratch_and_retireve(especifier) );
|
||||
builder_write( & header_especifier);
|
||||
|
||||
Builder header_ast_inlines = builder_open( "components/gen/ast_inlines.hpp" );
|
||||
builder_print( & header_ast_inlines, gen_component_header );
|
||||
builder_print( & header_ast_inlines, ast_inlines );
|
||||
builder_print( & header_ast_inlines, dump_to_scratch_and_retireve(ast_inlines) );
|
||||
builder_write( & header_ast_inlines);
|
||||
}
|
||||
|
||||
@ -244,6 +244,7 @@ int gen_main()
|
||||
CodeBody nspaced_etoktype = def_global_body( args(
|
||||
etoktype
|
||||
));
|
||||
Code formatted_toktype = dump_to_scratch_and_retireve(nspaced_etoktype);
|
||||
|
||||
Builder _src = builder_open( "gen/gen.cpp" );
|
||||
Builder* src = & _src;
|
||||
@ -264,7 +265,7 @@ int gen_main()
|
||||
builder_print( src, interface );
|
||||
builder_print( src, upfront );
|
||||
builder_print_fmt( src, "\n#pragma region Parsing\n\n" );
|
||||
builder_print( src, dump_to_scratch_and_retireve(nspaced_etoktype) );
|
||||
builder_print( src, formatted_toktype );
|
||||
builder_print( src, lexer );
|
||||
builder_print( src, parser );
|
||||
builder_print( src, parsing_interface );
|
||||
@ -278,7 +279,7 @@ int gen_main()
|
||||
|
||||
Builder src_etoktype = builder_open( "components/gen/etoktype.cpp" );
|
||||
builder_print( & src_etoktype, gen_component_header );
|
||||
builder_print( & src_etoktype, nspaced_etoktype );
|
||||
builder_print( & src_etoktype, formatted_toktype );
|
||||
builder_write( & src_etoktype);
|
||||
}
|
||||
|
||||
|
@ -92,27 +92,27 @@ struct Code;
|
||||
#endif
|
||||
|
||||
#if GEN_COMPILER_C
|
||||
typdef AST_Body* CodeBody;
|
||||
typdef AST_Attributes* CodeAttributes;
|
||||
typdef AST_Comment* CodeComment;
|
||||
typdef AST_Class* CodeClass;
|
||||
typdef AST_Constructor* CodeConstructor;
|
||||
typdef AST_Define* CodeDefine;
|
||||
typdef AST_Destructor* CodeDestructor;
|
||||
typdef AST_Enum* CodeEnum;
|
||||
typdef AST_Exec* CodeExec;
|
||||
typdef AST_Extern* CodeExtern;
|
||||
typdef AST_Include* CodeInclude;
|
||||
typdef AST_Friend* CodeFriend;
|
||||
typdef AST_Fn* CodeFn;
|
||||
typdef AST_Module* CodeModule;
|
||||
typdef AST_NS* CodeNS;
|
||||
typdef AST_Operator* CodeOperator;
|
||||
typdef AST_OpCast* CodeOpCast;
|
||||
typdef AST_Param* CodeParam;
|
||||
typdef AST_PreprocessCond* CodePreprocessCond;
|
||||
typdef AST_Pragma* CodePragma;
|
||||
typdef AST_Specifiers* CodeSpecifiers;
|
||||
typedef AST_Body* CodeBody;
|
||||
typedef AST_Attributes* CodeAttributes;
|
||||
typedef AST_Comment* CodeComment;
|
||||
typedef AST_Class* CodeClass;
|
||||
typedef AST_Constructor* CodeConstructor;
|
||||
typedef AST_Define* CodeDefine;
|
||||
typedef AST_Destructor* CodeDestructor;
|
||||
typedef AST_Enum* CodeEnum;
|
||||
typedef AST_Exec* CodeExec;
|
||||
typedef AST_Extern* CodeExtern;
|
||||
typedef AST_Include* CodeInclude;
|
||||
typedef AST_Friend* CodeFriend;
|
||||
typedef AST_Fn* CodeFn;
|
||||
typedef AST_Module* CodeModule;
|
||||
typedef AST_NS* CodeNS;
|
||||
typedef AST_Operator* CodeOperator;
|
||||
typedef AST_OpCast* CodeOpCast;
|
||||
typedef AST_Param* CodeParam;
|
||||
typedef AST_PreprocessCond* CodePreprocessCond;
|
||||
typedef AST_Pragma* CodePragma;
|
||||
typedef AST_Specifiers* CodeSpecifiers;
|
||||
#else
|
||||
struct CodeBody;
|
||||
struct CodeAttributes;
|
||||
|
@ -184,54 +184,34 @@ void define_constants()
|
||||
# undef def_constant_code_type
|
||||
|
||||
|
||||
# define def_constant_spec( Type_, ... ) \
|
||||
spec_##Type_ = def_specifiers( num_args(__VA_ARGS__), __VA_ARGS__); \
|
||||
code_set_global( cast(Code, spec_##Type_));
|
||||
|
||||
# pragma push_macro("forceinline")
|
||||
# pragma push_macro("global")
|
||||
# pragma push_macro("internal")
|
||||
# pragma push_macro("local_persist")
|
||||
# pragma push_macro("neverinline")
|
||||
# undef forceinline
|
||||
# undef global
|
||||
# undef internal
|
||||
# undef local_persist
|
||||
# undef neverinline
|
||||
def_constant_spec( const, Spec_Const );
|
||||
def_constant_spec( consteval, Spec_Consteval );
|
||||
def_constant_spec( constexpr, Spec_Constexpr );
|
||||
def_constant_spec( constinit, Spec_Constinit );
|
||||
def_constant_spec( extern_linkage, Spec_External_Linkage );
|
||||
def_constant_spec( final, Spec_Final );
|
||||
def_constant_spec( forceinline, Spec_ForceInline );
|
||||
def_constant_spec( global, Spec_Global );
|
||||
def_constant_spec( inline, Spec_Inline );
|
||||
def_constant_spec( internal_linkage, Spec_Internal_Linkage );
|
||||
def_constant_spec( local_persist, Spec_Local_Persist );
|
||||
def_constant_spec( mutable, Spec_Mutable );
|
||||
def_constant_spec( neverinline, Spec_NeverInline );
|
||||
def_constant_spec( noexcept, Spec_NoExceptions );
|
||||
def_constant_spec( override, Spec_Override );
|
||||
def_constant_spec( ptr, Spec_Ptr );
|
||||
def_constant_spec( pure, Spec_Pure )
|
||||
def_constant_spec( ref, Spec_Ref );
|
||||
def_constant_spec( register, Spec_Register );
|
||||
def_constant_spec( rvalue, Spec_RValue );
|
||||
def_constant_spec( static_member, Spec_Static );
|
||||
def_constant_spec( thread_local, Spec_Thread_Local );
|
||||
def_constant_spec( virtual, Spec_Virtual );
|
||||
def_constant_spec( volatile, Spec_Volatile)
|
||||
spec_const = def_specifier( Spec_Const); code_set_global( cast(Code, spec_const ));
|
||||
spec_consteval = def_specifier( Spec_Consteval); code_set_global( cast(Code, spec_consteval ));;
|
||||
spec_constexpr = def_specifier( Spec_Constexpr); code_set_global( cast(Code, spec_constexpr ));;
|
||||
spec_constinit = def_specifier( Spec_Constinit); code_set_global( cast(Code, spec_constinit ));;
|
||||
spec_extern_linkage = def_specifier( Spec_External_Linkage); code_set_global( cast(Code, spec_extern_linkage ));;
|
||||
spec_final = def_specifier( Spec_Final); code_set_global( cast(Code, spec_final ));;
|
||||
spec_forceinline = def_specifier( Spec_ForceInline); code_set_global( cast(Code, spec_forceinline ));;
|
||||
spec_global = def_specifier( Spec_Global); code_set_global( cast(Code, spec_global ));;
|
||||
spec_inline = def_specifier( Spec_Inline); code_set_global( cast(Code, spec_inline ));;
|
||||
spec_internal_linkage = def_specifier( Spec_Internal_Linkage); code_set_global( cast(Code, spec_internal_linkage ));;
|
||||
spec_local_persist = def_specifier( Spec_Local_Persist); code_set_global( cast(Code, spec_local_persist ));;
|
||||
spec_mutable = def_specifier( Spec_Mutable); code_set_global( cast(Code, spec_mutable ));;
|
||||
spec_neverinline = def_specifier( Spec_NeverInline); code_set_global( cast(Code, spec_neverinline ));;
|
||||
spec_noexcept = def_specifier( Spec_NoExceptions); code_set_global( cast(Code, spec_noexcept ));;
|
||||
spec_override = def_specifier( Spec_Override); code_set_global( cast(Code, spec_override ));;
|
||||
spec_ptr = def_specifier( Spec_Ptr); code_set_global( cast(Code, spec_ptr ));;
|
||||
spec_pure = def_specifier( Spec_Pure); code_set_global( cast(Code, spec_pure ));
|
||||
spec_ref = def_specifier( Spec_Ref); code_set_global( cast(Code, spec_ref ));;
|
||||
spec_register = def_specifier( Spec_Register); code_set_global( cast(Code, spec_register ));;
|
||||
spec_rvalue = def_specifier( Spec_RValue); code_set_global( cast(Code, spec_rvalue ));;
|
||||
spec_static_member = def_specifier( Spec_Static); code_set_global( cast(Code, spec_static_member ));;
|
||||
spec_thread_local = def_specifier( Spec_Thread_Local); code_set_global( cast(Code, spec_thread_local ));;
|
||||
spec_virtual = def_specifier( Spec_Virtual); code_set_global( cast(Code, spec_virtual ));;
|
||||
spec_volatile = def_specifier( Spec_Volatile); code_set_global( cast(Code, spec_volatile ));
|
||||
|
||||
spec_local_persist = def_specifiers( 1, Spec_Local_Persist );
|
||||
code_set_global(cast(Code, spec_local_persist));
|
||||
|
||||
# pragma pop_macro("forceinline")
|
||||
# pragma pop_macro("global")
|
||||
# pragma pop_macro("internal")
|
||||
# pragma pop_macro("local_persist")
|
||||
# pragma pop_macro("neverinline")
|
||||
|
||||
# pragma push_macro("enum_underlying")
|
||||
array_append(PreprocessorDefines, txt("enum_underlying("));
|
||||
# pragma pop_macro("enum_underlying")
|
||||
|
@ -278,31 +278,44 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... );
|
||||
|
||||
#pragma region Macros
|
||||
|
||||
#ifndef gen_main
|
||||
#define gen_main main
|
||||
#endif
|
||||
|
||||
#ifndef name
|
||||
// Convienence for defining any name used with the gen api.
|
||||
// Lets you provide the length and string literal to the functions without the need for the DSL.
|
||||
#define name( Id_ ) { sizeof(stringize( Id_ )) - 1, stringize(Id_) }
|
||||
#endif
|
||||
|
||||
#ifndef code
|
||||
// Same as name just used to indicate intention of literal for code instead of names.
|
||||
#define code( ... ) { sizeof(stringize(__VA_ARGS__)) - 1, stringize( __VA_ARGS__ ) }
|
||||
#endif
|
||||
|
||||
#ifndef args
|
||||
// Provides the number of arguments while passing args inplace.
|
||||
#define args( ... ) num_args( __VA_ARGS__ ), __VA_ARGS__
|
||||
#endif
|
||||
|
||||
#ifndef code_str
|
||||
// Just wrappers over common untyped code definition constructions.
|
||||
#define code_str( ... ) GEN_NS untyped_str( code( __VA_ARGS__ ) )
|
||||
#endif
|
||||
|
||||
#ifndef code_fmt
|
||||
#define code_fmt( ... ) GEN_NS untyped_str( token_fmt( __VA_ARGS__ ) )
|
||||
#endif
|
||||
|
||||
#ifndef parse_fmt
|
||||
#define parse_fmt( type, ... ) GEN_NS parse_##type( token_fmt( __VA_ARGS__ ) )
|
||||
#endif
|
||||
|
||||
#ifndef token_fmt
|
||||
# define gen_main main
|
||||
|
||||
# define __ NullCode
|
||||
|
||||
// Convienence for defining any name used with the gen api.
|
||||
// Lets you provide the length and string literal to the functions without the need for the DSL.
|
||||
# define name( Id_ ) { sizeof(stringize( Id_ )) - 1, stringize(Id_) }
|
||||
|
||||
// Same as name just used to indicate intention of literal for code instead of names.
|
||||
# define code( ... ) { sizeof(stringize(__VA_ARGS__)) - 1, stringize( __VA_ARGS__ ) }
|
||||
|
||||
// Provides the number of arguments while passing args inplace.
|
||||
# define args( ... ) num_args( __VA_ARGS__ ), __VA_ARGS__
|
||||
|
||||
// Just wrappers over common untyped code definition constructions.
|
||||
# define code_str( ... ) GEN_NS untyped_str( code( __VA_ARGS__ ) )
|
||||
# define code_fmt( ... ) GEN_NS untyped_str( token_fmt( __VA_ARGS__ ) )
|
||||
|
||||
# define parse_fmt( type, ... ) GEN_NS parse_##type( token_fmt( __VA_ARGS__ ) )
|
||||
|
||||
/*
|
||||
Takes a format string (char const*) and a list of tokens (StrC) and returns a StrC of the formatted string.
|
||||
Tokens are provided in '<'identifier'>' format where '<' '>' are just angle brackets (you can change it in token_fmt_va)
|
||||
---------------------------------------------------------
|
||||
/*
|
||||
Takes a format string (char const*) and a list of tokens (StrC) and returns a StrC of the formatted string.
|
||||
Tokens are provided in '<'identifier'>' format where '<' '>' are just angle brackets (you can change it in token_fmt_va)
|
||||
---------------------------------------------------------
|
||||
Example - A string with:
|
||||
typedef <type> <name> <name>;
|
||||
Will have a token_fmt arguments populated with:
|
||||
@ -310,19 +323,19 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... );
|
||||
"name", strc_for_name,
|
||||
and:
|
||||
stringize( typedef <type> <name> <name>; )
|
||||
-----------------------------------------------------------
|
||||
So the full call for this example would be:
|
||||
-----------------------------------------------------------
|
||||
So the full call for this example would be:
|
||||
token_fmt(
|
||||
"type", strc_for_type
|
||||
, "name", strc_for_name
|
||||
, stringize(
|
||||
typedef <type> <name> <name>
|
||||
));
|
||||
!----------------------------------------------------------
|
||||
! Note: token_fmt_va is whitespace sensitive for the tokens.
|
||||
! This can be alleviated by skipping whitespace between brackets but it was choosen to not have that implementation by default.
|
||||
*/
|
||||
# define token_fmt( ... ) GEN_NS token_fmt_impl( (num_args( __VA_ARGS__ ) + 1) / 2, __VA_ARGS__ )
|
||||
!----------------------------------------------------------
|
||||
! Note: token_fmt_va is whitespace sensitive for the tokens.
|
||||
! This can be alleviated by skipping whitespace between brackets but it was choosen to not have that implementation by default.
|
||||
*/
|
||||
#define token_fmt( ... ) GEN_NS token_fmt_impl( (num_args( __VA_ARGS__ ) + 1) / 2, __VA_ARGS__ )
|
||||
#endif
|
||||
|
||||
#pragma endregion Macros
|
||||
|
@ -319,15 +319,27 @@ CodeVar parse_variable( StrC def )
|
||||
}
|
||||
|
||||
// Undef helper macros
|
||||
# undef check_parse_args
|
||||
# undef currtok_noskip
|
||||
# undef currtok
|
||||
# undef peektok
|
||||
# undef prevtok
|
||||
# undef nexttok
|
||||
# undef nexttok_noskip
|
||||
# undef eat
|
||||
# undef left
|
||||
# undef check
|
||||
# undef push_scope
|
||||
# undef def_assign
|
||||
#undef check_parse_args
|
||||
#undef currtok_noskip
|
||||
#undef currtok
|
||||
#undef peektok
|
||||
#undef prevtok
|
||||
#undef nexttok
|
||||
#undef nexttok_noskip
|
||||
#undef eat
|
||||
#undef left
|
||||
#undef check
|
||||
#undef push_scope
|
||||
#undef def_assign
|
||||
|
||||
// Here for C Variant
|
||||
#undef lex_dont_skip_formatting
|
||||
#undef lex_skip_formatting
|
||||
|
||||
#undef parser_inplace_def
|
||||
#undef parser_not_inplace_def
|
||||
#undef parser_dont_consume_braces
|
||||
#undef parser_consume_braces
|
||||
#undef parser_not_from_template
|
||||
#undef parser_use_parenthesis
|
||||
#undef parser_strip_formatting_dont_preserve_newlines
|
||||
|
@ -12,6 +12,7 @@ enum OpValidateResult : u32
|
||||
OpValResult_Member
|
||||
};
|
||||
|
||||
internal neverinline
|
||||
OpValidateResult operator__validate( Operator op, CodeParam params_code, CodeTypename ret_type, CodeSpecifiers specifier )
|
||||
{
|
||||
if ( op == Op_Invalid )
|
||||
|
@ -355,7 +355,7 @@ size_t gen_example_hash__P_long_long( long long val ) { return val * 2654435761u
|
||||
|
||||
// If using an Editor with support for syntax hightlighting macros: HASH__ARGS_SIG_1 and HASH_ARGS_SIG_2 should show color highlighting indicating the slot is enabled,
|
||||
// or, "defined" for usage during the compilation pass that handles the _Generic instrinsic.
|
||||
#define hash( function_arguments ) _Generic( \
|
||||
#define gen_hash_example( function_arguments ) _Generic( \
|
||||
(function_arguments), /* Select Via Expression*/ \
|
||||
/* Extendibility slots: */ \
|
||||
GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_1 ) \
|
||||
|
@ -215,7 +215,7 @@ struct Arena
|
||||
#endif
|
||||
};
|
||||
|
||||
#if GEN_COMPILER_CPP && ! GEN_C_LIKECPP
|
||||
#if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP
|
||||
forceinline AllocatorInfo allocator_info(Arena& arena ) { return arena_allocator_info(& arena); }
|
||||
forceinline Arena init_sub (Arena& parent, ssize size) { return arena_init_sub( & parent, size); }
|
||||
forceinline ssize alignment_of (Arena& arena, ssize alignment) { return arena_alignment_of( & arena, alignment); }
|
||||
|
@ -626,7 +626,7 @@ StrC string_to_strc(String str) {
|
||||
}
|
||||
|
||||
inline
|
||||
void trim(String str, char const* cut_set)
|
||||
void string_trim(String str, char const* cut_set)
|
||||
{
|
||||
ssize len = 0;
|
||||
|
||||
@ -650,12 +650,12 @@ void trim(String str, char const* cut_set)
|
||||
}
|
||||
|
||||
forceinline
|
||||
void trim_space(String str) {
|
||||
trim(str, " \t\r\n\v\f");
|
||||
void string_trim_space(String str) {
|
||||
string_trim(str, " \t\r\n\v\f");
|
||||
}
|
||||
|
||||
inline
|
||||
String visualize_whitespace(String const str)
|
||||
String string_visualize_whitespace(String const str)
|
||||
{
|
||||
StringHeader* header = (StringHeader*)(scast(char const*, str) - sizeof(StringHeader));
|
||||
String result = string_make_reserve(header->Allocator, string_length(str) * 2); // Assume worst case for space requirements.
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
$devshell = Join-Path $PSScriptRoot 'helpers/devshell.ps1'
|
||||
$format_cpp = Join-Path $PSScriptRoot 'helpers/format_cpp.psm1'
|
||||
$refactor_c_library = Join-Path $PSScriptRoot 'refactor_c_library.ps1'
|
||||
$refactor_unreal = Join-Path $PSScriptRoot 'refactor_unreal.ps1'
|
||||
$incremental_checks = Join-Path $PSScriptRoot 'helpers/incremental_checks.ps1'
|
||||
$vendor_toolchain = Join-Path $PSScriptRoot 'helpers/vendor_toolchain.ps1'
|
||||
@ -223,6 +224,8 @@ if ( $c_library )
|
||||
}
|
||||
Pop-Location
|
||||
|
||||
. $refactor_c_library
|
||||
|
||||
$unit = join-path $path_c_library "gen.c"
|
||||
$executable = join-path $path_build "gen_c_library_test.exe"
|
||||
|
||||
@ -355,7 +358,7 @@ if ( $test )
|
||||
|
||||
#region Formatting
|
||||
push-location $path_scripts
|
||||
if ( $true -and $bootstrap -and (Test-Path (Join-Path $path_project "gen/gen.hpp")) )
|
||||
if ( $false -and $bootstrap -and (Test-Path (Join-Path $path_project "gen/gen.hpp")) )
|
||||
{
|
||||
$path_gen = join-path $path_project gen
|
||||
$include = @(
|
||||
@ -367,7 +370,6 @@ if ( $true -and $bootstrap -and (Test-Path (Join-Path $path_project "gen/gen.hpp
|
||||
$exclude = $null
|
||||
# format-cpp $path_gen $include $exclude
|
||||
format-cpp $path_comp_gen @( 'ast_inlines.hpp', 'ecode.hpp', 'especifier.hpp', 'eoperator.hpp', 'etoktype.cpp' ) $null
|
||||
|
||||
}
|
||||
|
||||
if ( $false -and $singleheader -and (Test-Path (Join-Path $path_singleheader "gen/gen.hpp")) )
|
||||
|
@ -1,24 +0,0 @@
|
||||
__VERSION 1
|
||||
|
||||
// This is a example template to be used with the refactor program
|
||||
// Use it to refactor the naming convention of this library to your own.
|
||||
// Can be used as an aid to help use use your project's implementation if it fullfills the dependencies of this project.
|
||||
// Example: Most likely have a memory and string library already, just rename the functions and make sure the args are the same.
|
||||
// Program: https://github.com/Ed94/refactor
|
||||
|
||||
// NOTE: Due to the current limitations of the program, not every symbol in the library can be renamed.
|
||||
// This is due to the program not actually parsing C/C++.
|
||||
|
||||
// not : Ignore
|
||||
// include : #includes
|
||||
// word : Alphanumeric or underscore
|
||||
// namespace : Prefix search and replace (c-namspaces).
|
||||
// regex : Unavailable in __VERSION 1.
|
||||
|
||||
// Precedence (highest to lowest):
|
||||
// word, namespace, regex
|
||||
|
||||
// Gen Macro namespace
|
||||
// namespace GEN_, new_namespace_
|
||||
|
||||
// TODO(Ed): This will be large as nearly all symbols will need to optionally support getting prefixed with gen_ or something else the user wants.
|
@ -0,0 +1,59 @@
|
||||
[string] $format = $false
|
||||
|
||||
foreach ( $arg in $args )
|
||||
{
|
||||
if ( $arg -eq "format" )
|
||||
{
|
||||
$format = $true
|
||||
}
|
||||
}
|
||||
|
||||
[string[]] $include = 'gen.h'
|
||||
[string[]] $exclude
|
||||
|
||||
$path_root = git rev-parse --show-toplevel
|
||||
$path_project = Join-Path $path_root project
|
||||
$path_scripts = Join-Path $path_root scripts
|
||||
$path_helpers = Join-Path $path_scripts helpers
|
||||
$path_c_library = Join-Path $path_root gen_c_library
|
||||
$path_c_library_gen = Join-Path $path_c_library gen
|
||||
|
||||
$file_spec = Join-Path $path_c_library c_library.refactor
|
||||
|
||||
# Gather the files to be formatted.
|
||||
$targetFiles = @()
|
||||
$targetFiles += Get-ChildItem -Recurse -Path $path_c_library_gen -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName
|
||||
# $targetFiles += Get-ChildItem -Recurse -Path $path_project -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName
|
||||
# $targetFiles += Get-ChildItem -Recurse -Path $path_singleheader_comp -Include $include -Exclude $exclude | Select-Object -ExpandProperty FullName
|
||||
|
||||
# Format the files.
|
||||
$formatParams = @(
|
||||
'-i' # In-place
|
||||
'-style=file:./.clang-format' # Search for a .clang-format file in the parent directory of the source file.
|
||||
'-verbose'
|
||||
)
|
||||
|
||||
write-host "Beginning refactor...`n"
|
||||
|
||||
Write-Host $targetFiles
|
||||
|
||||
$refactorParams = @(
|
||||
"-debug",
|
||||
"-num=$($targetFiles.Count)"
|
||||
"-src=$($targetFiles)",
|
||||
"-spec=$($file_spec)"
|
||||
)
|
||||
|
||||
$refactor = join-path $path_helpers refactor.exe
|
||||
write-host "& $refactor $refactorParams"
|
||||
& $refactor $refactorParams
|
||||
|
||||
Write-Host "`nRefactoring complete`n`n"
|
||||
|
||||
if ( $format -eq $true ) {
|
||||
Write-Host "Beginning format...`n"
|
||||
|
||||
& clang-format $formatParams $targetFiles
|
||||
|
||||
Write-Host "`nFormatting complete"
|
||||
}
|
Loading…
Reference in New Issue
Block a user