From e3172057d3173c0e78f75b1e4b9a65f7803ebe57 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 12 Dec 2024 12:55:15 -0500 Subject: [PATCH 1/8] working to towards https://github.com/Ed94/gencpp/issues/56 --- .vscode/bookmarks.json | 0 base/auxillary/builder.cpp | 16 +- base/auxillary/builder.hpp | 2 +- base/auxillary/gen_template.hpp | 2 +- base/auxillary/scanner.cpp | 24 +- base/base.cpp | 2 +- base/components/ast.cpp | 514 +++++------ base/components/ast.hpp | 16 +- base/components/code_serialization.cpp | 832 +++++++++--------- base/components/code_types.hpp | 528 +++++------ base/components/gen/ecodetypes.hpp | 12 +- base/components/gen/eoperator.hpp | 6 +- base/components/gen/especifier.hpp | 14 +- base/components/gen/etoktype.cpp | 10 +- base/components/header_end.hpp | 2 +- base/components/inlines.hpp | 6 +- base/components/interface.cpp | 72 +- base/components/interface.hpp | 108 +-- base/components/interface.parsing.cpp | 40 +- base/components/interface.untyped.cpp | 18 +- base/components/interface.upfront.cpp | 80 +- base/components/lexer.cpp | 36 +- base/components/parser.cpp | 242 ++--- base/components/static_data.cpp | 2 +- base/components/types.hpp | 12 +- base/dependencies/debug.hpp | 4 +- base/dependencies/filesystem.cpp | 4 +- base/dependencies/filesystem.hpp | 2 +- base/dependencies/parsing.cpp | 78 +- base/dependencies/parsing.hpp | 12 +- base/dependencies/printing.cpp | 69 +- base/dependencies/printing.hpp | 22 +- base/dependencies/src_start.cpp | 6 +- base/dependencies/string_ops.cpp | 16 +- base/dependencies/string_ops.hpp | 64 +- base/dependencies/strings.cpp | 28 +- base/dependencies/strings.hpp | 512 +++++------ base/gencpp.refactor | 423 --------- base/helpers/base_codegen.hpp | 319 ++++--- base/helpers/misc.hpp | 34 +- docs/AST_Design.md | 6 +- docs/AST_Types.md | 4 +- docs/Parser_Algo.md | 6 +- docs/Parsing.md | 38 +- docs/Readme.md | 10 +- gen_c_library/c_library.cpp | 142 +-- gen_c_library/c_library.refactor | 22 +- gen_c_library/components/containers.array.hpp | 18 +- .../components/containers.hashtable.hpp | 48 +- .../{generic_macros.hpp => generic_macros.h} | 59 +- gen_c_library/components/misc.hpp | 42 +- gen_segmented/segmented.cpp | 2 +- gen_singleheader/singleheader.cpp | 12 +- gen_unreal_engine/unreal.cpp | 10 +- gencpp.sln.DotSettings.user | 4 +- scripts/genccp.natstepfilter | 2 +- scripts/gencpp.natvis | 6 +- 57 files changed, 2098 insertions(+), 2522 deletions(-) delete mode 100644 .vscode/bookmarks.json delete mode 100644 base/gencpp.refactor rename gen_c_library/components/{generic_macros.hpp => generic_macros.h} (76%) diff --git a/.vscode/bookmarks.json b/.vscode/bookmarks.json deleted file mode 100644 index e69de29..0000000 diff --git a/base/auxillary/builder.cpp b/base/auxillary/builder.cpp index eb5e931..186a306 100644 --- a/base/auxillary/builder.cpp +++ b/base/auxillary/builder.cpp @@ -15,7 +15,7 @@ Builder builder_open( char const* path ) return result; } - result.Buffer = string_make_reserve( GlobalAllocator, Builder_StrBufferReserve ); + result.Buffer = strbuilder_make_reserve( GlobalAllocator, Builder_StrBufferReserve ); // log_fmt("$Builder - Opened file: %s\n", result.File.filename ); return result; @@ -23,15 +23,15 @@ Builder builder_open( char const* path ) void builder_pad_lines( Builder* builder, s32 num ) { - string_append_strc( & builder->Buffer, txt("\n") ); + strbuilder_append_str( & builder->Buffer, txt("\n") ); } void builder_print( Builder* builder, Code code ) { - String str = code_to_string(code); + StrBuilder str = code_to_string(code); // const ssize len = str.length(); // log_fmt( "%s - print: %.*s\n", File.filename, len > 80 ? 80 : len, str.Data ); - string_append_string( & builder->Buffer, str ); + strbuilder_append_string( & builder->Buffer, str ); } void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va ) @@ -39,21 +39,21 @@ void builder_print_fmt_va( Builder* builder, char const* fmt, va_list va ) ssize res; char buf[ GEN_PRINTF_MAXLEN ] = { 0 }; - res = str_fmt_va( buf, count_of( buf ) - 1, fmt, va ) - 1; + res = c_str_fmt_va( buf, count_of( buf ) - 1, fmt, va ) - 1; - string_append_c_str_len( (String*) & (builder->Buffer), (char const*)buf, res); + strbuilder_append_c_str_len( (StrBuilder*) & (builder->Buffer), (char const*)buf, res); } void builder_write(Builder* builder) { - b32 result = file_write( & builder->File, builder->Buffer, string_length(builder->Buffer) ); + b32 result = file_write( & builder->File, builder->Buffer, strbuilder_length(builder->Buffer) ); if ( result == false ) log_failure("gen::File::write - Failed to write to file: %s\n", file_name( & builder->File ) ); log_fmt( "Generated: %s\n", builder->File.filename ); file_close( & builder->File ); - string_free(& builder->Buffer); + strbuilder_free(& builder->Buffer); } #pragma endregion Builder diff --git a/base/auxillary/builder.hpp b/base/auxillary/builder.hpp index 3c37fba..1de05c3 100644 --- a/base/auxillary/builder.hpp +++ b/base/auxillary/builder.hpp @@ -36,7 +36,7 @@ void builder_write( Builder* builder ); struct Builder { FileInfo File; - String Buffer; + StrBuilder Buffer; #if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP forceinline static Builder open( char const* path ) { return builder_open(path); } diff --git a/base/auxillary/gen_template.hpp b/base/auxillary/gen_template.hpp index 101f7de..d64dcc2 100644 --- a/base/auxillary/gen_template.hpp +++ b/base/auxillary/gen_template.hpp @@ -32,4 +32,4 @@ CodeFn gen_func_template( CodeTemplate template, ... ); Code gen_class_struct_template( CodeTemplate template, ... ); Code gen_template( CodeTemplate template, ... ); -Code gen_template( StrC template, StrC instantiation ); +Code gen_template( Str template, Str instantiation ); diff --git a/base/auxillary/scanner.cpp b/base/auxillary/scanner.cpp index 70b12f3..fb1866f 100644 --- a/base/auxillary/scanner.cpp +++ b/base/auxillary/scanner.cpp @@ -20,9 +20,9 @@ Code scan_file( char const* path ) GEN_FATAL("scan_file: %s is empty", path ); } - String str = string_make_reserve( GlobalAllocator, fsize ); + StrBuilder str = strbuilder_make_reserve( GlobalAllocator, fsize ); file_read( & file, str, fsize ); - string_get_header(str)->Length = fsize; + strbuilder_get_header(str)->Length = fsize; // Skip GEN_INTELLISENSE_DIRECTIVES preprocessor blocks // Its designed so that the directive should be the first thing in the file. @@ -31,9 +31,9 @@ Code scan_file( char const* path ) #define current (*scanner) #define matched 0 #define move_fwd() do { ++ scanner; -- left; } while (0) - const StrC directive_start = txt( "ifdef" ); - const StrC directive_end = txt( "endif" ); - const StrC def_intellisense = txt("GEN_INTELLISENSE_DIRECTIVES" ); + const Str directive_start = txt( "ifdef" ); + const Str directive_end = txt( "endif" ); + const Str def_intellisense = txt("GEN_INTELLISENSE_DIRECTIVES" ); bool found_directive = false; char const* scanner = (char const*)str; @@ -49,7 +49,7 @@ Code scan_file( char const* path ) if ( ! found_directive ) { - if ( left && str_compare_len( scanner, directive_start.Ptr, directive_start.Len ) == matched ) + if ( left && c_str_compare_len( scanner, directive_start.Ptr, directive_start.Len ) == matched ) { scanner += directive_start.Len; left -= directive_start.Len; @@ -57,7 +57,7 @@ Code scan_file( char const* path ) while ( left && char_is_space( current ) ) move_fwd(); - if ( left && str_compare_len( scanner, def_intellisense.Ptr, def_intellisense.Len ) == matched ) + if ( left && c_str_compare_len( scanner, def_intellisense.Ptr, def_intellisense.Len ) == matched ) { scanner += def_intellisense.Len; left -= def_intellisense.Len; @@ -77,7 +77,7 @@ Code scan_file( char const* path ) continue; } - if ( left && str_compare_len( scanner, directive_end.Ptr, directive_end.Len ) == matched ) + if ( left && c_str_compare_len( scanner, directive_end.Ptr, directive_end.Len ) == matched ) { scanner += directive_end.Len; left -= directive_end.Len; @@ -94,12 +94,12 @@ Code scan_file( char const* path ) if ( (scanner + 2) >= ( (char const*) str + fsize ) ) { mem_move( str, scanner, left ); - string_get_header(str)->Length = left; + strbuilder_get_header(str)->Length = left; break; } mem_move( str, scanner, left ); - string_get_header(str)->Length = left; + strbuilder_get_header(str)->Length = left; break; } @@ -113,12 +113,12 @@ Code scan_file( char const* path ) } file_close( & file ); - return untyped_str( string_to_strc(str) ); + return untyped_str( strbuilder_to_str(str) ); } CodeBody parse_file( const char* path ) { FileContents file = file_read_contents( GlobalAllocator, true, path ); - StrC content = { file.size, (char const*)file.data }; + Str content = { file.size, (char const*)file.data }; CodeBody code = parse_global_body( content ); log_fmt("\nParsed: %s\n", path); return code; diff --git a/base/base.cpp b/base/base.cpp index e1d5c1a..0f2b053 100644 --- a/base/base.cpp +++ b/base/base.cpp @@ -35,7 +35,7 @@ int gen_main() def_include(txt("components/types.hpp")), preprocess_endif, fmt_newline, - untyped_str( to_strc_from_c_str(generation_notice) ) + untyped_str( to_str_from_c_str(generation_notice) ) )); CodeBody ecode = gen_ecode ( "enums/ECodeTypes.csv" ); diff --git a/base/components/ast.cpp b/base/components/ast.cpp index 1d83489..4ab638a 100644 --- a/base/components/ast.cpp +++ b/base/components/ast.cpp @@ -7,20 +7,20 @@ global Code Code_Global; global Code Code_Invalid; // This serializes all the data-members in a "debug" format, where each member is printed with its associated value. -StrC code_debug_str(Code self) +Str code_debug_str(Code self) { GEN_ASSERT(self != nullptr); - String result_stack = string_make_reserve( GlobalAllocator, kilobytes(1) ); - String* result = & result_stack; + StrBuilder result_stack = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); + StrBuilder* result = & result_stack; if ( self->Parent ) - string_append_fmt( result, "\n\tParent : %SC %SC", code_type_str(self->Parent), self->Name.Len ? self->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParent : %S %S", code_type_str(self->Parent), self->Name.Len ? self->Name : txt("Null") ); else - string_append_fmt( result, "\n\tParent : %SC", txt("Null") ); + strbuilder_append_fmt( result, "\n\tParent : %S", txt("Null") ); - string_append_fmt( result, "\n\tName : %SC", self->Name.Len ? self->Name : txt("Null") ); - string_append_fmt( result, "\n\tType : %SC", code_type_str(self) ); - string_append_fmt( result, "\n\tModule Flags : %SC", module_flag_to_str( self->ModuleFlags ) ); + strbuilder_append_fmt( result, "\n\tName : %S", self->Name.Len ? self->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tType : %S", code_type_str(self) ); + strbuilder_append_fmt( result, "\n\tModule Flags : %S", module_flag_to_str( self->ModuleFlags ) ); switch ( self->Type ) { @@ -30,9 +30,9 @@ StrC code_debug_str(Code self) case CT_Access_Protected: case CT_Access_Public: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); break; case CT_Untyped: @@ -48,74 +48,74 @@ StrC code_debug_str(Code self) case CT_Preprocess_IfDef: case CT_Preprocess_IfNotDef: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tContent: %SC", self->Content ); + strbuilder_append_fmt( result, "\n\tContent: %S", self->Content ); break; case CT_Class: case CT_Struct: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tParentAccess: %SC", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); - string_append_fmt( result, "\n\tParentType : %SC", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); + strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Class_Fwd: case CT_Struct_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tParentAccess: %SC", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); - string_append_fmt( result, "\n\tParentType : %SC", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); + strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); break; case CT_Constructor: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs) ) : txt("Null") ); - string_append_fmt( result, "\n\tInitializerList: %SC", self->InitializerList ? string_to_strc( code_to_string(self->InitializerList) ) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params) ) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_string(self->InitializerList) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Constructor_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs) ) : txt("Null") ); - string_append_fmt( result, "\n\tInitializerList: %SC", self->InitializerList ? string_to_strc( code_to_string(self->InitializerList) ) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_string(self->InitializerList) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); break; case CT_Destructor: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs) ) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Destructor_Fwd: @@ -124,208 +124,208 @@ StrC code_debug_str(Code self) case CT_Enum: case CT_Enum_Class: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tUnderlying Type : %SC", self->UnderlyingType ? string_to_strc( code_to_string(self->UnderlyingType)) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Enum_Fwd: case CT_Enum_Class_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tUnderlying Type : %SC", self->UnderlyingType ? string_to_strc( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); break; case CT_Extern_Linkage: case CT_Namespace: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tBody: %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody: %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Friend: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tDeclaration: %SC", self->Declaration ? string_to_strc( code_to_string(self->Declaration)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_string(self->Declaration)) : txt("Null") ); break; case CT_Function: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes: %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tReturnType: %SC", self->ReturnType ? string_to_strc( code_to_string(self->ReturnType)) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params)) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Function_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes: %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tReturnType: %SC", self->ReturnType ? string_to_strc( code_to_string(self->ReturnType)) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); break; case CT_Module: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); break; case CT_Operator: case CT_Operator_Member: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes: %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tReturnType: %SC", self->ReturnType ? string_to_strc( code_to_string(self->ReturnType)) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params)) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); - string_append_fmt( result, "\n\tOp : %SC", operator_to_str( self->Op ) ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tOp : %S", operator_to_str( self->Op ) ); break; case CT_Operator_Fwd: case CT_Operator_Member_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes: %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs) ) : txt("Null") ); - string_append_fmt( result, "\n\tReturnType: %SC", self->ReturnType ? string_to_strc( code_to_string(self->ReturnType) ) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params) ) : txt("Null") ); - string_append_fmt( result, "\n\tOp : %SC", operator_to_str( self->Op ) ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tOp : %S", operator_to_str( self->Op ) ); break; case CT_Operator_Cast: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tValueType : %SC", self->ValueType ? string_to_strc( code_to_string(self->ValueType)) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Operator_Cast_Fwd: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tValueType : %SC", self->ValueType ? string_to_strc( code_to_string(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); break; case CT_Parameters: - string_append_fmt( result, "\n\tNumEntries: %d", self->NumEntries ); - string_append_fmt( result, "\n\tLast : %SC", self->Last->Name ); - string_append_fmt( result, "\n\tNext : %SC", self->Next->Name ); - string_append_fmt( result, "\n\tValueType : %SC", self->ValueType ? string_to_strc( code_to_string(self->ValueType)) : txt("Null") ); - string_append_fmt( result, "\n\tValue : %SC", self->Value ? string_to_strc( code_to_string(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNumEntries: %d", self->NumEntries ); + strbuilder_append_fmt( result, "\n\tLast : %S", self->Last->Name ); + strbuilder_append_fmt( result, "\n\tNext : %S", self->Next->Name ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); break; case CT_Specifiers: { - string_append_fmt( result, "\n\tNumEntries: %d", self->NumEntries ); - string_append_strc( result, txt("\n\tArrSpecs: ") ); + strbuilder_append_fmt( result, "\n\tNumEntries: %d", self->NumEntries ); + strbuilder_append_str( result, txt("\n\tArrSpecs: ") ); s32 idx = 0; s32 left = self->NumEntries; while ( left-- ) { - StrC spec = spec_to_str( self->ArrSpecs[idx] ); - string_append_fmt( result, "%.*s, ", spec.Len, spec.Ptr ); + Str spec = spec_to_str( self->ArrSpecs[idx] ); + strbuilder_append_fmt( result, "%.*s, ", spec.Len, spec.Ptr ); idx++; } - string_append_fmt( result, "\n\tNextSpecs: %SC", self->NextSpecs ? code_debug_str(self->NextSpecs) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNextSpecs: %S", self->NextSpecs ? code_debug_str(self->NextSpecs) : txt("Null") ); } break; case CT_Template: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params)) : txt("Null") ); - string_append_fmt( result, "\n\tDeclaration: %SC", self->Declaration ? string_to_strc( code_to_string(self->Declaration)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_string(self->Declaration)) : txt("Null") ); break; case CT_Typedef: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tUnderlyingType: %SC", self->UnderlyingType ? string_to_strc( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); break; case CT_Typename: - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tReturnType : %SC", self->ReturnType ? string_to_strc( code_to_string(self->ReturnType)) : txt("Null") ); - string_append_fmt( result, "\n\tParams : %SC", self->Params ? string_to_strc( code_to_string(self->Params)) : txt("Null") ); - string_append_fmt( result, "\n\tArrExpr : %SC", self->ArrExpr ? string_to_strc( code_to_string(self->ArrExpr)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType : %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tArrExpr : %S", self->ArrExpr ? strbuilder_to_str( code_to_string(self->ArrExpr)) : txt("Null") ); break; case CT_Union: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tAttributes: %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tBody : %SC", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Using: if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tUnderlyingType: %SC", self->UnderlyingType ? string_to_strc( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); break; case CT_Variable: @@ -333,29 +333,29 @@ StrC code_debug_str(Code self) if ( self->Parent && self->Parent->Type == CT_Variable ) { // Its a NextVar - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tValue : %SC", self->Value ? string_to_strc( code_to_string(self->Value)) : txt("Null") ); - string_append_fmt( result, "\n\tBitfieldSize: %SC", self->BitfieldSize ? string_to_strc( code_to_string(self->BitfieldSize)) : txt("Null") ); - string_append_fmt( result, "\n\tNextVar : %SC", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_string(self->BitfieldSize)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); break; } if ( self->Prev ) - string_append_fmt( result, "\n\tPrev: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tPrev: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); if ( self->Next ) - string_append_fmt( result, "\n\tNext: %SC %SC", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - string_append_fmt( result, "\n\tInlineCmt : %SC", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - string_append_fmt( result, "\n\tAttributes : %SC", self->Attributes ? string_to_strc( code_to_string(self->Attributes) ) : txt("Null") ); - string_append_fmt( result, "\n\tSpecs : %SC", self->Specs ? string_to_strc( code_to_string(self->Specs)) : txt("Null") ); - string_append_fmt( result, "\n\tValueType : %SC", self->ValueType ? string_to_strc( code_to_string(self->ValueType)) : txt("Null") ); - string_append_fmt( result, "\n\tBitfieldSize: %SC", self->BitfieldSize ? string_to_strc( code_to_string(self->BitfieldSize)) : txt("Null") ); - string_append_fmt( result, "\n\tValue : %SC", self->Value ? string_to_strc( code_to_string(self->Value)) : txt("Null") ); - string_append_fmt( result, "\n\tNextVar : %SC", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_string(self->BitfieldSize)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); break; } - return string_to_strc( * result ); + return strbuilder_to_str( * result ); } Code code_duplicate(Code self) @@ -370,14 +370,14 @@ Code code_duplicate(Code self) return result; } -String code_to_string(Code self) +StrBuilder code_to_string(Code self) { - String result = string_make_strc( GlobalAllocator, txt("") ); - code_to_string_ptr( self, & result ); + StrBuilder result = strbuilder_make_str( GlobalAllocator, txt("") ); + code_to_strbuilder_ptr( self, & result ); return result; } -void code_to_string_ptr( Code self, String* result ) +void code_to_strbuilder_ptr( Code self, StrBuilder* result ) { GEN_ASSERT(self != nullptr); local_persist thread_local @@ -387,71 +387,71 @@ void code_to_string_ptr( Code self, String* result ) { case CT_Invalid: #ifdef GEN_DONT_ALLOW_INVALID_CODE - log_failure("Attempted to serialize invalid code! - %SC", Parent ? Parent->code_debug_str() : Name ); + log_failure("Attempted to serialize invalid code! - %S", Parent ? Parent->code_debug_str() : Name ); #else - string_append_fmt( result, "Invalid Code!" ); + strbuilder_append_fmt( result, "Invalid Code!" ); #endif break; case CT_NewLine: - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); break; case CT_Untyped: case CT_Execution: case CT_Comment: case CT_PlatformAttributes: - string_append_strc( result, self->Content ); + strbuilder_append_str( result, self->Content ); break; case CT_Access_Private: case CT_Access_Protected: case CT_Access_Public: - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); break; case CT_Class: - class_to_string_def(cast(CodeClass, self), result ); + class_to_strbuilder_def(cast(CodeClass, self), result ); break; case CT_Class_Fwd: - class_to_string_fwd(cast(CodeClass, self), result ); + class_to_strbuilder_fwd(cast(CodeClass, self), result ); break; case CT_Constructor: - constructor_to_string_def(cast(CodeConstructor, self), result ); + constructor_to_strbuilder_def(cast(CodeConstructor, self), result ); break; case CT_Constructor_Fwd: - constructor_to_string_fwd(cast(CodeConstructor, self), result ); + constructor_to_strbuilder_fwd(cast(CodeConstructor, self), result ); break; case CT_Destructor: - destructor_to_string_def(cast(CodeDestructor, self), result ); + destructor_to_strbuilder_def(cast(CodeDestructor, self), result ); break; case CT_Destructor_Fwd: - destructor_to_string_fwd(cast(CodeDestructor, self), result ); + destructor_to_strbuilder_fwd(cast(CodeDestructor, self), result ); break; case CT_Enum: - enum_to_string_def(cast(CodeEnum, self), result ); + enum_to_strbuilder_def(cast(CodeEnum, self), result ); break; case CT_Enum_Fwd: - enum_to_string_fwd(cast(CodeEnum, self), result ); + enum_to_strbuilder_fwd(cast(CodeEnum, self), result ); break; case CT_Enum_Class: - enum_to_string_class_def(cast(CodeEnum, self), result ); + enum_to_strbuilder_class_def(cast(CodeEnum, self), result ); break; case CT_Enum_Class_Fwd: - enum_to_string_class_fwd(cast(CodeEnum, self), result ); + enum_to_strbuilder_class_fwd(cast(CodeEnum, self), result ); break; case CT_Export_Body: - body_to_string_export(cast(CodeBody, self), result ); + body_to_strbuilder_export(cast(CodeBody, self), result ); break; case CT_Extern_Linkage: @@ -459,125 +459,125 @@ void code_to_string_ptr( Code self, String* result ) break; case CT_Friend: - friend_to_string_ref(cast(CodeFriend, self), result ); + friend_to_strbuilder_ref(cast(CodeFriend, self), result ); break; case CT_Function: - fn_to_string_def(cast(CodeFn, self), result ); + fn_to_strbuilder_def(cast(CodeFn, self), result ); break; case CT_Function_Fwd: - fn_to_string_fwd(cast(CodeFn, self), result ); + fn_to_strbuilder_fwd(cast(CodeFn, self), result ); break; case CT_Module: - module_to_string_ref(cast(CodeModule, self), result ); + module_to_strbuilder_ref(cast(CodeModule, self), result ); break; case CT_Namespace: - namespace_to_string_ref(cast(CodeNS, self), result ); + namespace_to_strbuilder_ref(cast(CodeNS, self), result ); break; case CT_Operator: case CT_Operator_Member: - code_op_to_string_def(cast(CodeOperator, self), result ); + code_op_to_strbuilder_def(cast(CodeOperator, self), result ); break; case CT_Operator_Fwd: case CT_Operator_Member_Fwd: - code_op_to_string_fwd(cast(CodeOperator, self), result ); + code_op_to_strbuilder_fwd(cast(CodeOperator, self), result ); break; case CT_Operator_Cast: - opcast_to_string_def(cast(CodeOpCast, self), result ); + opcast_to_strbuilder_def(cast(CodeOpCast, self), result ); break; case CT_Operator_Cast_Fwd: - opcast_to_string_fwd(cast(CodeOpCast, self), result ); + opcast_to_strbuilder_fwd(cast(CodeOpCast, self), result ); break; case CT_Parameters: - params_to_string_ref(cast(CodeParams, self), result ); + params_to_strbuilder_ref(cast(CodeParams, self), result ); break; case CT_Preprocess_Define: - define_to_string_ref(cast(CodeDefine, self), result ); + define_to_strbuilder_ref(cast(CodeDefine, self), result ); break; case CT_Preprocess_If: - preprocess_to_string_if(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_if(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_IfDef: - preprocess_to_string_ifdef(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_ifdef(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_IfNotDef: - preprocess_to_string_ifndef(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_ifndef(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_Include: - include_to_string_ref(cast(CodeInclude, self), result ); + include_to_strbuilder_ref(cast(CodeInclude, self), result ); break; case CT_Preprocess_ElIf: - preprocess_to_string_elif(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_elif(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_Else: - preprocess_to_string_else(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_else(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_EndIf: - preprocess_to_string_endif(cast(CodePreprocessCond, self), result ); + preprocess_to_strbuilder_endif(cast(CodePreprocessCond, self), result ); break; case CT_Preprocess_Pragma: - pragma_to_string_ref(cast(CodePragma, self), result ); + pragma_to_strbuilder_ref(cast(CodePragma, self), result ); break; case CT_Specifiers: - specifiers_to_string_ref(cast(CodeSpecifiers, self), result ); + specifiers_to_strbuilder_ref(cast(CodeSpecifiers, self), result ); break; case CT_Struct: - struct_to_string_def(cast(CodeStruct, self), result ); + struct_to_strbuilder_def(cast(CodeStruct, self), result ); break; case CT_Struct_Fwd: - struct_to_string_fwd(cast(CodeStruct, self), result ); + struct_to_strbuilder_fwd(cast(CodeStruct, self), result ); break; case CT_Template: - template_to_string_ref(cast(CodeTemplate, self), result ); + template_to_strbuilder_ref(cast(CodeTemplate, self), result ); break; case CT_Typedef: - typedef_to_string_ref(cast(CodeTypedef, self), result ); + typedef_to_strbuilder_ref(cast(CodeTypedef, self), result ); break; case CT_Typename: - typename_to_string_ref(cast(CodeTypename, self), result ); + typename_to_strbuilder_ref(cast(CodeTypename, self), result ); break; case CT_Union: - union_to_string_def( cast(CodeUnion, self), result ); + union_to_strbuilder_def( cast(CodeUnion, self), result ); break; case CT_Union_Fwd: - union_to_string_fwd( cast(CodeUnion, self), result ); + union_to_strbuilder_fwd( cast(CodeUnion, self), result ); break; case CT_Using: - using_to_string_ref(cast(CodeUsing, self), result ); + using_to_strbuilder_ref(cast(CodeUsing, self), result ); break; case CT_Using_Namespace: - using_to_string_ns(cast(CodeUsing, self), result ); + using_to_strbuilder_ns(cast(CodeUsing, self), result ); break; case CT_Variable: - var_to_string_ref(cast(CodeVar, self), result ); + var_to_strbuilder_ref(cast(CodeVar, self), result ); break; case CT_Enum_Body: @@ -588,7 +588,7 @@ void code_to_string_ptr( Code self, String* result ) case CT_Namespace_Body: case CT_Struct_Body: case CT_Union_Body: - body_to_string_ref( cast(CodeBody, self), result ); + body_to_strbuilder_ref( cast(CodeBody, self), result ); break; } } @@ -604,13 +604,13 @@ bool code_is_equal( Code self, Code other ) */ if ( other == nullptr ) { - log_fmt( "AST::is_equal: other is null\nAST: %SC", code_debug_str(self) ); + log_fmt( "AST::is_equal: other is null\nAST: %S", code_debug_str(self) ); return false; } if ( self->Type != other->Type ) { - log_fmt("AST::is_equal: Type check failure with other\nAST: %SC\nOther: %SC" + log_fmt("AST::is_equal: Type check failure with other\nAST: %S\nOther: %S" , code_debug_str(self) ,code_debug_str(other) ); @@ -624,8 +624,8 @@ bool code_is_equal( Code self, Code other ) if ( self->val != other->val ) \ { \ log_fmt("\nAST::is_equal: Member - " #val " failed\n" \ - "AST : %SC\n" \ - "Other: %SC\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ ,code_debug_str(other) \ ); \ @@ -634,11 +634,11 @@ bool code_is_equal( Code self, Code other ) } #define check_member_str( str ) \ - if ( ! strc_are_equal( self->str, other->str ) ) \ + if ( ! str_are_equal( self->str, other->str ) ) \ { \ log_fmt("\nAST::is_equal: Member string - "#str " failed\n" \ - "AST : %SC\n" \ - "Other: %SC\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ ,code_debug_str(other) \ ); \ @@ -647,21 +647,21 @@ bool code_is_equal( Code self, Code other ) } #define check_member_content( content ) \ - if ( ! strc_are_equal( self->content, other->content )) \ + if ( ! str_are_equal( self->content, other->content )) \ { \ log_fmt("\nAST::is_equal: Member content - "#content " failed\n" \ - "AST : %SC\n" \ - "Other: %SC\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ ); \ \ log_fmt("Content cannot be trusted to be unique with this check " \ "so it must be verified by eye for now\n" \ - "AST Content:\n%SC\n" \ - "Other Content:\n%SC\n" \ - , strc_visualize_whitespace(self->content, GlobalAllocator) \ - , strc_visualize_whitespace(other->content, GlobalAllocator) \ + "AST Content:\n%S\n" \ + "Other Content:\n%S\n" \ + , str_visualize_whitespace(self->content, GlobalAllocator) \ + , str_visualize_whitespace(other->content, GlobalAllocator) \ ); \ } @@ -671,9 +671,9 @@ bool code_is_equal( Code self, Code other ) if ( other->ast == nullptr ) \ { \ log_fmt("\nAST::is_equal: Failed for member " #ast " other equivalent param is null\n" \ - "AST : %SC\n" \ - "Other: %SC\n" \ - "For ast member: %SC\n" \ + "AST : %S\n" \ + "Other: %S\n" \ + "For ast member: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ , code_debug_str(self->ast) \ @@ -685,10 +685,10 @@ bool code_is_equal( Code self, Code other ) if ( ! code_is_equal(self->ast, other->ast ) ) \ { \ log_fmt( "\nAST::is_equal: Failed for " #ast"\n" \ - "AST : %SC\n" \ - "Other: %SC\n" \ - "For ast member: %SC\n" \ - "other's ast member: %SC\n" \ + "AST : %S\n" \ + "Other: %S\n" \ + "For ast member: %S\n" \ + "other's ast member: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ , code_debug_str(self->ast) \ @@ -918,22 +918,22 @@ bool code_is_equal( Code self, Code other ) if ( curr_other == nullptr ) { log_fmt("\nAST::is_equal: Failed for parameter, other equivalent param is null\n" - "AST : %SC\n" - "Other: %SC\n" - "For ast member: %SC\n" + "AST : %S\n" + "Other: %S\n" + "For ast member: %S\n" , code_debug_str(curr) ); return false; } - if ( strc_are_equal(curr->Name, curr_other->Name) ) + if ( str_are_equal(curr->Name, curr_other->Name) ) { log_fmt( "\nAST::is_equal: Failed for parameter name check\n" - "AST : %SC\n" - "Other: %SC\n" - "For ast member: %SC\n" - "other's ast member: %SC\n" + "AST : %S\n" + "Other: %S\n" + "For ast member: %S\n" + "other's ast member: %S\n" , code_debug_str(self) , code_debug_str(other) , code_debug_str(curr) @@ -945,10 +945,10 @@ bool code_is_equal( Code self, Code other ) if ( curr->ValueType && ! code_is_equal(curr->ValueType, curr_other->ValueType) ) { log_fmt( "\nAST::is_equal: Failed for parameter value type check\n" - "AST : %SC\n" - "Other: %SC\n" - "For ast member: %SC\n" - "other's ast member: %SC\n" + "AST : %S\n" + "Other: %S\n" + "For ast member: %S\n" + "other's ast member: %S\n" , code_debug_str(self) , code_debug_str(other) , code_debug_str(curr) @@ -960,10 +960,10 @@ bool code_is_equal( Code self, Code other ) if ( curr->Value && ! code_is_equal(curr->Value, curr_other->Value) ) { log_fmt( "\nAST::is_equal: Failed for parameter value check\n" - "AST : %SC\n" - "Other: %SC\n" - "For ast member: %SC\n" - "other's ast member: %SC\n" + "AST : %S\n" + "Other: %S\n" + "For ast member: %S\n" + "other's ast member: %S\n" , code_debug_str(self) , code_debug_str(other) , code_debug_str(curr) @@ -1117,8 +1117,8 @@ bool code_is_equal( Code self, Code other ) if ( curr_other == nullptr ) { log_fmt("\nAST::is_equal: Failed for body, other equivalent param is null\n" - "AST : %SC\n" - "Other: %SC\n" + "AST : %S\n" + "Other: %S\n" , code_debug_str(curr) , code_debug_str(other) ); @@ -1129,10 +1129,10 @@ bool code_is_equal( Code self, Code other ) if ( ! code_is_equal( curr, curr_other ) ) { log_fmt( "\nAST::is_equal: Failed for body\n" - "AST : %SC\n" - "Other: %SC\n" - "For ast member: %SC\n" - "other's ast member: %SC\n" + "AST : %S\n" + "Other: %S\n" + "For ast member: %S\n" + "other's ast member: %S\n" , code_debug_str(self) , code_debug_str(other) , code_debug_str(curr) @@ -1169,7 +1169,7 @@ bool code_validate_body(Code self) for (Code code_entry = begin_CodeBody(body); code_entry != end_CodeBody(body); next_CodeBody(body, code_entry)) switch (code_entry->Type) { GEN_AST_BODY_CLASS_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(code_entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(code_entry)); return false; default: @@ -1184,7 +1184,7 @@ bool code_validate_body(Code self) { if ( entry->Type != CT_Untyped ) { - log_failure( "AST::validate_body: Invalid entry in enum body (needs to be untyped or comment) %SC", code_debug_str(entry) ); + log_failure( "AST::validate_body: Invalid entry in enum body (needs to be untyped or comment) %S", code_debug_str(entry) ); return false; } } @@ -1196,7 +1196,7 @@ bool code_validate_body(Code self) for (Code code_entry = begin_CodeBody(body); code_entry != end_CodeBody(body); next_CodeBody(body, code_entry)) switch (code_entry->Type) { GEN_AST_BODY_EXPORT_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(code_entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(code_entry)); return false; default: @@ -1210,7 +1210,7 @@ bool code_validate_body(Code self) for (Code code_entry = begin_CodeBody(body); code_entry != end_CodeBody(body); next_CodeBody(body, code_entry)) switch (code_entry->Type) { GEN_AST_BODY_EXTERN_LINKAGE_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(code_entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(code_entry)); return false; default: @@ -1224,7 +1224,7 @@ bool code_validate_body(Code self) for (Code code_entry = begin_CodeBody(body); code_entry != end_CodeBody(body); next_CodeBody(body, code_entry)) switch (code_entry->Type) { GEN_AST_BODY_FUNCTION_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(code_entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(code_entry)); return false; default: @@ -1238,7 +1238,7 @@ bool code_validate_body(Code self) for ( Code entry = begin_CodeBody(body); entry != end_CodeBody(body); next_CodeBody(body, entry) )switch (entry->Type) { GEN_AST_BODY_GLOBAL_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(entry)); return false; } } @@ -1249,7 +1249,7 @@ bool code_validate_body(Code self) for ( Code entry = begin_CodeBody(body); entry != end_CodeBody(body); next_CodeBody(body, entry) ) switch (entry->Type) { GEN_AST_BODY_NAMESPACE_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(entry)); return false; } } @@ -1260,7 +1260,7 @@ bool code_validate_body(Code self) for ( Code entry = begin_CodeBody(body); entry != end_CodeBody(body); next_CodeBody(body, entry) ) switch (entry->Type) { GEN_AST_BODY_STRUCT_UNALLOWED_TYPES: - log_failure("AST::validate_body: Invalid entry in body %SC", code_debug_str(entry)); + log_failure("AST::validate_body: Invalid entry in body %S", code_debug_str(entry)); return false; } } @@ -1272,7 +1272,7 @@ bool code_validate_body(Code self) { if ( entry->Type != CT_Untyped ) { - log_failure( "AST::validate_body: Invalid entry in union body (needs to be untyped or comment) %SC", code_debug_str(entry) ); + log_failure( "AST::validate_body: Invalid entry in union body (needs to be untyped or comment) %S", code_debug_str(entry) ); return false; } } @@ -1280,7 +1280,7 @@ bool code_validate_body(Code self) break; default: - log_failure( "AST::validate_body: Invalid this AST does not have a body %SC", code_debug_str(self) ); + log_failure( "AST::validate_body: Invalid this AST does not have a body %S", code_debug_str(self) ); return false; } diff --git a/base/components/ast.hpp b/base/components/ast.hpp index 052d8b6..0a60144 100644 --- a/base/components/ast.hpp +++ b/base/components/ast.hpp @@ -252,7 +252,7 @@ template< class Type> forceinline Type tmpl_cast( Code self ) { return * rcast( #pragma region Code C-Interface void code_append (Code code, Code other ); -StrC code_debug_str (Code code); +Str code_debug_str (Code code); Code code_duplicate (Code code); Code* code_entry (Code code, u32 idx ); bool code_has_entries (Code code); @@ -260,9 +260,9 @@ bool code_is_body (Code code); bool code_is_equal (Code code, Code other); bool code_is_valid (Code code); void code_set_global (Code code); -String code_to_string (Code self ); -void code_to_string_ptr(Code self, String* result ); -StrC code_type_str (Code self ); +StrBuilder code_to_string (Code self ); +void code_to_strbuilder_ptr(Code self, StrBuilder* result ); +Str code_type_str (Code self ); bool code_validate_body(Code self ); #pragma endregion Code C-Interface @@ -278,7 +278,7 @@ struct Code AST* ast; # define Using_Code( Typename ) \ - forceinline StrC debug_str() { return code_debug_str(* this); } \ + forceinline Str debug_str() { return code_debug_str(* this); } \ forceinline Code duplicate() { return code_duplicate(* this); } \ forceinline bool is_equal( Code other ) { return code_is_equal(* this, other); } \ forceinline bool is_body() { return code_is_body(* this); } \ @@ -298,9 +298,9 @@ struct Code forceinline void append(Code other) { return code_append(* this, other); } forceinline Code* entry(u32 idx) { return code_entry(* this, idx); } forceinline bool has_entries() { return code_has_entries(* this); } - forceinline String to_string() { return code_to_string(* this); } - forceinline void to_string(String& result) { return code_to_string_ptr(* this, & result); } - forceinline StrC type_str() { return code_type_str(* this); } + forceinline StrBuilder to_string() { return code_to_string(* this); } + forceinline void to_string(StrBuilder& result) { return code_to_strbuilder_ptr(* this, & result); } + forceinline Str type_str() { return code_type_str(* this); } forceinline bool validate_body() { return code_validate_body(*this); } #endif diff --git a/base/components/code_serialization.cpp b/base/components/code_serialization.cpp index 5e0a4f4..d00bfaf 100644 --- a/base/components/code_serialization.cpp +++ b/base/components/code_serialization.cpp @@ -4,29 +4,29 @@ #endif inline -String attributes_to_string(CodeAttributes attributes) { +StrBuilder attributes_to_string(CodeAttributes attributes) { GEN_ASSERT(attributes); - char* raw = ccast(char*, strc_duplicate( attributes->Content, GlobalAllocator ).Ptr); - String result = { raw }; + char* raw = ccast(char*, str_duplicate( attributes->Content, GlobalAllocator ).Ptr); + StrBuilder result = { raw }; return result; } inline -void attributes_to_string_ref(CodeAttributes attributes, String* result) { +void attributes_to_strbuilder_ref(CodeAttributes attributes, StrBuilder* result) { GEN_ASSERT(attributes); GEN_ASSERT(result); - string_append_strc(result, attributes->Content); + strbuilder_append_str(result, attributes->Content); } -String body_to_string(CodeBody body) +StrBuilder body_to_string(CodeBody body) { GEN_ASSERT(body); - String result = string_make_reserve( GlobalAllocator, 128 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( body->Type ) { case CT_Untyped: case CT_Execution: - string_append_strc( & result, cast(Code, body)->Content ); + strbuilder_append_str( & result, cast(Code, body)->Content ); break; case CT_Enum_Body: @@ -37,17 +37,17 @@ String body_to_string(CodeBody body) case CT_Namespace_Body: case CT_Struct_Body: case CT_Union_Body: - body_to_string_ref( body, & result ); + body_to_strbuilder_ref( body, & result ); break; case CT_Export_Body: - body_to_string_export( body, & result ); + body_to_strbuilder_export( body, & result ); break; } return result; } -void body_to_string_ref( CodeBody body, String* result ) +void body_to_strbuilder_ref( CodeBody body, StrBuilder* result ) { GEN_ASSERT(body != nullptr); GEN_ASSERT(result != nullptr); @@ -55,461 +55,461 @@ void body_to_string_ref( CodeBody body, String* result ) s32 left = body->NumEntries; while ( left -- ) { - code_to_string_ptr(curr, result); - // string_append_fmt( result, "%S", code_to_string(curr) ); + code_to_strbuilder_ptr(curr, result); + // strbuilder_append_fmt( result, "%SB", code_to_string(curr) ); ++curr; } } -void body_to_string_export( CodeBody body, String* result ) +void body_to_strbuilder_export( CodeBody body, StrBuilder* result ) { GEN_ASSERT(body != nullptr); GEN_ASSERT(result != nullptr); - string_append_fmt( result, "export\n{\n" ); + strbuilder_append_fmt( result, "export\n{\n" ); Code curr = cast(Code, body); s32 left = body->NumEntries; while ( left-- ) { - code_to_string_ptr(curr, result); - // string_append_fmt( result, "%S", code_to_string(curr) ); + code_to_strbuilder_ptr(curr, result); + // strbuilder_append_fmt( result, "%SB", code_to_string(curr) ); ++curr; } - string_append_fmt( result, "};\n" ); + strbuilder_append_fmt( result, "};\n" ); } inline -String comment_to_string(CodeComment comment) { +StrBuilder comment_to_string(CodeComment comment) { GEN_ASSERT(comment); - char* raw = ccast(char*, strc_duplicate( comment->Content, GlobalAllocator ).Ptr); - String result = { raw }; + char* raw = ccast(char*, str_duplicate( comment->Content, GlobalAllocator ).Ptr); + StrBuilder result = { raw }; return result; } inline -void comment_to_string_ref(CodeComment comment, String* result) { +void comment_to_strbuilder_ref(CodeComment comment, StrBuilder* result) { GEN_ASSERT(comment); GEN_ASSERT(result); - string_append_strc(result, comment->Content); + strbuilder_append_str(result, comment->Content); } -String constructor_to_string(CodeConstructor self) +StrBuilder constructor_to_string(CodeConstructor self) { - String result = string_make_reserve( GlobalAllocator, 128 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch (self->Type) { case CT_Constructor: - constructor_to_string_def( self, & result ); + constructor_to_strbuilder_def( self, & result ); break; case CT_Constructor_Fwd: - constructor_to_string_fwd( self, & result ); + constructor_to_strbuilder_fwd( self, & result ); break; } return result; } -void constructor_to_string_def(CodeConstructor self, String* result ) +void constructor_to_strbuilder_def(CodeConstructor self, StrBuilder* result ) { Code ClassStructParent = self->Parent->Parent; if (ClassStructParent) { - string_append_strc( result, ClassStructParent->Name ); + strbuilder_append_str( result, ClassStructParent->Name ); } else { - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); } if ( self->Params ) - string_append_fmt( result, "( %S )", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "( %SB )", params_to_string(self->Params) ); else - string_append_strc( result, txt("()") ); + strbuilder_append_str( result, txt("()") ); if ( self->InitializerList ) - string_append_fmt( result, " : %S", code_to_string(self->InitializerList) ); + strbuilder_append_fmt( result, " : %SB", code_to_string(self->InitializerList) ); if ( self->InlineCmt ) - string_append_fmt( result, " // %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); - string_append_fmt( result, "\n{\n%S\n}\n", code_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_string(self->Body) ); } -void constructor_to_string_fwd(CodeConstructor self, String* result ) +void constructor_to_strbuilder_fwd(CodeConstructor self, StrBuilder* result ) { Code ClassStructParent = self->Parent->Parent; if (ClassStructParent) { - string_append_strc( result, ClassStructParent->Name ); + strbuilder_append_str( result, ClassStructParent->Name ); } else { - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); } if ( self->Params ) - string_append_fmt( result, "( %S )", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "( %SB )", params_to_string(self->Params) ); else - string_append_fmt( result, "()"); + strbuilder_append_fmt( result, "()"); if (self->Body) - string_append_fmt( result, " = %S", code_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB", code_to_string(self->Body) ); if ( self->InlineCmt ) - string_append_fmt( result, "; // %SC\n", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; // %S\n", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); } -String class_to_string( CodeClass self ) +StrBuilder class_to_string( CodeClass self ) { - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Class: - class_to_string_def(self, & result ); + class_to_strbuilder_def(self, & result ); break; case CT_Class_Fwd: - class_to_string_fwd(self, & result ); + class_to_strbuilder_fwd(self, & result ); break; } return result; } -void class_to_string_def( CodeClass self, String* result ) +void class_to_strbuilder_def( CodeClass self, StrBuilder* result ) { GEN_ASSERT(self); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("class ") ); + strbuilder_append_str( result, txt("class ") ); if ( self->Attributes ) { - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); } if ( self->ParentType ) { - StrC access_level = access_spec_to_str( self->ParentAccess ); - string_append_fmt( result, "%SC : %SC %S", self->Name, access_level, typename_to_string(self->ParentType) ); + Str access_level = access_spec_to_str( self->ParentAccess ); + strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_string(self->ParentType) ); CodeTypename interface = cast(CodeTypename, self->ParentType->Next); if ( interface ) - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); while ( interface ) { - string_append_fmt( result, ", public %S", typename_to_string(interface) ); + strbuilder_append_fmt( result, ", public %SB", typename_to_string(interface) ); interface = interface->Next ? cast(CodeTypename, interface->Next) : NullCode; } } else if ( self->Name.Len ) { - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); } if ( self->InlineCmt ) { - string_append_fmt( result, " // %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); } - string_append_fmt( result, "\n{\n%S\n}", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_string(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); } -void class_to_string_fwd( CodeClass self, String* result ) +void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ) { GEN_ASSERT(self); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "class %S %SC", attributes_to_string(self->Attributes), self->Name ); + strbuilder_append_fmt( result, "class %SB %S", attributes_to_string(self->Attributes), self->Name ); - else string_append_fmt( result, "class %SC", self->Name ); + else strbuilder_append_fmt( result, "class %S", self->Name ); // Check if it can have an end-statement if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) { if ( self->InlineCmt ) - string_append_fmt( result, "; // %SC\n", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; // %S\n", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); } } -String define_to_string(CodeDefine define) +StrBuilder define_to_string(CodeDefine define) { - return string_fmt_buf( GlobalAllocator, "#define %SC %SC", define->Name, define->Content ); + return strbuilder_fmt_buf( GlobalAllocator, "#define %S %S", define->Name, define->Content ); } -void define_to_string_ref(CodeDefine define, String* result ) +void define_to_strbuilder_ref(CodeDefine define, StrBuilder* result ) { - string_append_fmt( result, "#define %SC %SC", define->Name, define->Content ); + strbuilder_append_fmt( result, "#define %S %S", define->Name, define->Content ); } -String destructor_to_string(CodeDestructor self) +StrBuilder destructor_to_string(CodeDestructor self) { - String result = string_make_reserve( GlobalAllocator, 128 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( self->Type ) { case CT_Destructor: - destructor_to_string_def( self, & result ); + destructor_to_strbuilder_def( self, & result ); break; case CT_Destructor_Fwd: - destructor_to_string_fwd( self, & result ); + destructor_to_strbuilder_fwd( self, & result ); break; } return result; } -void destructor_to_string_def(CodeDestructor self, String* result ) +void destructor_to_strbuilder_def(CodeDestructor self, StrBuilder* result ) { if ( self->Name.Len ) { - string_append_fmt( result, "%SC()", self->Name ); + strbuilder_append_fmt( result, "%S()", self->Name ); } else if ( self->Specs ) { if ( specifiers_has(self->Specs, Spec_Virtual ) ) - string_append_fmt( result, "virtual ~%SC()", self->Parent->Name ); + strbuilder_append_fmt( result, "virtual ~%S()", self->Parent->Name ); else - string_append_fmt( result, "~%SC()", self->Parent->Name ); + strbuilder_append_fmt( result, "~%S()", self->Parent->Name ); } else - string_append_fmt( result, "~%SC()", self->Parent->Name ); + strbuilder_append_fmt( result, "~%S()", self->Parent->Name ); - string_append_fmt( result, "\n{\n%S\n}\n", code_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_string(self->Body) ); } -void destructor_to_string_fwd(CodeDestructor self, String* result ) +void destructor_to_strbuilder_fwd(CodeDestructor self, StrBuilder* result ) { if ( self->Specs ) { if ( specifiers_has(self->Specs, Spec_Virtual ) ) - string_append_fmt( result, "virtual ~%SC();\n", self->Parent->Name ); + strbuilder_append_fmt( result, "virtual ~%S();\n", self->Parent->Name ); else - string_append_fmt( result, "~%SC()", self->Parent->Name ); + strbuilder_append_fmt( result, "~%S()", self->Parent->Name ); if ( specifiers_has(self->Specs, Spec_Pure ) ) - string_append_strc( result, txt(" = 0;") ); + strbuilder_append_str( result, txt(" = 0;") ); else if (self->Body) - string_append_fmt( result, " = %S;", code_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB;", code_to_string(self->Body) ); } else - string_append_fmt( result, "~%SC();", self->Parent->Name ); + strbuilder_append_fmt( result, "~%S();", self->Parent->Name ); if ( self->InlineCmt ) - string_append_fmt( result, " %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " %S", self->InlineCmt->Content ); else - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); } -String enum_to_string(CodeEnum self) +StrBuilder enum_to_string(CodeEnum self) { - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Enum: - enum_to_string_def(self, & result ); + enum_to_strbuilder_def(self, & result ); break; case CT_Enum_Fwd: - enum_to_string_fwd(self, & result ); + enum_to_strbuilder_fwd(self, & result ); break; case CT_Enum_Class: - enum_to_string_class_def(self, & result ); + enum_to_strbuilder_class_def(self, & result ); break; case CT_Enum_Class_Fwd: - enum_to_string_class_fwd(self, & result ); + enum_to_strbuilder_class_fwd(self, & result ); break; } return result; } -void enum_to_string_def(CodeEnum self, String* result ) +void enum_to_strbuilder_def(CodeEnum self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes || self->UnderlyingType || self->UnderlyingTypeMacro ) { - string_append_strc( result, txt("enum ") ); + strbuilder_append_str( result, txt("enum ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->UnderlyingType ) - string_append_fmt( result, "%SC : %S\n{\n%S\n}" + strbuilder_append_fmt( result, "%S : %SB\n{\n%SB\n}" , self->Name , typename_to_string(self->UnderlyingType) , body_to_string(self->Body) ); else if ( self->UnderlyingTypeMacro ) - string_append_fmt( result, "%SC %S\n{\n%S\n}" + strbuilder_append_fmt( result, "%S %SB\n{\n%SB\n}" , self->Name , code_to_string(self->UnderlyingTypeMacro) , body_to_string(self->Body) ); - else string_append_fmt( result, "%SC\n{\n%S\n}", self->Name, body_to_string(self->Body) ); + else strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); } - else string_append_fmt( result, "enum %SC\n{\n%S\n}", self->Name, body_to_string(self->Body) ); + else strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } -void enum_to_string_fwd(CodeEnum self, String* result ) +void enum_to_strbuilder_fwd(CodeEnum self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->UnderlyingType ) - string_append_fmt( result, "enum %SC : %S", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "enum %S : %SB", self->Name, typename_to_string(self->UnderlyingType) ); else if (self->UnderlyingTypeMacro) { log_fmt("IDENTIFIED A UNDERLYING ENUM MACRO"); - string_append_fmt( result, "enum %SC %S", self->Name, code_to_string(self->UnderlyingTypeMacro) ); + strbuilder_append_fmt( result, "enum %S %SB", self->Name, code_to_string(self->UnderlyingTypeMacro) ); } else - string_append_fmt( result, "enum %SC", self->Name ); + strbuilder_append_fmt( result, "enum %S", self->Name ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) { if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } } -void enum_to_string_class_def(CodeEnum self, String* result ) +void enum_to_strbuilder_class_def(CodeEnum self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes || self->UnderlyingType ) { - string_append_strc( result, txt("enum class ") ); + strbuilder_append_str( result, txt("enum class ") ); if ( self->Attributes ) { - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); } if ( self->UnderlyingType ) { - string_append_fmt( result, "%SC : %S\n{\n%S\n}", self->Name, typename_to_string(self->UnderlyingType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S : %SB\n{\n%SB\n}", self->Name, typename_to_string(self->UnderlyingType), body_to_string(self->Body) ); } else { - string_append_fmt( result, "%SC\n{\n%S\n}", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); } } else { - string_append_fmt( result, "enum %SC\n{\n%S\n}", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); } if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } -void enum_to_string_class_fwd(CodeEnum self, String* result ) +void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("enum class ") ); + strbuilder_append_str( result, txt("enum class ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); - string_append_fmt( result, "%SC : %S", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "%S : %SB", self->Name, typename_to_string(self->UnderlyingType) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) { if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } } -String exec_to_string(CodeExec exec) +StrBuilder exec_to_string(CodeExec exec) { GEN_ASSERT(exec); - char* raw = ccast(char*, strc_duplicate( exec->Content, GlobalAllocator ).Ptr); - String result = { raw }; + char* raw = ccast(char*, str_duplicate( exec->Content, GlobalAllocator ).Ptr); + StrBuilder result = { raw }; return result; } -void extern_to_string(CodeExtern self, String* result ) +void extern_to_string(CodeExtern self, StrBuilder* result ) { if ( self->Body ) - string_append_fmt( result, "extern \"%SC\"\n{\n%S\n}\n", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "extern \"%S\"\n{\n%SB\n}\n", self->Name, body_to_string(self->Body) ); else - string_append_fmt( result, "extern \"%SC\"\n{}\n", self->Name ); + strbuilder_append_fmt( result, "extern \"%S\"\n{}\n", self->Name ); } -String include_to_string(CodeInclude include) +StrBuilder include_to_string(CodeInclude include) { - return string_fmt_buf( GlobalAllocator, "#include %SC\n", include->Content ); + return strbuilder_fmt_buf( GlobalAllocator, "#include %S\n", include->Content ); } -void include_to_string_ref( CodeInclude include, String* result ) +void include_to_strbuilder_ref( CodeInclude include, StrBuilder* result ) { - string_append_fmt( result, "#include %SC\n", include->Content ); + strbuilder_append_fmt( result, "#include %S\n", include->Content ); } -String friend_to_string(CodeFriend self) +StrBuilder friend_to_string(CodeFriend self) { - String result = string_make_reserve( GlobalAllocator, 256 ); - friend_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); + friend_to_strbuilder_ref( self, & result ); return result; } -void friend_to_string_ref(CodeFriend self, String* result ) +void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result ) { - string_append_fmt( result, "friend %S", code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "friend %SB", code_to_string(self->Declaration) ); - if ( self->Declaration->Type != CT_Function && self->Declaration->Type != CT_Operator && (* result)[ string_length(* result) - 1 ] != ';' ) + if ( self->Declaration->Type != CT_Function && self->Declaration->Type != CT_Operator && (* result)[ strbuilder_length(* result) - 1 ] != ';' ) { - string_append_strc( result, txt(";") ); + strbuilder_append_str( result, txt(";") ); } if ( self->InlineCmt ) - string_append_fmt( result, " %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " %S", self->InlineCmt->Content ); else - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); } -String fn_to_string(CodeFn self) +StrBuilder fn_to_string(CodeFn self) { - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Function: - fn_to_string_def(self, & result ); + fn_to_strbuilder_def(self, & result ); break; case CT_Function_Fwd: - fn_to_string_fwd(self, & result ); + fn_to_strbuilder_fwd(self, & result ); break; } return result; } -void fn_to_string_def(CodeFn self, String* result ) +void fn_to_strbuilder_def(CodeFn self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export") ); + strbuilder_append_str( result, txt("export") ); if ( self->Attributes ) - string_append_fmt( result, " %S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, " %SB ", attributes_to_string(self->Attributes) ); bool prefix_specs = false; if ( self->Specs ) @@ -518,8 +518,8 @@ void fn_to_string_def(CodeFn self, String* result ) { if ( ! spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); prefix_specs = true; } @@ -527,19 +527,19 @@ void fn_to_string_def(CodeFn self, String* result ) } if ( self->Attributes || prefix_specs ) - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); if ( self->ReturnType ) - string_append_fmt( result, "%S %SC(", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S(", typename_to_string(self->ReturnType), self->Name ); else - string_append_fmt( result, "%SC(", self->Name ); + strbuilder_append_fmt( result, "%S(", self->Name ); if ( self->Params ) - string_append_fmt( result, "%S)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); else - string_append_strc( result, txt(")") ); + strbuilder_append_str( result, txt(")") ); if ( self->Specs ) { @@ -547,22 +547,22 @@ void fn_to_string_def(CodeFn self, String* result ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } - string_append_fmt( result, "\n{\n%S\n}\n", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_string(self->Body) ); } -void fn_to_string_fwd(CodeFn self, String* result ) +void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); b32 prefix_specs = false; if ( self->Specs ) @@ -571,8 +571,8 @@ void fn_to_string_fwd(CodeFn self, String* result ) { if ( ! spec_is_trailing( * spec ) || ! ( * spec != Spec_Pure) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); prefix_specs = true; } @@ -581,20 +581,20 @@ void fn_to_string_fwd(CodeFn self, String* result ) if ( self->Attributes || prefix_specs ) { - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); } if ( self->ReturnType ) - string_append_fmt( result, "%S %SC(", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S(", typename_to_string(self->ReturnType), self->Name ); else - string_append_fmt( result, "%SC(", self->Name ); + strbuilder_append_fmt( result, "%S(", self->Name ); if ( self->Params ) - string_append_fmt( result, "%S)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); else - string_append_strc( result, txt(")") ); + strbuilder_append_str( result, txt(")") ); if ( self->Specs ) { @@ -602,83 +602,83 @@ void fn_to_string_fwd(CodeFn self, String* result ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } if ( self->Specs && specifiers_has(self->Specs, Spec_Pure ) >= 0 ) - string_append_strc( result, txt(" = 0;") ); + strbuilder_append_str( result, txt(" = 0;") ); else if (self->Body) - string_append_fmt( result, " = %S;", body_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB;", body_to_string(self->Body) ); if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); } -String module_to_string(CodeModule self) +StrBuilder module_to_string(CodeModule self) { - String result = string_make_reserve( GlobalAllocator, 64 ); - module_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 64 ); + module_to_strbuilder_ref( self, & result ); return result; } -void module_to_string_ref(CodeModule self, String* result ) +void module_to_strbuilder_ref(CodeModule self, StrBuilder* result ) { if (((scast(u32, ModuleFlag_Export) & scast(u32, self->ModuleFlags)) == scast(u32, ModuleFlag_Export))) - string_append_strc( result, txt("export ")); + strbuilder_append_str( result, txt("export ")); if (((scast(u32, ModuleFlag_Import) & scast(u32, self->ModuleFlags)) == scast(u32, ModuleFlag_Import))) - string_append_strc( result, txt("import ")); + strbuilder_append_str( result, txt("import ")); - string_append_fmt( result, "%SC;\n", self->Name ); + strbuilder_append_fmt( result, "%S;\n", self->Name ); } -String namespace_to_string(CodeNS self) +StrBuilder namespace_to_string(CodeNS self) { - String result = string_make_reserve( GlobalAllocator, 512 ); - namespace_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); + namespace_to_strbuilder_ref( self, & result ); return result; } -void namespace_to_string_ref(CodeNS self, String* result ) +void namespace_to_strbuilder_ref(CodeNS self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_fmt( result, "namespace %SC\n{\n%S\n}\n", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "namespace %S\n{\n%SB\n}\n", self->Name, body_to_string(self->Body) ); } -String code_op_to_string(CodeOperator self) +StrBuilder code_op_to_string(CodeOperator self) { - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Operator: case CT_Operator_Member: - code_op_to_string_def( self, & result ); + code_op_to_strbuilder_def( self, & result ); break; case CT_Operator_Fwd: case CT_Operator_Member_Fwd: - code_op_to_string_fwd( self, & result ); + code_op_to_strbuilder_fwd( self, & result ); break; } return result; } -void code_op_to_string_def(CodeOperator self, String* result ) +void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->Specs ) { @@ -686,25 +686,25 @@ void code_op_to_string_def(CodeOperator self, String* result ) { if ( ! spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } if ( self->Attributes || self->Specs ) { - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); } if ( self->ReturnType ) - string_append_fmt( result, "%S %SC (", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S (", typename_to_string(self->ReturnType), self->Name ); if ( self->Params ) - string_append_fmt( result, "%S)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); else - string_append_strc( result, txt(")") ); + strbuilder_append_str( result, txt(")") ); if ( self->Specs ) { @@ -712,24 +712,24 @@ void code_op_to_string_def(CodeOperator self, String* result ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } - string_append_fmt( result, "\n{\n%S\n}\n" + strbuilder_append_fmt( result, "\n{\n%SB\n}\n" , body_to_string(self->Body) ); } -void code_op_to_string_fwd(CodeOperator self, String* result ) +void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "%S\n", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB\n", attributes_to_string(self->Attributes) ); if ( self->Specs ) { @@ -737,24 +737,24 @@ void code_op_to_string_fwd(CodeOperator self, String* result ) { if ( ! spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } if ( self->Attributes || self->Specs ) { - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); } - string_append_fmt( result, "%S %SC (", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S (", typename_to_string(self->ReturnType), self->Name ); if ( self->Params ) - string_append_fmt( result, "%S)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); else - string_append_fmt( result, ")" ); + strbuilder_append_fmt( result, ")" ); if ( self->Specs ) { @@ -762,34 +762,34 @@ void code_op_to_string_fwd(CodeOperator self, String* result ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } } if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); } -String opcast_to_string(CodeOpCast self) +StrBuilder opcast_to_string(CodeOpCast self) { - String result = string_make_reserve( GlobalAllocator, 128 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( self->Type ) { case CT_Operator_Cast: - opcast_to_string_def(self, & result ); + opcast_to_strbuilder_def(self, & result ); break; case CT_Operator_Cast_Fwd: - opcast_to_string_fwd(self, & result ); + opcast_to_strbuilder_fwd(self, & result ); break; } return result; } -void opcast_to_string_def(CodeOpCast self, String* result ) +void opcast_to_strbuilder_def(CodeOpCast self, StrBuilder* result ) { if ( self->Specs ) { @@ -797,36 +797,36 @@ void opcast_to_string_def(CodeOpCast self, String* result ) { if ( ! spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, "%*s ", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, "%*s ", spec_str.Len, spec_str.Ptr ); } } if ( self->Name.Ptr && self->Name.Len ) - string_append_fmt( result, "%SC operator %S()", self->Name, typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "%S operator %SB()", self->Name, typename_to_string(self->ValueType) ); else - string_append_fmt( result, "operator %S()", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB()", typename_to_string(self->ValueType) ); for ( Specifier* spec = begin_CodeSpecifiers(self->Specs); spec != end_CodeSpecifiers(self->Specs); spec = next_CodeSpecifiers(self->Specs, spec) ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %.*s", spec_str.Len, spec_str.Ptr ); } } - string_append_fmt( result, "\n{\n%S\n}\n", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_string(self->Body) ); return; } if ( self->Name.Ptr && self->Name.Len ) - string_append_fmt( result, "%SC operator %S()\n{\n%S\n}\n", self->Name, typename_to_string(self->ValueType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S operator %SB()\n{\n%SB\n}\n", self->Name, typename_to_string(self->ValueType), body_to_string(self->Body) ); else - string_append_fmt( result, "operator %S()\n{\n%S\n}\n", typename_to_string(self->ValueType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "operator %SB()\n{\n%SB\n}\n", typename_to_string(self->ValueType), body_to_string(self->Body) ); } -void opcast_to_string_fwd(CodeOpCast self, String* result ) +void opcast_to_strbuilder_fwd(CodeOpCast self, StrBuilder* result ) { if ( self->Specs ) { @@ -834,168 +834,168 @@ void opcast_to_string_fwd(CodeOpCast self, String* result ) { if ( ! spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, "%*s ", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, "%*s ", spec_str.Len, spec_str.Ptr ); } } - string_append_fmt( result, "operator %S()", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB()", typename_to_string(self->ValueType) ); for ( Specifier* spec = begin_CodeSpecifiers(self->Specs); spec != end_CodeSpecifiers(self->Specs); spec = next_CodeSpecifiers(self->Specs, spec) ) { if ( spec_is_trailing( * spec ) ) { - StrC spec_str = spec_to_str( * spec ); - string_append_fmt( result, " %*s", spec_str.Len, spec_str.Ptr ); + Str spec_str = spec_to_str( * spec ); + strbuilder_append_fmt( result, " %*s", spec_str.Len, spec_str.Ptr ); } } if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); return; } if ( self->InlineCmt ) - string_append_fmt( result, "operator %S(); %S", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB(); %SB", typename_to_string(self->ValueType) ); else - string_append_fmt( result, "operator %S();\n", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB();\n", typename_to_string(self->ValueType) ); } -String params_to_string(CodeParams self) +StrBuilder params_to_string(CodeParams self) { GEN_ASSERT(self); GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 128 ); - params_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); + params_to_strbuilder_ref( self, & result ); return result; } -void params_to_string_ref( CodeParams self, String* result ) +void params_to_strbuilder_ref( CodeParams self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( self->Macro ) { // Related to parsing: ( , ... ) - string_append_strc( result, self->Macro->Content ); + strbuilder_append_str( result, self->Macro->Content ); // Could also be: ( , ... ) } if ( self->Name.Ptr && self->Name.Len ) { if ( self->ValueType == nullptr ) - string_append_fmt( result, " %SC", self->Name ); + strbuilder_append_fmt( result, " %S", self->Name ); else - string_append_fmt( result, " %S %SC", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, " %SB %S", typename_to_string(self->ValueType), self->Name ); } else if ( self->ValueType ) - string_append_fmt( result, " %S", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, " %SB", typename_to_string(self->ValueType) ); if ( self->PostNameMacro ) { - string_append_fmt( result, " %S", code_to_string(self->PostNameMacro) ); + strbuilder_append_fmt( result, " %SB", code_to_string(self->PostNameMacro) ); } if ( self->Value ) - string_append_fmt( result, " = %S", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); if ( self->NumEntries - 1 > 0 ) { for ( CodeParams param = begin_CodeParams(self->Next); param != end_CodeParams(self->Next); param = next_CodeParams(self->Next, param) ) { - string_append_fmt( result, ", %S", params_to_string(param) ); + strbuilder_append_fmt( result, ", %SB", params_to_string(param) ); } } } -String preprocess_to_string(CodePreprocessCond self) +StrBuilder preprocess_to_string(CodePreprocessCond self) { GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 256 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); switch ( self->Type ) { case CT_Preprocess_If: - preprocess_to_string_if( self, & result ); + preprocess_to_strbuilder_if( self, & result ); break; case CT_Preprocess_IfDef: - preprocess_to_string_ifdef( self, & result ); + preprocess_to_strbuilder_ifdef( self, & result ); break; case CT_Preprocess_IfNotDef: - preprocess_to_string_ifndef( self, & result ); + preprocess_to_strbuilder_ifndef( self, & result ); break; case CT_Preprocess_ElIf: - preprocess_to_string_elif( self, & result ); + preprocess_to_strbuilder_elif( self, & result ); break; case CT_Preprocess_Else: - preprocess_to_string_else( self, & result ); + preprocess_to_strbuilder_else( self, & result ); break; case CT_Preprocess_EndIf: - preprocess_to_string_endif( self, & result ); + preprocess_to_strbuilder_endif( self, & result ); break; } return result; } -void preprocess_to_string_if(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_if(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_fmt( result, "#if %SC", cond->Content ); + strbuilder_append_fmt( result, "#if %S", cond->Content ); } -void preprocess_to_string_ifdef(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_ifdef(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_fmt( result, "#ifdef %SC\n", cond->Content ); + strbuilder_append_fmt( result, "#ifdef %S\n", cond->Content ); } -void preprocess_to_string_ifndef(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_fmt( result, "#ifndef %SC", cond->Content ); + strbuilder_append_fmt( result, "#ifndef %S", cond->Content ); } -void preprocess_to_string_elif(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_elif(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_fmt( result, "#elif %SC\n", cond->Content ); + strbuilder_append_fmt( result, "#elif %S\n", cond->Content ); } -void preprocess_to_string_else(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_else(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_strc( result, txt("#else\n") ); + strbuilder_append_str( result, txt("#else\n") ); } -void preprocess_to_string_endif(CodePreprocessCond cond, String* result ) +void preprocess_to_strbuilder_endif(CodePreprocessCond cond, StrBuilder* result ) { GEN_ASSERT(cond); - string_append_strc( result, txt("#endif\n") ); + strbuilder_append_str( result, txt("#endif\n") ); } -String pragma_to_string(CodePragma self) +StrBuilder pragma_to_string(CodePragma self) { GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 256 ); - pragma_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); + pragma_to_strbuilder_ref( self, & result ); return result; } -void pragma_to_string_ref(CodePragma self, String* result ) +void pragma_to_strbuilder_ref(CodePragma self, StrBuilder* result ) { - string_append_fmt( result, "#pragma %SC\n", self->Content ); + strbuilder_append_fmt( result, "#pragma %S\n", self->Content ); } -String specifiers_to_string(CodeSpecifiers self) +StrBuilder specifiers_to_string(CodeSpecifiers self) { - String result = string_make_reserve( GlobalAllocator, 64 ); - specifiers_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 64 ); + specifiers_to_strbuilder_ref( self, & result ); return result; } -void specifiers_to_string_ref( CodeSpecifiers self, String* result ) +void specifiers_to_strbuilder_ref( CodeSpecifiers self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); @@ -1003,179 +1003,179 @@ void specifiers_to_string_ref( CodeSpecifiers self, String* result ) s32 left = self->NumEntries; while ( left-- ) { - StrC spec = spec_to_str( self->ArrSpecs[idx] ); - string_append_fmt( result, "%.*s ", spec.Len, spec.Ptr ); + Str spec = spec_to_str( self->ArrSpecs[idx] ); + strbuilder_append_fmt( result, "%.*s ", spec.Len, spec.Ptr ); idx++; } } -String struct_to_string(CodeStruct self) +StrBuilder struct_to_string(CodeStruct self) { GEN_ASSERT(self); GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Struct: - struct_to_string_def( self, & result ); + struct_to_strbuilder_def( self, & result ); break; case CT_Struct_Fwd: - struct_to_string_fwd( self, & result ); + struct_to_strbuilder_fwd( self, & result ); break; } return result; } -void struct_to_string_def( CodeStruct self, String* result ) +void struct_to_strbuilder_def( CodeStruct self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("struct ") ); + strbuilder_append_str( result, txt("struct ") ); if ( self->Attributes ) { - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); } if ( self->ParentType ) { - StrC access_level = access_spec_to_str( self->ParentAccess ); + Str access_level = access_spec_to_str( self->ParentAccess ); - string_append_fmt( result, "%SC : %SC %S", self->Name, access_level, typename_to_string(self->ParentType) ); + strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_string(self->ParentType) ); CodeTypename interface = cast(CodeTypename, self->ParentType->Next); if ( interface ) - string_append_strc( result, txt("\n") ); + strbuilder_append_str( result, txt("\n") ); while ( interface ) { - string_append_fmt( result, ", %S", typename_to_string(interface) ); + strbuilder_append_fmt( result, ", %SB", typename_to_string(interface) ); interface = interface->Next ? cast( CodeTypename, interface->Next) : NullCode; } } else if ( self->Name.Len ) { - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); } if ( self->InlineCmt ) { - string_append_fmt( result, " // %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); } - string_append_fmt( result, "\n{\n%S\n}", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_string(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } -void struct_to_string_fwd( CodeStruct self, String* result ) +void struct_to_strbuilder_fwd( CodeStruct self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "struct %S %SC", attributes_to_string(self->Attributes), self->Name ); + strbuilder_append_fmt( result, "struct %SB %S", attributes_to_string(self->Attributes), self->Name ); - else string_append_fmt( result, "struct %SC", self->Name ); + else strbuilder_append_fmt( result, "struct %S", self->Name ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) { if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content ); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); else - string_append_strc( result, txt( ";\n") ); + strbuilder_append_str( result, txt( ";\n") ); } } -String template_to_string(CodeTemplate self) +StrBuilder template_to_string(CodeTemplate self) { GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 1024 ); - template_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 1024 ); + template_to_strbuilder_ref( self, & result ); return result; } -void template_to_string_ref(CodeTemplate self, String* result ) +void template_to_strbuilder_ref(CodeTemplate self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Params ) - string_append_fmt( result, "template< %S >\n%S", params_to_string(self->Params), code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "template< %SB >\n%SB", params_to_string(self->Params), code_to_string(self->Declaration) ); else - string_append_fmt( result, "template<>\n%S", code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "template<>\n%SB", code_to_string(self->Declaration) ); } -String typedef_to_string(CodeTypedef self) +StrBuilder typedef_to_string(CodeTypedef self) { - String result = string_make_reserve( GlobalAllocator, 128 ); - typedef_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); + typedef_to_strbuilder_ref( self, & result ); return result; } -void typedef_to_string_ref(CodeTypedef self, String* result ) +void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("typedef ")); + strbuilder_append_str( result, txt("typedef ")); // Determines if the typedef is a function typename if ( self->UnderlyingType->ReturnType ) - string_append_string( result, code_to_string(self->UnderlyingType) ); + strbuilder_append_string( result, code_to_string(self->UnderlyingType) ); else - string_append_fmt( result, "%S %SC", code_to_string(self->UnderlyingType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", code_to_string(self->UnderlyingType), self->Name ); if ( self->UnderlyingType->Type == CT_Typename && self->UnderlyingType->ArrExpr ) { - string_append_fmt( result, "[ %S ];", code_to_string(self->UnderlyingType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ];", code_to_string(self->UnderlyingType->ArrExpr) ); Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; while ( next_arr_expr ) { - string_append_fmt( result, "[ %S ];", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ];", code_to_string(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } else { - string_append_strc( result, txt(";") ); + strbuilder_append_str( result, txt(";") ); } if ( self->InlineCmt ) - string_append_fmt( result, " %SC", self->InlineCmt->Content); + strbuilder_append_fmt( result, " %S", self->InlineCmt->Content); else - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); } -String typename_to_string(CodeTypename self) +StrBuilder typename_to_string(CodeTypename self) { - String result = string_make_strc( GlobalAllocator, txt("") ); - typename_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_str( GlobalAllocator, txt("") ); + typename_to_strbuilder_ref( self, & result ); return result; } -void typename_to_string_ref(CodeTypename self, String* result ) +void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) { #if defined(GEN_USE_NEW_TYPENAME_PARSING) if ( self->ReturnType && self->Params ) { if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); else { if ( self->Specs ) - string_append_fmt( result, "%S ( %SC ) ( %S ) %S", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ( %S ) ( %SB ) %SB", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); else - string_append_fmt( result, "%S ( %SC ) ( %S )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB ( %S ) ( %SB )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); } break; @@ -1184,13 +1184,13 @@ void typename_to_string_ref(CodeTypename self, String* result ) if ( self->ReturnType && self->Params ) { if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); else { if ( self->Specs ) - string_append_fmt( result, "%S %SC ( %S ) %S", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB %S ( %SB ) %SB", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); else - string_append_fmt( result, "%S %SC ( %S )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB %S ( %SB )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); } return; @@ -1198,55 +1198,55 @@ void typename_to_string_ref(CodeTypename self, String* result ) #endif if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); switch ( self->TypeTag ) { - case Tag_Class : string_append_strc( result, txt("class ")); break; - case Tag_Enum : string_append_strc( result, txt("enum ")); break; - case Tag_Struct : string_append_strc( result, txt("struct ")); break; - case Tag_Union : string_append_strc( result, txt("union ")); break; + case Tag_Class : strbuilder_append_str( result, txt("class ")); break; + case Tag_Enum : strbuilder_append_str( result, txt("enum ")); break; + case Tag_Struct : strbuilder_append_str( result, txt("struct ")); break; + case Tag_Union : strbuilder_append_str( result, txt("union ")); break; default: break; } if ( self->Specs ) - string_append_fmt( result, "%SC %S", self->Name, specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%S %SB", self->Name, specifiers_to_string(self->Specs) ); else - string_append_fmt( result, "%SC", self->Name ); + strbuilder_append_fmt( result, "%S", self->Name ); if ( self->IsParamPack ) - string_append_strc( result, txt("...")); + strbuilder_append_str( result, txt("...")); } -String union_to_string(CodeUnion self) +StrBuilder union_to_string(CodeUnion self) { - String result = string_make_reserve( GlobalAllocator, 512 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) { case CT_Union: - union_to_string_def( self, & result ); + union_to_strbuilder_def( self, & result ); break; case CT_Union_Fwd: - union_to_string_fwd( self, & result ); + union_to_strbuilder_fwd( self, & result ); break; } return result; } -void union_to_string_def(CodeUnion self, String* result ) +void union_to_strbuilder_def(CodeUnion self, StrBuilder* result ) { if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("union ") ); + strbuilder_append_str( result, txt("union ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->Name.Len ) { - string_append_fmt( result, "%SC\n{\n%S\n}" + strbuilder_append_fmt( result, "%S\n{\n%SB\n}" , self->Name , body_to_string(self->Body) ); @@ -1254,111 +1254,111 @@ void union_to_string_def(CodeUnion self, String* result ) else { // Anonymous union - string_append_fmt( result, "\n{\n%S\n}" + strbuilder_append_fmt( result, "\n{\n%SB\n}" , body_to_string(self->Body) ); } if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } -void union_to_string_fwd(CodeUnion self, String* result ) +void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); - string_append_strc( result, txt("union ") ); + strbuilder_append_str( result, txt("union ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->Name.Len ) { - string_append_fmt( result, "%SC", self->Name); + strbuilder_append_fmt( result, "%S", self->Name); } if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) - string_append_strc( result, txt(";\n")); + strbuilder_append_str( result, txt(";\n")); } -String using_to_string(CodeUsing self) +StrBuilder using_to_string(CodeUsing self) { GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 128 ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( self->Type ) { case CT_Using: - using_to_string_ref( self, & result ); + using_to_strbuilder_ref( self, & result ); break; case CT_Using_Namespace: - using_to_string_ns( self, & result ); + using_to_strbuilder_ns( self, & result ); break; } return result; } -void using_to_string_ref(CodeUsing self, String* result ) +void using_to_strbuilder_ref(CodeUsing self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - string_append_fmt( result, "%S ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); if ( self->UnderlyingType ) { - string_append_fmt( result, "using %SC = %S", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "using %S = %SB", self->Name, typename_to_string(self->UnderlyingType) ); if ( self->UnderlyingType->ArrExpr ) { - string_append_fmt( result, "[ %S ]", code_to_string(self->UnderlyingType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->UnderlyingType->ArrExpr) ); Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; while ( next_arr_expr ) { - string_append_fmt( result, "[ %S ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } - string_append_strc( result, txt(";") ); + strbuilder_append_str( result, txt(";") ); } else - string_append_fmt( result, "using %SC;", self->Name ); + strbuilder_append_fmt( result, "using %S;", self->Name ); if ( self->InlineCmt ) - string_append_fmt( result, " %SC\n", self->InlineCmt->Content ); + strbuilder_append_fmt( result, " %S\n", self->InlineCmt->Content ); else - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); } inline -void using_to_string_ns(CodeUsing self, String* result ) +void using_to_strbuilder_ns(CodeUsing self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); if ( self->InlineCmt ) - string_append_fmt( result, "using namespace $SC; %SC", self->Name, self->InlineCmt->Content ); + strbuilder_append_fmt( result, "using namespace $SC; %S", self->Name, self->InlineCmt->Content ); else - string_append_fmt( result, "using namespace %SC;\n", self->Name ); + strbuilder_append_fmt( result, "using namespace %S;\n", self->Name ); } inline -String var_to_string(CodeVar self) +StrBuilder var_to_string(CodeVar self) { GEN_ASSERT(self); - String result = string_make_reserve( GlobalAllocator, 256 ); - var_to_string_ref( self, & result ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); + var_to_strbuilder_ref( self, & result ); return result; } neverinline -void var_to_string_ref(CodeVar self, String* result ) +void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) { GEN_ASSERT(self); GEN_ASSERT(result); @@ -1367,18 +1367,18 @@ void var_to_string_ref(CodeVar self, String* result ) // Its a comma-separated variable ( a NextVar ) if ( self->Specs ) - string_append_fmt( result, "%S ", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ", specifiers_to_string(self->Specs) ); - string_append_strc( result, self->Name ); + strbuilder_append_str( result, self->Name ); if ( self->ValueType->ArrExpr ) { - string_append_fmt( result, "[ %S ]", code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - string_append_fmt( result, "[ %S ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } @@ -1386,107 +1386,107 @@ void var_to_string_ref(CodeVar self, String* result ) if ( self->Value ) { if ( self->VarParenthesizedInit ) - string_append_fmt( result, "( %S ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); else - string_append_fmt( result, " = %S", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); } // Keep the chain going... if ( self->NextVar ) - string_append_fmt( result, ", %S", var_to_string(self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_string(self->NextVar) ); if ( self->VarParenthesizedInit ) - string_append_strc( result, txt(" )")); + strbuilder_append_str( result, txt(" )")); return; } if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) - string_append_strc( result, txt("export ") ); + strbuilder_append_str( result, txt("export ") ); if ( self->Attributes || self->Specs ) { if ( self->Attributes ) - string_append_fmt( result, "%S ", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ", specifiers_to_string(self->Specs) ); if ( self->Specs ) - string_append_fmt( result, "%S\n", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB\n", specifiers_to_string(self->Specs) ); - string_append_fmt( result, "%S %SC", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", typename_to_string(self->ValueType), self->Name ); if ( self->ValueType->ArrExpr ) { - string_append_fmt( result, "[ %S ]", code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - string_append_fmt( result, "[ %S ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } if ( self->BitfieldSize ) - string_append_fmt( result, " : %S", code_to_string(self->BitfieldSize) ); + strbuilder_append_fmt( result, " : %SB", code_to_string(self->BitfieldSize) ); if ( self->Value ) { if ( self->VarParenthesizedInit ) - string_append_fmt( result, "( %S ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); else - string_append_fmt( result, " = %S", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); } if ( self->NextVar ) - string_append_fmt( result, ", %S", var_to_string(self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_string(self->NextVar) ); if ( self->VarParenthesizedInit ) - string_append_strc( result, txt(" )")); + strbuilder_append_str( result, txt(" )")); if ( self->InlineCmt ) - string_append_fmt( result, "; %SC", self->InlineCmt->Content); + strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content); else - string_append_strc( result, txt(";\n") ); + strbuilder_append_str( result, txt(";\n") ); return; } if ( self->BitfieldSize ) - string_append_fmt( result, "%S %SC : %S", typename_to_string(self->ValueType), self->Name, code_to_string(self->BitfieldSize) ); + strbuilder_append_fmt( result, "%SB %S : %SB", typename_to_string(self->ValueType), self->Name, code_to_string(self->BitfieldSize) ); else if ( self->ValueType->ArrExpr ) { - string_append_fmt( result, "%S %SC[ %S ]", typename_to_string(self->ValueType), self->Name, code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "%SB %S[ %SB ]", typename_to_string(self->ValueType), self->Name, code_to_string(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - string_append_fmt( result, "[ %S ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } else - string_append_fmt( result, "%S %SC", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", typename_to_string(self->ValueType), self->Name ); if ( self->Value ) { if ( self->VarParenthesizedInit ) - string_append_fmt( result, "( %S ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); else - string_append_fmt( result, " = %S", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); } if ( self->NextVar ) - string_append_fmt( result, ", %S", var_to_string( self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_string( self->NextVar) ); if ( self->VarParenthesizedInit ) - string_append_strc( result, txt(" )")); + strbuilder_append_str( result, txt(" )")); - string_append_strc( result, txt(";") ); + strbuilder_append_str( result, txt(";") ); if ( self->InlineCmt ) - string_append_fmt( result, " %SC", self->InlineCmt->Content); + strbuilder_append_fmt( result, " %S", self->InlineCmt->Content); else - string_append_strc( result, txt("\n")); + strbuilder_append_str( result, txt("\n")); } diff --git a/base/components/code_types.hpp b/base/components/code_types.hpp index 22ae89e..04f6521 100644 --- a/base/components/code_types.hpp +++ b/base/components/code_types.hpp @@ -19,24 +19,24 @@ void body_append ( CodeBody body, Code other ); void body_append_body ( CodeBody body, CodeBody other ); -String body_to_string ( CodeBody body ); -void body_to_string_ref ( CodeBody body, String* result ); -void body_to_string_export( CodeBody body, String* result ); +StrBuilder body_to_string ( CodeBody body ); +void body_to_strbuilder_ref ( CodeBody body, StrBuilder* result ); +void body_to_strbuilder_export( CodeBody body, StrBuilder* result ); Code begin_CodeBody( CodeBody body); Code end_CodeBody ( CodeBody body ); Code next_CodeBody ( CodeBody body, Code entry_iter ); void class_add_interface( CodeClass self, CodeTypename interface ); -String class_to_string ( CodeClass self ); -void class_to_string_def( CodeClass self, String* result ); -void class_to_string_fwd( CodeClass self, String* result ); +StrBuilder class_to_string ( CodeClass self ); +void class_to_strbuilder_def( CodeClass self, StrBuilder* result ); +void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ); void params_append (CodeParams params, CodeParams param ); CodeParams params_get (CodeParams params, s32 idx); bool params_has_entries (CodeParams params ); -String params_to_string (CodeParams params ); -void params_to_string_ref(CodeParams params, String* result ); +StrBuilder params_to_string (CodeParams params ); +void params_to_strbuilder_ref(CodeParams params, StrBuilder* result ); CodeParams begin_CodeParams(CodeParams params); CodeParams end_CodeParams (CodeParams params); @@ -45,100 +45,100 @@ CodeParams next_CodeParams (CodeParams params, CodeParams entry_iter); bool specifiers_append (CodeSpecifiers specifiers, Specifier spec); s32 specifiers_has (CodeSpecifiers specifiers, Specifier spec); s32 specifiers_remove (CodeSpecifiers specifiers, Specifier to_remove ); -String specifiers_to_string (CodeSpecifiers specifiers); -void specifiers_to_string_ref(CodeSpecifiers specifiers, String* result); +StrBuilder specifiers_to_string (CodeSpecifiers specifiers); +void specifiers_to_strbuilder_ref(CodeSpecifiers specifiers, StrBuilder* result); Specifier* begin_CodeSpecifiers(CodeSpecifiers specifiers); Specifier* end_CodeSpecifiers (CodeSpecifiers specifiers); Specifier* next_CodeSpecifiers (CodeSpecifiers specifiers, Specifier* spec_iter); void struct_add_interface(CodeStruct self, CodeTypename interface); -String struct_to_string (CodeStruct self); -void struct_to_string_fwd(CodeStruct self, String* result); -void struct_to_string_def(CodeStruct self, String* result); +StrBuilder struct_to_string (CodeStruct self); +void struct_to_strbuilder_fwd(CodeStruct self, StrBuilder* result); +void struct_to_strbuilder_def(CodeStruct self, StrBuilder* result); -String attributes_to_string (CodeAttributes attributes); -void attributes_to_string_ref(CodeAttributes attributes, String* result); +StrBuilder attributes_to_string (CodeAttributes attributes); +void attributes_to_strbuilder_ref(CodeAttributes attributes, StrBuilder* result); -String comment_to_string (CodeComment comment ); -void comment_to_string_ref(CodeComment comment, String* result ); +StrBuilder comment_to_string (CodeComment comment ); +void comment_to_strbuilder_ref(CodeComment comment, StrBuilder* result ); -String constructor_to_string (CodeConstructor constructor); -void constructor_to_string_def(CodeConstructor constructor, String* result ); -void constructor_to_string_fwd(CodeConstructor constructor, String* result ); +StrBuilder constructor_to_string (CodeConstructor constructor); +void constructor_to_strbuilder_def(CodeConstructor constructor, StrBuilder* result ); +void constructor_to_strbuilder_fwd(CodeConstructor constructor, StrBuilder* result ); -String define_to_string (CodeDefine self); -void define_to_string_ref(CodeDefine self, String* result); +StrBuilder define_to_string (CodeDefine self); +void define_to_strbuilder_ref(CodeDefine self, StrBuilder* result); -String destructor_to_string (CodeDestructor destructor); -void destructor_to_string_def(CodeDestructor destructor, String* result ); -void destructor_to_string_fwd(CodeDestructor destructor, String* result ); +StrBuilder destructor_to_string (CodeDestructor destructor); +void destructor_to_strbuilder_def(CodeDestructor destructor, StrBuilder* result ); +void destructor_to_strbuilder_fwd(CodeDestructor destructor, StrBuilder* result ); -String enum_to_string (CodeEnum self); -void enum_to_string_def (CodeEnum self, String* result ); -void enum_to_string_fwd (CodeEnum self, String* result ); -void enum_to_string_class_def(CodeEnum self, String* result ); -void enum_to_string_class_fwd(CodeEnum self, String* result ); +StrBuilder enum_to_string (CodeEnum self); +void enum_to_strbuilder_def (CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_fwd (CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_class_def(CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ); -String exec_to_string (CodeExec exec); -void exec_to_string_ref(CodeExec exec, String* result); +StrBuilder exec_to_string (CodeExec exec); +void exec_to_strbuilder_ref(CodeExec exec, StrBuilder* result); -void extern_to_string(CodeExtern self, String* result); +void extern_to_string(CodeExtern self, StrBuilder* result); -String include_to_string (CodeInclude self); -void include_to_string_ref(CodeInclude self, String* result); +StrBuilder include_to_string (CodeInclude self); +void include_to_strbuilder_ref(CodeInclude self, StrBuilder* result); -String friend_to_string (CodeFriend self); -void friend_to_string_ref(CodeFriend self, String* result); +StrBuilder friend_to_string (CodeFriend self); +void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result); -String fn_to_string (CodeFn self); -void fn_to_string_def(CodeFn self, String* result); -void fn_to_string_fwd(CodeFn self, String* result); +StrBuilder fn_to_string (CodeFn self); +void fn_to_strbuilder_def(CodeFn self, StrBuilder* result); +void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result); -String module_to_string (CodeModule self); -void module_to_string_ref(CodeModule self, String* result); +StrBuilder module_to_string (CodeModule self); +void module_to_strbuilder_ref(CodeModule self, StrBuilder* result); -String namespace_to_string (CodeNS self); -void namespace_to_string_ref(CodeNS self, String* result); +StrBuilder namespace_to_string (CodeNS self); +void namespace_to_strbuilder_ref(CodeNS self, StrBuilder* result); -String code_op_to_string (CodeOperator self); -void code_op_to_string_fwd(CodeOperator self, String* result ); -void code_op_to_string_def(CodeOperator self, String* result ); +StrBuilder code_op_to_string (CodeOperator self); +void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ); +void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ); -String opcast_to_string (CodeOpCast op_cast ); -void opcast_to_string_def(CodeOpCast op_cast, String* result ); -void opcast_to_string_fwd(CodeOpCast op_cast, String* result ); +StrBuilder opcast_to_string (CodeOpCast op_cast ); +void opcast_to_strbuilder_def(CodeOpCast op_cast, StrBuilder* result ); +void opcast_to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder* result ); -String pragma_to_string (CodePragma self); -void pragma_to_string_ref(CodePragma self, String* result); +StrBuilder pragma_to_string (CodePragma self); +void pragma_to_strbuilder_ref(CodePragma self, StrBuilder* result); -String preprocess_to_string (CodePreprocessCond cond); -void preprocess_to_string_if (CodePreprocessCond cond, String* result ); -void preprocess_to_string_ifdef (CodePreprocessCond cond, String* result ); -void preprocess_to_string_ifndef(CodePreprocessCond cond, String* result ); -void preprocess_to_string_elif (CodePreprocessCond cond, String* result ); -void preprocess_to_string_else (CodePreprocessCond cond, String* result ); -void preprocess_to_string_endif (CodePreprocessCond cond, String* result ); +StrBuilder preprocess_to_string (CodePreprocessCond cond); +void preprocess_to_strbuilder_if (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_elif (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_else (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_endif (CodePreprocessCond cond, StrBuilder* result ); -String template_to_string (CodeTemplate self); -void template_to_string_ref(CodeTemplate self, String* result); +StrBuilder template_to_string (CodeTemplate self); +void template_to_strbuilder_ref(CodeTemplate self, StrBuilder* result); -String typename_to_string (CodeTypename self); -void typename_to_string_ref(CodeTypename self, String* result); +StrBuilder typename_to_string (CodeTypename self); +void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result); -String typedef_to_string (CodeTypedef self); -void typedef_to_string_ref(CodeTypedef self, String* result ); +StrBuilder typedef_to_string (CodeTypedef self); +void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ); -String union_to_string (CodeUnion self); -void union_to_string_def(CodeUnion self, String* result); -void union_to_string_fwd(CodeUnion self, String* result); +StrBuilder union_to_string (CodeUnion self); +void union_to_strbuilder_def(CodeUnion self, StrBuilder* result); +void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result); -String using_to_string (CodeUsing op_cast ); -void using_to_string_ref(CodeUsing op_cast, String* result ); -void using_to_string_ns (CodeUsing op_cast, String* result ); +StrBuilder using_to_string (CodeUsing op_cast ); +void using_to_strbuilder_ref(CodeUsing op_cast, StrBuilder* result ); +void using_to_strbuilder_ns (CodeUsing op_cast, StrBuilder* result ); -String var_to_string (CodeVar self); -void var_to_string_ref(CodeVar self, String* result); +StrBuilder var_to_string (CodeVar self); +void var_to_strbuilder_ref(CodeVar self, StrBuilder* result); #pragma endregion Code Type C-Interface @@ -157,9 +157,9 @@ struct CodeBody forceinline void append( Code other ) { return body_append( *this, other ); } forceinline void append( CodeBody body ) { return body_append(*this, body); } forceinline bool has_entries() { return code_has_entries(* this); } - forceinline String to_string() { return body_to_string(* this); } - forceinline void to_string( String& result ) { return body_to_string_ref(* this, & result ); } - forceinline void to_string_export( String& result ) { return body_to_string_export(* this, & result); } + forceinline StrBuilder to_string() { return body_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return body_to_strbuilder_ref(* this, & result ); } + forceinline void to_strbuilder_export( StrBuilder& result ) { return body_to_strbuilder_export(* this, & result); } forceinline Code begin() { return begin_CodeBody(* this); } forceinline Code end() { return end_CodeBody(* this); } @@ -175,9 +175,9 @@ struct CodeClass #if ! GEN_C_LIKE_CPP Using_Code( CodeClass ); forceinline void add_interface( CodeType interface ); - forceinline String to_string(); - forceinline void to_string_def( String& result ); - forceinline void to_string_fwd( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_strbuilder_def( StrBuilder& result ); + forceinline void to_strbuilder_fwd( StrBuilder& result ); #endif Using_CodeOps( CodeClass ); forceinline operator Code() { return * rcast( Code*, this ); } @@ -195,8 +195,8 @@ struct CodeParams forceinline void append( CodeParams other ); forceinline CodeParams get( s32 idx ); forceinline bool has_entries(); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); forceinline CodeParams begin() { return begin_CodeParams(* this); } forceinline CodeParams end() { return end_CodeParams(* this); } @@ -219,8 +219,8 @@ struct CodeSpecifiers bool append( Specifier spec ) { return specifiers_append(* this, spec); } s32 has( Specifier spec ) { return specifiers_has(* this, spec); } s32 remove( Specifier to_remove ) { return specifiers_remove(* this, to_remove); } - String to_string() { return specifiers_to_string(* this ); } - void to_string( String& result ) { return specifiers_to_string_ref(* this, & result); } + StrBuilder to_string() { return specifiers_to_string(* this ); } + void to_string( StrBuilder& result ) { return specifiers_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeSpecifiers); forceinline operator Code() { return { (AST*) ast }; } @@ -235,8 +235,8 @@ struct CodeAttributes { #if ! GEN_C_LIKE_CPP Using_Code(CodeAttributes); - forceinline String to_string() { return attributes_to_string(* this); } - forceinline void to_string(String& result) { return attributes_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return attributes_to_string(* this); } + forceinline void to_string(StrBuilder& result) { return attributes_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeAttributes); operator Code(); @@ -250,8 +250,8 @@ struct CodeComment { #if ! GEN_C_LIKE_CPP Using_Code(CodeComment); - forceinline String to_string() { return comment_to_string (* this); } - forceinline void to_string(String& result) { return comment_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return comment_to_string (* this); } + forceinline void to_string(StrBuilder& result) { return comment_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeComment); operator Code(); @@ -263,9 +263,9 @@ struct CodeConstructor { #if ! GEN_C_LIKE_CPP Using_Code( CodeConstructor ); - forceinline String to_string() { return constructor_to_string(* this); } - forceinline void to_string_def( String& result ) { return constructor_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return constructor_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return constructor_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return constructor_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return constructor_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeConstructor); operator Code(); @@ -277,8 +277,8 @@ struct CodeDefine { #if ! GEN_C_LIKE_CPP Using_Code( CodeDefine ); - forceinline String to_string() { return define_to_string(* this); } - forceinline void to_string( String& result ) { return define_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return define_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return define_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeDefine); operator Code(); @@ -290,9 +290,9 @@ struct CodeDestructor { #if ! GEN_C_LIKE_CPP Using_Code( CodeDestructor ); - forceinline String to_string() { return destructor_to_string(* this); } - forceinline void to_string_def( String& result ) { return destructor_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return destructor_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return destructor_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return destructor_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return destructor_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeDestructor); operator Code(); @@ -304,11 +304,11 @@ struct CodeEnum { #if ! GEN_C_LIKE_CPP Using_Code( CodeEnum ); - forceinline String to_string() { return enum_to_string(* this); } - forceinline void to_string_def( String& result ) { return enum_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return enum_to_string_fwd(* this, & result); } - forceinline void to_string_class_def( String& result ) { return enum_to_string_class_def(* this, & result); } - forceinline void to_string_class_fwd( String& result ) { return enum_to_string_class_fwd(* this, & result); } + forceinline StrBuilder to_string() { return enum_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return enum_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return enum_to_strbuilder_fwd(* this, & result); } + forceinline void to_strbuilder_class_def( StrBuilder& result ) { return enum_to_strbuilder_class_def(* this, & result); } + forceinline void to_strbuilder_class_fwd( StrBuilder& result ) { return enum_to_strbuilder_class_fwd(* this, & result); } #endif Using_CodeOps(CodeEnum); operator Code(); @@ -320,8 +320,8 @@ struct CodeExec { #if ! GEN_C_LIKE_CPP Using_Code(CodeExec); - forceinline String to_string() { return exec_to_string(* this); } - forceinline void to_string(String& result) { return exec_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return exec_to_string(* this); } + forceinline void to_string(StrBuilder& result) { return exec_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeExec); operator Code(); @@ -334,7 +334,7 @@ struct CodeExpr { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr* operator->(); @@ -345,7 +345,7 @@ struct CodeExpr_Assign { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Assign ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Assign* operator->(); @@ -356,7 +356,7 @@ struct CodeExpr_Alignof { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Alignof ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Alignof* operator->(); @@ -367,7 +367,7 @@ struct CodeExpr_Binary { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Binary ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Binary* operator->(); @@ -378,7 +378,7 @@ struct CodeExpr_CStyleCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_CStyleCast ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_CStyleCast* operator->(); @@ -389,7 +389,7 @@ struct CodeExpr_FunctionalCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_FunctionalCast ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_FunctionalCast* operator->(); @@ -400,7 +400,7 @@ struct CodeExpr_CppCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_CppCast ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_CppCast* operator->(); @@ -411,7 +411,7 @@ struct CodeExpr_Element { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Element ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Element* operator->(); @@ -422,7 +422,7 @@ struct CodeExpr_ProcCall { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_ProcCall ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_ProcCall* operator->(); @@ -433,7 +433,7 @@ struct CodeExpr_Decltype { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Decltype ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Decltype* operator->(); @@ -444,7 +444,7 @@ struct CodeExpr_Comma { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Comma ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Comma* operator->(); @@ -455,7 +455,7 @@ struct CodeExpr_AMS { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_AMS ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_AMS* operator->(); @@ -466,7 +466,7 @@ struct CodeExpr_Sizeof { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Sizeof ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Sizeof* operator->(); @@ -477,7 +477,7 @@ struct CodeExpr_Subscript { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Subscript ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Subscript* operator->(); @@ -488,7 +488,7 @@ struct CodeExpr_Ternary { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Ternary ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_Ternary* operator->(); @@ -499,7 +499,7 @@ struct CodeExpr_UnaryPrefix { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_UnaryPrefix ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Expr_UnaryPrefix* operator->(); @@ -510,7 +510,7 @@ struct CodeExpr_UnaryPostfix { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_UnaryPostfix ); - forceinline void to_string( String& result ); + forceinline void to_string( StrBuilder& result ); #endif AST* raw(); operator Code(); @@ -523,7 +523,7 @@ struct CodeExtern { #if ! GEN_C_LIKE_CPP Using_Code( CodeExtern ); - forceinline void to_string( String& result ) { return extern_to_string(* this, & result); } + forceinline void to_string( StrBuilder& result ) { return extern_to_string(* this, & result); } #endif Using_CodeOps(CodeExtern); operator Code(); @@ -535,8 +535,8 @@ struct CodeInclude { #if ! GEN_C_LIKE_CPP Using_Code( CodeInclude ); - String to_string() { return include_to_string(* this); } - forceinline void to_string( String& result ) { return include_to_string_ref(* this, & result); } + StrBuilder to_string() { return include_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return include_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeInclude); operator Code(); @@ -548,8 +548,8 @@ struct CodeFriend { #if ! GEN_C_LIKE_CPP Using_Code( CodeFriend ); - forceinline String to_string() { return friend_to_string(* this); } - forceinline void to_string( String& result ) { return friend_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return friend_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return friend_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeFriend); operator Code(); @@ -561,9 +561,9 @@ struct CodeFn { #if ! GEN_C_LIKE_CPP Using_Code( CodeFn ); - forceinline String to_string() { return fn_to_string(* this); } - forceinline void to_string_def( String& result ) { return fn_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return fn_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return fn_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return fn_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return fn_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeFn); operator Code(); @@ -575,8 +575,8 @@ struct CodeModule { #if ! GEN_C_LIKE_CPP Using_Code( CodeModule ); - forceinline String to_string() { return module_to_string(* this); } - forceinline void to_string( String& result ) { return module_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return module_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return module_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeModule); operator Code(); @@ -588,8 +588,8 @@ struct CodeNS { #if ! GEN_C_LIKE_CPP Using_Code( CodeNS ); - forceinline String to_string() { return namespace_to_string(* this); } - forceinline void to_string( String& result ) { return namespace_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return namespace_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return namespace_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeNS); operator Code(); @@ -601,9 +601,9 @@ struct CodeOperator { #if ! GEN_C_LIKE_CPP Using_Code( CodeOperator ); - forceinline String to_string() { return code_op_to_string(* this); } - forceinline void to_string_def( String& result ) { return code_op_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return code_op_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return code_op_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return code_op_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return code_op_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeOperator); operator Code(); @@ -615,9 +615,9 @@ struct CodeOpCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeOpCast ); - forceinline String to_string() { return opcast_to_string(* this); } - forceinline void to_string_def( String& result ) { return opcast_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return opcast_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return opcast_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return opcast_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return opcast_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeOpCast); operator Code(); @@ -629,8 +629,8 @@ struct CodePragma { #if ! GEN_C_LIKE_CPP Using_Code( CodePragma ); - forceinline String to_string() { return pragma_to_string(* this); } - forceinline void to_string( String& result ) { return pragma_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return pragma_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return pragma_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodePragma ); operator Code(); @@ -642,13 +642,13 @@ struct CodePreprocessCond { #if ! GEN_C_LIKE_CPP Using_Code( CodePreprocessCond ); - forceinline String to_string() { return preprocess_to_string(* this); } - forceinline void to_string_if( String& result ) { return preprocess_to_string_if(* this, & result); } - forceinline void to_string_ifdef( String& result ) { return preprocess_to_string_ifdef(* this, & result); } - forceinline void to_string_ifndef( String& result ) { return preprocess_to_string_ifndef(* this, & result); } - forceinline void to_string_elif( String& result ) { return preprocess_to_string_elif(* this, & result); } - forceinline void to_string_else( String& result ) { return preprocess_to_string_else(* this, & result); } - forceinline void to_string_endif( String& result ) { return preprocess_to_string_endif(* this, & result); } + forceinline StrBuilder to_string() { return preprocess_to_string(* this); } + forceinline void to_strbuilder_if( StrBuilder& result ) { return preprocess_to_strbuilder_if(* this, & result); } + forceinline void to_strbuilder_ifdef( StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(* this, & result); } + forceinline void to_strbuilder_ifndef( StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(* this, & result); } + forceinline void to_strbuilder_elif( StrBuilder& result ) { return preprocess_to_strbuilder_elif(* this, & result); } + forceinline void to_strbuilder_else( StrBuilder& result ) { return preprocess_to_strbuilder_else(* this, & result); } + forceinline void to_strbuilder_endif( StrBuilder& result ) { return preprocess_to_strbuilder_endif(* this, & result); } #endif Using_CodeOps( CodePreprocessCond ); operator Code(); @@ -661,8 +661,8 @@ struct CodeStmt { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt* operator->(); @@ -673,8 +673,8 @@ struct CodeStmt_Break { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Break ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Break* operator->(); @@ -685,8 +685,8 @@ struct CodeStmt_Case { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Case ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Case* operator->(); @@ -697,8 +697,8 @@ struct CodeStmt_Continue { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Continue ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Continue* operator->(); @@ -709,8 +709,8 @@ struct CodeStmt_Decl { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Decl ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Decl* operator->(); @@ -721,8 +721,8 @@ struct CodeStmt_Do { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Do ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Do* operator->(); @@ -733,8 +733,8 @@ struct CodeStmt_Expr { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Expr ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Expr* operator->(); @@ -745,8 +745,8 @@ struct CodeStmt_Else { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Else ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Else* operator->(); @@ -757,8 +757,8 @@ struct CodeStmt_If { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_If ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_If* operator->(); @@ -769,8 +769,8 @@ struct CodeStmt_For { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_For ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_For* operator->(); @@ -781,8 +781,8 @@ struct CodeStmt_Goto { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Goto ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Goto* operator->(); @@ -793,8 +793,8 @@ struct CodeStmt_Label { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Label ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Label* operator->(); @@ -805,8 +805,8 @@ struct CodeStmt_Switch { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Switch ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_Switch* operator->(); @@ -817,8 +817,8 @@ struct CodeStmt_While { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_While ); - forceinline String to_string(); - forceinline void to_string( String& result ); + forceinline StrBuilder to_string(); + forceinline void to_string( StrBuilder& result ); #endif operator Code(); AST_Stmt_While* operator->(); @@ -830,8 +830,8 @@ struct CodeTemplate { #if ! GEN_C_LIKE_CPP Using_Code( CodeTemplate ); - forceinline String to_string() { return template_to_string(* this); } - forceinline void to_string( String& result ) { return template_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return template_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return template_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTemplate ); operator Code(); @@ -843,8 +843,8 @@ struct CodeTypename { #if ! GEN_C_LIKE_CPP Using_Code( CodeTypename ); - forceinline String to_string() { return typename_to_string(* this); } - forceinline void to_string( String& result ) { return typename_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return typename_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return typename_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTypename ); operator Code(); @@ -856,8 +856,8 @@ struct CodeTypedef { #if ! GEN_C_LIKE_CPP Using_Code( CodeTypedef ); - forceinline String to_string() { return typedef_to_string(* this); } - forceinline void to_string( String& result ) { return typedef_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return typedef_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return typedef_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTypedef ); operator Code(); @@ -869,9 +869,9 @@ struct CodeUnion { #if ! GEN_C_LIKE_CPP Using_Code( CodeUnion ); - forceinline String to_string() { return union_to_string(* this); } - forceinline void to_string_def( String& result ) { return union_to_string_def(* this, & result); } - forceinline void to_string_fwd( String& result ) { return union_to_string_fwd(* this, & result); } + forceinline StrBuilder to_string() { return union_to_string(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return union_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return union_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeUnion); operator Code(); @@ -883,9 +883,9 @@ struct CodeUsing { #if ! GEN_C_LIKE_CPP Using_Code( CodeUsing ); - forceinline String to_string() { return using_to_string(* this); } - forceinline void to_string( String& result ) { return using_to_string_ref(* this, & result); } - forceinline void to_string_ns( String& result ) { return using_to_string_ns(* this, & result); } + forceinline StrBuilder to_string() { return using_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return using_to_strbuilder_ref(* this, & result); } + forceinline void to_strbuilder_ns( StrBuilder& result ) { return using_to_strbuilder_ns(* this, & result); } #endif Using_CodeOps(CodeUsing); operator Code(); @@ -897,8 +897,8 @@ struct CodeVar { #if ! GEN_C_LIKE_CPP Using_Code( CodeVar ); - forceinline String to_string() { return var_to_string(* this); } - forceinline void to_string( String& result ) { return var_to_string_ref(* this, & result); } + forceinline StrBuilder to_string() { return var_to_string(* this); } + forceinline void to_string( StrBuilder& result ) { return var_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeVar); operator Code(); @@ -911,9 +911,9 @@ struct CodeStruct #if ! GEN_C_LIKE_CPP Using_Code( CodeStruct ); forceinline void add_interface( CodeTypename interface ) { return struct_add_interface(* this, interface); } - forceinline String to_string() { return struct_to_string(* this); } - forceinline void to_string_fwd( String& result ) { return struct_to_string_fwd(* this, & result); } - forceinline void to_string_def( String& result ) { return struct_to_string_def(* this, & result); } + forceinline StrBuilder to_string() { return struct_to_string(* this); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return struct_to_strbuilder_fwd(* this, & result); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return struct_to_strbuilder_def(* this, & result); } #endif Using_CodeOps( CodeStruct ); forceinline operator Code() { return * rcast( Code*, this ); } @@ -1002,24 +1002,24 @@ GEN_OPTIMIZE_MAPPINGS_BEGIN forceinline void append ( CodeBody body, Code other ) { return body_append(body, other); } forceinline void append ( CodeBody body, CodeBody other ) { return body_append_body(body, other); } -forceinline String to_string ( CodeBody body ) { return body_to_string(body); } -forceinline void to_string ( CodeBody body, String& result ) { return body_to_string_ref(body, & result); } -forceinline void to_string_export( CodeBody body, String& result ) { return body_to_string_export(body, & result); } +forceinline StrBuilder to_string ( CodeBody body ) { return body_to_string(body); } +forceinline void to_string ( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_ref(body, & result); } +forceinline void to_strbuilder_export( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_export(body, & result); } forceinline Code begin( CodeBody body) { return begin_CodeBody(body); } forceinline Code end ( CodeBody body ) { return end_CodeBody(body); } forceinline Code next ( CodeBody body, Code entry_iter ) { return next_CodeBody(body, entry_iter); } forceinline void add_interface( CodeClass self, CodeTypename interface ) { return class_add_interface(self, interface); } -forceinline String to_string ( CodeClass self ) { return class_to_string(self); } -forceinline void to_string_def( CodeClass self, String& result ) { return class_to_string_def(self, & result); } -forceinline void to_string_fwd( CodeClass self, String& result ) { return class_to_string_fwd(self, & result); } +forceinline StrBuilder to_string ( CodeClass self ) { return class_to_string(self); } +forceinline void to_strbuilder_def( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_fwd(self, & result); } forceinline void append (CodeParams params, CodeParams param ) { return params_append(params, param); } forceinline CodeParams get (CodeParams params, s32 idx) { return params_get(params, idx); } forceinline bool has_entries(CodeParams params ) { return params_has_entries(params); } -forceinline String to_string (CodeParams params ) { return params_to_string(params); } -forceinline void to_string (CodeParams params, String& result ) { return params_to_string_ref(params, & result); } +forceinline StrBuilder to_string (CodeParams params ) { return params_to_string(params); } +forceinline void to_string (CodeParams params, StrBuilder& result ) { return params_to_strbuilder_ref(params, & result); } forceinline CodeParams begin(CodeParams params) { return begin_CodeParams(params); } forceinline CodeParams end (CodeParams params) { return end_CodeParams(params); } @@ -1028,100 +1028,100 @@ forceinline CodeParams next (CodeParams params, CodeParams entry_iter) { return forceinline bool append (CodeSpecifiers specifiers, Specifier spec) { return specifiers_append(specifiers, spec); } forceinline s32 has (CodeSpecifiers specifiers, Specifier spec) { return specifiers_has(specifiers, spec); } forceinline s32 remove (CodeSpecifiers specifiers, Specifier to_remove ) { return specifiers_remove(specifiers, to_remove); } -forceinline String to_string(CodeSpecifiers specifiers) { return specifiers_to_string(specifiers); } -forceinline void to_string(CodeSpecifiers specifiers, String& result) { return specifiers_to_string_ref(specifiers, & result); } +forceinline StrBuilder to_string(CodeSpecifiers specifiers) { return specifiers_to_string(specifiers); } +forceinline void to_string(CodeSpecifiers specifiers, StrBuilder& result) { return specifiers_to_strbuilder_ref(specifiers, & result); } forceinline Specifier* begin(CodeSpecifiers specifiers) { return begin_CodeSpecifiers(specifiers); } forceinline Specifier* end (CodeSpecifiers specifiers) { return end_CodeSpecifiers(specifiers); } forceinline Specifier* next (CodeSpecifiers specifiers, Specifier& spec_iter) { return next_CodeSpecifiers(specifiers, & spec_iter); } forceinline void add_interface(CodeStruct self, CodeTypename interface) { return struct_add_interface(self, interface); } -forceinline String to_string (CodeStruct self) { return struct_to_string(self); } -forceinline void to_string_fwd(CodeStruct self, String& result) { return struct_to_string_fwd(self, & result); } -forceinline void to_string_def(CodeStruct self, String& result) { return struct_to_string_def(self, & result); } +forceinline StrBuilder to_string (CodeStruct self) { return struct_to_string(self); } +forceinline void to_strbuilder_fwd(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_def(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_def(self, & result); } -forceinline String to_string(CodeAttributes attributes) { return attributes_to_string(attributes); } -forceinline void to_string(CodeAttributes attributes, String& result) { return attributes_to_string_ref(attributes, & result); } +forceinline StrBuilder to_string(CodeAttributes attributes) { return attributes_to_string(attributes); } +forceinline void to_string(CodeAttributes attributes, StrBuilder& result) { return attributes_to_strbuilder_ref(attributes, & result); } -forceinline String to_string(CodeComment comment ) { return comment_to_string(comment); } -forceinline void to_string(CodeComment comment, String& result ) { return comment_to_string_ref(comment, & result); } +forceinline StrBuilder to_string(CodeComment comment ) { return comment_to_string(comment); } +forceinline void to_string(CodeComment comment, StrBuilder& result ) { return comment_to_strbuilder_ref(comment, & result); } -forceinline String to_string (CodeConstructor constructor) { return constructor_to_string(constructor); } -forceinline void to_string_def(CodeConstructor constructor, String& result ) { return constructor_to_string_def(constructor, & result); } -forceinline void to_string_fwd(CodeConstructor constructor, String& result ) { return constructor_to_string_fwd(constructor, & result); } +forceinline StrBuilder to_string (CodeConstructor constructor) { return constructor_to_string(constructor); } +forceinline void to_strbuilder_def(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_def(constructor, & result); } +forceinline void to_strbuilder_fwd(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_fwd(constructor, & result); } -forceinline String to_string(CodeDefine self) { return define_to_string(self); } -forceinline void to_string(CodeDefine self, String& result) { return define_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeDefine self) { return define_to_string(self); } +forceinline void to_string(CodeDefine self, StrBuilder& result) { return define_to_strbuilder_ref(self, & result); } -forceinline String to_string (CodeDestructor destructor) { return destructor_to_string(destructor); } -forceinline void to_string_def(CodeDestructor destructor, String& result ) { return destructor_to_string_def(destructor, & result); } -forceinline void to_string_fwd(CodeDestructor destructor, String& result ) { return destructor_to_string_fwd(destructor, & result); } +forceinline StrBuilder to_string (CodeDestructor destructor) { return destructor_to_string(destructor); } +forceinline void to_strbuilder_def(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_def(destructor, & result); } +forceinline void to_strbuilder_fwd(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_fwd(destructor, & result); } -forceinline String to_string (CodeEnum self) { return enum_to_string(self); } -forceinline void to_string_def (CodeEnum self, String& result ) { return enum_to_string_def(self, & result); } -forceinline void to_string_fwd (CodeEnum self, String& result ) { return enum_to_string_fwd(self, & result); } -forceinline void to_string_class_def(CodeEnum self, String& result ) { return enum_to_string_class_def(self, & result); } -forceinline void to_string_class_fwd(CodeEnum self, String& result ) { return enum_to_string_class_fwd(self, & result); } +forceinline StrBuilder to_string (CodeEnum self) { return enum_to_string(self); } +forceinline void to_strbuilder_def (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_class_def(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_def(self, & result); } +forceinline void to_strbuilder_class_fwd(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_fwd(self, & result); } -forceinline String to_string(CodeExec exec) { return exec_to_string(exec); } -forceinline void to_string(CodeExec exec, String& result) { return exec_to_string_ref(exec, & result); } +forceinline StrBuilder to_string(CodeExec exec) { return exec_to_string(exec); } +forceinline void to_string(CodeExec exec, StrBuilder& result) { return exec_to_strbuilder_ref(exec, & result); } -forceinline void to_string(CodeExtern self, String& result) { return extern_to_string(self, & result); } +forceinline void to_string(CodeExtern self, StrBuilder& result) { return extern_to_string(self, & result); } -forceinline String to_string(CodeInclude self) { return include_to_string(self); } -forceinline void to_string(CodeInclude self, String& result) { return include_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeInclude self) { return include_to_string(self); } +forceinline void to_string(CodeInclude self, StrBuilder& result) { return include_to_strbuilder_ref(self, & result); } -forceinline String to_string(CodeFriend self) { return friend_to_string(self); } -forceinline void to_string(CodeFriend self, String& result) { return friend_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeFriend self) { return friend_to_string(self); } +forceinline void to_string(CodeFriend self, StrBuilder& result) { return friend_to_strbuilder_ref(self, & result); } -forceinline String to_string (CodeFn self) { return fn_to_string(self); } -forceinline void to_string_def(CodeFn self, String& result) { return fn_to_string_def(self, & result); } -forceinline void to_string_fwd(CodeFn self, String& result) { return fn_to_string_fwd(self, & result); } +forceinline StrBuilder to_string (CodeFn self) { return fn_to_string(self); } +forceinline void to_strbuilder_def(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_fwd(self, & result); } -forceinline String to_string(CodeModule self) { return module_to_string(self); } -forceinline void to_string(CodeModule self, String& result) { return module_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeModule self) { return module_to_string(self); } +forceinline void to_string(CodeModule self, StrBuilder& result) { return module_to_strbuilder_ref(self, & result); } -forceinline String to_string(CodeNS self) { return namespace_to_string(self); } -forceinline void to_string(CodeNS self, String& result) { return namespace_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeNS self) { return namespace_to_string(self); } +forceinline void to_string(CodeNS self, StrBuilder& result) { return namespace_to_strbuilder_ref(self, & result); } -forceinline String to_string (CodeOperator self) { return code_op_to_string(self); } -forceinline void to_string_fwd(CodeOperator self, String& result ) { return code_op_to_string_fwd(self, & result); } -forceinline void to_string_def(CodeOperator self, String& result ) { return code_op_to_string_def(self, & result); } +forceinline StrBuilder to_string (CodeOperator self) { return code_op_to_string(self); } +forceinline void to_strbuilder_fwd(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_def(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_def(self, & result); } -forceinline String to_string (CodeOpCast op_cast ) { return opcast_to_string(op_cast); } -forceinline void to_string_def(CodeOpCast op_cast, String& result ) { return opcast_to_string_def(op_cast, & result); } -forceinline void to_string_fwd(CodeOpCast op_cast, String& result ) { return opcast_to_string_fwd(op_cast, & result); } +forceinline StrBuilder to_string (CodeOpCast op_cast ) { return opcast_to_string(op_cast); } +forceinline void to_strbuilder_def(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_def(op_cast, & result); } +forceinline void to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_fwd(op_cast, & result); } -forceinline String to_string(CodePragma self) { return pragma_to_string(self); } -forceinline void to_string(CodePragma self, String& result) { return pragma_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodePragma self) { return pragma_to_string(self); } +forceinline void to_string(CodePragma self, StrBuilder& result) { return pragma_to_strbuilder_ref(self, & result); } -forceinline String to_string (CodePreprocessCond cond) { return preprocess_to_string(cond); } -forceinline void to_string_if (CodePreprocessCond cond, String& result ) { return preprocess_to_string_if(cond, & result); } -forceinline void to_string_ifdef (CodePreprocessCond cond, String& result ) { return preprocess_to_string_ifdef(cond, & result); } -forceinline void to_string_ifndef(CodePreprocessCond cond, String& result ) { return preprocess_to_string_ifndef(cond, & result); } -forceinline void to_string_elif (CodePreprocessCond cond, String& result ) { return preprocess_to_string_elif(cond, & result); } -forceinline void to_string_else (CodePreprocessCond cond, String& result ) { return preprocess_to_string_else(cond, & result); } -forceinline void to_string_endif (CodePreprocessCond cond, String& result ) { return preprocess_to_string_endif(cond, & result); } +forceinline StrBuilder to_string (CodePreprocessCond cond) { return preprocess_to_string(cond); } +forceinline void to_strbuilder_if (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_if(cond, & result); } +forceinline void to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(cond, & result); } +forceinline void to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(cond, & result); } +forceinline void to_strbuilder_elif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_elif(cond, & result); } +forceinline void to_strbuilder_else (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_else(cond, & result); } +forceinline void to_strbuilder_endif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_endif(cond, & result); } -forceinline String to_string(CodeTemplate self) { return template_to_string(self); } -forceinline void to_string(CodeTemplate self, String& result) { return template_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeTemplate self) { return template_to_string(self); } +forceinline void to_string(CodeTemplate self, StrBuilder& result) { return template_to_strbuilder_ref(self, & result); } -forceinline String to_string(CodeTypename self) { return typename_to_string(self); } -forceinline void to_string(CodeTypename self, String& result) { return typename_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeTypename self) { return typename_to_string(self); } +forceinline void to_string(CodeTypename self, StrBuilder& result) { return typename_to_strbuilder_ref(self, & result); } -forceinline String to_string(CodeTypedef self) { return typedef_to_string(self); } -forceinline void to_string(CodeTypedef self, String& result ) { return typedef_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeTypedef self) { return typedef_to_string(self); } +forceinline void to_string(CodeTypedef self, StrBuilder& result ) { return typedef_to_strbuilder_ref(self, & result); } -forceinline String to_string (CodeUnion self) { return union_to_string(self); } -forceinline void to_string_def(CodeUnion self, String& result) { return union_to_string_def(self, & result); } -forceinline void to_string_fwd(CodeUnion self, String& result) { return union_to_string_fwd(self, & result); } +forceinline StrBuilder to_string (CodeUnion self) { return union_to_string(self); } +forceinline void to_strbuilder_def(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_fwd(self, & result); } -forceinline String to_string (CodeUsing op_cast ) { return using_to_string(op_cast); } -forceinline void to_string (CodeUsing op_cast, String& result ) { return using_to_string_ref(op_cast, & result); } -forceinline void to_string_ns(CodeUsing op_cast, String& result ) { return using_to_string_ns(op_cast, & result); } +forceinline StrBuilder to_string (CodeUsing op_cast ) { return using_to_string(op_cast); } +forceinline void to_string (CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ref(op_cast, & result); } +forceinline void to_strbuilder_ns(CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ns(op_cast, & result); } -forceinline String to_string(CodeVar self) { return var_to_string(self); } -forceinline void to_string(CodeVar self, String& result) { return var_to_string_ref(self, & result); } +forceinline StrBuilder to_string(CodeVar self) { return var_to_string(self); } +forceinline void to_string(CodeVar self, StrBuilder& result) { return var_to_strbuilder_ref(self, & result); } GEN_OPITMIZE_MAPPINGS_END #endif //if GEN_C_LIKE_CPP diff --git a/base/components/gen/ecodetypes.hpp b/base/components/gen/ecodetypes.hpp index 7321695..3a237c7 100644 --- a/base/components/gen/ecodetypes.hpp +++ b/base/components/gen/ecodetypes.hpp @@ -72,9 +72,9 @@ enum CodeType : u32 CT_UnderlyingType = GEN_U32_MAX }; -inline StrC codetype_to_str( CodeType type ) +inline Str codetype_to_str( CodeType type ) { - local_persist StrC lookup[61] = { + local_persist Str lookup[61] = { { sizeof( "Invalid" ), "Invalid" }, { sizeof( "Untyped" ), "Untyped" }, { sizeof( "NewLine" ), "NewLine" }, @@ -140,9 +140,9 @@ inline StrC codetype_to_str( CodeType type ) return lookup[type]; } -inline StrC codetype_to_keyword_str( CodeType type ) +inline Str codetype_to_keyword_str( CodeType type ) { - local_persist StrC lookup[61] = { + local_persist Str lookup[61] = { { sizeof( "__NA__" ) - 1, "__NA__" }, { sizeof( "__NA__" ) - 1, "__NA__" }, { sizeof( "__NA__" ) - 1, "__NA__" }, @@ -208,12 +208,12 @@ inline StrC codetype_to_keyword_str( CodeType type ) return lookup[type]; } -forceinline StrC to_str( CodeType type ) +forceinline Str to_str( CodeType type ) { return codetype_to_str( type ); } -forceinline StrC to_keyword_str( CodeType type ) +forceinline Str to_keyword_str( CodeType type ) { return codetype_to_keyword_str( type ); } diff --git a/base/components/gen/eoperator.hpp b/base/components/gen/eoperator.hpp index f45e441..3a43b64 100644 --- a/base/components/gen/eoperator.hpp +++ b/base/components/gen/eoperator.hpp @@ -58,9 +58,9 @@ enum Operator : u32 Op_UnderlyingType = 0xffffffffu }; -inline StrC operator_to_str( Operator op ) +inline Str operator_to_str( Operator op ) { - local_persist StrC lookup[47] = { + local_persist Str lookup[47] = { { sizeof( "INVALID" ), "INVALID" }, { sizeof( "=" ), "=" }, { sizeof( "+=" ), "+=" }, @@ -112,7 +112,7 @@ inline StrC operator_to_str( Operator op ) return lookup[op]; } -forceinline StrC to_str( Operator op ) +forceinline Str to_str( Operator op ) { return operator_to_str( op ); } diff --git a/base/components/gen/especifier.hpp b/base/components/gen/especifier.hpp index 6298888..17ba5d8 100644 --- a/base/components/gen/especifier.hpp +++ b/base/components/gen/especifier.hpp @@ -37,9 +37,9 @@ enum Specifier : u32 Spec_UnderlyingType = 0xffffffffu }; -inline StrC spec_to_str( Specifier type ) +inline Str spec_to_str( Specifier type ) { - local_persist StrC lookup[26] = { + local_persist Str lookup[26] = { { sizeof( "INVALID" ), "INVALID" }, { sizeof( "consteval" ), "consteval" }, { sizeof( "constexpr" ), "constexpr" }, @@ -75,12 +75,12 @@ inline bool spec_is_trailing( Specifier specifier ) return specifier > Spec_Virtual; } -inline Specifier strc_to_specifier( StrC str ) +inline Specifier str_to_specifier( Str str ) { local_persist u32 keymap[Spec_NumSpecifiers]; do_once_start for ( u32 index = 0; index < Spec_NumSpecifiers; index++ ) { - StrC enum_str = spec_to_str( (Specifier)index ); + Str enum_str = spec_to_str( (Specifier)index ); keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); } do_once_end u32 hash = crc32( str.Ptr, str.Len ); @@ -92,14 +92,14 @@ inline Specifier strc_to_specifier( StrC str ) return Spec_Invalid; } -forceinline StrC to_str( Specifier spec ) +forceinline Str to_str( Specifier spec ) { return spec_to_str( spec ); } -forceinline Specifier to_type( StrC str ) +forceinline Specifier to_type( Str str ) { - return strc_to_specifier( str ); + return str_to_specifier( str ); } forceinline bool is_trailing( Specifier specifier ) diff --git a/base/components/gen/etoktype.cpp b/base/components/gen/etoktype.cpp index 574f516..f4fb757 100644 --- a/base/components/gen/etoktype.cpp +++ b/base/components/gen/etoktype.cpp @@ -111,9 +111,9 @@ enum TokType : u32 Tok_NumTokens }; -inline StrC toktype_to_str( TokType type ) +inline Str toktype_to_str( TokType type ) { - local_persist StrC lookup[] = { + local_persist Str lookup[] = { { sizeof( "__invalid__" ), "__invalid__" }, { sizeof( "private" ), "private" }, { sizeof( "protected" ), "protected" }, @@ -192,7 +192,7 @@ inline StrC toktype_to_str( TokType type ) { sizeof( "*" ), "*" }, { sizeof( ";" ), ";" }, { sizeof( "static_assert" ), "static_assert" }, - { sizeof( "__string__" ), "__string__" }, + { sizeof( "__strbuilder__" ), "__strbuilder__" }, { sizeof( "typename" ), "typename" }, { sizeof( "unsigned" ), "unsigned" }, { sizeof( "signed" ), "signed" }, @@ -215,12 +215,12 @@ inline StrC toktype_to_str( TokType type ) return lookup[type]; } -inline TokType strc_to_toktype( StrC str ) +inline TokType str_to_toktype( Str str ) { local_persist u32 keymap[Tok_NumTokens]; do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) { - StrC enum_str = toktype_to_str( (TokType)index ); + Str enum_str = toktype_to_str( (TokType)index ); keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); } do_once_end u32 hash = crc32( str.Ptr, str.Len ); diff --git a/base/components/header_end.hpp b/base/components/header_end.hpp index 2cbc306..c20b910 100644 --- a/base/components/header_end.hpp +++ b/base/components/header_end.hpp @@ -53,7 +53,7 @@ constexpr s32 MaxUntypedStrLength = GEN_MAX_UNTYPED_STR_LENGTH; constexpr s32 LexAllocator_Size = GEN_LEX_ALLOCATOR_SIZE; constexpr s32 Builder_StrBufferReserve = GEN_BUILDER_STR_BUFFER_RESERVE; -extern StrC enum_underlying_sig; +extern Str enum_underlying_sig; extern Code access_public; extern Code access_protected; diff --git a/base/components/inlines.hpp b/base/components/inlines.hpp index 70bc45d..9e4a5a6 100644 --- a/base/components/inlines.hpp +++ b/base/components/inlines.hpp @@ -101,7 +101,7 @@ Code& Code::operator ++() } #endif forceinline -StrC code_type_str(Code self) +Str code_type_str(Code self) { GEN_ASSERT(self != nullptr); return codetype_to_str( self->Type ); @@ -397,7 +397,7 @@ CodeBody def_body( CodeType type ) } inline -StrC token_fmt_impl( ssize num, ... ) +Str token_fmt_impl( ssize num, ... ) { local_persist thread_local char buf[GEN_PRINTF_MAXLEN] = { 0 }; @@ -408,7 +408,7 @@ StrC token_fmt_impl( ssize num, ... ) ssize result = token_fmt_va(buf, GEN_PRINTF_MAXLEN, num, va); va_end(va); - StrC str = { result, buf }; + Str str = { result, buf }; return str; } #pragma endregion Interface diff --git a/base/components/interface.cpp b/base/components/interface.cpp index cc09014..960e1c7 100644 --- a/base/components/interface.cpp +++ b/base/components/interface.cpp @@ -101,11 +101,11 @@ void define_constants() access_public->Name = get_cached_string( txt("public:\n") ); code_set_global(access_public); - StrC api_export_str = code(GEN_API_Export_Code); + Str api_export_str = code(GEN_API_Export_Code); attrib_api_export = def_attributes( api_export_str ); code_set_global(cast(Code, attrib_api_export)); - StrC api_import_str = code(GEN_API_Import_Code); + Str api_import_str = code(GEN_API_Import_Code); attrib_api_import = def_attributes( api_import_str ); code_set_global(cast(Code, attrib_api_import)); @@ -145,33 +145,33 @@ void define_constants() preprocess_endif->Type = CT_Preprocess_EndIf; code_set_global((Code)preprocess_endif); - StrC auto_str = txt("auto"); t_auto = def_type( auto_str ); code_set_global( t_auto ); - StrC void_str = txt("void"); t_void = def_type( void_str ); code_set_global( t_void ); - StrC int_str = txt("int"); t_int = def_type( int_str ); code_set_global( t_int ); - StrC bool_str = txt("bool"); t_bool = def_type( bool_str ); code_set_global( t_bool ); - StrC char_str = txt("char"); t_char = def_type( char_str ); code_set_global( t_char ); - StrC wchar_str = txt("wchar_t"); t_wchar_t = def_type( wchar_str ); code_set_global( t_wchar_t ); - StrC class_str = txt("class"); t_class = def_type( class_str ); code_set_global( t_class ); - StrC typename_str = txt("typename"); t_typename = def_type( typename_str ); code_set_global( t_typename ); + Str auto_str = txt("auto"); t_auto = def_type( auto_str ); code_set_global( t_auto ); + Str void_str = txt("void"); t_void = def_type( void_str ); code_set_global( t_void ); + Str int_str = txt("int"); t_int = def_type( int_str ); code_set_global( t_int ); + Str bool_str = txt("bool"); t_bool = def_type( bool_str ); code_set_global( t_bool ); + Str char_str = txt("char"); t_char = def_type( char_str ); code_set_global( t_char ); + Str wchar_str = txt("wchar_t"); t_wchar_t = def_type( wchar_str ); code_set_global( t_wchar_t ); + Str class_str = txt("class"); t_class = def_type( class_str ); code_set_global( t_class ); + Str typename_str = txt("typename"); t_typename = def_type( typename_str ); code_set_global( t_typename ); #ifdef GEN_DEFINE_LIBRARY_CODE_CONSTANTS t_b32 = def_type( name(b32) ); code_set_global( t_b32 ); - StrC s8_str = txt("s8"); t_s8 = def_type( s8_str ); code_set_global( t_s8 ); - StrC s16_str = txt("s16"); t_s16 = def_type( s16_str ); code_set_global( t_s16 ); - StrC s32_str = txt("s32"); t_s32 = def_type( s32_str ); code_set_global( t_s32 ); - StrC s64_str = txt("s64"); t_s64 = def_type( s64_str ); code_set_global( t_s64 ); + Str s8_str = txt("s8"); t_s8 = def_type( s8_str ); code_set_global( t_s8 ); + Str s16_str = txt("s16"); t_s16 = def_type( s16_str ); code_set_global( t_s16 ); + Str s32_str = txt("s32"); t_s32 = def_type( s32_str ); code_set_global( t_s32 ); + Str s64_str = txt("s64"); t_s64 = def_type( s64_str ); code_set_global( t_s64 ); - StrC u8_str = txt("u8"); t_u8 = def_type( u8_str ); code_set_global( t_u8 ); - StrC u16_str = txt("u16"); t_u16 = def_type( u16_str ); code_set_global( t_u16 ); - StrC u32_str = txt("u32"); t_u32 = def_type( u32_str ); code_set_global( t_u32 ); - StrC u64_str = txt("u64"); t_u64 = def_type( u64_str ); code_set_global( t_u64 ); + Str u8_str = txt("u8"); t_u8 = def_type( u8_str ); code_set_global( t_u8 ); + Str u16_str = txt("u16"); t_u16 = def_type( u16_str ); code_set_global( t_u16 ); + Str u32_str = txt("u32"); t_u32 = def_type( u32_str ); code_set_global( t_u32 ); + Str u64_str = txt("u64"); t_u64 = def_type( u64_str ); code_set_global( t_u64 ); - StrC ssize_str = txt("ssize"); t_ssize = def_type( ssize_str ); code_set_global( t_ssize ); - StrC usize_str = txt("usize"); t_usize = def_type( usize_str ); code_set_global( t_usize ); + Str ssize_str = txt("ssize"); t_ssize = def_type( ssize_str ); code_set_global( t_ssize ); + Str usize_str = txt("usize"); t_usize = def_type( usize_str ); code_set_global( t_usize ); - StrC f32_str = txt("f32"); t_f32 = def_type( f32_str ); code_set_global( t_f32 ); - StrC f64_str = txt("f64"); t_f64 = def_type( f64_str ); code_set_global( t_f64 ); + Str f32_str = txt("f32"); t_f32 = def_type( f32_str ); code_set_global( t_f32 ); + Str f64_str = txt("f64"); t_f64 = def_type( f64_str ); code_set_global( t_f64 ); #endif spec_const = def_specifier( Spec_Const); code_set_global( cast(Code, spec_const )); @@ -273,12 +273,12 @@ void init() LexArena = arena_init_from_allocator( Allocator_Lexer, LexAllocator_Size ); - Arena string_arena = arena_init_from_allocator( Allocator_StringArena, SizePer_StringArena ); + Arena strbuilder_arena = arena_init_from_allocator( Allocator_StringArena, SizePer_StringArena ); - if ( string_arena.PhysicalStart == nullptr ) + if ( strbuilder_arena.PhysicalStart == nullptr ) GEN_FATAL( "gen::init: Failed to initialize the string arena" ); - array_append( StringArenas, string_arena ); + array_append( StringArenas, strbuilder_arena ); } // Setup the hash tables @@ -312,8 +312,8 @@ void deinit() left = array_num(StringArenas); do { - Arena* string_arena = & StringArenas[index]; - arena_free(string_arena); + Arena* strbuilder_arena = & StringArenas[index]; + arena_free(strbuilder_arena); index++; } while ( left--, left ); @@ -357,8 +357,8 @@ void reset() left = array_num(StringArenas); do { - Arena* string_arena = & StringArenas[index]; - string_arena->TotalUsed = 0;; + Arena* strbuilder_arena = & StringArenas[index]; + strbuilder_arena->TotalUsed = 0;; index++; } while ( left--, left ); @@ -368,18 +368,18 @@ void reset() define_constants(); } -AllocatorInfo get_string_allocator( s32 str_length ) +AllocatorInfo get_strbuilder_allocator( s32 c_str_length ) { Arena* last = array_back(StringArenas); - usize size_req = str_length + sizeof(StringHeader) + sizeof(char*); + usize size_req = c_str_length + sizeof(StrBuilderHeader) + sizeof(char*); if ( last->TotalUsed + scast(ssize, size_req) > last->TotalSize ) { Arena new_arena = arena_init_from_allocator( Allocator_StringArena, SizePer_StringArena ); if ( ! array_append( StringArenas, new_arena ) ) - GEN_FATAL( "gen::get_string_allocator: Failed to allocate a new string arena" ); + GEN_FATAL( "gen::get_strbuilder_allocator: Failed to allocate a new string arena" ); last = array_back(StringArenas); } @@ -388,7 +388,7 @@ AllocatorInfo get_string_allocator( s32 str_length ) } // Will either make or retrive a code string. -StringCached get_cached_string( StrC str ) +StringCached get_cached_string( Str str ) { s32 hash_length = str.Len > kilobytes(1) ? kilobytes(1) : str.Len; u64 key = crc32( str.Ptr, hash_length ); @@ -399,7 +399,7 @@ StringCached get_cached_string( StrC str ) return * result; } - StrC result = string_to_strc( string_make_strc( get_string_allocator( str.Len ), str )); + Str result = strbuilder_to_str( strbuilder_make_str( get_strbuilder_allocator( str.Len ), str )); hashtable_set(StringCache, key, result ); return result; @@ -442,12 +442,12 @@ void set_allocator_lexer( AllocatorInfo allocator ) Allocator_Lexer = allocator; } -void set_allocator_string_arena( AllocatorInfo allocator ) +void set_allocator_strbuilder_arena( AllocatorInfo allocator ) { Allocator_StringArena = allocator; } -void set_allocator_string_table( AllocatorInfo allocator ) +void set_allocator_strbuilder_table( AllocatorInfo allocator ) { Allocator_StringArena = allocator; } diff --git a/base/components/interface.hpp b/base/components/interface.hpp index 2b08281..96faa9d 100644 --- a/base/components/interface.hpp +++ b/base/components/interface.hpp @@ -28,7 +28,7 @@ void reset(); // Used internally to retrive or make string allocations. // Strings are stored in a series of string arenas of fixed size (SizePer_StringArena) -StringCached get_cached_string( StrC str ); +StringCached get_cached_string( Str str ); /* This provides a fresh Code AST. @@ -42,14 +42,14 @@ Code make_code(); void set_allocator_data_arrays ( AllocatorInfo data_array_allocator ); void set_allocator_code_pool ( AllocatorInfo pool_allocator ); void set_allocator_lexer ( AllocatorInfo lex_allocator ); -void set_allocator_string_arena( AllocatorInfo string_allocator ); -void set_allocator_string_table( AllocatorInfo string_allocator ); +void set_allocator_strbuilder_arena( AllocatorInfo strbuilder_allocator ); +void set_allocator_strbuilder_table( AllocatorInfo strbuilder_allocator ); void set_allocator_type_table ( AllocatorInfo type_reg_allocator ); #pragma region Upfront -CodeAttributes def_attributes( StrC content ); -CodeComment def_comment ( StrC content ); +CodeAttributes def_attributes( Str content ); +CodeComment def_comment ( Str content ); struct Opts_def_struct { CodeBody body; @@ -60,7 +60,7 @@ struct Opts_def_struct { s32 num_interfaces; ModuleFlag mflags; }; -CodeClass def_class( StrC name, Opts_def_struct opts GEN_PARAM_DEFAULT ); +CodeClass def_class( Str name, Opts_def_struct opts GEN_PARAM_DEFAULT ); struct Opts_def_constructor { CodeParams params; @@ -72,7 +72,7 @@ CodeConstructor def_constructor( Opts_def_constructor opts GEN_PARAM_DEFAULT ); struct Opts_def_define { b32 dont_append_preprocess_defines; }; -CodeDefine def_define( StrC name, StrC content, Opts_def_define opts GEN_PARAM_DEFAULT ); +CodeDefine def_define( Str name, Str content, Opts_def_define opts GEN_PARAM_DEFAULT ); struct Opts_def_destructor { Code body; @@ -88,10 +88,10 @@ struct Opts_def_enum { ModuleFlag mflags; Code type_macro; }; -CodeEnum def_enum( StrC name, Opts_def_enum opts GEN_PARAM_DEFAULT ); +CodeEnum def_enum( Str name, Opts_def_enum opts GEN_PARAM_DEFAULT ); -CodeExec def_execution ( StrC content ); -CodeExtern def_extern_link( StrC name, CodeBody body ); +CodeExec def_execution ( Str content ); +CodeExtern def_extern_link( Str name, CodeBody body ); CodeFriend def_friend ( Code symbol ); struct Opts_def_function { @@ -102,14 +102,14 @@ struct Opts_def_function { CodeAttributes attrs; ModuleFlag mflags; }; -CodeFn def_function( StrC name, Opts_def_function opts GEN_PARAM_DEFAULT ); +CodeFn def_function( Str name, Opts_def_function opts GEN_PARAM_DEFAULT ); struct Opts_def_include { b32 foreign; }; struct Opts_def_module { ModuleFlag mflags; }; struct Opts_def_namespace { ModuleFlag mflags; }; -CodeInclude def_include ( StrC content, Opts_def_include opts GEN_PARAM_DEFAULT ); -CodeModule def_module ( StrC name, Opts_def_module opts GEN_PARAM_DEFAULT ); -CodeNS def_namespace( StrC name, CodeBody body, Opts_def_namespace opts GEN_PARAM_DEFAULT ); +CodeInclude def_include ( Str content, Opts_def_include opts GEN_PARAM_DEFAULT ); +CodeModule def_module ( Str name, Opts_def_module opts GEN_PARAM_DEFAULT ); +CodeNS def_namespace( Str name, CodeBody body, Opts_def_namespace opts GEN_PARAM_DEFAULT ); struct Opts_def_operator { CodeParams params; @@ -119,7 +119,7 @@ struct Opts_def_operator { CodeAttributes attributes; ModuleFlag mflags; }; -CodeOperator def_operator( Operator op, StrC nspace, Opts_def_operator opts GEN_PARAM_DEFAULT ); +CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator opts GEN_PARAM_DEFAULT ); struct Opts_def_operator_cast { CodeBody body; @@ -128,14 +128,14 @@ struct Opts_def_operator_cast { CodeOpCast def_operator_cast( CodeTypename type, Opts_def_operator_cast opts GEN_PARAM_DEFAULT ); struct Opts_def_param { Code value; }; -CodeParams def_param ( CodeTypename type, StrC name, Opts_def_param opts GEN_PARAM_DEFAULT ); -CodePragma def_pragma( StrC directive ); +CodeParams def_param ( CodeTypename type, Str name, Opts_def_param opts GEN_PARAM_DEFAULT ); +CodePragma def_pragma( Str directive ); -CodePreprocessCond def_preprocess_cond( EPreprocessCond type, StrC content ); +CodePreprocessCond def_preprocess_cond( EPreprocessCond type, Str content ); CodeSpecifiers def_specifier( Specifier specifier ); -CodeStruct def_struct( StrC name, Opts_def_struct opts GEN_PARAM_DEFAULT ); +CodeStruct def_struct( Str name, Opts_def_struct opts GEN_PARAM_DEFAULT ); struct Opts_def_template { ModuleFlag mflags; }; CodeTemplate def_template( CodeParams params, Code definition, Opts_def_template opts GEN_PARAM_DEFAULT ); @@ -146,27 +146,27 @@ struct Opts_def_type { CodeSpecifiers specifiers; CodeAttributes attributes; }; -CodeTypename def_type( StrC name, Opts_def_type opts GEN_PARAM_DEFAULT ); +CodeTypename def_type( Str name, Opts_def_type opts GEN_PARAM_DEFAULT ); struct Opts_def_typedef { CodeAttributes attributes; ModuleFlag mflags; }; -CodeTypedef def_typedef( StrC name, Code type, Opts_def_typedef opts GEN_PARAM_DEFAULT ); +CodeTypedef def_typedef( Str name, Code type, Opts_def_typedef opts GEN_PARAM_DEFAULT ); struct Opts_def_union { CodeAttributes attributes; ModuleFlag mflags; }; -CodeUnion def_union( StrC name, CodeBody body, Opts_def_union opts GEN_PARAM_DEFAULT ); +CodeUnion def_union( Str name, CodeBody body, Opts_def_union opts GEN_PARAM_DEFAULT ); struct Opts_def_using { CodeAttributes attributes; ModuleFlag mflags; }; -CodeUsing def_using( StrC name, CodeTypename type, Opts_def_using opts GEN_PARAM_DEFAULT ); +CodeUsing def_using( Str name, CodeTypename type, Opts_def_using opts GEN_PARAM_DEFAULT ); -CodeUsing def_using_namespace( StrC name ); +CodeUsing def_using_namespace( Str name ); struct Opts_def_variable { @@ -175,7 +175,7 @@ struct Opts_def_variable CodeAttributes attributes; ModuleFlag mflags; }; -CodeVar def_variable( CodeTypename type, StrC name, Opts_def_variable opts GEN_PARAM_DEFAULT ); +CodeVar def_variable( CodeTypename type, Str name, Opts_def_variable opts GEN_PARAM_DEFAULT ); // Constructs an empty body. Use AST::validate_body() to check if the body is was has valid entries. CodeBody def_body( CodeType type ); @@ -220,13 +220,13 @@ struct StackNode Token Start; Token Name; // The name of the AST node (if parsed) - StrC FailedProc; // The name of the procedure that failed + Str FailedProc; // The name of the procedure that failed }; // Stack nodes are allocated the error's allocator struct Error { - String message; + StrBuilder message; StackNode* context_stack; }; GEN_NS_PARSER_END @@ -243,28 +243,28 @@ struct ParseInfo // Errors are allocated to a dedicated general arena. }; -CodeBody parse_file( StrC path ); +CodeBody parse_file( Str path ); #endif -CodeClass parse_class ( StrC class_def ); -CodeConstructor parse_constructor ( StrC constructor_def ); -CodeDestructor parse_destructor ( StrC destructor_def ); -CodeEnum parse_enum ( StrC enum_def ); -CodeBody parse_export_body ( StrC export_def ); -CodeExtern parse_extern_link ( StrC exten_link_def ); -CodeFriend parse_friend ( StrC friend_def ); -CodeFn parse_function ( StrC fn_def ); -CodeBody parse_global_body ( StrC body_def ); -CodeNS parse_namespace ( StrC namespace_def ); -CodeOperator parse_operator ( StrC operator_def ); -CodeOpCast parse_operator_cast( StrC operator_def ); -CodeStruct parse_struct ( StrC struct_def ); -CodeTemplate parse_template ( StrC template_def ); -CodeTypename parse_type ( StrC type_def ); -CodeTypedef parse_typedef ( StrC typedef_def ); -CodeUnion parse_union ( StrC union_def ); -CodeUsing parse_using ( StrC using_def ); -CodeVar parse_variable ( StrC var_def ); +CodeClass parse_class ( Str class_def ); +CodeConstructor parse_constructor ( Str constructor_def ); +CodeDestructor parse_destructor ( Str destructor_def ); +CodeEnum parse_enum ( Str enum_def ); +CodeBody parse_export_body ( Str export_def ); +CodeExtern parse_extern_link ( Str exten_link_def ); +CodeFriend parse_friend ( Str friend_def ); +CodeFn parse_function ( Str fn_def ); +CodeBody parse_global_body ( Str body_def ); +CodeNS parse_namespace ( Str namespace_def ); +CodeOperator parse_operator ( Str operator_def ); +CodeOpCast parse_operator_cast( Str operator_def ); +CodeStruct parse_struct ( Str struct_def ); +CodeTemplate parse_template ( Str template_def ); +CodeTypename parse_type ( Str type_def ); +CodeTypedef parse_typedef ( Str typedef_def ); +CodeUnion parse_union ( Str union_def ); +CodeUsing parse_using ( Str using_def ); +CodeVar parse_variable ( Str var_def ); #pragma endregion Parsing @@ -272,9 +272,9 @@ CodeVar parse_variable ( StrC var_def ); ssize token_fmt_va( char* buf, usize buf_size, s32 num_tokens, va_list va ); //! Do not use directly. Use the token_fmt macro instead. -StrC token_fmt_impl( ssize, ... ); +Str token_fmt_impl( ssize, ... ); -Code untyped_str ( StrC content); +Code untyped_str ( Str content); Code untyped_fmt ( char const* fmt, ... ); Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ); @@ -317,21 +317,21 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ); #ifndef token_fmt /* -Takes a format string (char const*) and a list of tokens (StrC) and returns a StrC of the formatted string. +Takes a format string (char const*) and a list of tokens (Str) and returns a Str 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 ; Will have a token_fmt arguments populated with: - "type", strc_for_type, - "name", strc_for_name, + "type", str_for_type, + "name", str_for_name, and: stringize( typedef ; ) ----------------------------------------------------------- So the full call for this example would be: token_fmt( - "type", strc_for_type - , "name", strc_for_name + "type", str_for_type + , "name", str_for_name , stringize( typedef )); diff --git a/base/components/interface.parsing.cpp b/base/components/interface.parsing.cpp index d983e07..4b0679a 100644 --- a/base/components/interface.parsing.cpp +++ b/base/components/interface.parsing.cpp @@ -8,7 +8,7 @@ // Publically Exposed Interface -CodeClass parse_class( StrC def ) +CodeClass parse_class( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -24,7 +24,7 @@ CodeClass parse_class( StrC def ) return result; } -CodeConstructor parse_constructor( StrC def ) +CodeConstructor parse_constructor( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -41,7 +41,7 @@ CodeConstructor parse_constructor( StrC def ) while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); b32 ignore_spec = false; @@ -84,7 +84,7 @@ CodeConstructor parse_constructor( StrC def ) return result; } -CodeDestructor parse_destructor( StrC def ) +CodeDestructor parse_destructor( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -101,7 +101,7 @@ CodeDestructor parse_destructor( StrC def ) return result; } -CodeEnum parse_enum( StrC def ) +CodeEnum parse_enum( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -117,7 +117,7 @@ CodeEnum parse_enum( StrC def ) return parser_parse_enum( parser_not_inplace_def); } -CodeBody parse_export_body( StrC def ) +CodeBody parse_export_body( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -130,7 +130,7 @@ CodeBody parse_export_body( StrC def ) return parser_parse_export_body(); } -CodeExtern parse_extern_link( StrC def ) +CodeExtern parse_extern_link( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -143,7 +143,7 @@ CodeExtern parse_extern_link( StrC def ) return parser_parse_extern_link(); } -CodeFriend parse_friend( StrC def ) +CodeFriend parse_friend( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -156,7 +156,7 @@ CodeFriend parse_friend( StrC def ) return parser_parse_friend(); } -CodeFn parse_function( StrC def ) +CodeFn parse_function( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -169,7 +169,7 @@ CodeFn parse_function( StrC def ) return (CodeFn) parser_parse_function(); } -CodeBody parse_global_body( StrC def ) +CodeBody parse_global_body( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -185,7 +185,7 @@ CodeBody parse_global_body( StrC def ) return result; } -CodeNS parse_namespace( StrC def ) +CodeNS parse_namespace( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -198,7 +198,7 @@ CodeNS parse_namespace( StrC def ) return parser_parse_namespace(); } -CodeOperator parse_operator( StrC def ) +CodeOperator parse_operator( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -211,7 +211,7 @@ CodeOperator parse_operator( StrC def ) return (CodeOperator) parser_parse_operator(); } -CodeOpCast parse_operator_cast( StrC def ) +CodeOpCast parse_operator_cast( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -224,7 +224,7 @@ CodeOpCast parse_operator_cast( StrC def ) return parser_parse_operator_cast(NullCode); } -CodeStruct parse_struct( StrC def ) +CodeStruct parse_struct( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -240,7 +240,7 @@ CodeStruct parse_struct( StrC def ) return result; } -CodeTemplate parse_template( StrC def ) +CodeTemplate parse_template( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -253,7 +253,7 @@ CodeTemplate parse_template( StrC def ) return parser_parse_template(); } -CodeTypename parse_type( StrC def ) +CodeTypename parse_type( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -266,7 +266,7 @@ CodeTypename parse_type( StrC def ) return parser_parse_type( parser_not_from_template, nullptr); } -CodeTypedef parse_typedef( StrC def ) +CodeTypedef parse_typedef( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -279,7 +279,7 @@ CodeTypedef parse_typedef( StrC def ) return parser_parse_typedef(); } -CodeUnion parse_union( StrC def ) +CodeUnion parse_union( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -292,7 +292,7 @@ CodeUnion parse_union( StrC def ) return parser_parse_union( parser_not_inplace_def); } -CodeUsing parse_using( StrC def ) +CodeUsing parse_using( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); @@ -305,7 +305,7 @@ CodeUsing parse_using( StrC def ) return parser_parse_using(); } -CodeVar parse_variable( StrC def ) +CodeVar parse_variable( Str def ) { GEN_USING_NS_PARSER; check_parse_args( def ); diff --git a/base/components/interface.untyped.cpp b/base/components/interface.untyped.cpp index d430656..4aa466f 100644 --- a/base/components/interface.untyped.cpp +++ b/base/components/interface.untyped.cpp @@ -15,16 +15,16 @@ ssize token_fmt_va( char* buf, usize buf_size, s32 num_tokens, va_list va ) local_persist StringTable tok_map; { - tok_map = hashtable_init(StrC, fixed_arena_allocator_info(& tok_map_arena) ); + tok_map = hashtable_init(Str, fixed_arena_allocator_info(& tok_map_arena) ); s32 left = num_tokens - 1; while ( left-- ) { char const* token = va_arg( va, char const* ); - StrC value = va_arg( va, StrC ); + Str value = va_arg( va, Str ); - u32 key = crc32( token, str_len(token) ); + u32 key = crc32( token, c_str_len(token) ); hashtable_set( tok_map, key, value ); } } @@ -61,7 +61,7 @@ ssize token_fmt_va( char* buf, usize buf_size, s32 num_tokens, va_list va ) char const* token = fmt + 1; u32 key = crc32( token, tok_len ); - StrC* value = hashtable_get(tok_map, key ); + Str* value = hashtable_get(tok_map, key ); if ( value ) { @@ -99,7 +99,7 @@ ssize token_fmt_va( char* buf, usize buf_size, s32 num_tokens, va_list va ) return result; } -Code untyped_str( StrC content ) +Code untyped_str( Str content ) { if ( content.Len == 0 ) { @@ -135,11 +135,11 @@ Code untyped_fmt( char const* fmt, ...) va_list va; va_start(va, fmt); - ssize length = str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va); + ssize length = c_str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va); va_end(va); - StrC buf_str = { str_len_capped(fmt, MaxNameLength), fmt }; - StrC uncapped_str = { length, buf }; + Str buf_str = { c_str_len_capped(fmt, MaxNameLength), fmt }; + Str uncapped_str = { length, buf }; Code result = make_code(); @@ -172,7 +172,7 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ) ssize length = token_fmt_va(buf, GEN_PRINTF_MAXLEN, num_tokens, va); va_end(va); - StrC buf_str = { length, buf }; + Str buf_str = { length, buf }; Code result = make_code(); diff --git a/base/components/interface.upfront.cpp b/base/components/interface.upfront.cpp index 04782db..1d03407 100644 --- a/base/components/interface.upfront.cpp +++ b/base/components/interface.upfront.cpp @@ -373,7 +373,7 @@ OpValidateResult operator__validate( Operator op, CodeParams params_code, CodeTy } forceinline -bool name__check( char const* context, StrC name ) +bool name__check( char const* context, Str name ) { if ( name.Len <= 0 ) { log_failure( "gen::%s: Invalid name length provided - %d", name.Len ); @@ -409,7 +409,7 @@ identify the issue without having to debug too much (at least they can debug tho The largest of the functions is related to operator overload definitions. The library validates a good protion of their form and thus the argument processing for is quite a bit. */ -CodeAttributes def_attributes( StrC content ) +CodeAttributes def_attributes( Str content ) { if ( content.Len <= 0 || content.Ptr == nullptr ) { log_failure( "gen::def_attributes: Invalid attributes provided" ); @@ -424,7 +424,7 @@ CodeAttributes def_attributes( StrC content ) return (CodeAttributes) result; } -CodeComment def_comment( StrC content ) +CodeComment def_comment( Str content ) { if ( content.Len <= 0 || content.Ptr == nullptr ) { @@ -435,7 +435,7 @@ CodeComment def_comment( StrC content ) static char line[ MaxCommentLineLength ]; - String cmt_formatted = string_make_reserve( GlobalAllocator, kilobytes(1) ); + StrBuilder cmt_formatted = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); char const* end = content.Ptr + content.Len; char const* scanner = content.Ptr; s32 curr = 0; @@ -450,18 +450,18 @@ CodeComment def_comment( StrC content ) } length++; - str_copy( line, scanner, length ); - string_append_fmt(& cmt_formatted, "//%.*s", length, line ); + c_str_copy( line, scanner, length ); + strbuilder_append_fmt(& cmt_formatted, "//%.*s", length, line ); mem_set( line, 0, MaxCommentLineLength ); scanner += length; } while ( scanner <= end ); - if ( * string_back(cmt_formatted) != '\n' ) - string_append_strc( & cmt_formatted, txt("\n") ); + if ( * strbuilder_back(cmt_formatted) != '\n' ) + strbuilder_append_str( & cmt_formatted, txt("\n") ); - StrC name = { string_length(cmt_formatted), cmt_formatted }; + Str name = { strbuilder_length(cmt_formatted), cmt_formatted }; Code result = make_code(); @@ -469,7 +469,7 @@ CodeComment def_comment( StrC content ) result->Name = get_cached_string( name ); result->Content = result->Name; - string_free(& cmt_formatted); + strbuilder_free(& cmt_formatted); return (CodeComment) result; } @@ -511,7 +511,7 @@ CodeConstructor def_constructor( Opts_def_constructor p ) return result; } -CodeClass def_class( StrC name, Opts_def_struct p ) +CodeClass def_class( Str name, Opts_def_struct p ) { if ( ! name_check( def_class, name ) ) { GEN_DEBUG_TRAP(); @@ -564,7 +564,7 @@ CodeClass def_class( StrC name, Opts_def_struct p ) return result; } -CodeDefine def_define( StrC name, StrC content, Opts_def_define p ) +CodeDefine def_define( Str name, Str content, Opts_def_define p ) { if ( ! name_check( def_define, name ) ) { GEN_DEBUG_TRAP(); @@ -579,7 +579,7 @@ CodeDefine def_define( StrC name, StrC content, Opts_def_define p ) if ( content.Len <= 0 || content.Ptr == nullptr ) result->Content = get_cached_string( txt("") ); else - result->Content = get_cached_string( string_to_strc(string_fmt_buf(GlobalAllocator, "%SC\n", content)) ); + result->Content = get_cached_string( strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%S\n", content)) ); b32 append_preprocess_defines = ! p.dont_append_preprocess_defines; if ( append_preprocess_defines ) { @@ -589,7 +589,7 @@ CodeDefine def_define( StrC name, StrC content, Opts_def_define p ) if ( result->Name.Ptr[lex_id_len] == '(' ) break; } - StrC lex_id = { lex_id_len, result->Name.Ptr }; + Str lex_id = { lex_id_len, result->Name.Ptr }; array_append(PreprocessorDefines, lex_id ); } return result; @@ -629,7 +629,7 @@ CodeDestructor def_destructor( Opts_def_destructor p ) return result; } -CodeEnum def_enum( StrC name, Opts_def_enum p ) +CodeEnum def_enum( Str name, Opts_def_enum p ) { if ( ! name_check( def_enum, name ) ) { GEN_DEBUG_TRAP(); @@ -690,7 +690,7 @@ CodeEnum def_enum( StrC name, Opts_def_enum p ) return result; } -CodeExec def_execution( StrC content ) +CodeExec def_execution( Str content ) { if ( content.Len <= 0 || content.Ptr == nullptr ) { log_failure( "gen::def_execution: Invalid execution provided" ); @@ -704,7 +704,7 @@ CodeExec def_execution( StrC content ) return result; } -CodeExtern def_extern_link( StrC name, CodeBody body ) +CodeExtern def_extern_link( Str name, CodeBody body ) { if ( ! name_check(def_extern_link, name) || ! null_check(def_extern_link, body) ) { GEN_DEBUG_TRAP(); @@ -752,7 +752,7 @@ CodeFriend def_friend( Code declaration ) return result; } -CodeFn def_function( StrC name, Opts_def_function p ) +CodeFn def_function( Str name, Opts_def_function p ) { if ( ! name_check( def_function, name )) { GEN_DEBUG_TRAP(); @@ -812,26 +812,26 @@ CodeFn def_function( StrC name, Opts_def_function p ) return result; } -CodeInclude def_include( StrC path, Opts_def_include p ) +CodeInclude def_include( Str path, Opts_def_include p ) { if ( path.Len <= 0 || path.Ptr == nullptr ) { log_failure( "gen::def_include: Invalid path provided - %d" ); GEN_DEBUG_TRAP(); return InvalidCode; } - String content = p.foreign ? - string_fmt_buf( GlobalAllocator, "<%.*s>", path.Len, path.Ptr ) - : string_fmt_buf( GlobalAllocator, "\"%.*s\"", path.Len, path.Ptr ); + StrBuilder content = p.foreign ? + strbuilder_fmt_buf( GlobalAllocator, "<%.*s>", path.Len, path.Ptr ) + : strbuilder_fmt_buf( GlobalAllocator, "\"%.*s\"", path.Len, path.Ptr ); CodeInclude result = (CodeInclude) make_code(); result->Type = CT_Preprocess_Include; - result->Name = get_cached_string( string_to_strc(content) ); + result->Name = get_cached_string( strbuilder_to_str(content) ); result->Content = result->Name; return result; } -CodeModule def_module( StrC name, Opts_def_module p ) +CodeModule def_module( Str name, Opts_def_module p ) { if ( ! name_check( def_module, name )) { GEN_DEBUG_TRAP(); @@ -845,7 +845,7 @@ CodeModule def_module( StrC name, Opts_def_module p ) return result; } -CodeNS def_namespace( StrC name, CodeBody body, Opts_def_namespace p ) +CodeNS def_namespace( Str name, CodeBody body, Opts_def_namespace p ) { if ( ! name_check( def_namespace, name )) { GEN_DEBUG_TRAP(); @@ -869,7 +869,7 @@ CodeNS def_namespace( StrC name, CodeBody body, Opts_def_namespace p ) return result; } -CodeOperator def_operator( Operator op, StrC nspace, Opts_def_operator p ) +CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator p ) { if ( p.attributes && p.attributes->Type != CT_PlatformAttributes ) { log_failure( "gen::def_operator: PlatformAttributes was provided but its not of attributes type: %s", code_debug_str(p.attributes) ); @@ -889,13 +889,13 @@ CodeOperator def_operator( Operator op, StrC nspace, Opts_def_operator p ) char const* name = nullptr; - StrC op_str = operator_to_str( op ); + Str op_str = operator_to_str( op ); if ( nspace.Len > 0 ) - name = str_fmt_buf( "%.*soperator %.*s", nspace.Len, nspace.Ptr, op_str.Len, op_str.Ptr ); + name = c_str_fmt_buf( "%.*soperator %.*s", nspace.Len, nspace.Ptr, op_str.Len, op_str.Ptr ); else - name = str_fmt_buf( "operator %.*s", op_str.Len, op_str.Ptr ); + name = c_str_fmt_buf( "operator %.*s", op_str.Len, op_str.Ptr ); - StrC name_resolved = { str_len(name), name }; + Str name_resolved = { c_str_len(name), name }; CodeOperator result = (CodeOperator) make_code(); @@ -969,7 +969,7 @@ CodeOpCast def_operator_cast( CodeTypename type, Opts_def_operator_cast p ) return result; } -CodeParams def_param( CodeTypename type, StrC name, Opts_def_param p ) +CodeParams def_param( CodeTypename type, Str name, Opts_def_param p ) { if ( ! name_check( def_param, name ) || ! null_check( def_param, type ) ) { GEN_DEBUG_TRAP(); @@ -993,7 +993,7 @@ CodeParams def_param( CodeTypename type, StrC name, Opts_def_param p ) return result; } -CodePragma def_pragma( StrC directive ) +CodePragma def_pragma( Str directive ) { if ( directive.Len <= 0 || directive.Ptr == nullptr ) { log_failure( "gen::def_comment: Invalid comment provided:" ); @@ -1007,7 +1007,7 @@ CodePragma def_pragma( StrC directive ) return result; } -CodePreprocessCond def_preprocess_cond( EPreprocessCond type, StrC expr ) +CodePreprocessCond def_preprocess_cond( EPreprocessCond type, Str expr ) { if ( expr.Len <= 0 || expr.Ptr == nullptr ) { log_failure( "gen::def_comment: Invalid comment provided:" ); @@ -1044,7 +1044,7 @@ CodeSpecifiers def_specifier( Specifier spec ) return result; } -CodeStruct def_struct( StrC name, Opts_def_struct p ) +CodeStruct def_struct( Str name, Opts_def_struct p ) { if ( p.attributes && p.attributes->Type != CT_PlatformAttributes ) { log_failure( "gen::def_struct: attributes was not a `PlatformAttributes` type - %s", code_debug_str(cast(Code, p.attributes)) ); @@ -1117,7 +1117,7 @@ CodeTemplate def_template( CodeParams params, Code declaration, Opts_def_templat return result; } -CodeTypename def_type( StrC name, Opts_def_type p ) +CodeTypename def_type( Str name, Opts_def_type p ) { if ( ! name_check( def_type, name )) { GEN_DEBUG_TRAP(); @@ -1152,7 +1152,7 @@ CodeTypename def_type( StrC name, Opts_def_type p ) return result; } -CodeTypedef def_typedef( StrC name, Code type, Opts_def_typedef p ) +CodeTypedef def_typedef( Str name, Code type, Opts_def_typedef p ) { if ( ! null_check( def_typedef, type ) ) { GEN_DEBUG_TRAP(); @@ -1215,7 +1215,7 @@ CodeTypedef def_typedef( StrC name, Code type, Opts_def_typedef p ) return result; } -CodeUnion def_union( StrC name, CodeBody body, Opts_def_union p ) +CodeUnion def_union( Str name, CodeBody body, Opts_def_union p ) { if ( ! null_check( def_union, body ) ) { GEN_DEBUG_TRAP(); @@ -1242,7 +1242,7 @@ CodeUnion def_union( StrC name, CodeBody body, Opts_def_union p ) return result; } -CodeUsing def_using( StrC name, CodeTypename type, Opts_def_using p ) +CodeUsing def_using( Str name, CodeTypename type, Opts_def_using p ) { if ( ! name_check( def_using, name ) || null_check( def_using, type ) ) { GEN_DEBUG_TRAP(); @@ -1270,7 +1270,7 @@ CodeUsing def_using( StrC name, CodeTypename type, Opts_def_using p ) return result; } -CodeUsing def_using_namespace( StrC name ) +CodeUsing def_using_namespace( Str name ) { if ( ! name_check( def_using_namespace, name ) ) { GEN_DEBUG_TRAP(); @@ -1283,7 +1283,7 @@ CodeUsing def_using_namespace( StrC name ) return result; } -CodeVar def_variable( CodeTypename type, StrC name, Opts_def_variable p ) +CodeVar def_variable( CodeTypename type, Str name, Opts_def_variable p ) { if ( ! name_check( def_variable, name ) || null_check( def_variable, type ) ) { GEN_DEBUG_TRAP(); diff --git a/base/components/lexer.cpp b/base/components/lexer.cpp index 4fd1429..692322c 100644 --- a/base/components/lexer.cpp +++ b/base/components/lexer.cpp @@ -41,9 +41,9 @@ AccessSpec tok_to_access_specifier(Token tok) return scast(AccessSpec, tok.Type); } -StrC tok_to_str(Token tok) +Str tok_to_str(Token tok) { - StrC str = { tok.Length, tok.Text }; + Str str = { tok.Length, tok.Text }; return str; } @@ -92,13 +92,13 @@ bool tok_is_end_definition(Token tok) return bitfield_is_equal( u32, tok.Flags, TF_EndDefinition ); } -String tok_to_string(Token tok) +StrBuilder tok_to_string(Token tok) { - String result = string_make_reserve( GlobalAllocator, kilobytes(4) ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); - StrC type_str = toktype_to_str( tok.Type ); + Str type_str = toktype_to_str( tok.Type ); - string_append_fmt( & result, "Line: %d Column: %d, Type: %.*s Content: %.*s" + strbuilder_append_fmt( & result, "Line: %d Column: %d, Type: %.*s Content: %.*s" , tok.Line, tok.Column , type_str.Len, type_str.Ptr , tok.Length, tok.Text @@ -183,7 +183,7 @@ enum struct LexContext { - StrC content; + Str content; s32 left; char const* scanner; s32 line; @@ -247,7 +247,7 @@ s32 lex_preprocessor_directive( LexContext* ctx ) ctx->token.Length++; } - ctx->token.Type = strc_to_toktype( tok_to_str(ctx->token) ); + ctx->token.Type = str_to_toktype( tok_to_str(ctx->token) ); bool is_preprocessor = ctx->token.Type >= Tok_Preprocess_Define && ctx->token.Type <= Tok_Preprocess_Pragma; if ( ! is_preprocessor ) @@ -365,7 +365,7 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( (* ctx->scanner) != '"' && (* ctx->scanner) != '<' ) { - String directive_str = string_fmt_buf( GlobalAllocator, "%.*s", min( 80, ctx->left + preprocess_content.Length ), ctx->token.Text ); + StrBuilder directive_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 80, ctx->left + preprocess_content.Length ), ctx->token.Text ); log_failure( "gen::Parser::lex: Expected '\"' or '<' after #include, not '%c' (%d, %d)\n%s" , (* ctx->scanner) @@ -432,8 +432,8 @@ s32 lex_preprocessor_directive( LexContext* ctx ) } else { - String directive_str = string_make_length( GlobalAllocator, ctx->token.Text, ctx->token.Length ); - String content_str = string_fmt_buf( GlobalAllocator, "%.*s", min( 400, ctx->left + preprocess_content.Length ), preprocess_content.Text ); + StrBuilder directive_str = strbuilder_make_length( GlobalAllocator, ctx->token.Text, ctx->token.Length ); + StrBuilder content_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 400, ctx->left + preprocess_content.Length ), preprocess_content.Text ); log_failure( "gen::Parser::lex: Invalid escape sequence '\\%c' (%d, %d)" " in preprocessor directive '%s' (%d, %d)\n%s" @@ -473,7 +473,7 @@ void lex_found_token( LexContext* ctx ) return; } - TokType type = strc_to_toktype( tok_to_str(ctx->token) ); + TokType type = str_to_toktype( tok_to_str(ctx->token) ); if (type <= Tok_Access_Public && type >= Tok_Access_Private ) { @@ -524,7 +524,7 @@ void lex_found_token( LexContext* ctx ) else key = crc32( ctx->token.Text, ctx->token.Length ); - StrC* define = hashtable_get(ctx->defines, key ); + Str* define = hashtable_get(ctx->defines, key ); if ( define ) { ctx->token.Type = Tok_Preprocess_Macro; @@ -572,8 +572,8 @@ void lex_found_token( LexContext* ctx ) } neverinline -// TokArray lex( Array tokens, StrC content ) -TokArray lex( StrC content ) +// TokArray lex( Array tokens, Str content ) +TokArray lex( Str content ) { LexContext c; LexContext* ctx = & c; c.content = content; @@ -620,7 +620,7 @@ TokArray lex( StrC content ) #if 0 if (Tokens.num()) { - log_fmt("\nLastTok: %S", Tokens.back().to_string()); + log_fmt("\nLastTok: %SB", Tokens.back().to_string()); } #endif @@ -721,7 +721,7 @@ TokArray lex( StrC content ) } else { - String context_str = string_fmt_buf( GlobalAllocator, "%s", c.scanner, min( 100, c.left ) ); + StrBuilder context_str = strbuilder_fmt_buf( GlobalAllocator, "%s", c.scanner, min( 100, c.left ) ); log_failure( "gen::lex: invalid varadic argument, expected '...' got '..%c' (%d, %d)\n%s", (* ctx->scanner), c.line, c.column, context_str ); } @@ -1282,7 +1282,7 @@ TokArray lex( StrC content ) ); } - String context_str = string_fmt_buf( GlobalAllocator, "%.*s", min( 100, c.left ), c.scanner ); + StrBuilder context_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 100, c.left ), c.scanner ); log_failure( "Failed to lex token '%c' (%d, %d)\n%s", (* ctx->scanner), c.line, c.column, context_str ); // Skip to next whitespace since we can't know if anything else is valid until then. diff --git a/base/components/parser.cpp b/base/components/parser.cpp index c746c6c..9ffdb8f 100644 --- a/base/components/parser.cpp +++ b/base/components/parser.cpp @@ -18,7 +18,7 @@ struct StackNode Token Start; Token Name; // The name of the AST node (if parsed) - StrC ProcName; // The name of the procedure + Str ProcName; // The name of the procedure }; struct ParseContext @@ -45,9 +45,9 @@ void parser_pop(ParseContext* ctx) ctx->Scope = ctx->Scope->Prev; } -String parser_to_string(ParseContext ctx) +StrBuilder parser_to_string(ParseContext ctx) { - String result = string_make_reserve( GlobalAllocator, kilobytes(4) ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); Token scope_start = ctx.Scope->Start; Token last_valid = ctx.Tokens.Idx >= array_num(ctx.Tokens.Arr) ? ctx.Tokens.Arr[array_num(ctx.Tokens.Arr) -1] : (* lex_current(& ctx.Tokens, true)); @@ -60,21 +60,21 @@ String parser_to_string(ParseContext ctx) length++; } - StrC scope_strc = { length, scope_start.Text }; - String line = string_make_strc( GlobalAllocator, scope_strc ); - string_append_fmt( & result, "\tScope : %s\n", line ); - string_free(& line); + Str scope_str = { length, scope_start.Text }; + StrBuilder line = strbuilder_make_str( GlobalAllocator, scope_str ); + strbuilder_append_fmt( & result, "\tScope : %s\n", line ); + strbuilder_free(& line); sptr dist = (sptr)last_valid.Text - (sptr)scope_start.Text + 2; sptr length_from_err = dist; - StrC err_strc = { length_from_err, last_valid.Text }; - String line_from_err = string_make_strc( GlobalAllocator, err_strc ); + Str err_str = { length_from_err, last_valid.Text }; + StrBuilder line_from_err = strbuilder_make_str( GlobalAllocator, err_str ); if ( length_from_err < 100 ) - string_append_fmt(& result, "\t(%d, %d):%*c\n", last_valid.Line, last_valid.Column, length_from_err, '^' ); + strbuilder_append_fmt(& result, "\t(%d, %d):%*c\n", last_valid.Line, last_valid.Column, length_from_err, '^' ); else - string_append_fmt(& result, "\t(%d, %d)\n", last_valid.Line, last_valid.Column ); + strbuilder_append_fmt(& result, "\t(%d, %d)\n", last_valid.Line, last_valid.Column ); StackNode* curr_scope = ctx.Scope; s32 level = 0; @@ -82,11 +82,11 @@ String parser_to_string(ParseContext ctx) { if ( tok_is_valid(curr_scope->Name) ) { - string_append_fmt(& result, "\t%d: %s, AST Name: %.*s\n", level, curr_scope->ProcName.Ptr, curr_scope->Name.Length, curr_scope->Name.Text ); + strbuilder_append_fmt(& result, "\t%d: %s, AST Name: %.*s\n", level, curr_scope->ProcName.Ptr, curr_scope->Name.Length, curr_scope->Name.Text ); } else { - string_append_fmt(& result, "\t%d: %s\n", level, curr_scope->ProcName.Ptr ); + strbuilder_append_fmt(& result, "\t%d: %s\n", level, curr_scope->ProcName.Ptr ); } curr_scope = curr_scope->Prev; @@ -129,7 +129,7 @@ bool lex__eat(TokArray* self, TokType type ) } #if 0 && GEN_BUILD_DEBUG - log_fmt("Ate: %S\n", self->Arr[Idx].to_string() ); + log_fmt("Ate: %SB\n", self->Arr[Idx].to_string() ); #endif self->Idx ++; @@ -144,7 +144,7 @@ void parser_init() ); fixed_arena_init(& Lexer_defines_map_arena); - Lexer_defines = hashtable_init_reserve(StrC, fixed_arena_allocator_info( & Lexer_defines_map_arena), 256 ); + Lexer_defines = hashtable_init_reserve(Str, fixed_arena_allocator_info( & Lexer_defines_map_arena), 256 ); } internal @@ -157,17 +157,17 @@ void parser_deinit() #pragma region Helper Macros #define check_parse_args( def ) _check_parse_args(def, stringize(_func_) ) -bool _check_parse_args( StrC def, char const* func_name ) +bool _check_parse_args( Str def, char const* func_name ) { if ( def.Len <= 0 ) { - log_failure( str_fmt_buf("gen::%s: length must greater than 0", func_name) ); + log_failure( c_str_fmt_buf("gen::%s: length must greater than 0", func_name) ); parser_pop(& Context); return false; } if ( def.Ptr == nullptr ) { - log_failure( str_fmt_buf("gen::%s: def was null", func_name) ); + log_failure( c_str_fmt_buf("gen::%s: def was null", func_name) ); parser_pop(& Context); return false; } @@ -230,7 +230,7 @@ internal CodePreprocessCond parse_preprocess_cond (); internal Code parse_simple_preprocess ( TokType which, bool dont_consume_braces ); internal Code parse_static_assert (); internal void parse_template_args ( Token* token ); -internal CodeVar parse_variable_after_name ( ModuleFlag mflags, CodeAttributes attributes, CodeSpecifiers specifiers, CodeTypename type, StrC name ); +internal CodeVar parse_variable_after_name ( ModuleFlag mflags, CodeAttributes attributes, CodeSpecifiers specifiers, CodeTypename type, Str name ); internal CodeVar parse_variable_declaration_list (); internal CodeClass parser_parse_class ( bool inplace_def ); @@ -268,9 +268,9 @@ constexpr bool parser_strip_formatting_dont_preserve_newlines = false; It has edge case failures that prevent it from being used in function bodies. */ internal -String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) +StrBuilder parser_strip_formatting( Str raw_text, bool preserve_newlines ) { - String content = string_make_reserve( GlobalAllocator, raw_text.Len ); + StrBuilder content = strbuilder_make_reserve( GlobalAllocator, raw_text.Len ); if ( raw_text.Len == 0 ) return content; @@ -317,7 +317,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) if ( tokleft ) move_fwd(); - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast(sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } @@ -339,7 +339,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) if ( tokleft ) move_fwd(); - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } @@ -353,7 +353,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) scanner += 2; tokleft -= 2; - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } @@ -372,7 +372,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) if (tokleft) move_fwd(); - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } @@ -381,10 +381,10 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) if (scanner[0] == '\t') { if (pos > last_cut) - string_append_c_str_len( & content, cut_ptr, cut_length); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length); - if ( * string_back( content ) != ' ' ) - string_append_char( & content, ' ' ); + if ( * strbuilder_back( content ) != ' ' ) + strbuilder_append_char( & content, ' ' ); move_fwd(); last_cut = rcast( sptr, scanner) - rcast( sptr, raw_text.Ptr); @@ -400,17 +400,17 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) scanner += 2; tokleft -= 2; - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } if ( pos > last_cut ) - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); // Replace with a space - if ( * string_back( content ) != ' ' ) - string_append_char( & content, ' ' ); + if ( * strbuilder_back( content ) != ' ' ) + strbuilder_append_char( & content, ' ' ); scanner += 2; tokleft -= 2; @@ -427,17 +427,17 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) move_fwd(); - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); continue; } if ( pos > last_cut ) - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); // Replace with a space - if ( * string_back( content ) != ' ' ) - string_append_char( & content, ' ' ); + if ( * strbuilder_back( content ) != ' ' ) + strbuilder_append_char( & content, ' ' ); move_fwd(); @@ -448,7 +448,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) // Escaped newlines if ( scanner[0] == '\\' ) { - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); s32 amount_to_skip = 1; if ( tokleft > 1 && scanner[1] == '\n' ) @@ -475,7 +475,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) // Consectuive spaces if ( tokleft > 1 && char_is_space( scanner[0] ) && char_is_space( scanner[ 1 ] ) ) { - string_append_c_str_len( & content, cut_ptr, cut_length ); + strbuilder_append_c_str_len( & content, cut_ptr, cut_length ); do { move_fwd(); @@ -485,9 +485,9 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) last_cut = rcast( sptr, scanner ) - rcast( sptr, raw_text.Ptr ); // Preserve only 1 space of formattting - char* last = string_back(content); + char* last = strbuilder_back(content); if ( last == nullptr || * last != ' ' ) - string_append_char( & content, ' ' ); + strbuilder_append_char( & content, ' ' ); continue; } @@ -497,7 +497,7 @@ String parser_strip_formatting( StrC raw_text, bool preserve_newlines ) if ( last_cut < raw_text.Len ) { - string_append_c_str_len( & content, cut_ptr, raw_text.Len - last_cut ); + strbuilder_append_c_str_len( & content, cut_ptr, raw_text.Len - last_cut ); } #undef cut_ptr @@ -681,14 +681,14 @@ CodeAttributes parse_attributes() if ( len > 0 ) { - StrC attribute_txt = { len, start.Text }; + Str attribute_txt = { len, start.Text }; parser_pop(& Context); - String name_stripped = parser_strip_formatting( attribute_txt, parser_strip_formatting_dont_preserve_newlines ); + StrBuilder name_stripped = parser_strip_formatting( attribute_txt, parser_strip_formatting_dont_preserve_newlines ); Code result = make_code(); result->Type = CT_PlatformAttributes; - result->Name = get_cached_string( string_to_strc(name_stripped) ); + result->Name = get_cached_string( strbuilder_to_str(name_stripped) ); result->Content = result->Name; // result->Token = @@ -846,7 +846,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) case Tok_Statement_End: { // TODO(Ed): Convert this to a general warning procedure - log_fmt("Dangling end statement found %S\n", tok_to_string(currtok_noskip)); + log_fmt("Dangling end statement found %SB\n", tok_to_string(currtok_noskip)); eat( Tok_Statement_End ); continue; } @@ -1015,7 +1015,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); b32 ignore_spec = false; @@ -1069,10 +1069,10 @@ CodeBody parse_class_struct_body( TokType which, Token name ) if ( attributes ) { - String fused = string_make_reserve( GlobalAllocator, attributes->Content.Len + more_attributes->Content.Len ); - string_append_fmt( & fused, "%S %S", attributes->Content, more_attributes->Content ); + StrBuilder fused = strbuilder_make_reserve( GlobalAllocator, attributes->Content.Len + more_attributes->Content.Len ); + strbuilder_append_fmt( & fused, "%SB %SB", attributes->Content, more_attributes->Content ); - StrC attrib_name = { string_length(fused), fused }; + Str attrib_name = { strbuilder_length(fused), fused }; attributes->Name = get_cached_string( attrib_name ); attributes->Content = attributes->Name; // @@ -1109,7 +1109,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) { if ( nexttok.Type == Tok_Capture_Start && name.Length && currtok.Type == Tok_Identifier ) { - if ( str_compare_len( name.Text, currtok.Text, name.Length ) == 0 ) + if ( c_str_compare_len( name.Text, currtok.Text, name.Length ) == 0 ) { member = cast(Code, parser_parse_constructor( specifiers )); // () @@ -1226,13 +1226,13 @@ Code parse_complicated_definition( TokType which ) } Token tok = tokens.Arr[ idx - 1 ]; - if ( tok_is_specifier(tok) && spec_is_trailing( strc_to_specifier( tok_to_str(tok))) ) + if ( tok_is_specifier(tok) && spec_is_trailing( str_to_specifier( tok_to_str(tok))) ) { // (...) ...; s32 spec_idx = idx - 1; Token spec = tokens.Arr[spec_idx]; - while ( tok_is_specifier(spec) && spec_is_trailing( strc_to_specifier( tok_to_str(spec))) ) + while ( tok_is_specifier(spec) && spec_is_trailing( str_to_specifier( tok_to_str(spec))) ) { -- spec_idx; spec = tokens.Arr[spec_idx]; @@ -1343,7 +1343,7 @@ Code parse_complicated_definition( TokType which ) } else { - log_failure( "Unsupported or bad member definition after %s declaration\n%S", toktype_to_str(which).Ptr, parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after %s declaration\n%SB", toktype_to_str(which).Ptr, parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1389,7 +1389,7 @@ CodeDefine parse_define() return define; } - define->Content = get_cached_string( string_to_strc( parser_strip_formatting( tok_to_str(currtok), parser_strip_formatting_dont_preserve_newlines )) ); + define->Content = get_cached_string( strbuilder_to_str( parser_strip_formatting( tok_to_str(currtok), parser_strip_formatting_dont_preserve_newlines )) ); eat( Tok_Preprocess_Content ); // #define @@ -1486,12 +1486,12 @@ CodeFn parse_function_after_name( { if ( specifiers == nullptr ) { - specifiers = def_specifier( strc_to_specifier( tok_to_str(currtok)) ); + specifiers = def_specifier( str_to_specifier( tok_to_str(currtok)) ); eat( currtok.Type ); continue; } - specifiers_append(specifiers, strc_to_specifier( tok_to_str(currtok)) ); + specifiers_append(specifiers, str_to_specifier( tok_to_str(currtok)) ); eat( currtok.Type ); } // ( ) @@ -1533,13 +1533,13 @@ CodeFn parse_function_after_name( // ( ) ; } - String - name_stripped = string_make_strc( GlobalAllocator, tok_to_str(name) ); + StrBuilder + name_stripped = strbuilder_make_str( GlobalAllocator, tok_to_str(name) ); strip_space(name_stripped); CodeFn result = (CodeFn) make_code(); - result->Name = get_cached_string( string_to_strc(name_stripped) ); + result->Name = get_cached_string( strbuilder_to_str(name_stripped) ); result->ModuleFlags = mflags; if ( body ) @@ -1616,7 +1616,7 @@ Code parse_function_body() if ( len > 0 ) { - StrC str = { len, start.Text }; + Str str = { len, start.Text }; body_append( result, cast(Code, def_execution( str )) ); } @@ -1661,7 +1661,7 @@ CodeBody parse_global_nspace( CodeType which ) { case Tok_Comma: { - log_failure("Dangling comma found: %S\nContext:\n%S", tok_to_string(currtok), parser_to_string(Context)); + log_failure("Dangling comma found: %SB\nContext:\n%SB", tok_to_string(currtok), parser_to_string(Context)); parser_pop( & Context); return InvalidCode; } @@ -1669,7 +1669,7 @@ CodeBody parse_global_nspace( CodeType which ) case Tok_Statement_End: { // TODO(Ed): Convert this to a general warning procedure - log_fmt("Dangling end statement found %S\n", tok_to_string(currtok_noskip)); + log_fmt("Dangling end statement found %SB\n", tok_to_string(currtok_noskip)); eat( Tok_Statement_End ); continue; } @@ -1828,7 +1828,7 @@ CodeBody parse_global_nspace( CodeType which ) while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); bool ignore_spec = false; @@ -1856,7 +1856,7 @@ CodeBody parse_global_nspace( CodeType which ) break; default: - StrC spec_str = spec_to_str(spec); + Str spec_str = spec_to_str(spec); log_failure( "Invalid specifier %.*s for variable\n%s", spec_str.Len, spec_str, parser_to_string(Context) ); parser_pop(& Context); @@ -1960,7 +1960,7 @@ CodeBody parse_global_nspace( CodeType which ) Member_Resolved_To_Lone_Macro: if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\nToken: %S\nContext:\n%S", tok_to_string(currtok_noskip), parser_to_string(Context) ); + log_failure( "Failed to parse member\nToken: %SB\nContext:\n%SB", tok_to_string(currtok_noskip), parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2087,7 +2087,7 @@ Code parse_global_nspace_constructor_destructor( CodeSpecifiers specifiers ) tok_left = tokens.Arr[idx]; } - bool is_same = str_compare_len( tok_right.Text, tok_left.Text, tok_right.Length ) == 0; + bool is_same = c_str_compare_len( tok_right.Text, tok_left.Text, tok_right.Length ) == 0; if (tok_left.Type == Tok_Identifier && is_same) { // We have found the pattern we desired @@ -2136,7 +2136,7 @@ Token parse_identifier( bool* possible_member_function ) if ( currtok.Type == Tok_Operator && currtok.Text[0] == '~' ) { - bool is_destructor = strc_are_equal( Context.Scope->Prev->ProcName, txt("parser_parse_destructor")); + bool is_destructor = str_are_equal( Context.Scope->Prev->ProcName, txt("parser_parse_destructor")); if (is_destructor) { name.Length = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )name.Text; @@ -2144,7 +2144,7 @@ Token parse_identifier( bool* possible_member_function ) return name; } - log_failure( "Error, had a ~ operator after %S but not a destructor\n%s", toktype_to_str( prevtok.Type ), parser_to_string(Context) ); + log_failure( "Error, had a ~ operator after %SB but not a destructor\n%s", toktype_to_str( prevtok.Type ), parser_to_string(Context) ); parser_pop(& Context); return invalid; } @@ -2442,9 +2442,9 @@ CodeOperator parse_operator_after_ret_type( break; default: { - StrC str_new = operator_to_str(Op_New); - StrC str_delete = operator_to_str(Op_Delete); - if ( str_compare_len( currtok.Text, str_new.Ptr, max(str_new.Len - 1, currtok.Length)) == 0) + Str c_str_new = operator_to_str(Op_New); + Str c_str_delete = operator_to_str(Op_Delete); + if ( c_str_compare_len( currtok.Text, c_str_new.Ptr, max(c_str_new.Len - 1, currtok.Length)) == 0) { op = Op_New; eat( Tok_Identifier ); @@ -2456,7 +2456,7 @@ CodeOperator parse_operator_after_ret_type( idx++; } Token next = Context.Tokens.Arr[idx]; - if ( currtok.Type == Tok_Operator && str_compare_len(currtok.Text, "[]", 2) == 0) + if ( currtok.Type == Tok_Operator && c_str_compare_len(currtok.Text, "[]", 2) == 0) { eat(Tok_Operator); op = Op_NewArray; @@ -2468,7 +2468,7 @@ CodeOperator parse_operator_after_ret_type( op = Op_NewArray; } } - else if ( str_compare_len( currtok.Text, str_delete.Ptr, max(str_delete.Len - 1, currtok.Length )) == 0) + else if ( c_str_compare_len( currtok.Text, c_str_delete.Ptr, max(c_str_delete.Len - 1, currtok.Length )) == 0) { op = Op_Delete; eat(Tok_Identifier); @@ -2480,7 +2480,7 @@ CodeOperator parse_operator_after_ret_type( idx++; } Token next = Context.Tokens.Arr[idx]; - if ( currtok.Type == Tok_Operator && str_compare_len(currtok.Text, "[]", 2) == 0) + if ( currtok.Type == Tok_Operator && c_str_compare_len(currtok.Text, "[]", 2) == 0) { eat(Tok_Operator); op = Op_DeleteArray; @@ -2526,12 +2526,12 @@ CodeOperator parse_operator_after_ret_type( { if ( specifiers == nullptr ) { - specifiers = def_specifier( strc_to_specifier( tok_to_str(currtok)) ); + specifiers = def_specifier( str_to_specifier( tok_to_str(currtok)) ); eat( currtok.Type ); continue; } - specifiers_append(specifiers, strc_to_specifier( tok_to_str(currtok)) ); + specifiers_append(specifiers, str_to_specifier( tok_to_str(currtok)) ); eat( currtok.Type ); } // operator ( ) @@ -2818,7 +2818,7 @@ CodeParams parse_params( bool use_template_capture ) eat( currtok.Type ); } - value = untyped_str( string_to_strc(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); + value = untyped_str( strbuilder_to_str(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); // ( = } } @@ -2934,7 +2934,7 @@ CodeParams parse_params( bool use_template_capture ) eat( currtok.Type ); } - value = untyped_str( string_to_strc(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); + value = untyped_str( strbuilder_to_str(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); // ( = , = } // ( = , = , .. @@ -3045,8 +3045,8 @@ Code parse_simple_preprocess( TokType which, bool dont_consume_braces ) eat( Tok_BraceCurly_Close ); // { } - StrC prev_proc = Context.Scope->Prev->ProcName; - if ( str_compare_len( prev_proc.Ptr, "parser_parse_typedef", prev_proc.Len ) != 0 ) + Str prev_proc = Context.Scope->Prev->ProcName; + if ( c_str_compare_len( prev_proc.Ptr, "parser_parse_typedef", prev_proc.Len ) != 0 ) { if ( check( Tok_Statement_End )) { @@ -3066,14 +3066,14 @@ Code parse_simple_preprocess( TokType which, bool dont_consume_braces ) { // If the macro is just a macro in the body of an AST it may have a semi-colon for the user to close on purpsoe // (especially for functional macros) - StrC calling_proc = Context.Scope->Prev->ProcName; + Str calling_proc = Context.Scope->Prev->ProcName; - if (strc_contains(Context.Scope->Prev->ProcName, txt("parser_parse_enum"))) + if (str_contains(Context.Scope->Prev->ProcName, txt("parser_parse_enum"))) { // Do nothing goto Leave_Scope_Early; } - else if (strc_contains(Context.Scope->Prev->ProcName, txt("parser_parse_typedef"))) + else if (str_contains(Context.Scope->Prev->ProcName, txt("parser_parse_typedef"))) { // TODO(Ed): Reveiw the context for this? if ( peektok.Type == Tok_Statement_End ) @@ -3095,8 +3095,8 @@ Code parse_simple_preprocess( TokType which, bool dont_consume_braces ) } } else if ( - strc_contains(calling_proc, txt("parse_global_nspace")) - || strc_contains(calling_proc, txt("parse_class_struct_body")) + str_contains(calling_proc, txt("parse_global_nspace")) + || str_contains(calling_proc, txt("parse_class_struct_body")) ) { if (peektok.Type == Tok_Statement_End) @@ -3113,9 +3113,9 @@ Code parse_simple_preprocess( TokType which, bool dont_consume_braces ) Leave_Scope_Early: - char const* content = str_fmt_buf( "%.*s ", tok.Length, tok.Text ); + char const* content = c_str_fmt_buf( "%.*s ", tok.Length, tok.Text ); - Code result = untyped_str( to_strc_from_c_str(content) ); + Code result = untyped_str( to_str_from_c_str(content) ); Context.Scope->Name = tok; parser_pop(& Context); @@ -3156,8 +3156,8 @@ Code parse_static_assert() content.Length = ( (sptr)prevtok.Text + prevtok.Length ) - (sptr)content.Text; - char const* str = str_fmt_buf( "%.*s\n", content.Length, content.Text ); - StrC content_str = { content.Length + 1, str }; + char const* str = c_str_fmt_buf( "%.*s\n", content.Length, content.Text ); + Str content_str = { content.Length + 1, str }; assert->Content = get_cached_string( content_str ); assert->Name = assert->Content; @@ -3211,7 +3211,7 @@ CodeVar parse_variable_after_name( , CodeAttributes attributes , CodeSpecifiers specifiers , CodeTypename type - , StrC name + , Str name ) { push_scope(); @@ -3289,7 +3289,7 @@ CodeVar parse_variable_after_name( if ( currtok.Type == Tok_Statement_End ) { - log_failure( "Expected expression after bitfield \n%S", parser_to_string(Context) ); + log_failure( "Expected expression after bitfield \n%SB", parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -3398,7 +3398,7 @@ CodeVar parse_variable_declaration_list() while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { @@ -3406,7 +3406,7 @@ CodeVar parse_variable_declaration_list() if ( specifiers->NumEntries && specifiers->ArrSpecs[ specifiers->NumEntries - 1 ] != Spec_Ptr ) { log_failure( "Error, const specifier must come after pointer specifier for variable declaration proceeding comma\n" - "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%S" + "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%SB" , parser_to_string(Context) ); specifiers_append(specifiers, spec ); @@ -3421,7 +3421,7 @@ CodeVar parse_variable_declaration_list() default: { log_failure( "Error, invalid specifier '%s' proceeding comma\n" - "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%SC" + "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%S" , tok_to_str(currtok), parser_to_string(Context) ); continue; } @@ -3437,7 +3437,7 @@ CodeVar parse_variable_declaration_list() } // , - StrC name = tok_to_str(currtok); + Str name = tok_to_str(currtok); eat( Tok_Identifier ); // , @@ -3566,7 +3566,7 @@ CodeDestructor parser_parse_destructor( CodeSpecifiers specifiers ) push_scope(); bool has_context = Context.Scope && Context.Scope->Prev; - bool is_in_global_nspace = has_context && strc_are_equal( Context.Scope->Prev->ProcName, txt("parse_global_nspace") ); + bool is_in_global_nspace = has_context && str_are_equal( Context.Scope->Prev->ProcName, txt("parse_global_nspace") ); if ( check( Tok_Spec_Virtual ) ) { @@ -3617,7 +3617,7 @@ CodeDestructor parser_parse_destructor( CodeSpecifiers specifiers ) specifiers_append(specifiers, Spec_Pure ); } - else if ( left && str_compare_len( upcoming.Text, "default", sizeof("default") - 1 ) == 0) + else if ( left && c_str_compare_len( upcoming.Text, "default", sizeof("default") - 1 ) == 0) { body = cast(CodeBody, parse_assignment_expression()); // ~< @@ -3731,7 +3731,7 @@ CodeEnum parser_parse_enum( bool inplace_def ) else if ( currtok.Type == Tok_Preprocess_Macro ) { // We'll support the enum_underlying macro - if ( strc_contains( tok_to_str(currtok), enum_underlying_sig) ) + if ( str_contains( tok_to_str(currtok), enum_underlying_sig) ) { use_macro_underlying = true; underlying_macro = parse_simple_preprocess( Tok_Preprocess_Macro, parser_dont_consume_braces ); @@ -3988,7 +3988,7 @@ CodeFriend parser_parse_friend() while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { @@ -4112,7 +4112,7 @@ CodeFn parser_parse_function() while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { @@ -4225,7 +4225,7 @@ CodeOperator parser_parse_operator() while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { @@ -4238,7 +4238,7 @@ CodeOperator parser_parse_operator() break; default: - log_failure( "Invalid specifier " "%SC" " for operator\n%S", spec_to_str(spec), parser_to_string(Context) ); + log_failure( "Invalid specifier " "%S" " for operator\n%SB", spec_to_str(spec), parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4467,7 +4467,7 @@ CodeTemplate parser_parse_template() { while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { @@ -4513,7 +4513,7 @@ CodeTemplate parser_parse_template() bool has_context = Context.Scope && Context.Scope->Prev; - bool is_in_global_nspace = has_context && strc_are_equal( Context.Scope->Prev->ProcName, txt("parse_global_nspace") ); + bool is_in_global_nspace = has_context && str_are_equal( Context.Scope->Prev->ProcName, txt("parse_global_nspace") ); // Possible constructor implemented at global file scope. if (is_in_global_nspace) { @@ -4610,11 +4610,11 @@ CodeTypename parser_parse_type( bool from_template, bool* typedef_is_function ) // Prefix specifiers while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); if ( spec != Spec_Const ) { - log_failure( "Error, invalid specifier used in type definition: %SC\n%S", tok_to_str(currtok), parser_to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4627,7 +4627,7 @@ CodeTypename parser_parse_type( bool from_template, bool* typedef_is_function ) if ( left == 0 ) { - log_failure( "Error, unexpected end of type definition\n%S", parser_to_string(Context) ); + log_failure( "Error, unexpected end of type definition\n%SB", parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4749,7 +4749,7 @@ else if ( currtok.Type == Tok_DeclType ) // Suffix specifiers for typename. while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); if ( spec != Spec_Const && spec != Spec_Ptr && spec != Spec_Ref && spec != Spec_RValue ) { @@ -4808,7 +4808,7 @@ else if ( currtok.Type == Tok_DeclType ) } bool has_context = Context.Scope && Context.Scope->Prev; - bool is_for_opcast = has_context && strc_are_equal( Context.Scope->Prev->ProcName, txt("parser_parse_operator_cast") ); + bool is_for_opcast = has_context && str_are_equal( Context.Scope->Prev->ProcName, txt("parser_parse_operator_cast") ); if ( is_for_opcast && is_function_typename && last_capture ) { // If we're parsing for an operator cast, having one capture start is not enough @@ -4832,8 +4832,8 @@ else if ( currtok.Type == Tok_DeclType ) return_type = ( CodeTypename )make_code(); return_type->Type = CT_Typename; - // String - // name_stripped = String::make( GlobalAllocator, name ); + // StrBuilder + // name_stripped = StrBuilder::make( GlobalAllocator, name ); // name_stripped.strip_space(); return_type->Name = get_cached_string( tok_to_str(name) ); @@ -4948,14 +4948,14 @@ else if ( currtok.Type == Tok_DeclType ) // Look for suffix specifiers for the function while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); if ( spec != Spec_Const // TODO : Add support for NoExcept, l-value, volatile, l-value, etc // && spec != Spec_NoExcept && spec != Spec_RValue ) { - log_failure( "Error, invalid specifier used in type definition: %SC\n%S", tok_to_str(currtok), parser_to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4989,7 +4989,7 @@ else if ( currtok.Type == Tok_DeclType ) // result->Token = Context.Scope->Start; // Need to wait until were using the new parsing method to do this. - String name_stripped = parser_strip_formatting( tok_to_str(name), parser_strip_formatting_dont_preserve_newlines ); + StrBuilder name_stripped = parser_strip_formatting( tok_to_str(name), parser_strip_formatting_dont_preserve_newlines ); // name_stripped.strip_space(); @@ -5000,7 +5000,7 @@ else if ( currtok.Type == Tok_DeclType ) } #endif - result->Name = get_cached_string( string_to_strc(name_stripped) ); + result->Name = get_cached_string( strbuilder_to_str(name_stripped) ); if ( attributes ) result->Attributes = attributes; @@ -5082,7 +5082,7 @@ CodeTypedef parser_parse_typedef() if ( currtok.Type == Tok_Identifier ) { - StrC name_str = { name.Length, name.Text }; + Str name_str = { name.Length, name.Text }; type = untyped_str(name_str); name = currtok; eat(Tok_Identifier); @@ -5161,7 +5161,7 @@ CodeTypedef parser_parse_typedef() if ( ! ok_to_parse ) { - log_failure( "Unsupported or bad member definition after struct declaration\n%S", parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5187,7 +5187,7 @@ CodeTypedef parser_parse_typedef() } else { - log_failure( "Unsupported or bad member definition after struct declaration\n%S", parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5208,7 +5208,7 @@ CodeTypedef parser_parse_typedef() } else if ( ! is_function ) { - log_failure( "Error, expected identifier for typedef\n%S", parser_to_string(Context) ); + log_failure( "Error, expected identifier for typedef\n%SB", parser_to_string(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5279,7 +5279,7 @@ CodeUnion parser_parse_union( bool inplace_def ) CodeAttributes attributes = parse_attributes(); // union - StrC name = { 0, nullptr }; + Str name = { 0, nullptr }; if ( check( Tok_Identifier ) ) { name = tok_to_str(currtok); @@ -5527,7 +5527,7 @@ CodeVar parser_parse_variable() while ( left && tok_is_specifier(currtok) ) { - Specifier spec = strc_to_specifier( tok_to_str(currtok) ); + Specifier spec = str_to_specifier( tok_to_str(currtok) ); switch ( spec ) { case Spec_Const: diff --git a/base/components/static_data.cpp b/base/components/static_data.cpp index 616eea8..614dce9 100644 --- a/base/components/static_data.cpp +++ b/base/components/static_data.cpp @@ -28,7 +28,7 @@ global AllocatorInfo Allocator_TypeTable = {0}; #pragma region Constants -global StrC enum_underlying_sig; +global Str enum_underlying_sig; global Code access_public; global Code access_protected; diff --git a/base/components/types.hpp b/base/components/types.hpp index 6892be1..2b3a614 100644 --- a/base/components/types.hpp +++ b/base/components/types.hpp @@ -44,17 +44,17 @@ enum AccessSpec : u32 static_assert( size_of(AccessSpec) == size_of(u32), "AccessSpec not u32 size" ); inline -StrC access_spec_to_str( AccessSpec type ) +Str access_spec_to_str( AccessSpec type ) { local_persist - StrC lookup[ (u32)AccessSpec_Num_AccessSpec ] = { + Str lookup[ (u32)AccessSpec_Num_AccessSpec ] = { { sizeof("") - 1, "" }, { sizeof("prviate") - 1, "private" }, { sizeof("protected") - 1, "private" }, { sizeof("public") - 1, "public" }, }; - StrC invalid = { sizeof("Invalid") - 1, "Invalid" }; + Str invalid = { sizeof("Invalid") - 1, "Invalid" }; if ( type > AccessSpec_Public ) return invalid; @@ -97,17 +97,17 @@ enum ModuleFlag : u32 static_assert( size_of(ModuleFlag) == size_of(u32), "ModuleFlag not u32 size" ); inline -StrC module_flag_to_str( ModuleFlag flag ) +Str module_flag_to_str( ModuleFlag flag ) { local_persist - StrC lookup[ (u32)Num_ModuleFlags ] = { + Str lookup[ (u32)Num_ModuleFlags ] = { { sizeof("__none__"), "__none__" }, { sizeof("export"), "export" }, { sizeof("import"), "import" }, }; local_persist - StrC invalid_flag = { sizeof("invalid"), "invalid" }; + Str invalid_flag = { sizeof("invalid"), "invalid" }; if ( flag > ModuleFlag_Import ) return invalid_flag; diff --git a/base/dependencies/debug.hpp b/base/dependencies/debug.hpp index a7e0da3..fb48432 100644 --- a/base/dependencies/debug.hpp +++ b/base/dependencies/debug.hpp @@ -48,7 +48,7 @@ local_persist thread_local \ char buf[GEN_PRINTF_MAXLEN] = { 0 }; \ \ - str_fmt(buf, GEN_PRINTF_MAXLEN, __VA_ARGS__); \ + c_str_fmt(buf, GEN_PRINTF_MAXLEN, __VA_ARGS__); \ GEN_PANIC(buf); \ } \ while (0) @@ -57,7 +57,7 @@ # define GEN_FATAL( ... ) \ do \ { \ - str_fmt_out_err( __VA_ARGS__ ); \ + c_str_fmt_out_err( __VA_ARGS__ ); \ process_exit(1); \ } \ while (0) diff --git a/base/dependencies/filesystem.cpp b/base/dependencies/filesystem.cpp index 79e5171..35e60ca 100644 --- a/base/dependencies/filesystem.cpp +++ b/base/dependencies/filesystem.cpp @@ -18,7 +18,7 @@ wchar_t* _alloc_utf8_to_ucs2( AllocatorInfo a, char const* text, ssize* w_len_ ) *w_len_ = w_len; return NULL; } - len = str_len( text ); + len = c_str_len( text ); if ( len == 0 ) { if ( w_len_ ) @@ -375,7 +375,7 @@ FileError file_close( FileInfo* f ) FileError file_new( FileInfo* f, FileDescriptor fd, FileOperations ops, char const* filename ) { FileError err = EFileError_NONE; - ssize len = str_len( filename ); + ssize len = c_str_len( filename ); f->ops = ops; f->fd = fd; diff --git a/base/dependencies/filesystem.hpp b/base/dependencies/filesystem.hpp index 94adc18..3b82280 100644 --- a/base/dependencies/filesystem.hpp +++ b/base/dependencies/filesystem.hpp @@ -93,7 +93,7 @@ struct DirInfo // Internals char** filenames; // zpl_array - String buf; + StrBuilder buf; }; struct FileInfo diff --git a/base/dependencies/parsing.cpp b/base/dependencies/parsing.cpp index 43ce31a..255fe40 100644 --- a/base/dependencies/parsing.cpp +++ b/base/dependencies/parsing.cpp @@ -8,7 +8,7 @@ #define _adt_fprintf( s_, fmt_, ... ) \ do \ { \ - if ( str_fmt_file( s_, fmt_, ##__VA_ARGS__ ) < 0 ) \ + if ( c_str_fmt_file( s_, fmt_, ##__VA_ARGS__ ) < 0 ) \ return EADT_ERROR_OUT_OF_MEMORY; \ } while ( 0 ) @@ -69,7 +69,7 @@ ADT_Node* adt_find( ADT_Node* node, char const* name, b32 deep_search ) for ( ssize i = 0; i < scast(ssize, array_num(node->nodes)); i++ ) { - if ( ! str_compare( node->nodes[ i ].name, name ) ) + if ( ! c_str_compare( node->nodes[ i ].name, name ) ) { return ( node->nodes + i ); } @@ -96,7 +96,7 @@ internal ADT_Node* _adt_get_value( ADT_Node* node, char const* value ) case EADT_TYPE_MULTISTRING : case EADT_TYPE_STRING : { - if ( node->string && ! str_compare( node->string, value ) ) + if ( node->string && ! c_str_compare( node->string, value ) ) { return node; } @@ -115,7 +115,7 @@ internal ADT_Node* _adt_get_value( ADT_Node* node, char const* value ) ssize fsize = 0; u8* buf = file_stream_buf( &tmp, &fsize ); - if ( ! str_compare( ( char const* )buf, value ) ) + if ( ! c_str_compare( ( char const* )buf, value ) ) { file_close( &tmp ); return node; @@ -135,7 +135,7 @@ internal ADT_Node* _adt_get_field( ADT_Node* node, char* name, char* value ) { for ( ssize i = 0; i < scast(ssize, array_num(node->nodes)); i++ ) { - if ( ! str_compare( node->nodes[ i ].name, name ) ) + if ( ! c_str_compare( node->nodes[ i ].name, name ) ) { ADT_Node* child = &node->nodes[ i ]; if ( _adt_get_value( child, value ) ) @@ -168,22 +168,22 @@ ADT_Node* adt_query( ADT_Node* node, char const* uri ) } #if defined EADT_URI_DEBUG || 0 - str_fmt_out( "uri: %s\n", uri ); + c_str_fmt_out( "uri: %s\n", uri ); #endif char * p = ( char* )uri, *b = p, *e = p; ADT_Node* found_node = NULL; b = p; - p = e = ( char* )str_skip( p, '/' ); - char* buf = str_fmt_buf( "%.*s", ( int )( e - b ), b ); + p = e = ( char* )c_str_skip( p, '/' ); + char* buf = c_str_fmt_buf( "%.*s", ( int )( e - b ), b ); /* handle field value lookup */ if ( *b == '[' ) { char *l_p = buf + 1, *l_b = l_p, *l_e = l_p, *l_b2 = l_p, *l_e2 = l_p; - l_e = ( char* )str_skip( l_p, '=' ); - l_e2 = ( char* )str_skip( l_p, ']' ); + l_e = ( char* )c_str_skip( l_p, '=' ); + l_e2 = ( char* )c_str_skip( l_p, ']' ); if ( ( ! *l_e && node->type != EADT_TYPE_ARRAY ) || ! *l_e2 ) { @@ -257,7 +257,7 @@ ADT_Node* adt_query( ADT_Node* node, char const* uri ) /* handle array index lookup */ else { - ssize idx = ( ssize )str_to_i64( buf, NULL, 10 ); + ssize idx = ( ssize )c_str_to_i64( buf, NULL, 10 ); if ( idx >= 0 && idx < scast(ssize, array_num(node->nodes)) ) { found_node = &node->nodes[ idx ]; @@ -511,7 +511,7 @@ char* adt_parse_number( ADT_Node* node, char* base_str ) } else { - if ( ! str_compare_len( e, "0x", 2 ) || ! str_compare_len( e, "0X", 2 ) ) + if ( ! c_str_compare_len( e, "0x", 2 ) || ! c_str_compare_len( e, "0X", 2 ) ) { node_props = EADT_PROPS_IS_HEX; } @@ -575,12 +575,12 @@ char* adt_parse_number( ADT_Node* node, char* base_str ) } } - orig_exp = exp = ( u8 )str_to_i64( expbuf, NULL, 10 ); + orig_exp = exp = ( u8 )c_str_to_i64( expbuf, NULL, 10 ); } if ( node_type == EADT_TYPE_INTEGER ) { - node->integer = str_to_i64( buf, 0, 0 ); + node->integer = c_str_to_i64( buf, 0, 0 ); #ifndef GEN_PARSER_DISABLE_ANALYSIS /* special case: negative zero */ if ( node->integer == 0 && buf[ 0 ] == '-' ) @@ -595,19 +595,19 @@ char* adt_parse_number( ADT_Node* node, char* base_str ) } else { - node->real = str_to_f64( buf, 0 ); + node->real = c_str_to_f64( buf, 0 ); #ifndef GEN_PARSER_DISABLE_ANALYSIS char *q = buf, *base_string = q, *base_string2 = q; - base_string = ccast( char*, str_skip( base_string, '.' )); + base_string = ccast( char*, c_str_skip( base_string, '.' )); *base_string = '\0'; base_string2 = base_string + 1; - char* base_string_off = base_string2; - while ( *base_string_off++ == '0' ) + char* base_strbuilder_off = base_string2; + while ( *base_strbuilder_off++ == '0' ) base2_offset++; - base = ( s32 )str_to_i64( q, 0, 0 ); - base2 = ( s32 )str_to_i64( base_string2, 0, 0 ); + base = ( s32 )c_str_to_i64( q, 0, 0 ); + base2 = ( s32 )c_str_to_i64( base_string2, 0, 0 ); if ( exp ) { exp = exp * ( ! ( eb == 10.0f ) ? -1 : 1 ); @@ -750,7 +750,7 @@ ADT_Error adt_print_string( FileInfo* file, ADT_Node* node, char const* escaped_ do { - p = str_skip_any( p, escaped_chars ); + p = c_str_skip_any( p, escaped_chars ); _adt_fprintf( file, "%.*s", pointer_diff( b, p ), b ); if ( *p && ! ! char_first_occurence( escaped_chars, *p ) ) { @@ -763,7 +763,7 @@ ADT_Error adt_print_string( FileInfo* file, ADT_Node* node, char const* escaped_ return EADT_ERROR_NONE; } -ADT_Error adt_str_to_number( ADT_Node* node ) +ADT_Error adt_c_str_to_number( ADT_Node* node ) { GEN_ASSERT( node ); @@ -779,7 +779,7 @@ ADT_Error adt_str_to_number( ADT_Node* node ) return EADT_ERROR_NONE; } -ADT_Error adt_str_to_number_strict( ADT_Node* node ) +ADT_Error adt_c_str_to_number_strict( ADT_Node* node ) { GEN_ASSERT( node ); @@ -826,7 +826,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b do { char delimiter = 0; - currentChar = ccast( char*, str_trim( currentChar, false )); + currentChar = ccast( char*, c_str_trim( currentChar, false )); if ( *currentChar == 0 ) break; @@ -850,7 +850,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b #endif do { - endChar = ccast( char*, str_skip( endChar, '"' )); + endChar = ccast( char*, c_str_skip( endChar, '"' )); if ( *endChar && *( endChar + 1 ) == '"' ) { @@ -869,7 +869,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b } *endChar = 0; - currentChar = ccast( char*, str_trim( endChar + 1, true )); + currentChar = ccast( char*, c_str_trim( endChar + 1, true )); delimiter = * currentChar; /* unescape escaped quotes (so that unescaped text escapes :) */ @@ -879,7 +879,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b { if ( *escapedChar == '"' && *( escapedChar + 1 ) == '"' ) { - mem_move( escapedChar, escapedChar + 1, str_len( escapedChar ) ); + mem_move( escapedChar, escapedChar + 1, c_str_len( escapedChar ) ); } escapedChar++; } @@ -906,7 +906,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b if ( * endChar ) { - currentChar = ccast( char*, str_trim( endChar, true )); + currentChar = ccast( char*, c_str_trim( endChar, true )); while ( char_is_space( *( endChar - 1 ) ) ) { @@ -927,7 +927,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b char* num_p = beginChar; // We only consider hexadecimal values if they start with 0x - if ( str_len(num_p) > 2 && num_p[0] == '0' && (num_p[1] == 'x' || num_p[1] == 'X') ) + if ( c_str_len(num_p) > 2 && num_p[0] == '0' && (num_p[1] == 'x' || num_p[1] == 'X') ) { num_p += 2; // skip '0x' prefix do @@ -946,7 +946,7 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, b if (!skip_number) { - adt_str_to_number(&rowItem); + adt_c_str_to_number(&rowItem); } } @@ -1021,16 +1021,16 @@ void _csv_write_record( FileInfo* file, CSV_Object* node ) { case EADT_NAME_STYLE_DOUBLE_QUOTE : { - str_fmt_file( file, "\"" ); + c_str_fmt_file( file, "\"" ); adt_print_string( file, node, "\"", "\"" ); - str_fmt_file( file, "\"" ); + c_str_fmt_file( file, "\"" ); } break; case EADT_NAME_STYLE_NO_QUOTES : { #endif - str_fmt_file( file, "%s", node->string ); + c_str_fmt_file( file, "%s", node->string ); #ifndef GEN_PARSER_DISABLE_ANALYSIS } break; @@ -1078,10 +1078,10 @@ void csv_write_delimiter( FileInfo* file, CSV_Object* obj, char delimiter ) _csv_write_header( file, &obj->nodes[ i ] ); if ( i + 1 != cols ) { - str_fmt_file( file, "%c", delimiter ); + c_str_fmt_file( file, "%c", delimiter ); } } - str_fmt_file( file, "\n" ); + c_str_fmt_file( file, "\n" ); } for ( ssize r = 0; r < rows; r++ ) @@ -1091,14 +1091,14 @@ void csv_write_delimiter( FileInfo* file, CSV_Object* obj, char delimiter ) _csv_write_record( file, &obj->nodes[ i ].nodes[ r ] ); if ( i + 1 != cols ) { - str_fmt_file( file, "%c", delimiter ); + c_str_fmt_file( file, "%c", delimiter ); } } - str_fmt_file( file, "\n" ); + c_str_fmt_file( file, "\n" ); } } -String csv_write_string_delimiter( AllocatorInfo a, CSV_Object* obj, char delimiter ) +StrBuilder csv_write_strbuilder_delimiter( AllocatorInfo a, CSV_Object* obj, char delimiter ) { FileInfo tmp; file_stream_new( &tmp, a ); @@ -1106,7 +1106,7 @@ String csv_write_string_delimiter( AllocatorInfo a, CSV_Object* obj, char delimi ssize fsize; u8* buf = file_stream_buf( &tmp, &fsize ); - String output = string_make_length( a, ( char* )buf, fsize ); + StrBuilder output = strbuilder_make_length( a, ( char* )buf, fsize ); file_close( &tmp ); return output; } diff --git a/base/dependencies/parsing.hpp b/base/dependencies/parsing.hpp index 5cf9317..db934c3 100644 --- a/base/dependencies/parsing.hpp +++ b/base/dependencies/parsing.hpp @@ -350,7 +350,7 @@ char* adt_parse_number_strict( ADT_Node* node, char* base_str ); * @param node * @return */ -ADT_Error adt_str_to_number( ADT_Node* node ); +ADT_Error adt_c_str_to_number( ADT_Node* node ); /** * @brief Parses and converts an existing string node into a number. @@ -359,7 +359,7 @@ ADT_Error adt_str_to_number( ADT_Node* node ); * @param node * @return */ -ADT_Error adt_str_to_number_strict( ADT_Node* node ); +ADT_Error adt_c_str_to_number_strict( ADT_Node* node ); /** * @brief Prints a number into a file stream. @@ -406,9 +406,9 @@ u8 csv_parse_delimiter( CSV_Object* root, char* text, AllocatorInfo allocator, void csv_free( CSV_Object* obj ); void csv_write( FileInfo* file, CSV_Object* obj ); -String csv_write_string( AllocatorInfo a, CSV_Object* obj ); +StrBuilder csv_write_string( AllocatorInfo a, CSV_Object* obj ); void csv_write_delimiter( FileInfo* file, CSV_Object* obj, char delim ); -String csv_write_string_delimiter( AllocatorInfo a, CSV_Object* obj, char delim ); +StrBuilder csv_write_strbuilder_delimiter( AllocatorInfo a, CSV_Object* obj, char delim ); /* inline */ @@ -425,9 +425,9 @@ void csv_write( FileInfo* file, CSV_Object* obj ) } inline -String csv_write_string( AllocatorInfo a, CSV_Object* obj ) +StrBuilder csv_write_string( AllocatorInfo a, CSV_Object* obj ) { - return csv_write_string_delimiter( a, obj, ',' ); + return csv_write_strbuilder_delimiter( a, obj, ',' ); } #pragma endregion CSV diff --git a/base/dependencies/printing.cpp b/base/dependencies/printing.cpp index 9e41358..01d083d 100644 --- a/base/dependencies/printing.cpp +++ b/base/dependencies/printing.cpp @@ -1,6 +1,6 @@ #ifdef GEN_INTELLISENSE_DIRECTIVES # pragma once -# include "string_ops.cpp" +# include "strbuilder_ops.cpp" #endif #pragma region Printing @@ -48,7 +48,7 @@ internal ssize _print_string( char* text, ssize max_len, _format_info* info, cha if ( str == NULL && max_len >= 6 ) { - res += str_copy_nulpad( text, "(null)", 6 ); + res += c_str_copy_nulpad( text, "(null)", 6 ); return res; } @@ -56,7 +56,7 @@ internal ssize _print_string( char* text, ssize max_len, _format_info* info, cha // Made the design decision for this library that precision is the length of the string. len = info->precision; else - len = str_len( str ); + len = c_str_len( str ); if ( info && ( info->width == 0 && info->flags & GEN_FMT_WIDTH ) ) { @@ -69,7 +69,7 @@ internal ssize _print_string( char* text, ssize max_len, _format_info* info, cha len = info->precision < len ? info->precision : len; if ( res + len > max_len ) return res; - res += str_copy_nulpad( text, str, len ); + res += c_str_copy_nulpad( text, str, len ); text += res; if ( info->width > res ) @@ -93,15 +93,15 @@ internal ssize _print_string( char* text, ssize max_len, _format_info* info, cha if ( res + len > max_len ) return res; - res += str_copy_nulpad( text, str, len ); + res += c_str_copy_nulpad( text, str, len ); } if ( info ) { if ( info->flags & GEN_FMT_UPPER ) - str_to_upper( begin ); + c_str_to_upper( begin ); else if ( info->flags & GEN_FMT_LOWER ) - str_to_lower( begin ); + c_str_to_lower( begin ); } return res; @@ -238,7 +238,7 @@ internal ssize _print_f64( char* text, ssize max_len, _format_info* info, b32 is return ( text - text_begin ); } -neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_list va ) +neverinline ssize c_str_fmt_va( char* text, ssize max_len, char const* fmt, va_list va ) { char const* text_begin = text; ssize remaining = max_len, res; @@ -310,7 +310,7 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis } else { - info.width = scast( s32, str_to_i64( fmt, ccast( char**, & fmt), 10 )); + info.width = scast( s32, c_str_to_i64( fmt, ccast( char**, & fmt), 10 )); if ( info.width != 0 ) { info.flags |= GEN_FMT_WIDTH; @@ -328,7 +328,7 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis } else { - info.precision = scast( s32, str_to_i64( fmt, ccast( char**, & fmt), 10 )); + info.precision = scast( s32, c_str_to_i64( fmt, ccast( char**, & fmt), 10 )); } info.flags &= ~GEN_FMT_ZERO; } @@ -419,19 +419,20 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis case 'S': { - if ( *(fmt + 1) == 'C' ) + if ( *(fmt + 1) == 'B' ) { + ++ fmt; - StrC gen_str = va_arg( va, StrC); - info.precision = gen_str.Len; - len = _print_string( text, remaining, &info, gen_str.Ptr ); + StrBuilder gen_str = { va_arg( va, char*) }; + + info.precision = strbuilder_length(gen_str); + len = _print_string( text, remaining, &info, gen_str ); break; } - String gen_str = { va_arg( va, char*) }; - - info.precision = string_length(gen_str); - len = _print_string( text, remaining, &info, gen_str ); + Str gen_str = va_arg( va, Str); + info.precision = gen_str.Len; + len = _print_string( text, remaining, &info, gen_str.Ptr ); } break; @@ -531,67 +532,67 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis return ( res >= max_len || res < 0 ) ? -1 : res; } -char* str_fmt_buf_va( char const* fmt, va_list va ) +char* c_str_fmt_buf_va( char const* fmt, va_list va ) { local_persist thread_local char buffer[ GEN_PRINTF_MAXLEN ]; - str_fmt_va( buffer, size_of( buffer ), fmt, va ); + c_str_fmt_va( buffer, size_of( buffer ), fmt, va ); return buffer; } -char* str_fmt_buf( char const* fmt, ... ) +char* c_str_fmt_buf( char const* fmt, ... ) { va_list va; char* str; va_start( va, fmt ); - str = str_fmt_buf_va( fmt, va ); + str = c_str_fmt_buf_va( fmt, va ); va_end( va ); return str; } -ssize str_fmt_file_va( FileInfo* f, char const* fmt, va_list va ) +ssize c_str_fmt_file_va( FileInfo* f, char const* fmt, va_list va ) { local_persist thread_local char buf[ GEN_PRINTF_MAXLEN ]; - ssize len = str_fmt_va( buf, size_of( buf ), fmt, va ); + ssize len = c_str_fmt_va( buf, size_of( buf ), fmt, va ); b32 res = file_write( f, buf, len - 1 ); // NOTE: prevent extra whitespace return res ? len : -1; } -ssize str_fmt_file( FileInfo* f, char const* fmt, ... ) +ssize c_str_fmt_file( FileInfo* f, char const* fmt, ... ) { ssize res; va_list va; va_start( va, fmt ); - res = str_fmt_file_va( f, fmt, va ); + res = c_str_fmt_file_va( f, fmt, va ); va_end( va ); return res; } -ssize str_fmt( char* str, ssize n, char const* fmt, ... ) +ssize c_str_fmt( char* str, ssize n, char const* fmt, ... ) { ssize res; va_list va; va_start( va, fmt ); - res = str_fmt_va( str, n, fmt, va ); + res = c_str_fmt_va( str, n, fmt, va ); va_end( va ); return res; } -ssize str_fmt_out_va( char const* fmt, va_list va ) +ssize c_str_fmt_out_va( char const* fmt, va_list va ) { - return str_fmt_file_va( file_get_standard( EFileStandard_OUTPUT ), fmt, va ); + return c_str_fmt_file_va( file_get_standard( EFileStandard_OUTPUT ), fmt, va ); } -ssize str_fmt_out_err_va( char const* fmt, va_list va ) +ssize c_str_fmt_out_err_va( char const* fmt, va_list va ) { - return str_fmt_file_va( file_get_standard( EFileStandard_ERROR ), fmt, va ); + return c_str_fmt_file_va( file_get_standard( EFileStandard_ERROR ), fmt, va ); } -ssize str_fmt_out_err( char const* fmt, ... ) +ssize c_str_fmt_out_err( char const* fmt, ... ) { ssize res; va_list va; va_start( va, fmt ); - res = str_fmt_out_err_va( fmt, va ); + res = c_str_fmt_out_err_va( fmt, va ); va_end( va ); return res; } diff --git a/base/dependencies/printing.hpp b/base/dependencies/printing.hpp index 3a77225..10df4de 100644 --- a/base/dependencies/printing.hpp +++ b/base/dependencies/printing.hpp @@ -1,6 +1,6 @@ #ifdef GEN_INTELLISENSE_DIRECTIVES # pragma once -# include "string_ops.hpp" +# include "strbuilder_ops.hpp" #endif #pragma region Printing @@ -13,15 +13,15 @@ typedef struct FileInfo FileInfo; typedef char PrintF_Buffer[GEN_PRINTF_MAXLEN]; // NOTE: A locally persisting buffer is used internally -char* str_fmt_buf ( char const* fmt, ... ); -char* str_fmt_buf_va ( char const* fmt, va_list va ); -ssize str_fmt ( char* str, ssize n, char const* fmt, ... ); -ssize str_fmt_va ( char* str, ssize n, char const* fmt, va_list va ); -ssize str_fmt_out_va ( char const* fmt, va_list va ); -ssize str_fmt_out_err ( char const* fmt, ... ); -ssize str_fmt_out_err_va( char const* fmt, va_list va ); -ssize str_fmt_file ( FileInfo* f, char const* fmt, ... ); -ssize str_fmt_file_va ( FileInfo* f, char const* fmt, va_list va ); +char* c_str_fmt_buf ( char const* fmt, ... ); +char* c_str_fmt_buf_va ( char const* fmt, va_list va ); +ssize c_str_fmt ( char* str, ssize n, char const* fmt, ... ); +ssize c_str_fmt_va ( char* str, ssize n, char const* fmt, va_list va ); +ssize c_str_fmt_out_va ( char const* fmt, va_list va ); +ssize c_str_fmt_out_err ( char const* fmt, ... ); +ssize c_str_fmt_out_err_va( char const* fmt, va_list va ); +ssize c_str_fmt_file ( FileInfo* f, char const* fmt, ... ); +ssize c_str_fmt_file_va ( FileInfo* f, char const* fmt, va_list va ); constexpr char const* Msg_Invalid_Value = "INVALID VALUE PROVIDED"; @@ -33,7 +33,7 @@ ssize log_fmt(char const* fmt, ...) va_list va; va_start(va, fmt); - res = str_fmt_out_va(fmt, va); + res = c_str_fmt_out_va(fmt, va); va_end(va); return res; diff --git a/base/dependencies/src_start.cpp b/base/dependencies/src_start.cpp index 29597f0..7fe3595 100644 --- a/base/dependencies/src_start.cpp +++ b/base/dependencies/src_start.cpp @@ -13,9 +13,9 @@ # define _printf_err( fmt, ... ) fprintf( stderr, fmt, __VA_ARGS__ ) # define _printf_err_va( fmt, va ) vfprintf( stderr, fmt, va ) # else -# define _strlen str_len -# define _printf_err( fmt, ... ) str_fmt_out_err( fmt, __VA_ARGS__ ) -# define _printf_err_va( fmt, va ) str_fmt_out_err_va( fmt, va ) +# define _strlen c_str_len +# define _printf_err( fmt, ... ) c_str_fmt_out_err( fmt, __VA_ARGS__ ) +# define _printf_err_va( fmt, va ) c_str_fmt_out_err_va( fmt, va ) # endif # endif # diff --git a/base/dependencies/string_ops.cpp b/base/dependencies/string_ops.cpp index dd72075..65a4bf8 100644 --- a/base/dependencies/string_ops.cpp +++ b/base/dependencies/string_ops.cpp @@ -3,7 +3,7 @@ # include "debug.cpp" #endif -#pragma region String Ops +#pragma region StrBuilder Ops internal ssize _scan_zpl_i64( const char* text, s32 base, s64* value ) @@ -18,7 +18,7 @@ ssize _scan_zpl_i64( const char* text, s32 base, s64* value ) text++; } - if ( base == 16 && str_compare_len( text, "0x", 2 ) == 0 ) + if ( base == 16 && c_str_compare_len( text, "0x", 2 ) == 0 ) text += 2; for ( ;; ) @@ -53,14 +53,14 @@ global const char _num_to_char_table[] = "abcdefghijklmnopqrstuvwxyz" "@$"; -s64 str_to_i64( const char* str, char** end_ptr, s32 base ) +s64 c_str_to_i64( const char* str, char** end_ptr, s32 base ) { ssize len; s64 value; if ( ! base ) { - if ( ( str_len( str ) > 2 ) && ( str_compare_len( str, "0x", 2 ) == 0 ) ) + if ( ( c_str_len( str ) > 2 ) && ( c_str_compare_len( str, "0x", 2 ) == 0 ) ) base = 16; else base = 10; @@ -100,7 +100,7 @@ void i64_to_str( s64 value, char* string, s32 base ) if ( negative ) *buf++ = '-'; *buf = '\0'; - str_reverse( string ); + c_str_reverse( string ); } void u64_to_str( u64 value, char* string, s32 base ) @@ -121,10 +121,10 @@ void u64_to_str( u64 value, char* string, s32 base ) } *buf = '\0'; - str_reverse( string ); + c_str_reverse( string ); } -f64 str_to_f64( const char* str, char** end_ptr ) +f64 c_str_to_f64( const char* str, char** end_ptr ) { f64 result, value, sign, scale; s32 frac; @@ -211,4 +211,4 @@ f64 str_to_f64( const char* str, char** end_ptr ) return result; } -#pragma endregion String Ops +#pragma endregion StrBuilder Ops diff --git a/base/dependencies/string_ops.hpp b/base/dependencies/string_ops.hpp index a3d547f..dcfadd9 100644 --- a/base/dependencies/string_ops.hpp +++ b/base/dependencies/string_ops.hpp @@ -3,7 +3,7 @@ # include "memory.hpp" #endif -#pragma region String Ops +#pragma region StrBuilder Ops const char* char_first_occurence( const char* str, char c ); @@ -18,25 +18,25 @@ char char_to_upper( char c ); s32 digit_to_int( char c ); s32 hex_digit_to_int( char c ); -s32 str_compare( const char* s1, const char* s2 ); -s32 str_compare_len( const char* s1, const char* s2, ssize len ); -char* str_copy( char* dest, const char* source, ssize len ); -ssize str_copy_nulpad( char* dest, const char* source, ssize len ); -ssize str_len( const char* str ); -ssize str_len_capped( const char* str, ssize max_len ); -char* str_reverse( char* str ); // NOTE: ASCII only -char const* str_skip( char const* str, char c ); -char const* str_skip_any( char const* str, char const* char_list ); -char const* str_trim( char const* str, b32 catch_newline ); +s32 c_str_compare( const char* s1, const char* s2 ); +s32 c_str_compare_len( const char* s1, const char* s2, ssize len ); +char* c_str_copy( char* dest, const char* source, ssize len ); +ssize c_str_copy_nulpad( char* dest, const char* source, ssize len ); +ssize c_str_len( const char* str ); +ssize c_str_len_capped( const char* str, ssize max_len ); +char* c_str_reverse( char* str ); // NOTE: ASCII only +char const* c_str_skip( char const* str, char c ); +char const* c_str_skip_any( char const* str, char const* char_list ); +char const* c_str_trim( char const* str, b32 catch_newline ); // NOTE: ASCII only -void str_to_lower( char* str ); -void str_to_upper( char* str ); +void c_str_to_lower( char* str ); +void c_str_to_upper( char* str ); -s64 str_to_i64( const char* str, char** end_ptr, s32 base ); +s64 c_str_to_i64( const char* str, char** end_ptr, s32 base ); void i64_to_str( s64 value, char* string, s32 base ); void u64_to_str( u64 value, char* string, s32 base ); -f64 str_to_f64( const char* str, char** end_ptr ); +f64 c_str_to_f64( const char* str, char** end_ptr ); inline const char* char_first_occurence( const char* s, char c ) @@ -122,7 +122,7 @@ s32 hex_digit_to_int( char c ) } inline -s32 str_compare( const char* s1, const char* s2 ) +s32 c_str_compare( const char* s1, const char* s2 ) { while ( *s1 && ( *s1 == *s2 ) ) { @@ -132,7 +132,7 @@ s32 str_compare( const char* s1, const char* s2 ) } inline -s32 str_compare_len( const char* s1, const char* s2, ssize len ) +s32 c_str_compare_len( const char* s1, const char* s2, ssize len ) { for ( ; len > 0; s1++, s2++, len-- ) { @@ -145,7 +145,7 @@ s32 str_compare_len( const char* s1, const char* s2, ssize len ) } inline -char* str_copy( char* dest, const char* source, ssize len ) +char* c_str_copy( char* dest, const char* source, ssize len ) { GEN_ASSERT_NOT_NULL( dest ); if ( source ) @@ -166,7 +166,7 @@ char* str_copy( char* dest, const char* source, ssize len ) } inline -ssize str_copy_nulpad( char* dest, const char* source, ssize len ) +ssize c_str_copy_nulpad( char* dest, const char* source, ssize len ) { ssize result = 0; GEN_ASSERT_NOT_NULL( dest ); @@ -191,7 +191,7 @@ ssize str_copy_nulpad( char* dest, const char* source, ssize len ) } inline -ssize str_len( const char* str ) +ssize c_str_len( const char* str ) { if ( str == NULL ) { @@ -204,7 +204,7 @@ ssize str_len( const char* str ) } inline -ssize str_len_capped( const char* str, ssize max_len ) +ssize c_str_len_capped( const char* str, ssize max_len ) { const char* end = rcast(const char*, mem_find( str, 0, max_len )); if ( end ) @@ -213,9 +213,9 @@ ssize str_len_capped( const char* str, ssize max_len ) } inline -char* str_reverse( char* str ) +char* c_str_reverse( char* str ) { - ssize len = str_len( str ); + ssize len = c_str_len( str ); char* a = str + 0; char* b = str + len - 1; len /= 2; @@ -228,7 +228,7 @@ char* str_reverse( char* str ) } inline -char const* str_skip( char const* str, char c ) +char const* c_str_skip( char const* str, char c ) { while ( *str && *str != c ) { @@ -238,20 +238,20 @@ char const* str_skip( char const* str, char c ) } inline -char const* str_skip_any( char const* str, char const* char_list ) +char const* c_str_skip_any( char const* str, char const* char_list ) { - char const* closest_ptr = rcast( char const*, pointer_add_const( rcast(mem_ptr_const, str), str_len( str ) )); - ssize char_list_count = str_len( char_list ); + char const* closest_ptr = rcast( char const*, pointer_add_const( rcast(mem_ptr_const, str), c_str_len( str ) )); + ssize char_list_count = c_str_len( char_list ); for ( ssize i = 0; i < char_list_count; i++ ) { - char const* p = str_skip( str, char_list[ i ] ); + char const* p = c_str_skip( str, char_list[ i ] ); closest_ptr = min( closest_ptr, p ); } return closest_ptr; } inline -char const* str_trim( char const* str, b32 catch_newline ) +char const* c_str_trim( char const* str, b32 catch_newline ) { while ( *str && char_is_space( *str ) && ( ! catch_newline || ( catch_newline && *str != '\n' ) ) ) { @@ -261,7 +261,7 @@ char const* str_trim( char const* str, b32 catch_newline ) } inline -void str_to_lower( char* str ) +void c_str_to_lower( char* str ) { if ( ! str ) return; @@ -273,7 +273,7 @@ void str_to_lower( char* str ) } inline -void str_to_upper( char* str ) +void c_str_to_upper( char* str ) { if ( ! str ) return; @@ -284,4 +284,4 @@ void str_to_upper( char* str ) } } -#pragma endregion String Ops +#pragma endregion StrBuilder Ops diff --git a/base/dependencies/strings.cpp b/base/dependencies/strings.cpp index 696d04b..336671a 100644 --- a/base/dependencies/strings.cpp +++ b/base/dependencies/strings.cpp @@ -3,27 +3,27 @@ # include "hashing.cpp" #endif -#pragma region String +#pragma region StrBuilder -String string_make_length( AllocatorInfo allocator, char const* str, ssize length ) +StrBuilder strbuilder_make_length( AllocatorInfo allocator, char const* str, ssize length ) { - ssize const header_size = sizeof( StringHeader ); + ssize const header_size = sizeof( StrBuilderHeader ); s32 alloc_size = header_size + length + 1; void* allocation = alloc( allocator, alloc_size ); if ( allocation == nullptr ) { - String null_string = {nullptr}; + StrBuilder null_string = {nullptr}; return null_string; } - StringHeader* - header = rcast(StringHeader*, allocation); + StrBuilderHeader* + header = rcast(StrBuilderHeader*, allocation); header->Allocator = allocator; header->Capacity = length; header->Length = length; - String result = { rcast( char*, allocation) + header_size }; + StrBuilder result = { rcast( char*, allocation) + header_size }; if ( length && str ) mem_copy( result, str, length ); @@ -35,27 +35,27 @@ String string_make_length( AllocatorInfo allocator, char const* str, ssize lengt return result; } -String string_make_reserve( AllocatorInfo allocator, ssize capacity ) +StrBuilder strbuilder_make_reserve( AllocatorInfo allocator, ssize capacity ) { - ssize const header_size = sizeof( StringHeader ); + ssize const header_size = sizeof( StrBuilderHeader ); s32 alloc_size = header_size + capacity + 1; void* allocation = alloc( allocator, alloc_size ); if ( allocation == nullptr ) { - String null_string = {nullptr}; + StrBuilder null_string = {nullptr}; return null_string; } mem_set( allocation, 0, alloc_size ); - StringHeader* - header = rcast(StringHeader*, allocation); + StrBuilderHeader* + header = rcast(StrBuilderHeader*, allocation); header->Allocator = allocator; header->Capacity = capacity; header->Length = 0; - String result = { rcast(char*, allocation) + header_size }; + StrBuilder result = { rcast(char*, allocation) + header_size }; return result; } -#pragma endregion String +#pragma endregion StrBuilder diff --git a/base/dependencies/strings.hpp b/base/dependencies/strings.hpp index af1a751..58c2400 100644 --- a/base/dependencies/strings.hpp +++ b/base/dependencies/strings.hpp @@ -5,18 +5,18 @@ #pragma region Strings -struct StrC; +struct Str; -StrC to_strc_from_c_str (char const* bad_string); -bool strc_are_equal (StrC lhs, StrC rhs); -char const* strc_back (StrC str); -bool strc_contains (StrC str, StrC substring); -StrC strc_duplicate (StrC str, AllocatorInfo allocator); -b32 strc_starts_with (StrC str, StrC substring); -StrC strc_visualize_whitespace(StrC str, AllocatorInfo allocator); +Str to_str_from_c_str (char const* bad_string); +bool str_are_equal (Str lhs, Str rhs); +char const* str_back (Str str); +bool str_contains (Str str, Str substring); +Str str_duplicate (Str str, AllocatorInfo allocator); +b32 str_starts_with (Str str, Str substring); +Str str_visualize_whitespace(Str str, AllocatorInfo allocator); // Constant string with length. -struct StrC +struct Str { ssize Len; char const* Ptr; @@ -26,40 +26,40 @@ struct StrC forceinline char const& operator[]( ssize index ) const { return Ptr[index]; } #if ! GEN_C_LIKE_CPP - forceinline bool is_equal (StrC rhs) const { return strc_are_equal(* this, rhs); } - forceinline char const* back () const { return strc_back(* this); } - forceinline bool contains (StrC substring) const { return strc_contains(* this, substring); } - forceinline StrC duplicate (AllocatorInfo allocator) const { return strc_duplicate(* this, allocator); } - forceinline b32 starts_with (StrC substring) const { return strc_starts_with(* this, substring); } - forceinline StrC visualize_whitespace(AllocatorInfo allocator) const { return strc_visualize_whitespace(* this, allocator); } + forceinline bool is_equal (Str rhs) const { return str_are_equal(* this, rhs); } + forceinline char const* back () const { return str_back(* this); } + forceinline bool contains (Str substring) const { return str_contains(* this, substring); } + forceinline Str duplicate (AllocatorInfo allocator) const { return str_duplicate(* this, allocator); } + forceinline b32 starts_with (Str substring) const { return str_starts_with(* this, substring); } + forceinline Str visualize_whitespace(AllocatorInfo allocator) const { return str_visualize_whitespace(* this, allocator); } #endif #endif }; -#define cast_to_strc( str ) * rcast( StrC*, (str) - sizeof(ssize) ) +#define cast_to_str( str ) * rcast( Str*, (str) - sizeof(ssize) ) #ifndef txt # if GEN_COMPILER_CPP -# define txt( text ) StrC { sizeof( text ) - 1, ( text ) } +# define txt( text ) Str { sizeof( text ) - 1, ( text ) } # else -# define txt( text ) (StrC){ sizeof( text ) - 1, ( text ) } +# define txt( text ) (Str){ sizeof( text ) - 1, ( text ) } # endif #endif GEN_API_C_BEGIN -forceinline char const* strc_begin(StrC str) { return str.Ptr; } -forceinline char const* strc_end (StrC str) { return str.Ptr + str.Len; } -forceinline char const* strc_next (StrC str, char const* iter) { return iter + 1; } +forceinline char const* str_begin(Str str) { return str.Ptr; } +forceinline char const* str_end (Str str) { return str.Ptr + str.Len; } +forceinline char const* str_next (Str str, char const* iter) { return iter + 1; } GEN_API_C_END #if GEN_COMPILER_CPP -forceinline char const* begin(StrC str) { return str.Ptr; } -forceinline char const* end (StrC str) { return str.Ptr + str.Len; } -forceinline char const* next (StrC str, char const* iter) { return iter + 1; } +forceinline char const* begin(Str str) { return str.Ptr; } +forceinline char const* end (Str str) { return str.Ptr + str.Len; } +forceinline char const* next (Str str, char const* iter) { return iter + 1; } #endif inline -bool strc_are_equal(StrC lhs, StrC rhs) +bool str_are_equal(Str lhs, Str rhs) { if (lhs.Len != rhs.Len) return false; @@ -72,12 +72,12 @@ bool strc_are_equal(StrC lhs, StrC rhs) } inline -char const* strc_back(StrC str) { +char const* str_back(Str str) { return & str.Ptr[str.Len - 1]; } inline -bool strc_contains(StrC str, StrC substring) +bool str_contains(Str str, Str substring) { if (substring.Len > str.Len) return false; @@ -86,97 +86,97 @@ bool strc_contains(StrC str, StrC substring) ssize sub_len = substring.Len; for (ssize idx = 0; idx <= main_len - sub_len; ++idx) { - if (str_compare_len(str.Ptr + idx, substring.Ptr, sub_len) == 0) + if (c_str_compare_len(str.Ptr + idx, substring.Ptr, sub_len) == 0) return true; } return false; } inline -b32 strc_starts_with(StrC str, StrC substring) { +b32 str_starts_with(Str str, Str substring) { if (substring.Len > str.Len) return false; - b32 result = str_compare_len(str.Ptr, substring.Ptr, substring.Len) == 0; + b32 result = c_str_compare_len(str.Ptr, substring.Ptr, substring.Len) == 0; return result; } inline -StrC to_strc_from_c_str( char const* bad_str ) { - StrC result = { str_len( bad_str ), bad_str }; +Str to_str_from_c_str( char const* bad_str ) { + Str result = { c_str_len( bad_str ), bad_str }; return result; } -// Dynamic String +// Dynamic StrBuilder // This is directly based off the ZPL string api. // They used a header pattern // I kept it for simplicty of porting but its not necessary to keep it that way. -#pragma region String -struct StringHeader; +#pragma region StrBuilder +struct StrBuilderHeader; #if GEN_COMPILER_C -typedef char* String; +typedef char* StrBuilder; #else -struct String; +struct StrBuilder; #endif -forceinline usize string_grow_formula(usize value); +forceinline usize strbuilder_grow_formula(usize value); -String string_make_c_str (AllocatorInfo allocator, char const* str); -String string_make_strc (AllocatorInfo allocator, StrC str); -String string_make_reserve (AllocatorInfo allocator, ssize capacity); -String string_make_length (AllocatorInfo allocator, char const* str, ssize length); -String string_fmt (AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...); -String string_fmt_buf (AllocatorInfo allocator, char const* fmt, ...); -String string_join (AllocatorInfo allocator, char const** parts, ssize num_parts, char const* glue); -bool string_are_equal (String const lhs, String const rhs); -bool string_are_equal_strc (String const lhs, StrC rhs); -bool string_make_space_for (String* str, char const* to_append, ssize add_len); -bool string_append_char (String* str, char c); -bool string_append_c_str (String* str, char const* str_to_append); -bool string_append_c_str_len (String* str, char const* str_to_append, ssize length); -bool string_append_strc (String* str, StrC str_to_append); -bool string_append_string (String* str, String const other); -bool string_append_fmt (String* str, char const* fmt, ...); -ssize string_avail_space (String const str); -char* string_back (String str); -bool string_contains_strc (String const str, StrC substring); -bool string_contains_string (String const str, String const substring); -ssize string_capacity (String const str); -void string_clear (String str); -String string_duplicate (String const str, AllocatorInfo allocator); -void string_free (String* str); -StringHeader* string_get_header (String str); -ssize string_length (String const str); -b32 string_starts_with_strc (String const str, StrC substring); -b32 string_starts_with_string (String const str, String substring); -void string_skip_line (String str); -void string_strip_space (String str); -StrC string_to_strc (String str); -void string_trim (String str, char const* cut_set); -void string_trim_space (String str); -String string_visualize_whitespace(String const str); +StrBuilder strbuilder_make_c_str (AllocatorInfo allocator, char const* str); +StrBuilder strbuilder_make_str (AllocatorInfo allocator, Str str); +StrBuilder strbuilder_make_reserve (AllocatorInfo allocator, ssize capacity); +StrBuilder strbuilder_make_length (AllocatorInfo allocator, char const* str, ssize length); +StrBuilder strbuilder_fmt (AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...); +StrBuilder strbuilder_fmt_buf (AllocatorInfo allocator, char const* fmt, ...); +StrBuilder strbuilder_join (AllocatorInfo allocator, char const** parts, ssize num_parts, char const* glue); +bool strbuilder_are_equal (StrBuilder const lhs, StrBuilder const rhs); +bool strbuilder_are_equal_str (StrBuilder const lhs, Str rhs); +bool strbuilder_make_space_for (StrBuilder* str, char const* to_append, ssize add_len); +bool strbuilder_append_char (StrBuilder* str, char c); +bool strbuilder_append_c_str (StrBuilder* str, char const* c_str_to_append); +bool strbuilder_append_c_str_len (StrBuilder* str, char const* c_str_to_append, ssize length); +bool strbuilder_append_str (StrBuilder* str, Str c_str_to_append); +bool strbuilder_append_string (StrBuilder* str, StrBuilder const other); +bool strbuilder_append_fmt (StrBuilder* str, char const* fmt, ...); +ssize strbuilder_avail_space (StrBuilder const str); +char* strbuilder_back (StrBuilder str); +bool strbuilder_contains_str (StrBuilder const str, Str substring); +bool strbuilder_contains_string (StrBuilder const str, StrBuilder const substring); +ssize strbuilder_capacity (StrBuilder const str); +void strbuilder_clear (StrBuilder str); +StrBuilder strbuilder_duplicate (StrBuilder const str, AllocatorInfo allocator); +void strbuilder_free (StrBuilder* str); +StrBuilderHeader* strbuilder_get_header (StrBuilder str); +ssize strbuilder_length (StrBuilder const str); +b32 strbuilder_starts_with_str (StrBuilder const str, Str substring); +b32 strbuilder_starts_with_string (StrBuilder const str, StrBuilder substring); +void strbuilder_skip_line (StrBuilder str); +void strbuilder_strip_space (StrBuilder str); +Str strbuilder_to_str (StrBuilder str); +void strbuilder_trim (StrBuilder str, char const* cut_set); +void strbuilder_trim_space (StrBuilder str); +StrBuilder strbuilder_visualize_whitespace(StrBuilder const str); -struct StringHeader { +struct StrBuilderHeader { AllocatorInfo Allocator; ssize Capacity; ssize Length; }; #if GEN_COMPILER_CPP -struct String +struct StrBuilder { char* Data; forceinline operator char*() { return Data; } forceinline operator char const*() const { return Data; } - forceinline operator StrC() const { return { string_length(* this), Data }; } + forceinline operator Str() const { return { strbuilder_length(* this), Data }; } - String const& operator=(String const& other) const { + StrBuilder const& operator=(StrBuilder const& other) const { if (this == &other) return *this; - String* this_ = ccast(String*, this); + StrBuilder* this_ = ccast(StrBuilder*, this); this_->Data = other.Data; return *this; @@ -185,69 +185,69 @@ struct String forceinline char& operator[](ssize index) { return Data[index]; } forceinline char const& operator[](ssize index) const { return Data[index]; } - forceinline bool operator==(std::nullptr_t) const { return Data == nullptr; } - forceinline bool operator!=(std::nullptr_t) const { return Data != nullptr; } - friend forceinline bool operator==(std::nullptr_t, const String str) { return str.Data == nullptr; } - friend forceinline bool operator!=(std::nullptr_t, const String str) { return str.Data != nullptr; } + forceinline bool operator==(std::nullptr_t) const { return Data == nullptr; } + forceinline bool operator!=(std::nullptr_t) const { return Data != nullptr; } + friend forceinline bool operator==(std::nullptr_t, const StrBuilder str) { return str.Data == nullptr; } + friend forceinline bool operator!=(std::nullptr_t, const StrBuilder str) { return str.Data != nullptr; } #if ! GEN_C_LIKE_CPP forceinline char* begin() const { return Data; } - forceinline char* end() const { return Data + string_length(* this); } + forceinline char* end() const { return Data + strbuilder_length(* this); } #pragma region Member Mapping - forceinline static String make(AllocatorInfo allocator, char const* str) { return string_make_c_str(allocator, str); } - forceinline static String make(AllocatorInfo allocator, StrC str) { return string_make_strc(allocator, str); } - forceinline static String make_reserve(AllocatorInfo allocator, ssize cap) { return string_make_reserve(allocator, cap); } - forceinline static String make_length(AllocatorInfo a, char const* s, ssize l) { return string_make_length(a, s, l); } - forceinline static String join(AllocatorInfo a, char const** p, ssize n, char const* g) { return string_join(a, p, n, g); } - forceinline static usize grow_formula(usize value) { return string_grow_formula(value); } + forceinline static StrBuilder make(AllocatorInfo allocator, char const* str) { return strbuilder_make_c_str(allocator, str); } + forceinline static StrBuilder make(AllocatorInfo allocator, Str str) { return strbuilder_make_str(allocator, str); } + forceinline static StrBuilder make_reserve(AllocatorInfo allocator, ssize cap) { return strbuilder_make_reserve(allocator, cap); } + forceinline static StrBuilder make_length(AllocatorInfo a, char const* s, ssize l) { return strbuilder_make_length(a, s, l); } + forceinline static StrBuilder join(AllocatorInfo a, char const** p, ssize n, char const* g) { return strbuilder_join(a, p, n, g); } + forceinline static usize grow_formula(usize value) { return strbuilder_grow_formula(value); } static - String fmt(AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...) { + StrBuilder fmt(AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...) { va_list va; va_start(va, fmt); - ssize res = str_fmt_va(buf, buf_size, fmt, va) - 1; + ssize res = c_str_fmt_va(buf, buf_size, fmt, va) - 1; va_end(va); - return string_make_length(allocator, buf, res); + return strbuilder_make_length(allocator, buf, res); } static - String fmt_buf(AllocatorInfo allocator, char const* fmt, ...) { + StrBuilder fmt_buf(AllocatorInfo allocator, char const* fmt, ...) { local_persist thread_local char buf[GEN_PRINTF_MAXLEN] = { 0 }; va_list va; va_start(va, fmt); - ssize res = str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va) - 1; + ssize res = c_str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va) - 1; va_end(va); - return string_make_length(allocator, buf, res); + return strbuilder_make_length(allocator, buf, res); } - forceinline bool make_space_for(char const* str, ssize add_len) { return string_make_space_for(this, str, add_len); } - forceinline bool append(char c) { return string_append_char(this, c); } - forceinline bool append(char const* str) { return string_append_c_str(this, str); } - forceinline bool append(char const* str, ssize length) { return string_append_c_str_len(this, str, length); } - forceinline bool append(StrC str) { return string_append_strc(this, str); } - forceinline bool append(const String other) { return string_append_string(this, other); } - forceinline ssize avail_space() const { return string_avail_space(* this); } - forceinline char* back() { return string_back(* this); } - forceinline bool contains(StrC substring) const { return string_contains_strc(* this, substring); } - forceinline bool contains(String const& substring) const { return string_contains_string(* this, substring); } - forceinline ssize capacity() const { return string_capacity(* this); } - forceinline void clear() { string_clear(* this); } - forceinline String duplicate(AllocatorInfo allocator) const { return string_duplicate(* this, allocator); } - forceinline void free() { string_free(this); } - forceinline bool is_equal(String const& other) const { return string_are_equal(* this, other); } - forceinline bool is_equal(StrC other) const { return string_are_equal_strc(* this, other); } - forceinline ssize length() const { return string_length(* this); } - forceinline b32 starts_with(StrC substring) const { return string_starts_with_strc(* this, substring); } - forceinline b32 starts_with(String substring) const { return string_starts_with_string(* this, substring); } - forceinline void skip_line() { string_skip_line(* this); } - forceinline void strip_space() { string_strip_space(* this); } - forceinline StrC to_strc() { return { string_length(*this), Data}; } - forceinline void trim(char const* cut_set) { string_trim(* this, cut_set); } - forceinline void trim_space() { string_trim_space(* this); } - forceinline String visualize_whitespace() const { return string_visualize_whitespace(* this); } - forceinline StringHeader& get_header() { return * string_get_header(* this); } + forceinline bool make_space_for(char const* str, ssize add_len) { return strbuilder_make_space_for(this, str, add_len); } + forceinline bool append(char c) { return strbuilder_append_char(this, c); } + forceinline bool append(char const* str) { return strbuilder_append_c_str(this, str); } + forceinline bool append(char const* str, ssize length) { return strbuilder_append_c_str_len(this, str, length); } + forceinline bool append(Str str) { return strbuilder_append_str(this, str); } + forceinline bool append(const StrBuilder other) { return strbuilder_append_string(this, other); } + forceinline ssize avail_space() const { return strbuilder_avail_space(* this); } + forceinline char* back() { return strbuilder_back(* this); } + forceinline bool contains(Str substring) const { return strbuilder_contains_str(* this, substring); } + forceinline bool contains(StrBuilder const& substring) const { return strbuilder_contains_string(* this, substring); } + forceinline ssize capacity() const { return strbuilder_capacity(* this); } + forceinline void clear() { strbuilder_clear(* this); } + forceinline StrBuilder duplicate(AllocatorInfo allocator) const { return strbuilder_duplicate(* this, allocator); } + forceinline void free() { strbuilder_free(this); } + forceinline bool is_equal(StrBuilder const& other) const { return strbuilder_are_equal(* this, other); } + forceinline bool is_equal(Str other) const { return strbuilder_are_equal_str(* this, other); } + forceinline ssize length() const { return strbuilder_length(* this); } + forceinline b32 starts_with(Str substring) const { return strbuilder_starts_with_str(* this, substring); } + forceinline b32 starts_with(StrBuilder substring) const { return strbuilder_starts_with_string(* this, substring); } + forceinline void skip_line() { strbuilder_skip_line(* this); } + forceinline void strip_space() { strbuilder_strip_space(* this); } + forceinline Str to_str() { return { strbuilder_length(*this), Data}; } + forceinline void trim(char const* cut_set) { strbuilder_trim(* this, cut_set); } + forceinline void trim_space() { strbuilder_trim_space(* this); } + forceinline StrBuilder visualize_whitespace() const { return strbuilder_visualize_whitespace(* this); } + forceinline StrBuilderHeader& get_header() { return * strbuilder_get_header(* this); } bool append_fmt(char const* fmt, ...) { ssize res; @@ -255,163 +255,163 @@ struct String va_list va; va_start(va, fmt); - res = str_fmt_va(buf, count_of(buf) - 1, fmt, va) - 1; + res = c_str_fmt_va(buf, count_of(buf) - 1, fmt, va) - 1; va_end(va); - return string_append_c_str_len(this, buf, res); + return strbuilder_append_c_str_len(this, buf, res); } #pragma endregion Member Mapping #endif }; #endif -forceinline char* string_begin(String str) { return ((char*) str); } -forceinline char* string_end (String str) { return ((char*) str + string_length(str)); } -forceinline char* string_next (String str, char const* iter) { return ((char*) iter + 1); } +forceinline char* strbuilder_begin(StrBuilder str) { return ((char*) str); } +forceinline char* strbuilder_end (StrBuilder str) { return ((char*) str + strbuilder_length(str)); } +forceinline char* strbuilder_next (StrBuilder str, char const* iter) { return ((char*) iter + 1); } #if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP -forceinline char* begin(String str) { return ((char*) str); } -forceinline char* end (String str) { return ((char*) str + string_length(str)); } -forceinline char* next (String str, char* iter) { return ((char*) iter + 1); } +forceinline char* begin(StrBuilder str) { return ((char*) str); } +forceinline char* end (StrBuilder str) { return ((char*) str + strbuilder_length(str)); } +forceinline char* next (StrBuilder str, char* iter) { return ((char*) iter + 1); } #endif #if GEN_COMPILER_CPP && ! GEN_C_LIKE_CPP -forceinline bool make_space_for(String& str, char const* to_append, ssize add_len); -forceinline bool append(String& str, char c); -forceinline bool append(String& str, char const* str_to_append); -forceinline bool append(String& str, char const* str_to_append, ssize length); -forceinline bool append(String& str, StrC str_to_append); -forceinline bool append(String& str, const String other); -forceinline bool append_fmt(String& str, char const* fmt, ...); -forceinline char& back(String& str); -forceinline void clear(String& str); -forceinline void free(String& str); +forceinline bool make_space_for(StrBuilder& str, char const* to_append, ssize add_len); +forceinline bool append(StrBuilder& str, char c); +forceinline bool append(StrBuilder& str, char const* c_str_to_append); +forceinline bool append(StrBuilder& str, char const* c_str_to_append, ssize length); +forceinline bool append(StrBuilder& str, Str c_str_to_append); +forceinline bool append(StrBuilder& str, const StrBuilder other); +forceinline bool append_fmt(StrBuilder& str, char const* fmt, ...); +forceinline char& back(StrBuilder& str); +forceinline void clear(StrBuilder& str); +forceinline void free(StrBuilder& str); #endif forceinline -usize string_grow_formula(usize value) { +usize strbuilder_grow_formula(usize value) { // Using a very aggressive growth formula to reduce time mem_copying with recursive calls to append in this library. return 4 * value + 8; } forceinline -String string_make_c_str(AllocatorInfo allocator, char const* str) { - ssize length = str ? str_len(str) : 0; - return string_make_length(allocator, str, length); +StrBuilder strbuilder_make_c_str(AllocatorInfo allocator, char const* str) { + ssize length = str ? c_str_len(str) : 0; + return strbuilder_make_length(allocator, str, length); } forceinline -String string_make_strc(AllocatorInfo allocator, StrC str) { - return string_make_length(allocator, str.Ptr, str.Len); +StrBuilder strbuilder_make_str(AllocatorInfo allocator, Str str) { + return strbuilder_make_length(allocator, str.Ptr, str.Len); } inline -String string_fmt(AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...) { +StrBuilder strbuilder_fmt(AllocatorInfo allocator, char* buf, ssize buf_size, char const* fmt, ...) { va_list va; va_start(va, fmt); - ssize res = str_fmt_va(buf, buf_size, fmt, va) - 1; + ssize res = c_str_fmt_va(buf, buf_size, fmt, va) - 1; va_end(va); - return string_make_length(allocator, buf, res); + return strbuilder_make_length(allocator, buf, res); } inline -String string_fmt_buf(AllocatorInfo allocator, char const* fmt, ...) +StrBuilder strbuilder_fmt_buf(AllocatorInfo allocator, char const* fmt, ...) { local_persist thread_local PrintF_Buffer buf = struct_init(PrintF_Buffer, {0}); va_list va; va_start(va, fmt); - ssize res = str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va) -1; + ssize res = c_str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va) -1; va_end(va); - return string_make_length(allocator, buf, res); + return strbuilder_make_length(allocator, buf, res); } inline -String string_join(AllocatorInfo allocator, char const** parts, ssize num_parts, char const* glue) +StrBuilder strbuilder_join(AllocatorInfo allocator, char const** parts, ssize num_parts, char const* glue) { - String result = string_make_c_str(allocator, ""); + StrBuilder result = strbuilder_make_c_str(allocator, ""); for (ssize idx = 0; idx < num_parts; ++idx) { - string_append_c_str(& result, parts[idx]); + strbuilder_append_c_str(& result, parts[idx]); if (idx < num_parts - 1) - string_append_c_str(& result, glue); + strbuilder_append_c_str(& result, glue); } return result; } forceinline -bool string_append_char(String* str, char c) { +bool strbuilder_append_char(StrBuilder* str, char c) { GEN_ASSERT(str != nullptr); - return string_append_c_str_len( str, (char const*)& c, (ssize)1); + return strbuilder_append_c_str_len( str, (char const*)& c, (ssize)1); } forceinline -bool string_append_c_str(String* str, char const* str_to_append) { +bool strbuilder_append_c_str(StrBuilder* str, char const* c_str_to_append) { GEN_ASSERT(str != nullptr); - return string_append_c_str_len(str, str_to_append, str_len(str_to_append)); + return strbuilder_append_c_str_len(str, c_str_to_append, c_str_len(c_str_to_append)); } inline -bool string_append_c_str_len(String* str, char const* str_to_append, ssize append_length) +bool strbuilder_append_c_str_len(StrBuilder* str, char const* c_str_to_append, ssize append_length) { GEN_ASSERT(str != nullptr); - if ( rcast(sptr, str_to_append) > 0) + if ( rcast(sptr, c_str_to_append) > 0) { - ssize curr_len = string_length(* str); + ssize curr_len = strbuilder_length(* str); - if ( ! string_make_space_for(str, str_to_append, append_length)) + if ( ! strbuilder_make_space_for(str, c_str_to_append, append_length)) return false; - StringHeader* header = string_get_header(* str); + StrBuilderHeader* header = strbuilder_get_header(* str); char* Data = * str; - mem_copy( Data + curr_len, str_to_append, append_length); + mem_copy( Data + curr_len, c_str_to_append, append_length); Data[curr_len + append_length] = '\0'; header->Length = curr_len + append_length; } - return str_to_append != nullptr; + return c_str_to_append != nullptr; } forceinline -bool string_append_strc(String* str, StrC str_to_append) { +bool strbuilder_append_str(StrBuilder* str, Str c_str_to_append) { GEN_ASSERT(str != nullptr); - return string_append_c_str_len(str, str_to_append.Ptr, str_to_append.Len); + return strbuilder_append_c_str_len(str, c_str_to_append.Ptr, c_str_to_append.Len); } forceinline -bool string_append_string(String* str, String const other) { +bool strbuilder_append_string(StrBuilder* str, StrBuilder const other) { GEN_ASSERT(str != nullptr); - return string_append_c_str_len(str, (char const*)other, string_length(other)); + return strbuilder_append_c_str_len(str, (char const*)other, strbuilder_length(other)); } -bool string_append_fmt(String* str, char const* fmt, ...) { +bool strbuilder_append_fmt(StrBuilder* str, char const* fmt, ...) { GEN_ASSERT(str != nullptr); ssize res; char buf[GEN_PRINTF_MAXLEN] = { 0 }; va_list va; va_start(va, fmt); - res = str_fmt_va(buf, count_of(buf) - 1, fmt, va) - 1; + res = c_str_fmt_va(buf, count_of(buf) - 1, fmt, va) - 1; va_end(va); - return string_append_c_str_len(str, (char const*)buf, res); + return strbuilder_append_c_str_len(str, (char const*)buf, res); } inline -bool string_are_equal_string(String const lhs, String const rhs) +bool strbuilder_are_equal_string(StrBuilder const lhs, StrBuilder const rhs) { - if (string_length(lhs) != string_length(rhs)) + if (strbuilder_length(lhs) != strbuilder_length(rhs)) return false; - for (ssize idx = 0; idx < string_length(lhs); ++idx) + for (ssize idx = 0; idx < strbuilder_length(lhs); ++idx) if (lhs[idx] != rhs[idx]) return false; @@ -419,12 +419,12 @@ bool string_are_equal_string(String const lhs, String const rhs) } inline -bool string_are_equal_strc(String const lhs, StrC rhs) +bool strbuilder_are_equal_str(StrBuilder const lhs, Str rhs) { - if (string_length(lhs) != (rhs.Len)) + if (strbuilder_length(lhs) != (rhs.Len)) return false; - for (ssize idx = 0; idx < string_length(lhs); ++idx) + for (ssize idx = 0; idx < strbuilder_length(lhs); ++idx) if (lhs[idx] != rhs.Ptr[idx]) return false; @@ -432,20 +432,20 @@ bool string_are_equal_strc(String const lhs, StrC rhs) } forceinline -ssize string_avail_space(String const str) { - StringHeader const* header = rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader)); +ssize strbuilder_avail_space(StrBuilder const str) { + StrBuilderHeader const* header = rcast(StrBuilderHeader const*, scast(char const*, str) - sizeof(StrBuilderHeader)); return header->Capacity - header->Length; } forceinline -char* string_back(String str) { - return & (str)[string_length(str) - 1]; +char* strbuilder_back(StrBuilder str) { + return & (str)[strbuilder_length(str) - 1]; } inline -bool string_contains_StrC(String const str, StrC substring) +bool strbuilder_contains_StrC(StrBuilder const str, Str substring) { - StringHeader const* header = rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader)); + StrBuilderHeader const* header = rcast(StrBuilderHeader const*, scast(char const*, str) - sizeof(StrBuilderHeader)); if (substring.Len > header->Length) return false; @@ -455,7 +455,7 @@ bool string_contains_StrC(String const str, StrC substring) for (ssize idx = 0; idx <= main_len - sub_len; ++idx) { - if (str_compare_len(str + idx, substring.Ptr, sub_len) == 0) + if (c_str_compare_len(str + idx, substring.Ptr, sub_len) == 0) return true; } @@ -463,19 +463,19 @@ bool string_contains_StrC(String const str, StrC substring) } inline -bool string_contains_string(String const str, String const substring) +bool strbuilder_contains_string(StrBuilder const str, StrBuilder const substring) { - StringHeader const* header = rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader)); + StrBuilderHeader const* header = rcast(StrBuilderHeader const*, scast(char const*, str) - sizeof(StrBuilderHeader)); - if (string_length(substring) > header->Length) + if (strbuilder_length(substring) > header->Length) return false; ssize main_len = header->Length; - ssize sub_len = string_length(substring); + ssize sub_len = strbuilder_length(substring); for (ssize idx = 0; idx <= main_len - sub_len; ++idx) { - if (str_compare_len(str + idx, substring, sub_len) == 0) + if (c_str_compare_len(str + idx, substring, sub_len) == 0) return true; } @@ -483,47 +483,47 @@ bool string_contains_string(String const str, String const substring) } forceinline -ssize string_capacity(String const str) { - StringHeader const* header = rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader)); +ssize strbuilder_capacity(StrBuilder const str) { + StrBuilderHeader const* header = rcast(StrBuilderHeader const*, scast(char const*, str) - sizeof(StrBuilderHeader)); return header->Capacity; } forceinline -void string_clear(String str) { - string_get_header(str)->Length = 0; +void strbuilder_clear(StrBuilder str) { + strbuilder_get_header(str)->Length = 0; } forceinline -String string_duplicate(String const str, AllocatorInfo allocator) { - return string_make_length(allocator, str, string_length(str)); +StrBuilder strbuilder_duplicate(StrBuilder const str, AllocatorInfo allocator) { + return strbuilder_make_length(allocator, str, strbuilder_length(str)); } forceinline -void string_free(String* str) { +void strbuilder_free(StrBuilder* str) { GEN_ASSERT(str != nullptr); if (! (* str)) return; - StringHeader* header = string_get_header(* str); + StrBuilderHeader* header = strbuilder_get_header(* str); allocator_free(header->Allocator, header); } forceinline -StringHeader* string_get_header(String str) { - return (StringHeader*)(scast(char*, str) - sizeof(StringHeader)); +StrBuilderHeader* strbuilder_get_header(StrBuilder str) { + return (StrBuilderHeader*)(scast(char*, str) - sizeof(StrBuilderHeader)); } forceinline -ssize string_length(String const str) +ssize strbuilder_length(StrBuilder const str) { - StringHeader const* header = rcast(StringHeader const*, scast(char const*, str) - sizeof(StringHeader)); + StrBuilderHeader const* header = rcast(StrBuilderHeader const*, scast(char const*, str) - sizeof(StrBuilderHeader)); return header->Length; } inline -bool string_make_space_for(String* str, char const* to_append, ssize add_len) +bool strbuilder_make_space_for(StrBuilder* str, char const* to_append, ssize add_len) { - ssize available = string_avail_space(* str); + ssize available = strbuilder_avail_space(* str); if (available >= add_len) { return true; @@ -534,20 +534,20 @@ bool string_make_space_for(String* str, char const* to_append, ssize add_len) void* ptr; void* new_ptr; - AllocatorInfo allocator = string_get_header(* str)->Allocator; - StringHeader* header = nullptr; + AllocatorInfo allocator = strbuilder_get_header(* str)->Allocator; + StrBuilderHeader* header = nullptr; - new_len = string_grow_formula(string_length(* str) + add_len); - ptr = string_get_header(* str); - old_size = size_of(StringHeader) + string_length(* str) + 1; - new_size = size_of(StringHeader) + new_len + 1; + new_len = strbuilder_grow_formula(strbuilder_length(* str) + add_len); + ptr = strbuilder_get_header(* str); + old_size = size_of(StrBuilderHeader) + strbuilder_length(* str) + 1; + new_size = size_of(StrBuilderHeader) + new_len + 1; new_ptr = resize(allocator, ptr, old_size, new_size); if (new_ptr == nullptr) return false; - header = rcast(StringHeader*, new_ptr); + header = rcast(StrBuilderHeader*, new_ptr); header->Allocator = allocator; header->Capacity = new_len; @@ -559,25 +559,25 @@ bool string_make_space_for(String* str, char const* to_append, ssize add_len) } forceinline -b32 string_starts_with_strc(String const str, StrC substring) { - if (substring.Len > string_length(str)) +b32 strbuilder_starts_with_str(StrBuilder const str, Str substring) { + if (substring.Len > strbuilder_length(str)) return false; - b32 result = str_compare_len(str, substring.Ptr, substring.Len) == 0; + b32 result = c_str_compare_len(str, substring.Ptr, substring.Len) == 0; return result; } forceinline -b32 string_starts_with_string(String const str, String substring) { - if (string_length(substring) > string_length(str)) +b32 strbuilder_starts_with_string(StrBuilder const str, StrBuilder substring) { + if (strbuilder_length(substring) > strbuilder_length(str)) return false; - b32 result = str_compare_len(str, substring, string_length(substring) - 1) == 0; + b32 result = c_str_compare_len(str, substring, strbuilder_length(substring) - 1) == 0; return result; } inline -void string_skip_line(String str) +void strbuilder_skip_line(StrBuilder str) { #define current (*scanner) char* scanner = str; @@ -593,13 +593,13 @@ void string_skip_line(String str) mem_move((char*)str, scanner, new_length); - StringHeader* header = string_get_header(str); + StrBuilderHeader* header = strbuilder_get_header(str); header->Length = new_length; #undef current } inline -void strip_space(String str) +void strip_space(StrBuilder str) { char* write_pos = str; char* read_pos = str; @@ -616,22 +616,22 @@ void strip_space(String str) write_pos[0] = '\0'; // Null-terminate the modified string // Update the length if needed - string_get_header(str)->Length = write_pos - str; + strbuilder_get_header(str)->Length = write_pos - str; } forceinline -StrC string_to_strc(String str) { - StrC result = { string_length(str), (char const*)str }; +Str strbuilder_to_str(StrBuilder str) { + Str result = { strbuilder_length(str), (char const*)str }; return result; } inline -void string_trim(String str, char const* cut_set) +void strbuilder_trim(StrBuilder str, char const* cut_set) { ssize len = 0; char* start_pos = str; - char* end_pos = scast(char*, str) + string_length(str) - 1; + char* end_pos = scast(char*, str) + strbuilder_length(str) - 1; while (start_pos <= end_pos && char_first_occurence(cut_set, *start_pos)) start_pos++; @@ -646,98 +646,98 @@ void string_trim(String str, char const* cut_set) str[len] = '\0'; - string_get_header(str)->Length = len; + strbuilder_get_header(str)->Length = len; } forceinline -void string_trim_space(String str) { - string_trim(str, " \t\r\n\v\f"); +void strbuilder_trim_space(StrBuilder str) { + strbuilder_trim(str, " \t\r\n\v\f"); } inline -String string_visualize_whitespace(String const str) +StrBuilder strbuilder_visualize_whitespace(StrBuilder 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. + StrBuilderHeader* header = (StrBuilderHeader*)(scast(char const*, str) - sizeof(StrBuilderHeader)); + StrBuilder result = strbuilder_make_reserve(header->Allocator, strbuilder_length(str) * 2); // Assume worst case for space requirements. - for (char const* c = string_begin(str); c != string_end(str); c = string_next(str, c)) + for (char const* c = strbuilder_begin(str); c != strbuilder_end(str); c = strbuilder_next(str, c)) switch ( * c ) { case ' ': - string_append_strc(& result, txt("·")); + strbuilder_append_str(& result, txt("·")); break; case '\t': - string_append_strc(& result, txt("→")); + strbuilder_append_str(& result, txt("→")); break; case '\n': - string_append_strc(& result, txt("↵")); + strbuilder_append_str(& result, txt("↵")); break; case '\r': - string_append_strc(& result, txt("⏎")); + strbuilder_append_str(& result, txt("⏎")); break; case '\v': - string_append_strc(& result, txt("⇕")); + strbuilder_append_str(& result, txt("⇕")); break; case '\f': - string_append_strc(& result, txt("⌂")); + strbuilder_append_str(& result, txt("⌂")); break; default: - string_append_char(& result, * c); + strbuilder_append_char(& result, * c); break; } return result; } -#pragma endregion String +#pragma endregion StrBuilder #if GEN_COMPILER_CPP -struct String_POD { +struct StrBuilder_POD { char* Data; }; -static_assert( sizeof( String_POD ) == sizeof( String ), "String is not a POD" ); +static_assert( sizeof( StrBuilder_POD ) == sizeof( StrBuilder ), "StrBuilder is not a POD" ); #endif forceinline -StrC strc_duplicate(StrC str, AllocatorInfo allocator) { - StrC result = string_to_strc( string_make_length(allocator, str.Ptr, str.Len)); +Str str_duplicate(Str str, AllocatorInfo allocator) { + Str result = strbuilder_to_str( strbuilder_make_length(allocator, str.Ptr, str.Len)); return result; } inline -StrC strc_visualize_whitespace(StrC str, AllocatorInfo allocator) +Str str_visualize_whitespace(Str str, AllocatorInfo allocator) { - String result = string_make_reserve(allocator, str.Len * 2); // Assume worst case for space requirements. - for (char const* c = strc_begin(str); c != strc_end(str); c = strc_next(str, c)) + StrBuilder result = strbuilder_make_reserve(allocator, str.Len * 2); // Assume worst case for space requirements. + for (char const* c = str_begin(str); c != str_end(str); c = str_next(str, c)) switch ( * c ) { case ' ': - string_append_strc(& result, txt("·")); + strbuilder_append_str(& result, txt("·")); break; case '\t': - string_append_strc(& result, txt("→")); + strbuilder_append_str(& result, txt("→")); break; case '\n': - string_append_strc(& result, txt("↵")); + strbuilder_append_str(& result, txt("↵")); break; case '\r': - string_append_strc(& result, txt("⏎")); + strbuilder_append_str(& result, txt("⏎")); break; case '\v': - string_append_strc(& result, txt("⇕")); + strbuilder_append_str(& result, txt("⇕")); break; case '\f': - string_append_strc(& result, txt("⌂")); + strbuilder_append_str(& result, txt("⌂")); break; default: - string_append_char(& result, * c); + strbuilder_append_char(& result, * c); break; } - return string_to_strc(result); + return strbuilder_to_str(result); } // Represents strings cached with the string table. // Should never be modified, if changed string is desired, cache_string( str ) another. -typedef StrC StringCached; +typedef Str StringCached; // Implements basic string interning. Data structure is based off the ZPL Hashtable. typedef HashTable(StringCached) StringTable; diff --git a/base/gencpp.refactor b/base/gencpp.refactor deleted file mode 100644 index 9cbafe8..0000000 --- a/base/gencpp.refactor +++ /dev/null @@ -1,423 +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 - -// TODO(ED): THIS IS VERY OUTDATED - -// Gen Macro namespace -// namespace GEN_, new_namespace_ - -// ---------- Dependency Macros - // Platform -// word GEN_ARCH_64_BIT, new_name -// word GEN_ARCH_32_BIT, new_name - -// word GEN_SYSTEM_ANDROID, new_name -// word GEN_SYSTEM_CYGWIN, new_name -// word GEN_SYSTEM_EMSCRIPTEN, new_name -// word GEN_SYSTEM_FREEBSD, new_name -// word GEN_SYSTEM_IOS, new_name -// word GEN_SYSTEM_LINUX, new_name -// word GEN_SYSTEM_MACOS, new_name -// word GEN_SYSTEM_OPENBSD, new_name -// word GEN_SYSTEM_OSX, new_name -// word GEN_SYSTEM_UNIX, new_name -// word GEN_SYSTEM_WINDOWS, new_name - -// word GEN_COMPILER_CLANG, new_name -// word GEN_COMPILER_GCC, new_name -// word GEN_COMPILER_MINGW, new_name -// word GEN_COMPILER_MSVC, new_name - -// word global, new_name -// word internal, new_name -// word local_persist, new_name -// word forceinline, new_name -// word neverinline, new_name - -// word bit, new_name -// word bitfield_is_equal, new_name - -// word ccast, new_name -// word pcast, new_name -// word rcast, new_name -// word scast, new_name - -// word num_args, new_name -// word num_args_impl, new_name - -// word stringize, new_name -// word stringize_va, new_name - -// word do_once, new_name -// word do_once_start, new_name -// word do_once_end, new_name -// word label_scope_start, new_name -// word label_scope_end, new_name - -// word count_of, new_name -// word is_between, new_name -// word min, new_name -// word size_of, new_name -// word offset_of, new_name -// word swap, new_name - - // Basic Types -// word GEN_U8_MIN, new_name -// word GEN_U8_MAX, new_name -// word GEN_I8_MIN, new_name -// word GEN_I8_MAX, new_name - -// word GEN_U16_MIN, new_name -// word GEN_U16_MAX, new_name -// word GEN_I16_MIN, new_name -// word GEN_I16_MAX, new_name - -// word GEN_U32_MIN, new_name -// word GEN_U32_MAX, new_name -// word GEN_I32_MIN, new_name -// word GEN_I32_MAX, new_name - -// word GEN_U64_MIN, new_name -// word GEN_U64_MAX, new_name -// word GEN_I64_MIN, new_name -// word GEN_I64_MAX, new_name - -// word GEN_USIZE_MIN, new_name -// word GEN_USIZE_MAX, new_name -// word GEN_ISIZE_MIN, new_name -// word GEN_ISIZE_MAX, new_name - -// word GEN_F32_MIN, new_name -// word GEN_F32_MAX, new_name -// word GEN_F64_MIN, new_name -// word GEN_F64_MAX, new_name - - // Debug -// word GEN_DEBUG_TRAP, new_name -// word GEN_ASSERT, new_name -// word GEN_ASSERT_MSG, new_name -// word GEN_ASSERT_NOT_NULL, new_name -// word GEN_PANIC, new_name -// word GEN_FATAL, new_name - - // Memory -// word kilobytes, new_name -// word megabytes, new_name -// word gigabytes, new_name -// word terabytes, new_name - -// word zero_item, new_name -// word zero_array, new_name - -// word alloc_item, new_name -// word alloc_array, new_name - -// word malloc, new_name -// word mfree, new_name - - // Strings -// word txt, new_name -// word cast_to_strc, new_name - -// ---------- Dependency Types - -// word b8, new_name -// word b16, new_name -// word b32, new_name -// word s8, new_name -// word s16, new_name -// word s32, new_name -// word s64, new_name -// word u8, new_name -// word u16, new_name -// word u32, new_name -// word u64, new_name -// word usize, new_name -// word ssize, new_name -// word sptr, new_name -// word uptr, new_name -// word f32, new_name -// word f64, new_name - -// namespace EAllocator_, new_namespace_ -// namespace EFileMode_, new_namespace_ -// namespace EFileError_, new_namespace_ - -// word AllocatorInfo, new_name -// word AllocatorProc, new_name -// word AllocFlag, new_name -// word AllocType, new_name -// word ArrayHeader, new_name -// word DirEntry, new_name -// word DirInfo, new_name -// word DirType, new_name -// word FileDescriptor, new_name -// word FileError, new_name -// word FileInfo, new_name -// word FileTime, new_name -// word FileModeFlag, new_name -// word FileOperations, new_name -// word FileStandardType, new_name -// word SeekWhenceType, new_name - -// ---------- Dependency Data - -// word default_file_operations, new_name - -// ---------- Dependency Procedures - -// word align_forward, new_name -// word align_fordward_i64, new_name -// word alloc, new_name -// word alloc_align, new_name -// word assert_handler, new_name -// word assert_crash, new_name -// word char_first_occurence, new_name -// word char_is_alpha, new_name -// word char_is_alphanumeric, new_name -// word char_is_digit, new_name -// word char_is_hex_digit, new_name -// word char_is_space, new_name -// word char_to_lower, new_name -// word char_to_upper, new_name -// word crc32, new_name -// word default_resize_align, new_name -// word digit_to_int, new_name -// word file_close, new_name -// word file_get_standard, new_name -// word file_name, new_name -// word file_open, new_name -// word file_open_mode, new_name -// word file_seek, new_name -// word file_tell, new_name -// word file_write, new_name -// word file_write_at, new_name -// word file_write_at_check, new_name -// word free, new_name -// word free_all, new_name -// word heap, new_name -// word heap_allocator_proc, new_name -// word heap_stats_check, new_name -// word heap_stats_alloc_count, new_name -// word heap_stats_init, new_name -// word heap_stats_used_memory, new_name -// word hex_digit_to_int, new_name -// word i64_to_str, new_name -// word is_power_of_two, new_name -// word log_fmt, new_name -// word mem_copy, new_name -// word mem_move, new_name -// word mem_set, new_name -// word pointer_add, new_name -// word mem_copy, new_name -// word mem_find, new_name -// word mem_move, new_name -// word mem_set, new_name -// word resize, new_name -// word resize_align, new_name -// word process_exit, new_name -// word str_compare, new_name -// word str_copy, new_name -// word str_copy_nulpad, new_name -// word str_fmt_buf, new_name -// word str_fmt_buf_va, new_name -// word str_fmt_file_va, new_name -// word str_fmt_out_va, new_name -// word str_fmt_out_err, new_name -// word str_fmt_out_err_va, new_name -// word str_fmt_va, new_name -// word str_len, new_name -// word str_reverse, new_name -// word str_to_i64, new_name -// word str_to_lower, new_name -// word str_to_upper, new_name -// word u64_to_str, new_name -// word zero_size, new_name - -// ---------- gencpp Macros - -// word log_failure, new_name - -// word NullCode, new_name -// word CodeInvalid, new_name - -// ------------ gencpp common - -// word Arena, new_name -// word Array, new_name -// word HashTable, new_name -// word Pool, new_name -// word StrC, new_name -// word String, new_name - -// word to_str, new_name -// word to_str, new_name -// word to_type, new_name - -// ------------ gencpp Types & Constants - -// word LogFailType, new_name - -// word AccessSpec, new_name -// word ECode, new_name -// word EnumClass, new_name -// word EnumRegular, new_name -// word EnumT, new_name -// word EOperator, new_name -// word ESpecifier, new_name -// word OperatorT, new_name -// word ModuleFlag, new_name -// word SpecifierT, new_name -// word StringCached, new_name -// word StringTable, new_name -// word UsingRegular, new_name -// word UsingNamespace, new_name - -// ------------ gencpp Data - -// word API_Export, new_name -// word API_Import, new_name -// word AST_POD_Size, new_name -// word AST, new_name -// word AST_POD, new_name -// word Code, new_name -// word Code_POD, new_name -// word Keyword, new_name - -// ------------ gencpp API - -// word init, new_name -// word deinit, new_name - -// word get_cached_string, new_name -// word make_code, new_name -// word make_code_entries, new_name - -// word set_allocator_data_arrays, new_name -// word set_allocator_code_pool, new_name -// word set_allocator_code_entries_arena, new_name -// word set_allocator_string_arena, new_name -// word set_allocator_string_table, new_name -// word set_allocator_type_table, new_name - -// ------------ upfront constructor namespace -// namespace def_ new_namespace_ - -// ------------ upfront constructor individual - -// word def_attributes, new_name -// word def_comment, new_name -// word def_class, new_name -// word def_constructor, new_name -// word def_destructor, new_name -// word def_define, new_name -// word def_enum, new_name -// word def_execution, new_name -// word def_extern_link, new_name -// word def_friend, new_name -// word def_function, new_name -// word def_include, new_name -// word def_module, new_name -// word def_namespace, new_name -// word def_operator, new_name -// word def_operator_cast, new_name -// word def_param, new_name -// word def_pargma, new_name -// word def_preprocess_cond, new_name -// word def_specifier, new_name -// word def_struct, new_name -// word def_template, new_name -// word def_type, new_name -// word def_typedef, new_name -// word def_union, new_name -// word def_using, new_name -// word def_using_namespace, new_name -// word def_variable, new_name - -// word def_body, new_name -// word def_class_body, new_name -// word def_enum_body, new_name -// word def_export_body, new_name -// word def_extern_link_body, new_name -// word def_function_body, new_name -// word def_global_body, new_name -// word def_namespace_body, new_name -// word def_params, new_name -// word def_specifiers, new_name -// word def_struct_body, new_name -// word def_union_body, new_name - -// ------------ parse constructor namespace -// namespace parse_, new_namespace_ - -// ------------ parse constructor individual - -// word parse_class, new_name -// word parse_enum, new_name -// word parse_export_body, new_name -// word parse_extern_link, new_name -// word parse_friend, new_name -// word parse_function, new_name -// word parse_global_body, new_name -// word parse_namespace, new_name -// word parse_operator, new_name -// word parse_struct, new_name -// word parse_template, new_name -// word parse_type, new_name -// word parse_typedef, new_name -// word parse_union, new_name -// word parse_using, new_name -// word parse_variable, new_name - -// ------------ untyped constructor namespace -// namespace untyped_, new_namespace_ - -// ------------ untyped constructor individual - -// word token_fmt_impl, new_name -// word token_fmt_va, new_name -// word untyped_str, new_name -// word untyped_fmt, new_name -// word untyped_token_fmt, new_name - -// ------------ File Ops - -// word Builder, new_name -// word Editor, new_name -// word Scanner, new_name - -// ------------ gencpp user macros - -// word gen_main, new_name -// word GEN_TIME, new_name - -// word __, new_name -// word name, new_name -// word code, new_name -// word args, new_name -// word code_str, new_name -// word code_fmt, new_name -// word token_fmt, new_name - -// ------------ Type AST namespace -// namespace t_, new_namespace_ - -// ------------ Specifier AST namespace -// namespace spec_, new_namespace_ diff --git a/base/helpers/base_codegen.hpp b/base/helpers/base_codegen.hpp index 98929a1..c3fdc37 100644 --- a/base/helpers/base_codegen.hpp +++ b/base/helpers/base_codegen.hpp @@ -9,58 +9,58 @@ using namespace gen; CodeBody gen_ecode( char const* path, bool use_c_definition = false ) { - FixedArena_32KB scratch; fixed_arena_init(& scratch); + FixedArena_32KB scratch; fixed_arena_init(& scratch); AllocatorInfo scratch_info = fixed_arena_allocator_info(& scratch); - CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); - String enum_entries = string_make_reserve( GlobalAllocator, kilobytes(1) ); - String to_str_entries = string_make_reserve( GlobalAllocator, kilobytes(1) ); - String to_keyword_str_entries = string_make_reserve( GlobalAllocator, kilobytes(1) ); + CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); + StrBuilder enum_entries = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); + StrBuilder to_c_str_entries = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); + StrBuilder to_keyword_c_str_entries = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); for ( ssize idx = 0; idx < array_num(csv_enum.Col_1); ++ idx ) { char const* code = csv_enum.Col_1[idx].string; char const* keyword = csv_enum.Col_2[idx].string; - // TODO(Ed): to_str_entries and the others in here didn't have proper sizing of the StrC slice. - string_append_fmt( & enum_entries, "CT_%s,\n", code ); - string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", code, code ); - string_append_fmt( & to_keyword_str_entries, "{ sizeof(\"%s\") - 1, \"%s\" },\n", keyword, keyword ); + // TODO(Ed): to_c_str_entries and the others in here didn't have proper sizing of the Str slice. + strbuilder_append_fmt( & enum_entries, "CT_%s,\n", code ); + strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", code, code ); + strbuilder_append_fmt( & to_keyword_c_str_entries, "{ sizeof(\"%s\") - 1, \"%s\" },\n", keyword, keyword ); } CodeEnum enum_code; if (use_c_definition) { - enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", string_to_strc(enum_entries), + enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", strbuilder_to_str(enum_entries), "enum CodeType enum_underlying(u32) { CT_NumTypes, CT_UnderlyingType = GEN_U32_MAX };" )); } else { - enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", string_to_strc(enum_entries), + enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", strbuilder_to_str(enum_entries), "enum CodeType : u32 { CT_NumTypes, CT_UnderlyingType = GEN_U32_MAX };" )); } #pragma push_macro("local_persist") #undef local_persist - StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); - CodeBody to_str_fns = parse_global_body( token_fmt( - "entries", string_to_strc(to_str_entries) - , "keywords", string_to_strc(to_keyword_str_entries) + Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); + CodeBody to_c_str_fns = parse_global_body( token_fmt( + "entries", strbuilder_to_str(to_c_str_entries) + , "keywords", strbuilder_to_str(to_keyword_c_str_entries) , "num", lookup_size , stringize( inline - StrC codetype_to_str( CodeType type ) + Str codetype_to_str( CodeType type ) { local_persist - StrC lookup[] = { + Str lookup[] = { }; return lookup[ type ]; } inline - StrC codetype_to_keyword_str( CodeType type ) + Str codetype_to_keyword_str( CodeType type ) { local_persist - StrC lookup[ ] = { + Str lookup[ ] = { }; return lookup[ type ]; @@ -76,14 +76,14 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) body_append(result, code_t); } - body_append(result, to_str_fns); + body_append(result, to_c_str_fns); if (! use_c_definition) { #pragma push_macro("forceinline") #undef forceinline CodeBody alias_mappings = parse_global_body(code( - forceinline StrC to_str (CodeType type) { return codetype_to_str(type); } - forceinline StrC to_keyword_str(CodeType type) { return codetype_to_keyword_str(type); } + forceinline Str to_str (CodeType type) { return codetype_to_str(type); } + forceinline Str to_keyword_str(CodeType type) { return codetype_to_keyword_str(type); } )); #pragma pop_macro("forceinline") body_append(result, alias_mappings); @@ -93,19 +93,18 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) { - FixedArena_16KB scratch; fixed_arena_init(& scratch); + FixedArena_16KB scratch; fixed_arena_init(& scratch); AllocatorInfo scratch_info = fixed_arena_allocator_info(& scratch); - CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); - String enum_entries = string_make_reserve( GlobalAllocator, 32 ); - String to_str_entries = string_make_reserve( GlobalAllocator, 32 ); + CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); + StrBuilder enum_entries = strbuilder_make_reserve( GlobalAllocator, 32 ); + StrBuilder to_c_str_entries = strbuilder_make_reserve( GlobalAllocator, 32 ); for (usize idx = 0; idx < array_num(csv_enum.Col_1); idx++) { char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; - - string_append_fmt( & enum_entries, "Op_%s,\n", enum_str ); - string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & enum_entries, "Op_%s,\n", enum_str ); + strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -113,7 +112,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) { #pragma push_macro("enum_underlying") #undef enum_underlying - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( enum Operator enum_underlying(u32) { @@ -125,7 +124,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) } else { - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( enum Operator : u32 { @@ -137,16 +136,16 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) #pragma push_macro("local_persist") #undef local_persist - StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); + Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); CodeFn to_str = parse_function(token_fmt( - "entries", string_to_strc(to_str_entries) + "entries", strbuilder_to_str(to_c_str_entries) , "num", lookup_size , stringize( inline - StrC operator_to_str( Operator op ) + Str operator_to_str( Operator op ) { local_persist - StrC lookup[] = { + Str lookup[] = { }; @@ -169,7 +168,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) #pragma push_macro("forceinline") #undef forceinline CodeBody alias_mappings = parse_global_body(code( - forceinline StrC to_str(Operator op) { return operator_to_str(op); } + forceinline Str to_str(Operator op) { return operator_to_str(op); } )); #pragma pop_macro("forceinline") body_append(result, alias_mappings); @@ -179,20 +178,19 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) CodeBody gen_especifier( char const* path, bool use_c_definition = false ) { - FixedArena_16KB scratch; fixed_arena_init(& scratch); + FixedArena_16KB scratch; fixed_arena_init(& scratch); AllocatorInfo scratch_info = fixed_arena_allocator_info(& scratch); - CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); - String enum_entries = string_make_reserve( scratch_info, kilobytes(1) ); - String to_str_entries = string_make_reserve( scratch_info, kilobytes(1) ); + CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); + StrBuilder enum_entries = strbuilder_make_reserve( scratch_info, kilobytes(1) ); + StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(1) ); for (usize idx = 0; idx < array_num(csv_enum.Col_1); idx++) { char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; - - string_append_fmt( & enum_entries, "Spec_%s,\n", enum_str ); - string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & enum_entries, "Spec_%s,\n", enum_str ); + strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -200,7 +198,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) { #pragma push_macro("enum_underlying") #undef enum_underlying - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( enum Specifier enum_underlying(u32) { @@ -212,7 +210,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) } else { - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( enum Specifier : u32 { @@ -221,8 +219,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) }; ))); } - - CodeFn is_trailing = parse_function(token_fmt("specifier", string_to_strc(to_str_entries), stringize( + CodeFn is_trailing = parse_function(token_fmt("specifier", strbuilder_to_str(to_c_str_entries), stringize( inline bool spec_is_trailing( Specifier specifier ) { @@ -240,16 +237,16 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) #undef do_once_end #undef forceinline #undef neverinline - StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); + Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); CodeFn to_str = parse_function(token_fmt( - "entries", string_to_strc(to_str_entries) + "entries", strbuilder_to_str(to_c_str_entries) , "num", lookup_size , stringize( inline - StrC spec_to_str( Specifier type ) + Str spec_to_str( Specifier type ) { local_persist - StrC lookup[] = { + Str lookup[] = { }; @@ -257,16 +254,16 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) } ))); - CodeFn to_type = parse_function( token_fmt( "entries", string_to_strc(to_str_entries), stringize( + CodeFn to_type = parse_function( token_fmt( "entries", strbuilder_to_str(to_c_str_entries), stringize( inline - Specifier strc_to_specifier( StrC str ) + Specifier str_to_specifier( Str str ) { local_persist u32 keymap[ Spec_NumSpecifiers ]; do_once_start for ( u32 index = 0; index < Spec_NumSpecifiers; index++ ) { - StrC enum_str = spec_to_str( (Specifier)index ); + Str enum_str = spec_to_str( (Specifier)index ); // We subtract 1 to remove the null terminator // This is because the tokens lexed are not null terminated. @@ -308,8 +305,8 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) #pragma push_macro("forceinline") #undef forceinline CodeBody alias_mappings = parse_global_body(code( - forceinline StrC to_str (Specifier spec) { return spec_to_str(spec); } - forceinline Specifier to_type( StrC str ) { return strc_to_specifier(str); } + forceinline Str to_str (Specifier spec) { return spec_to_str(spec); } + forceinline Specifier to_type( Str str ) { return str_to_specifier(str); } forceinline bool is_trailing( Specifier specifier ) { return spec_is_trailing(specifier); } )); #pragma pop_macro("forceinline") @@ -334,50 +331,50 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ csv_parse( &csv_attr_nodes, rcast(char*, attrib_content.data), scratch_info, false ); Array enum_strs = csv_enum_nodes.nodes[0].nodes; - Array enum_str_strs = csv_enum_nodes.nodes[1].nodes; + Array enum_c_str_strs = csv_enum_nodes.nodes[1].nodes; Array attribute_strs = csv_attr_nodes.nodes[0].nodes; - Array attribute_str_strs = csv_attr_nodes.nodes[1].nodes; + Array attribute_c_str_strs = csv_attr_nodes.nodes[1].nodes; - String enum_entries = string_make_reserve( scratch_info, kilobytes(2) ); - String to_str_entries = string_make_reserve( scratch_info, kilobytes(4) ); - String attribute_entries = string_make_reserve( scratch_info, kilobytes(2) ); - String to_str_attributes = string_make_reserve( scratch_info, kilobytes(4) ); - String attribute_define_entries = string_make_reserve( scratch_info, kilobytes(4) ); + StrBuilder enum_entries = strbuilder_make_reserve( scratch_info, kilobytes(2) ); + StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); + StrBuilder attribute_entries = strbuilder_make_reserve( scratch_info, kilobytes(2) ); + StrBuilder to_c_str_attributes = strbuilder_make_reserve( scratch_info, kilobytes(4) ); + StrBuilder attribute_define_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); for (usize idx = 0; idx < array_num(enum_strs); idx++) { char const* enum_str = enum_strs[idx].string; - char const* entry_to_str = enum_str_strs [idx].string; + char const* entry_to_str = enum_c_str_strs [idx].string; - string_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); - string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); + strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); } for ( usize idx = 0; idx < array_num(attribute_strs); idx++ ) { char const* attribute_str = attribute_strs[idx].string; - char const* entry_to_str = attribute_str_strs [idx].string; + char const* entry_to_str = attribute_c_str_strs [idx].string; - string_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); - string_append_fmt( & to_str_attributes, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); - string_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); + strbuilder_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); + strbuilder_append_fmt( & to_c_str_attributes, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); if ( idx < array_num(attribute_strs) - 1 ) - string_append_strc( & attribute_define_entries, txt(" \\\n")); + strbuilder_append_str( & attribute_define_entries, txt(" \\\n")); else - string_append_strc( & attribute_define_entries, txt("\n")); + strbuilder_append_str( & attribute_define_entries, txt("\n")); } #pragma push_macro("GEN_DEFINE_ATTRIBUTE_TOKENS") #undef GEN_DEFINE_ATTRIBUTE_TOKENS - CodeDefine attribute_entires_def = def_define( name(GEN_DEFINE_ATTRIBUTE_TOKENS), string_to_strc(attribute_define_entries) ); + CodeDefine attribute_entires_def = def_define( name(GEN_DEFINE_ATTRIBUTE_TOKENS), strbuilder_to_str(attribute_define_entries) ); #pragma pop_macro("GEN_DEFINE_ATTRIBUTE_TOKENS") // We cannot parse this enum, it has Attribute names as enums CodeEnum enum_code; if (use_c_definition) { - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), "attribute_toks", string_to_strc(attribute_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), "attribute_toks", strbuilder_to_str(attribute_entries), stringize( enum TokType { @@ -389,7 +386,7 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ } else { - enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), "attribute_toks", string_to_strc(attribute_entries), stringize( + enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), "attribute_toks", strbuilder_to_str(attribute_entries), stringize( enum TokType : u32 { @@ -405,12 +402,12 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ #undef local_persist #undef do_once_start #undef do_once_end - CodeFn to_str = parse_function(token_fmt("entries", string_to_strc(to_str_entries), "attribute_toks", string_to_strc(to_str_attributes), stringize( + CodeFn to_str = parse_function(token_fmt("entries", strbuilder_to_str(to_c_str_entries), "attribute_toks", strbuilder_to_str(to_c_str_attributes), stringize( inline - StrC toktype_to_str( TokType type ) + Str toktype_to_str( TokType type ) { local_persist - StrC lookup[] = { + Str lookup[] = { }; @@ -419,16 +416,16 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ } ))); - CodeFn to_type = parse_function( token_fmt( "entries", string_to_strc(to_str_entries), stringize( + CodeFn to_type = parse_function( token_fmt( "entries", strbuilder_to_str(to_c_str_entries), stringize( inline - TokType strc_to_toktype( StrC str ) + TokType str_to_toktype( Str str ) { local_persist u32 keymap[ Tok_NumTokens ]; do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) { - StrC enum_str = toktype_to_str( (TokType)index ); + Str enum_str = toktype_to_str( (TokType)index ); // We subtract 1 to remove the null terminator // This is because the tokens lexed are not null terminated. @@ -518,59 +515,59 @@ CodeBody gen_ast_inlines() #pragma pop_macro("GEN_NS") #pragma pop_macro("CodeInvalid") - CodeBody impl_code = parse_global_body( token_fmt( "typename", StrC name(Code), code_impl_tmpl )); - CodeBody impl_code_body = parse_global_body( token_fmt( "typename", StrC name(CodeBody), code_impl_tmpl )); - CodeBody impl_code_attr = parse_global_body( token_fmt( "typename", StrC name(CodeAttributes), code_impl_tmpl )); - CodeBody impl_code_cmt = parse_global_body( token_fmt( "typename", StrC name(CodeComment), code_impl_tmpl )); - CodeBody impl_code_constr = parse_global_body( token_fmt( "typename", StrC name(CodeConstructor), code_impl_tmpl )); - CodeBody impl_code_class = parse_global_body( token_fmt( "typename", StrC name(CodeClass), code_impl_tmpl )); - CodeBody impl_code_define = parse_global_body( token_fmt( "typename", StrC name(CodeDefine), code_impl_tmpl )); - CodeBody impl_code_destruct = parse_global_body( token_fmt( "typename", StrC name(CodeDestructor), code_impl_tmpl )); - CodeBody impl_code_enum = parse_global_body( token_fmt( "typename", StrC name(CodeEnum), code_impl_tmpl )); - CodeBody impl_code_exec = parse_global_body( token_fmt( "typename", StrC name(CodeExec), code_impl_tmpl )); - CodeBody impl_code_extern = parse_global_body( token_fmt( "typename", StrC name(CodeExtern), code_impl_tmpl )); - CodeBody impl_code_include = parse_global_body( token_fmt( "typename", StrC name(CodeInclude), code_impl_tmpl )); - CodeBody impl_code_friend = parse_global_body( token_fmt( "typename", StrC name(CodeFriend), code_impl_tmpl )); - CodeBody impl_code_fn = parse_global_body( token_fmt( "typename", StrC name(CodeFn), code_impl_tmpl )); - CodeBody impl_code_module = parse_global_body( token_fmt( "typename", StrC name(CodeModule), code_impl_tmpl )); - CodeBody impl_code_ns = parse_global_body( token_fmt( "typename", StrC name(CodeNS), code_impl_tmpl )); - CodeBody impl_code_op = parse_global_body( token_fmt( "typename", StrC name(CodeOperator), code_impl_tmpl )); - CodeBody impl_code_opcast = parse_global_body( token_fmt( "typename", StrC name(CodeOpCast), code_impl_tmpl )); - CodeBody impl_code_params = parse_global_body( token_fmt( "typename", StrC name(CodeParams), code_impl_tmpl )); - CodeBody impl_code_pragma = parse_global_body( token_fmt( "typename", StrC name(CodePragma), code_impl_tmpl )); - CodeBody impl_code_precond = parse_global_body( token_fmt( "typename", StrC name(CodePreprocessCond), code_impl_tmpl )); - CodeBody impl_code_specs = parse_global_body( token_fmt( "typename", StrC name(CodeSpecifiers), code_impl_tmpl )); - CodeBody impl_code_struct = parse_global_body( token_fmt( "typename", StrC name(CodeStruct), code_impl_tmpl )); - CodeBody impl_code_tmpl = parse_global_body( token_fmt( "typename", StrC name(CodeTemplate), code_impl_tmpl )); - CodeBody impl_code_type = parse_global_body( token_fmt( "typename", StrC name(CodeTypename), code_impl_tmpl )); - CodeBody impl_code_typedef = parse_global_body( token_fmt( "typename", StrC name(CodeTypedef), code_impl_tmpl )); - CodeBody impl_code_union = parse_global_body( token_fmt( "typename", StrC name(CodeUnion), code_impl_tmpl )); - CodeBody impl_code_using = parse_global_body( token_fmt( "typename", StrC name(CodeUsing), code_impl_tmpl )); - CodeBody impl_code_var = parse_global_body( token_fmt( "typename", StrC name(CodeVar), code_impl_tmpl )); + CodeBody impl_code = parse_global_body( token_fmt( "typename", Str name(Code), code_impl_tmpl )); + CodeBody impl_code_body = parse_global_body( token_fmt( "typename", Str name(CodeBody), code_impl_tmpl )); + CodeBody impl_code_attr = parse_global_body( token_fmt( "typename", Str name(CodeAttributes), code_impl_tmpl )); + CodeBody impl_code_cmt = parse_global_body( token_fmt( "typename", Str name(CodeComment), code_impl_tmpl )); + CodeBody impl_code_constr = parse_global_body( token_fmt( "typename", Str name(CodeConstructor), code_impl_tmpl )); + CodeBody impl_code_class = parse_global_body( token_fmt( "typename", Str name(CodeClass), code_impl_tmpl )); + CodeBody impl_code_define = parse_global_body( token_fmt( "typename", Str name(CodeDefine), code_impl_tmpl )); + CodeBody impl_code_destruct = parse_global_body( token_fmt( "typename", Str name(CodeDestructor), code_impl_tmpl )); + CodeBody impl_code_enum = parse_global_body( token_fmt( "typename", Str name(CodeEnum), code_impl_tmpl )); + CodeBody impl_code_exec = parse_global_body( token_fmt( "typename", Str name(CodeExec), code_impl_tmpl )); + CodeBody impl_code_extern = parse_global_body( token_fmt( "typename", Str name(CodeExtern), code_impl_tmpl )); + CodeBody impl_code_include = parse_global_body( token_fmt( "typename", Str name(CodeInclude), code_impl_tmpl )); + CodeBody impl_code_friend = parse_global_body( token_fmt( "typename", Str name(CodeFriend), code_impl_tmpl )); + CodeBody impl_code_fn = parse_global_body( token_fmt( "typename", Str name(CodeFn), code_impl_tmpl )); + CodeBody impl_code_module = parse_global_body( token_fmt( "typename", Str name(CodeModule), code_impl_tmpl )); + CodeBody impl_code_ns = parse_global_body( token_fmt( "typename", Str name(CodeNS), code_impl_tmpl )); + CodeBody impl_code_op = parse_global_body( token_fmt( "typename", Str name(CodeOperator), code_impl_tmpl )); + CodeBody impl_code_opcast = parse_global_body( token_fmt( "typename", Str name(CodeOpCast), code_impl_tmpl )); + CodeBody impl_code_params = parse_global_body( token_fmt( "typename", Str name(CodeParams), code_impl_tmpl )); + CodeBody impl_code_pragma = parse_global_body( token_fmt( "typename", Str name(CodePragma), code_impl_tmpl )); + CodeBody impl_code_precond = parse_global_body( token_fmt( "typename", Str name(CodePreprocessCond), code_impl_tmpl )); + CodeBody impl_code_specs = parse_global_body( token_fmt( "typename", Str name(CodeSpecifiers), code_impl_tmpl )); + CodeBody impl_code_struct = parse_global_body( token_fmt( "typename", Str name(CodeStruct), code_impl_tmpl )); + CodeBody impl_code_tmpl = parse_global_body( token_fmt( "typename", Str name(CodeTemplate), code_impl_tmpl )); + CodeBody impl_code_type = parse_global_body( token_fmt( "typename", Str name(CodeTypename), code_impl_tmpl )); + CodeBody impl_code_typedef = parse_global_body( token_fmt( "typename", Str name(CodeTypedef), code_impl_tmpl )); + CodeBody impl_code_union = parse_global_body( token_fmt( "typename", Str name(CodeUnion), code_impl_tmpl )); + CodeBody impl_code_using = parse_global_body( token_fmt( "typename", Str name(CodeUsing), code_impl_tmpl )); + CodeBody impl_code_var = parse_global_body( token_fmt( "typename", Str name(CodeVar), code_impl_tmpl )); - body_append(impl_code_attr, parse_global_body( token_fmt( "typename", StrC name(Attributes), codetype_impl_tmpl ))); - body_append(impl_code_cmt, parse_global_body( token_fmt( "typename", StrC name(Comment), codetype_impl_tmpl ))); - body_append(impl_code_constr, parse_global_body( token_fmt( "typename", StrC name(Constructor), codetype_impl_tmpl ))); - body_append(impl_code_define, parse_global_body( token_fmt( "typename", StrC name(Define), codetype_impl_tmpl ))); - body_append(impl_code_destruct, parse_global_body( token_fmt( "typename", StrC name(Destructor), codetype_impl_tmpl ))); - body_append(impl_code_enum, parse_global_body( token_fmt( "typename", StrC name(Enum), codetype_impl_tmpl ))); - body_append(impl_code_exec, parse_global_body( token_fmt( "typename", StrC name(Exec), codetype_impl_tmpl ))); - body_append(impl_code_extern, parse_global_body( token_fmt( "typename", StrC name(Extern), codetype_impl_tmpl ))); - body_append(impl_code_include, parse_global_body( token_fmt( "typename", StrC name(Include), codetype_impl_tmpl ))); - body_append(impl_code_friend, parse_global_body( token_fmt( "typename", StrC name(Friend), codetype_impl_tmpl ))); - body_append(impl_code_fn, parse_global_body( token_fmt( "typename", StrC name(Fn), codetype_impl_tmpl ))); - body_append(impl_code_module, parse_global_body( token_fmt( "typename", StrC name(Module), codetype_impl_tmpl ))); - body_append(impl_code_ns, parse_global_body( token_fmt( "typename", StrC name(NS), codetype_impl_tmpl ))); - body_append(impl_code_op, parse_global_body( token_fmt( "typename", StrC name(Operator), codetype_impl_tmpl ))); - body_append(impl_code_opcast, parse_global_body( token_fmt( "typename", StrC name(OpCast), codetype_impl_tmpl ))); - body_append(impl_code_pragma, parse_global_body( token_fmt( "typename", StrC name(Pragma), codetype_impl_tmpl ))); - body_append(impl_code_precond, parse_global_body( token_fmt( "typename", StrC name(PreprocessCond), codetype_impl_tmpl ))); - body_append(impl_code_tmpl, parse_global_body( token_fmt( "typename", StrC name(Template), codetype_impl_tmpl ))); - body_append(impl_code_type, parse_global_body( token_fmt( "typename", StrC name(Typename), codetype_impl_tmpl ))); - body_append(impl_code_typedef, parse_global_body( token_fmt( "typename", StrC name(Typedef), codetype_impl_tmpl ))); - body_append(impl_code_union, parse_global_body( token_fmt( "typename", StrC name(Union), codetype_impl_tmpl ))); - body_append(impl_code_using, parse_global_body( token_fmt( "typename", StrC name(Using), codetype_impl_tmpl ))); - body_append(impl_code_var, parse_global_body( token_fmt( "typename", StrC name(Var), codetype_impl_tmpl ))); + body_append(impl_code_attr, parse_global_body( token_fmt( "typename", Str name(Attributes), codetype_impl_tmpl ))); + body_append(impl_code_cmt, parse_global_body( token_fmt( "typename", Str name(Comment), codetype_impl_tmpl ))); + body_append(impl_code_constr, parse_global_body( token_fmt( "typename", Str name(Constructor), codetype_impl_tmpl ))); + body_append(impl_code_define, parse_global_body( token_fmt( "typename", Str name(Define), codetype_impl_tmpl ))); + body_append(impl_code_destruct, parse_global_body( token_fmt( "typename", Str name(Destructor), codetype_impl_tmpl ))); + body_append(impl_code_enum, parse_global_body( token_fmt( "typename", Str name(Enum), codetype_impl_tmpl ))); + body_append(impl_code_exec, parse_global_body( token_fmt( "typename", Str name(Exec), codetype_impl_tmpl ))); + body_append(impl_code_extern, parse_global_body( token_fmt( "typename", Str name(Extern), codetype_impl_tmpl ))); + body_append(impl_code_include, parse_global_body( token_fmt( "typename", Str name(Include), codetype_impl_tmpl ))); + body_append(impl_code_friend, parse_global_body( token_fmt( "typename", Str name(Friend), codetype_impl_tmpl ))); + body_append(impl_code_fn, parse_global_body( token_fmt( "typename", Str name(Fn), codetype_impl_tmpl ))); + body_append(impl_code_module, parse_global_body( token_fmt( "typename", Str name(Module), codetype_impl_tmpl ))); + body_append(impl_code_ns, parse_global_body( token_fmt( "typename", Str name(NS), codetype_impl_tmpl ))); + body_append(impl_code_op, parse_global_body( token_fmt( "typename", Str name(Operator), codetype_impl_tmpl ))); + body_append(impl_code_opcast, parse_global_body( token_fmt( "typename", Str name(OpCast), codetype_impl_tmpl ))); + body_append(impl_code_pragma, parse_global_body( token_fmt( "typename", Str name(Pragma), codetype_impl_tmpl ))); + body_append(impl_code_precond, parse_global_body( token_fmt( "typename", Str name(PreprocessCond), codetype_impl_tmpl ))); + body_append(impl_code_tmpl, parse_global_body( token_fmt( "typename", Str name(Template), codetype_impl_tmpl ))); + body_append(impl_code_type, parse_global_body( token_fmt( "typename", Str name(Typename), codetype_impl_tmpl ))); + body_append(impl_code_typedef, parse_global_body( token_fmt( "typename", Str name(Typedef), codetype_impl_tmpl ))); + body_append(impl_code_union, parse_global_body( token_fmt( "typename", Str name(Union), codetype_impl_tmpl ))); + body_append(impl_code_using, parse_global_body( token_fmt( "typename", Str name(Using), codetype_impl_tmpl ))); + body_append(impl_code_var, parse_global_body( token_fmt( "typename", Str name(Var), codetype_impl_tmpl ))); #pragma push_macro("forceinline") #undef forceinline @@ -582,34 +579,34 @@ CodeBody gen_ast_inlines() ); #pragma pop_macro("forceinline") - CodeBody impl_cast_body = parse_global_body( token_fmt( "typename", StrC name(Body), cast_tmpl )); - CodeBody impl_cast_attribute = parse_global_body( token_fmt( "typename", StrC name(Attributes), cast_tmpl )); - CodeBody impl_cast_cmt = parse_global_body( token_fmt( "typename", StrC name(Comment), cast_tmpl )); - CodeBody impl_cast_constr = parse_global_body( token_fmt( "typename", StrC name(Constructor), cast_tmpl )); - CodeBody impl_cast_class = parse_global_body( token_fmt( "typename", StrC name(Class), cast_tmpl )); - CodeBody impl_cast_define = parse_global_body( token_fmt( "typename", StrC name(Define), cast_tmpl )); - CodeBody impl_cast_destruct = parse_global_body( token_fmt( "typename", StrC name(Destructor), cast_tmpl )); - CodeBody impl_cast_enum = parse_global_body( token_fmt( "typename", StrC name(Enum), cast_tmpl )); - CodeBody impl_cast_exec = parse_global_body( token_fmt( "typename", StrC name(Exec), cast_tmpl )); - CodeBody impl_cast_extern = parse_global_body( token_fmt( "typename", StrC name(Extern), cast_tmpl )); - CodeBody impl_cast_friend = parse_global_body( token_fmt( "typename", StrC name(Friend), cast_tmpl )); - CodeBody impl_cast_fn = parse_global_body( token_fmt( "typename", StrC name(Fn), cast_tmpl )); - CodeBody impl_cast_include = parse_global_body( token_fmt( "typename", StrC name(Include), cast_tmpl )); - CodeBody impl_cast_module = parse_global_body( token_fmt( "typename", StrC name(Module), cast_tmpl )); - CodeBody impl_cast_ns = parse_global_body( token_fmt( "typename", StrC name(NS), cast_tmpl )); - CodeBody impl_cast_op = parse_global_body( token_fmt( "typename", StrC name(Operator), cast_tmpl )); - CodeBody impl_cast_opcast = parse_global_body( token_fmt( "typename", StrC name(OpCast), cast_tmpl )); - CodeBody impl_cast_params = parse_global_body( token_fmt( "typename", StrC name(Params), cast_tmpl )); - CodeBody impl_cast_pragma = parse_global_body( token_fmt( "typename", StrC name(Pragma), cast_tmpl )); - CodeBody impl_cast_precond = parse_global_body( token_fmt( "typename", StrC name(PreprocessCond), cast_tmpl )); - CodeBody impl_cast_specs = parse_global_body( token_fmt( "typename", StrC name(Specifiers), cast_tmpl )); - CodeBody impl_cast_struct = parse_global_body( token_fmt( "typename", StrC name(Struct), cast_tmpl )); - CodeBody impl_cast_tmpl = parse_global_body( token_fmt( "typename", StrC name(Template), cast_tmpl )); - CodeBody impl_cast_type = parse_global_body( token_fmt( "typename", StrC name(Typename), cast_tmpl )); - CodeBody impl_cast_typedef = parse_global_body( token_fmt( "typename", StrC name(Typedef), cast_tmpl )); - CodeBody impl_cast_union = parse_global_body( token_fmt( "typename", StrC name(Union), cast_tmpl )); - CodeBody impl_cast_using = parse_global_body( token_fmt( "typename", StrC name(Using), cast_tmpl )); - CodeBody impl_cast_var = parse_global_body( token_fmt( "typename", StrC name(Var), cast_tmpl )); + CodeBody impl_cast_body = parse_global_body( token_fmt( "typename", Str name(Body), cast_tmpl )); + CodeBody impl_cast_attribute = parse_global_body( token_fmt( "typename", Str name(Attributes), cast_tmpl )); + CodeBody impl_cast_cmt = parse_global_body( token_fmt( "typename", Str name(Comment), cast_tmpl )); + CodeBody impl_cast_constr = parse_global_body( token_fmt( "typename", Str name(Constructor), cast_tmpl )); + CodeBody impl_cast_class = parse_global_body( token_fmt( "typename", Str name(Class), cast_tmpl )); + CodeBody impl_cast_define = parse_global_body( token_fmt( "typename", Str name(Define), cast_tmpl )); + CodeBody impl_cast_destruct = parse_global_body( token_fmt( "typename", Str name(Destructor), cast_tmpl )); + CodeBody impl_cast_enum = parse_global_body( token_fmt( "typename", Str name(Enum), cast_tmpl )); + CodeBody impl_cast_exec = parse_global_body( token_fmt( "typename", Str name(Exec), cast_tmpl )); + CodeBody impl_cast_extern = parse_global_body( token_fmt( "typename", Str name(Extern), cast_tmpl )); + CodeBody impl_cast_friend = parse_global_body( token_fmt( "typename", Str name(Friend), cast_tmpl )); + CodeBody impl_cast_fn = parse_global_body( token_fmt( "typename", Str name(Fn), cast_tmpl )); + CodeBody impl_cast_include = parse_global_body( token_fmt( "typename", Str name(Include), cast_tmpl )); + CodeBody impl_cast_module = parse_global_body( token_fmt( "typename", Str name(Module), cast_tmpl )); + CodeBody impl_cast_ns = parse_global_body( token_fmt( "typename", Str name(NS), cast_tmpl )); + CodeBody impl_cast_op = parse_global_body( token_fmt( "typename", Str name(Operator), cast_tmpl )); + CodeBody impl_cast_opcast = parse_global_body( token_fmt( "typename", Str name(OpCast), cast_tmpl )); + CodeBody impl_cast_params = parse_global_body( token_fmt( "typename", Str name(Params), cast_tmpl )); + CodeBody impl_cast_pragma = parse_global_body( token_fmt( "typename", Str name(Pragma), cast_tmpl )); + CodeBody impl_cast_precond = parse_global_body( token_fmt( "typename", Str name(PreprocessCond), cast_tmpl )); + CodeBody impl_cast_specs = parse_global_body( token_fmt( "typename", Str name(Specifiers), cast_tmpl )); + CodeBody impl_cast_struct = parse_global_body( token_fmt( "typename", Str name(Struct), cast_tmpl )); + CodeBody impl_cast_tmpl = parse_global_body( token_fmt( "typename", Str name(Template), cast_tmpl )); + CodeBody impl_cast_type = parse_global_body( token_fmt( "typename", Str name(Typename), cast_tmpl )); + CodeBody impl_cast_typedef = parse_global_body( token_fmt( "typename", Str name(Typedef), cast_tmpl )); + CodeBody impl_cast_union = parse_global_body( token_fmt( "typename", Str name(Union), cast_tmpl )); + CodeBody impl_cast_using = parse_global_body( token_fmt( "typename", Str name(Using), cast_tmpl )); + CodeBody impl_cast_var = parse_global_body( token_fmt( "typename", Str name(Var), cast_tmpl )); CodeBody result = def_global_body( args( def_pragma( txt("region generated code inline implementation")), diff --git a/base/helpers/misc.hpp b/base/helpers/misc.hpp index f6625f9..b371fdf 100644 --- a/base/helpers/misc.hpp +++ b/base/helpers/misc.hpp @@ -21,22 +21,22 @@ using namespace gen; void clang_format_file( char const* path, char const* style_path ) { GEN_ASSERT_NOT_NULL(path); - String resolved_path = string_make_strc(GlobalAllocator, to_strc_from_c_str(path)); - String style_arg; + StrBuilder resolved_path = strbuilder_make_str(GlobalAllocator, to_str_from_c_str(path)); + StrBuilder style_arg; if (style_path) { - style_arg = string_make_strc(GlobalAllocator, txt("-style=file:")); - string_append_fmt( & style_arg, "%s ", style_path ); + style_arg = strbuilder_make_str(GlobalAllocator, txt("-style=file:")); + strbuilder_append_fmt( & style_arg, "%s ", style_path ); } - StrC clang_format = txt("clang-format "); - StrC cf_format_inplace = txt("-i "); - StrC cf_verbose = txt("-verbose "); + Str clang_format = txt("clang-format "); + Str cf_format_inplace = txt("-i "); + Str cf_verbose = txt("-verbose "); - String command = string_make_strc( GlobalAllocator, clang_format ); - string_append_strc( & command, cf_format_inplace ); - string_append_strc( & command, cf_verbose ); - string_append_string( & command, style_arg ); - string_append_string( & command, resolved_path ); + StrBuilder command = strbuilder_make_str( GlobalAllocator, clang_format ); + strbuilder_append_str( & command, cf_format_inplace ); + strbuilder_append_str( & command, cf_verbose ); + strbuilder_append_string( & command, style_arg ); + strbuilder_append_string( & command, resolved_path ); system( command ); } @@ -48,11 +48,11 @@ void refactor_file( char const* path, char const* refactor_script ) GEN_ASSERT_NOT_NULL(path); GEN_ASSERT_NOT_NULL(refactor_script); - String command = string_make_strc(GlobalAllocator, txt("refactor ")); - // string_append_strc( & command, txt("-debug ") ); - string_append_strc( & command, txt("-num=1 ") ); - string_append_fmt( & command, "-src=%s ", path ); - string_append_fmt( & command,"-spec=%s ", refactor_script ); + StrBuilder command = strbuilder_make_str(GlobalAllocator, txt("refactor ")); + // strbuilder_append_str( & command, txt("-debug ") ); + strbuilder_append_str( & command, txt("-num=1 ") ); + strbuilder_append_fmt( & command, "-src=%s ", path ); + strbuilder_append_fmt( & command,"-spec=%s ", refactor_script ); system(command); log_fmt("\n"); } diff --git a/docs/AST_Design.md b/docs/AST_Design.md index 6d4caa8..cff0b14 100644 --- a/docs/AST_Design.md +++ b/docs/AST_Design.md @@ -46,13 +46,13 @@ The C/C++ interface procedures are located with `ast.hpp` (for the Code type), a All code types can either serialize using a function of the pattern: ```c -String _to_string(Code code); +StrBuilder _to_string(Code code); // or -_to_string(Code code, String& result); +_to_string(Code code, StrBuilder& result); ``` Where the first generates strings allocated using Allocator_StringArena and the other appends an existing strings with their backed allocator. -Serialization of for the AST is defined for `Code` in [`ast.chpp`](../base/components/ast.cpp) with `code_to_string_ptr` & `code_to_string`. +Serialization of for the AST is defined for `Code` in [`ast.chpp`](../base/components/ast.cpp) with `code_to_strbuilder_ptr` & `code_to_string`. Serializtion for the rest of the code types is within [`code_serialization.cpp`](../base/components/code_serialization.cpp). Gencpp's serialization does not provide coherent formatting of the code. The user should use a formatter after serializing. diff --git a/docs/AST_Types.md b/docs/AST_Types.md index f7bc66e..ccc35c7 100644 --- a/docs/AST_Types.md +++ b/docs/AST_Types.md @@ -248,7 +248,7 @@ ModuleFlag ModuleFlags; ``` UnderlyingTypeMacro is a macro the library natively supports: `enum_underlying(type)` that is meant to behave as a wrapper for underlying type assignment. -The `enum_underlying_sig` is a `StrC` global var that can be set which will be defined within `PreprocessorDefines` and used in `parser_parse_enum` to identify a valid macro. +The `enum_underlying_sig` is a `Str` global var that can be set which will be defined within `PreprocessorDefines` and used in `parser_parse_enum` to identify a valid macro. Serialization: @@ -637,7 +637,7 @@ Serialization: `` currently has the full serialization of anything with -*Note: ArrExpr is not used in serialization by `typename_to_string_ref` its instead handled by a parent AST's serailization (variable, typedef, using).* +*Note: ArrExpr is not used in serialization by `typename_to_strbuilder_ref` its instead handled by a parent AST's serailization (variable, typedef, using).* ## Typedef diff --git a/docs/Parser_Algo.md b/docs/Parser_Algo.md index 3cb5ca5..8180168 100644 --- a/docs/Parser_Algo.md +++ b/docs/Parser_Algo.md @@ -12,7 +12,7 @@ gencpp uses a hand-written recursive descent parser. Both the lexer and parser c ### Lexer -The lex procedure does the lexical pass of content provided as a `StrC` type. +The lex procedure does the lexical pass of content provided as a `Str` type. The tokens are stored (for now) in `Lexer_Tokens`. Fields: @@ -75,7 +75,7 @@ The parser has a limited user interface, only specific types of definitions or s Each public user interface procedure has the following format: ```cpp - parse_( StrC def ) + parse_( Str def ) { check_parse_args( def ); using namespace Parser; @@ -287,7 +287,7 @@ In the future statements and expressions will be parsed. 1. Attributes ( Standard, GNU, MSVC, Macro ) : `parse_attributes` 2. Specifiers ( consteval, constexpr, constinit, extern, forceinline, global, inline, internal_linkage, neverinline, static ) 3. Is either ( identifier, const specifier, long, short, signed, unsigned, bool, char, double, int) - 1. Attempt to parse as constrcutor or destructor : `parse_global_nspace_constructor_destructor` + 1. Attempt to parse as construtor or destructor : `parse_global_nspace_constructor_destructor` 2. If its an operator cast (definition outside class) : `parse_operator_cast` 3. Its an operator, function, or varaible : `parse_operator_function_or_varaible` 4. If its not a global body, consume the closing curly brace diff --git a/docs/Parsing.md b/docs/Parsing.md index 6a7a3d9..c29fc17 100644 --- a/docs/Parsing.md +++ b/docs/Parsing.md @@ -15,25 +15,25 @@ You can think of this parser as *frontend parser* vs a *semantic parser*. Its in User exposed interface: ```cpp -CodeClass parse_class ( StrC class_def ); -CodeConstructor parse_constructor ( StrC constructor_def ); -CodeDestructor parse_destructor ( StrC destructor_def ); -CodeEnum parse_enum ( StrC enum_def ); -CodeBody parse_export_body ( StrC export_def ); -CodeExtern parse_extern_link ( StrC exten_link_def ); -CodeFriend parse_friend ( StrC friend_def ); -CodeFn parse_function ( StrC fn_def ); -CodeBody parse_global_body ( StrC body_def ); -CodeNS parse_namespace ( StrC namespace_def ); -CodeOperator parse_operator ( StrC operator_def ); -CodeOpCast parse_operator_cast( StrC operator_def ); -CodeStruct parse_struct ( StrC struct_def ); -CodeTemplate parse_template ( StrC template_def ); -CodeType parse_type ( StrC type_def ); -CodeTypedef parse_typedef ( StrC typedef_def ); -CodeUnion parse_union ( StrC union_def ); -CodeUsing parse_using ( StrC using_def ); -CodeVar parse_variable ( StrC var_def ); +CodeClass parse_class ( Str class_def ); +CodeConstructor parse_constructor ( Str constructor_def ); +CodeDestructor parse_destructor ( Str destructor_def ); +CodeEnum parse_enum ( Str enum_def ); +CodeBody parse_export_body ( Str export_def ); +CodeExtern parse_extern_link ( Str exten_link_def ); +CodeFriend parse_friend ( Str friend_def ); +CodeFn parse_function ( Str fn_def ); +CodeBody parse_global_body ( Str body_def ); +CodeNS parse_namespace ( Str namespace_def ); +CodeOperator parse_operator ( Str operator_def ); +CodeOpCast parse_operator_cast( Str operator_def ); +CodeStruct parse_struct ( Str struct_def ); +CodeTemplate parse_template ( Str template_def ); +CodeType parse_type ( Str type_def ); +CodeTypedef parse_typedef ( Str typedef_def ); +CodeUnion parse_union ( Str union_def ); +CodeUsing parse_using ( Str using_def ); +CodeVar parse_variable ( Str var_def ); ``` To parse file buffers, use the `parse_global_body` function. diff --git a/docs/Readme.md b/docs/Readme.md index 65c5238..3eb1db2 100644 --- a/docs/Readme.md +++ b/docs/Readme.md @@ -49,10 +49,10 @@ However, the user may specifiy memory configuration. https://github.com/Ed94/gencpp/blob/eea4ebf5c40d5d87baa465abfb1be30845b2377e/base/components/ast.hpp#L396-L461 -*`StringCahced` is a typedef for `StrC` (a string slice), to denote it is an interned string* +*`StringCahced` is a typedef for `Str` (a string slice), to denote it is an interned string* *`CodeType` is enum taggin the type of code. Has an underlying type of `u32`* *`OperatorT` is a typedef for `EOperator::Type` which has an underlying type of `u32`* -*`String` is the dynamically allocated string type for the library* +*`StrBuilder` is the dynamically allocated string type for the library* AST widths are setup to be AST_POD_Size. The width dictates how much the static array can hold before it must give way to using an allocated array: @@ -79,7 +79,7 @@ int AST_ArrSpecs_Cap = Data Notes: * The allocator definitions used are exposed to the user incase they want to dictate memory usage - * You'll find the memory handling in `init`, `deinit`, `reset`, `gen_string_allocator`, `get_cached_string`, `make_code`. + * You'll find the memory handling in `init`, `deinit`, `reset`, `gen_strbuilder_allocator`, `get_cached_string`, `make_code`. * Allocators are defined with the `AllocatorInfo` structure found in [`memory.hpp`](../base/dependencies/memory.hpp) * Most of the work is just defining the allocation procedure: @@ -308,7 +308,7 @@ Code = code_str( ) Template metaprogramming in the traditional sense becomes possible with the use of `token_fmt` and parse constructors: ```cpp -StrC value = txt("Something"); +Str value = txt("Something"); char const* template_str = txt( Code with to replace with token_values @@ -403,7 +403,7 @@ There are two provided auxillary interfaces: * Builder * Scanner -### Builder is a similar object to the jai language's string_builder +### Builder is a similar object to the jai language's strbuilder_builder * The purpose of it is to generate a file. * A file is specified and opened for writing using the open( file_path) function. diff --git a/gen_c_library/c_library.cpp b/gen_c_library/c_library.cpp index a926dba..13d1ece 100644 --- a/gen_c_library/c_library.cpp +++ b/gen_c_library/c_library.cpp @@ -24,24 +24,24 @@ constexpr char const* generation_notice = "// This file was generated automatially by gencpp's c_library.cpp " "(See: https://github.com/Ed94/gencpp)\n\n"; -constexpr StrC roll_own_dependencies_guard_start = txt(R"( +constexpr Str roll_own_dependencies_guard_start = txt(R"( //! If its desired to roll your own dependencies, define GEN_ROLL_OWN_DEPENDENCIES before including this file. // Dependencies are derived from the c-zpl library: https://github.com/zpl-c/zpl #ifndef GEN_ROLL_OWN_DEPENDENCIES )"); -constexpr StrC roll_own_dependencies_guard_end = txt(R"( +constexpr Str roll_own_dependencies_guard_end = txt(R"( // GEN_ROLL_OWN_DEPENDENCIES #endif )"); -constexpr StrC implementation_guard_start = txt(R"( +constexpr Str implementation_guard_start = txt(R"( #pragma region GENCPP IMPLEMENTATION GUARD #if defined(GEN_IMPLEMENTATION) && ! defined(GEN_IMPLEMENTED) # define GEN_IMPLEMENTED )"); -constexpr StrC implementation_guard_end = txt(R"( +constexpr Str implementation_guard_end = txt(R"( #endif #pragma endregion GENCPP IMPLEMENTATION GUARD )"); @@ -87,7 +87,7 @@ int gen_main() #pragma region Resolve Dependencies Code header_platform = scan_file( path_base "dependencies/platform.hpp" ); Code header_macros = scan_file( path_base "dependencies/macros.hpp" ); - Code header_generic_macros = scan_file( "components/generic_macros.hpp" ); + Code header_generic_macros = scan_file( "components/generic_macros.h" ); Code header_basic_types = scan_file( path_base "dependencies/basic_types.hpp" ); Code header_debug = scan_file( path_base "dependencies/debug.hpp" ); Code header_string_ops = scan_file( path_base "dependencies/string_ops.hpp" ); @@ -100,7 +100,7 @@ int gen_main() { case CT_Using: { - log_fmt("REPLACE THIS MANUALLY: %SC\n", entry->Name); + log_fmt("REPLACE THIS MANUALLY: %S\n", entry->Name); CodeUsing using_ver = cast(CodeUsing, entry); CodeTypedef typedef_ver = def_typedef(using_ver->Name, using_ver->UnderlyingType); @@ -126,7 +126,7 @@ int gen_main() if (fn->Specs) { s32 constexpr_found = fn->Specs.remove( Spec_Constexpr ); if (constexpr_found > -1) { - //log_fmt("Found constexpr: %S\n", entry.to_string()); + //log_fmt("Found constexpr: %SB\n", entry.to_string()); fn->Specs.append(Spec_Inline); } } @@ -238,7 +238,7 @@ do \ break; case CT_Variable: { - if ( strc_contains(entry->Name, txt("Msg_Invalid_Value"))) + if ( str_contains(entry->Name, txt("Msg_Invalid_Value"))) { CodeDefine define = def_define(entry->Name, entry->Value->Content); header_printing.append(define); @@ -292,16 +292,16 @@ do \ case CT_Preprocess_IfNotDef: { - //log_fmt("\nIFNDEF: %SC\n", entry->Content); + //log_fmt("\nIFNDEF: %S\n", entry->Content); header_strings.append(entry); } break; case CT_Struct_Fwd: { - if ( entry->Name.is_equal(txt("String")) ) + if ( entry->Name.is_equal(txt("StrBuilder")) ) { - CodeTypedef c_def = parse_typedef(code( typedef char* String; )); + CodeTypedef c_def = parse_typedef(code( typedef char* StrBuilder; )); header_strings.append(c_def); header_strings.append(fmt_newline); ++ entry; @@ -341,12 +341,12 @@ do \ case CT_Typedef: { - StrC name_string_table = txt("StringTable"); + Str name_string_table = txt("StringTable"); CodeTypedef td = cast(CodeTypedef, entry); if (td->Name.contains(name_string_table)) { - CodeBody ht = gen_hashtable(txt("gen_StrC"), name_string_table); + CodeBody ht = gen_hashtable(txt("gen_Str"), name_string_table); header_strings.append(ht); break; } @@ -388,8 +388,8 @@ do \ case CT_Union: case CT_Union_Fwd: { - StrC type_str = codetype_to_keyword_str(entry->Type); - StrC formated_tmpl = token_fmt_impl( 3, + Str type_str = codetype_to_keyword_str(entry->Type); + Str formated_tmpl = token_fmt_impl( 3, "type", type_str , "name", entry->Name, stringize( @@ -490,8 +490,8 @@ do \ continue; } - StrC type_str = codetype_to_keyword_str(entry->Type); - StrC formated_tmpl = token_fmt_impl( 3, + Str type_str = codetype_to_keyword_str(entry->Type); + Str formated_tmpl = token_fmt_impl( 3, "type", type_str , "name", entry->Name, stringize( @@ -549,9 +549,9 @@ do \ { CodeTypename type = using_ver->UnderlyingType; CodeTypedef typedef_ver = parse_typedef(token_fmt( - "ReturnType", to_string(type->ReturnType).to_strc() + "ReturnType", to_string(type->ReturnType).to_str() , "Name" , using_ver->Name - , "Parameters", to_string(type->Params).to_strc() + , "Parameters", to_string(type->Params).to_str() , stringize( typedef ( * )(); ))); @@ -578,7 +578,7 @@ do \ types.append(entry_td); continue; } - //log_fmt("Detected ENUM: %S", entry->Name); + //log_fmt("Detected ENUM: %SB", entry->Name); convert_cpp_enum_to_c(cast(CodeEnum, entry), types); } break; @@ -645,9 +645,9 @@ do \ CodeFn fn = cast(CodeFn, entry); if (fn->Name.starts_with(txt("code_"))) { - StrC old_prefix = txt("code_"); - StrC actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; - String new_name = String::fmt_buf(GlobalAllocator, "code__%SC", actual_name ); + Str old_prefix = txt("code_"); + Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); code_c_interface.append(fn); @@ -694,21 +694,21 @@ do \ s32 constexpr_found = var->Specs ? var->Specs.remove( Spec_Constexpr ) : - 1; if (constexpr_found > -1) { - //log_fmt("Found constexpr: %S\n", entry.to_string()); + //log_fmt("Found constexpr: %SB\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(Code) \ - - sizeof(StringCached) \ - - sizeof(Code) * 2 \ - - sizeof(Token*) \ - - sizeof(Code) \ - - sizeof(CodeType) \ - - sizeof(ModuleFlag) \ - - sizeof(u32) \ + AST_POD_Size \ + - sizeof(Code) \ + - sizeof(StringCached) \ + - sizeof(Code) * 2 \ + - sizeof(Token*) \ + - sizeof(Code) \ + - sizeof(CodeType) \ + - sizeof(ModuleFlag) \ + - sizeof(u32) \ ) \ / sizeof(Specifier) - 1 )" @@ -729,7 +729,7 @@ R"(#define AST_ArrSpecs_Cap \ break; } - StrC code_typenames[] = { + Str code_typenames[] = { txt("Code"), txt("CodeBody"), txt("CodeAttributes"), @@ -791,24 +791,24 @@ R"(#define AST_ArrSpecs_Cap \ default: gen_generic_selection (Fail case) \ ) GEN_RESOLVED_FUNCTION_CALL( code, ... ) \ */ - String generic_selector = String::make_reserve(GlobalAllocator, kilobytes(2)); + StrBuilder generic_selector = StrBuilder::make_reserve(GlobalAllocator, kilobytes(2)); for ( CodeFn fn : code_c_interface ) { generic_selector.clear(); - StrC private_prefix = txt("code__"); - StrC actual_name = { fn->Name.Len - private_prefix.Len, fn->Name.Ptr + private_prefix.Len }; - String interface_name = String::fmt_buf(GlobalAllocator, "code_%SC", actual_name ); + Str private_prefix = txt("code__"); + Str actual_name = { fn->Name.Len - private_prefix.Len, fn->Name.Ptr + private_prefix.Len }; + StrBuilder interface_name = StrBuilder::fmt_buf(GlobalAllocator, "code_%S", actual_name ); // Resolve generic's arguments b32 has_args = fn->Params->NumEntries > 1; - String params_str = String::make_reserve(GlobalAllocator, 32); + StrBuilder params_str = StrBuilder::make_reserve(GlobalAllocator, 32); for (CodeParams param = fn->Params->Next; param != fn->Params.end(); ++ param) { // We skip the first parameter as its always going to be the code for selection if (param->Next == nullptr) { - params_str.append_fmt( "%SC", param->Name ); + params_str.append_fmt( "%S", param->Name ); continue; } - params_str.append_fmt( "%SC, ", param->Name ); + params_str.append_fmt( "%S, ", param->Name ); } char const* tmpl_def_start = nullptr; @@ -824,14 +824,14 @@ R"(#define ( code ) _Generic( (code), \ } // Definition start generic_selector.append( token_fmt( - "interface_name", interface_name.to_strc() - , "params", params_str.to_strc() // Only used if has_args + "interface_name", interface_name.to_str() + , "params", params_str.to_str() // Only used if has_args , tmpl_def_start )); // Append slots - for(StrC type : code_typenames ) { - generic_selector.append_fmt("%SC : %SC,\\\n", type, fn->Name ); + for(Str type : code_typenames ) { + generic_selector.append_fmt("%S : %S,\\\n", type, fn->Name ); } generic_selector.append(txt("default: gen_generic_selection_fail \\\n")); @@ -844,7 +844,7 @@ R"(#define ( code ) _Generic( (code), \ } // Definition end generic_selector.append( token_fmt( - "params", params_str.to_strc() + "params", params_str.to_str() , "type", fn->Params->ValueType->Name , tmpl_def_end ) ); @@ -890,8 +890,8 @@ R"(#define ( code ) _Generic( (code), \ char conversion_buf[32] = {}; u64_to_str(size_of(AST_Body::_PAD_), conversion_buf, 10); - StrC arr_exp = union_entry->ValueType->ArrExpr->Content; - StrC cpp_size = to_strc_from_c_str(conversion_buf); + Str arr_exp = union_entry->ValueType->ArrExpr->Content; + Str cpp_size = to_str_from_c_str(conversion_buf); union_entry->ValueType->ArrExpr = untyped_str( cpp_size ); union_entry->InlineCmt = untyped_str(token_fmt("arr_exp", arr_exp, "// Had to hardcode _PAD_ because () was 67 bytes in C\n" @@ -931,8 +931,8 @@ R"(#define ( code ) _Generic( (code), \ if (prev && prev->Name.is_equal(entry->Name)) { // rename second definition so there isn't a symbol conflict - String postfix_arr = String::fmt_buf(GlobalAllocator, "%SC_arr", entry->Name); - entry->Name = get_cached_string(postfix_arr.to_strc()); + StrBuilder postfix_arr = StrBuilder::fmt_buf(GlobalAllocator, "%S_arr", entry->Name); + entry->Name = get_cached_string(postfix_arr.to_str()); postfix_arr.free(); } @@ -940,20 +940,20 @@ R"(#define ( code ) _Generic( (code), \ for ( CodeParams opt_param : fn->Params ) if (opt_param->ValueType->Name.starts_with(txt("Opts_"))) { // Convert the definition to use a default struct: https://vxtwitter.com/vkrajacic/status/1749816169736073295 - StrC prefix = txt("def_"); - StrC actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; - StrC new_name = String::fmt_buf(GlobalAllocator, "def__%SC", actual_name ).to_strc(); + Str prefix = txt("def_"); + Str actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; + Str new_name = StrBuilder::fmt_buf(GlobalAllocator, "def__%S", actual_name ).to_str(); // Resolve define's arguments b32 has_args = fn->Params->NumEntries > 1; - String params_str = String::make_reserve(GlobalAllocator, 32); + StrBuilder params_str = StrBuilder::make_reserve(GlobalAllocator, 32); for (CodeParams other_param = fn->Params; other_param != opt_param; ++ other_param) { if ( other_param == opt_param ) { - params_str.append_fmt( "%SC", other_param->Name ); + params_str.append_fmt( "%S", other_param->Name ); break; } // If there are arguments before the optional, prepare them here. - params_str.append_fmt( "%SC, ", other_param->Name ); + params_str.append_fmt( "%S, ", other_param->Name ); } char const* tmpl_fn_macro = nullptr; if (params_str.length() > 0 ) { @@ -965,7 +965,7 @@ R"(#define ( code ) _Generic( (code), \ Code fn_macro = untyped_str(token_fmt( "def_name", fn->Name , "def__name", new_name - , "params", params_str.to_strc() + , "params", params_str.to_str() , "opts_type", opt_param->ValueType->Name , tmpl_fn_macro )); @@ -1019,9 +1019,9 @@ R"(#define ( code ) _Generic( (code), \ CodeFn fn = cast(CodeFn, entry); if (fn->Name.starts_with(txt("code_"))) { - StrC old_prefix = txt("code_"); - StrC actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; - String new_name = String::fmt_buf(GlobalAllocator, "code__%SC", actual_name ); + Str old_prefix = txt("code_"); + Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); } @@ -1174,9 +1174,9 @@ R"(#define ( code ) _Generic( (code), \ CodeFn fn = cast(CodeFn, entry); if (fn->Name.starts_with(txt("code_"))) { - StrC old_prefix = txt("code_"); - StrC actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; - String new_name = String::fmt_buf(GlobalAllocator, "code__%SC", actual_name ); + Str old_prefix = txt("code_"); + Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); } @@ -1219,16 +1219,16 @@ R"(#define ( code ) _Generic( (code), \ ) { // rename second definition so there isn't a symbol conflict - String postfix_arr = String::fmt_buf(GlobalAllocator, "%SC_arr", fn->Name); - fn->Name = get_cached_string(postfix_arr.to_strc()); + StrBuilder postfix_arr = StrBuilder::fmt_buf(GlobalAllocator, "%S_arr", fn->Name); + fn->Name = get_cached_string(postfix_arr.to_str()); postfix_arr.free(); } for ( CodeParams opt_param : fn->Params ) if (opt_param->ValueType->Name.starts_with(txt("Opts_"))) { - StrC prefix = txt("def_"); - StrC actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; - StrC new_name = String::fmt_buf(GlobalAllocator, "def__%SC", actual_name ).to_strc(); + Str prefix = txt("def_"); + Str actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; + Str new_name = StrBuilder::fmt_buf(GlobalAllocator, "def__%S", actual_name ).to_str(); fn->Name = get_cached_string(new_name); } @@ -1319,7 +1319,7 @@ R"(#define ( code ) _Generic( (code), \ Code define_ver = untyped_str(token_fmt( "name", var->Name , "value", var->Value->Content - , "type", var->ValueType.to_string().to_strc() + , "type", var->ValueType.to_string().to_str() , "#define () \n" )); src_lexer.append(define_ver); @@ -1364,7 +1364,7 @@ R"(#define ( code ) _Generic( (code), \ Code define_ver = untyped_str(token_fmt( "name", var->Name , "value", var->Value->Content - , "type", var->ValueType.to_string().to_strc() + , "type", var->ValueType.to_string().to_str() , "#define () \n" )); src_parser.append(define_ver); @@ -1458,7 +1458,7 @@ R"(#define ( code ) _Generic( (code), \ Code rf_src_parser = refactor_and_format(src_parser); Code r_src_parsing = refactor(src_parsing_interface); Code r_src_untyped = refactor(src_untyped); - + CodeBody etoktype = gen_etoktype( path_base "enums/ETokType.csv", path_base "enums/AttributeTokens.csv", helper_use_c_definition ); Code rf_etoktype = refactor_and_format(etoktype); diff --git a/gen_c_library/c_library.refactor b/gen_c_library/c_library.refactor index 80b1f16..2476059 100644 --- a/gen_c_library/c_library.refactor +++ b/gen_c_library/c_library.refactor @@ -167,13 +167,13 @@ namespace pool_, gen_pool_ // Printing -namespace str_, gen_str_ +namespace c_str_, gen_c_str_ word PrintF_Buffer, gen_PrintF_Buffer word Msg_Invalid_Value, gen_Msg_Invalid_Value word log_fmt, gen_log_fmt -// String Ops +// StrBuilder Ops namespace char_, gen_char_ @@ -211,18 +211,18 @@ word crc64, gen_crc64 // Strings -word StrC, gen_StrC +word Str, gen_Str -word to_strc_from_c_str, gen_to_strc_from_c_str +word to_str_from_c_str, gen_to_str_from_c_str -namespace strc_, gen_strc_ +namespace str_, gen_str_ -word cast_to_strc, gen_cast_to_strc +word cast_to_str, gen_cast_to_str -word StringHeader, gen_StringHeader -word String, gen_String +word StrBuilderHeader, gen_StrBuilderHeader +word StrBuilder, gen_StrBuilder -namespace string_, gen_string_ +namespace strbuilder_, gen_strbuilder_ word StringCached, gen_StringCached @@ -308,7 +308,7 @@ 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 +// word str_to_specifier, gen_str_to_specifier // AST @@ -523,7 +523,7 @@ 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 str_to_toktype, gen_str_to_toktype word NullToken, gen_NullToken namespace tok_, gen_tok_ diff --git a/gen_c_library/components/containers.array.hpp b/gen_c_library/components/containers.array.hpp index de51628..14997b8 100644 --- a/gen_c_library/components/containers.array.hpp +++ b/gen_c_library/components/containers.array.hpp @@ -40,11 +40,11 @@ CodeBody gen_array_base() )); }; -CodeBody gen_array( StrC type, StrC array_name ) +CodeBody gen_array( Str type, Str array_name ) { - String array_type = String::fmt_buf( GlobalAllocator, "%.*s", array_name.Len, array_name.Ptr ); - String fn = String::fmt_buf( GlobalAllocator, "%.*s", array_name.Len, array_name.Ptr ); - // str_to_lower(fn.Data); + StrBuilder array_type = StrBuilder::fmt_buf( GlobalAllocator, "%.*s", array_name.Len, array_name.Ptr ); + StrBuilder fn = StrBuilder::fmt_buf( GlobalAllocator, "%.*s", array_name.Len, array_name.Ptr ); + // c_str_to_lower(fn.Data); #pragma push_macro( "GEN_ASSERT" ) #pragma push_macro( "rcast" ) @@ -56,7 +56,7 @@ CodeBody gen_array( StrC type, StrC array_name ) #undef cast #undef typeof #undef forceinline - CodeBody result = parse_global_body( token_fmt( "array_type", (StrC)array_type, "fn", (StrC)fn, "type", (StrC)type + CodeBody result = parse_global_body( token_fmt( "array_type", (Str)array_type, "fn", (Str)fn, "type", (Str)type , stringize( typedef * ; @@ -375,9 +375,9 @@ CodeBody gen_array( StrC type, StrC array_name ) #pragma pop_macro( "forceinline" ) ++ Array_DefinitionCounter; - StrC slot_str = String::fmt_buf(GlobalAllocator, "%d", Array_DefinitionCounter).to_strc(); + Str slot_str = StrBuilder::fmt_buf(GlobalAllocator, "%d", Array_DefinitionCounter).to_str(); - Code generic_interface_slot = untyped_str(token_fmt( "type", type, "array_type", (StrC)array_type, "slot", (StrC)slot_str, + Code generic_interface_slot = untyped_str(token_fmt( "type", type, "array_type", (Str)array_type, "slot", (Str)slot_str, R"(#define GENERIC_SLOT___array_init , _init #define GENERIC_SLOT___array_init_reserve , _init_reserve #define GENERIC_SLOT___array_append , _append @@ -399,13 +399,13 @@ R"(#define GENERIC_SLOT___array_init , _i )); return def_global_body( args( - def_pragma( string_to_strc( string_fmt_buf( GlobalAllocator, "region %S", array_type ))), + def_pragma( strbuilder_to_str( strbuilder_fmt_buf( GlobalAllocator, "region %SB", array_type ))), fmt_newline, generic_interface_slot, fmt_newline, result, fmt_newline, - def_pragma( string_to_strc(string_fmt_buf( GlobalAllocator, "endregion %S", array_type ))), + def_pragma( strbuilder_to_str(strbuilder_fmt_buf( GlobalAllocator, "endregion %SB", array_type ))), fmt_newline )); }; diff --git a/gen_c_library/components/containers.hashtable.hpp b/gen_c_library/components/containers.hashtable.hpp index 89e7b56..3c27953 100644 --- a/gen_c_library/components/containers.hashtable.hpp +++ b/gen_c_library/components/containers.hashtable.hpp @@ -27,24 +27,24 @@ R"(#define HashTable(_type) struct _type return def_global_body(args(struct_def, define_type, define_critical_load_scale)); } -CodeBody gen_hashtable( StrC type, StrC hashtable_name ) +CodeBody gen_hashtable( Str type, Str hashtable_name ) { - String tbl_type = {(char*) hashtable_name.duplicate(GlobalAllocator).Ptr}; - String fn = tbl_type.duplicate(GlobalAllocator); - // str_to_lower(fn.Data); + StrBuilder tbl_type = {(char*) hashtable_name.duplicate(GlobalAllocator).Ptr}; + StrBuilder fn = tbl_type.duplicate(GlobalAllocator); + // c_str_to_lower(fn.Data); - String name_lower = String::make( GlobalAllocator, hashtable_name ); - // str_to_lower( name_lower.Data ); + StrBuilder name_lower = StrBuilder::make( GlobalAllocator, hashtable_name ); + // c_str_to_lower( name_lower.Data ); - String hashtable_entry = String::fmt_buf( GlobalAllocator, "HTE_%.*s", hashtable_name.Len, hashtable_name.Ptr ); - String entry_array_name = String::fmt_buf( GlobalAllocator, "Arr_HTE_%.*s", hashtable_name.Len, hashtable_name.Ptr ); - String entry_array_fn_ns = String::fmt_buf( GlobalAllocator, "arr_hte_%.*s", name_lower.length(), name_lower.Data ); + StrBuilder hashtable_entry = StrBuilder::fmt_buf( GlobalAllocator, "HTE_%.*s", hashtable_name.Len, hashtable_name.Ptr ); + StrBuilder entry_array_name = StrBuilder::fmt_buf( GlobalAllocator, "Arr_HTE_%.*s", hashtable_name.Len, hashtable_name.Ptr ); + StrBuilder entry_array_fn_ns = StrBuilder::fmt_buf( GlobalAllocator, "arr_hte_%.*s", name_lower.length(), name_lower.Data ); CodeBody hashtable_types = parse_global_body( token_fmt( - "type", (StrC) type, - "tbl_name", (StrC) hashtable_name, - "tbl_type", (StrC) tbl_type, + "type", (Str) type, + "tbl_name", (Str) hashtable_name, + "tbl_type", (Str) tbl_type, stringize( typedef struct HashTable_ ; typedef struct HTE_ HTE_; @@ -74,13 +74,13 @@ CodeBody gen_hashtable( StrC type, StrC hashtable_name ) #undef typeof #undef forceinline CodeBody hashtable_def = parse_global_body( token_fmt( - "type", (StrC) type, - "tbl_name", (StrC) hashtable_name, - "tbl_type", (StrC) tbl_type, - "fn", (StrC) fn, - "entry_type", (StrC) hashtable_entry, - "array_entry", (StrC) entry_array_name, - "fn_array", (StrC) entry_array_fn_ns, + "type", (Str) type, + "tbl_name", (Str) hashtable_name, + "tbl_type", (Str) tbl_type, + "fn", (Str) fn, + "entry_type", (Str) hashtable_entry, + "array_entry", (Str) entry_array_name, + "fn_array", (Str) entry_array_fn_ns, stringize( struct HashTable_ { Array_ssize Hashes; @@ -372,9 +372,9 @@ CodeBody gen_hashtable( StrC type, StrC hashtable_name ) #pragma pop_macro( "forceinline" ) ++ HashTable_DefinitionCounter; - StrC slot_str = String::fmt_buf(GlobalAllocator, "%d", HashTable_DefinitionCounter).to_strc(); + Str slot_str = StrBuilder::fmt_buf(GlobalAllocator, "%d", HashTable_DefinitionCounter).to_str(); - Code generic_interface_slot = untyped_str(token_fmt( "type", type, "tbl_type", (StrC)tbl_type, "slot", (StrC)slot_str, + Code generic_interface_slot = untyped_str(token_fmt( "type", type, "tbl_type", (Str)tbl_type, "slot", (Str)slot_str, R"(#define GENERIC_SLOT___hashtable_init , _init #define GENERIC_SLOT___hashtable_init_reserve , _init_reserve #define GENERIC_SLOT___hashtable_clear , _clear @@ -395,12 +395,12 @@ R"(#define GENERIC_SLOT___hashtable_init , _ )" )); - char const* cmt_str = str_fmt_buf( "Name: %.*s Type: %.*s" + char const* cmt_str = c_str_fmt_buf( "Name: %.*s Type: %.*s" , tbl_type.length(), tbl_type.Data , type.Len, type.Ptr ); return def_global_body(args( - def_pragma( string_to_strc( string_fmt_buf( GlobalAllocator, "region %S", tbl_type ))), + def_pragma( strbuilder_to_str( strbuilder_fmt_buf( GlobalAllocator, "region %SB", tbl_type ))), fmt_newline, generic_interface_slot, fmt_newline, @@ -409,7 +409,7 @@ R"(#define GENERIC_SLOT___hashtable_init , _ entry_array, hashtable_def, fmt_newline, - def_pragma( string_to_strc( string_fmt_buf( GlobalAllocator, "endregion %S", tbl_type ))), + def_pragma( strbuilder_to_str( strbuilder_fmt_buf( GlobalAllocator, "endregion %SB", tbl_type ))), fmt_newline )); } diff --git a/gen_c_library/components/generic_macros.hpp b/gen_c_library/components/generic_macros.h similarity index 76% rename from gen_c_library/components/generic_macros.hpp rename to gen_c_library/components/generic_macros.h index e543185..607f06f 100644 --- a/gen_c_library/components/generic_macros.hpp +++ b/gen_c_library/components/generic_macros.h @@ -3,9 +3,9 @@ // ____ _ ______ _ _ ____ _ __ _ // / ___} (_) | ____} | | (_) / __ \ | | | |(_) // | | ___ ___ _ __ ___ _ __ _ ___ | |__ _ _ _ __ ___| |_ _ ___ _ __ | | | |_ _____ _ __ | | ___ __ _ __| | _ _ __ __ _ -// | |{__ |/ _ \ '_ \ / _ \ '__} |/ __| | __} | | | '_ \ / __} __} |/ _ \| '_ \ | | | \ \ / / _ \ '_ \| |/ _ \ / _` |/ _` || | '_ \ / _` | -// | |__j | __/ | | | __/ | | | (__ | | | |_| | | | | (__| l_| | (_) | | | | | l__| |\ V / __/ | | | | (_) | (_| | (_| || | | | | (_| | -// \____/ \___}_l l_l\___}_l l_l\___| l_l \__,_l_l l_l\___}\__}_l\___/l_l l_l \____/ \_/ \___}_l l_l_l\___/ \__,_l\__,_l|_|_| |_|\__, | +// | |{__ |/ _ \ '_ \ / _ \ '__} |/ __| | __} | | | '_ \ / __} __} |/ _ \| '_ \ | | | \ \ / / _ \ '_ }| |/ _ \ / _` |/ _` || | '_ \ / _` | +// | |__j | __/ | | | __/ | | | (__ | | | |_| | | | | (__| l_| | (_) | | | | | l__| |\ V / __/ | | | (_) | (_| | (_| || | | | | (_| | +// \____/ \___}_l l_l\___}_l l_l\___| l_l \__,_l_l l_l\___}\__}_l\___/l_l l_l \____/ \_/ \___}_l l_l\___/ \__,_l\__,_l|_|_| |_|\__, | // This implemnents macros for utilizing "The Naive Extendible _Generic Macro" explained in: __| | // https://github.com/JacksonAllan/CC/blob/main/articles/Better_C_Generics_Part_1_The_Extendible_Generic.md {___/ // Since gencpp is used to generate the c-library, it was choosen over the more novel implementations to keep the macros as easy to understand and unobfuscated as possible. @@ -30,7 +30,7 @@ // Where GEN_GENERIC_SEL_ENTRY_COMMA_DELIMITER is specifically looking for that , #define GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( slot_exp ) GEN_GENERIC_SEL_ENTRY_COMMA_DELIMITER( slot_exp, GEN_GENERIC_SEL_ENTRY_TYPE( slot_exp, ): GEN_GENERIC_SEL_ENTRY_FUNCTION( slot_exp, ) GEN_COMMA_OPERATOR, , ) // ^ Selects the comma ^ is the type ^ is the function ^ Insert a comma -// The slot won't exist if that comma is not found. | +// The slot won't exist if that comma is not found. // For the occastion where an expression didn't resolve to a selection option the "default: " will be set to: typedef struct GENCPP_NO_RESOLVED_GENERIC_SELECTION GENCPP_NO_RESOLVED_GENERIC_SELECTION; @@ -43,12 +43,12 @@ GENCPP_NO_RESOLVED_GENERIC_SELECTION const gen_generic_selection_fail = {0}; // Below are generated on demand for an overlaod depdendent on a type: // ---------------------------------------------------------------------------------------------------------------------------------- -#define GEN_FUNCTION_GENERIC_EXAMPLE( selector_arg ) _Generic( \ -(selector_arg), /* Select Via Expression*/ \ - /* Extendibility slots: */ \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_1 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_1 ) \ - default: gen_generic_selection_fail \ +#define GEN_FUNCTION_GENERIC_EXAMPLE( selector_arg ) _Generic( \ +(selector_arg), /* Select Via Expression*/ \ + /* Extendibility slots: */ \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_1__function_sig ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_2__function_sig ) \ + default: gen_generic_selection_fail \ ) GEN_RESOLVED_FUNCTION_CALL( selector_arg ) // ---------------------------------------------------------------------------------------------------------------------------------- @@ -68,20 +68,21 @@ size_t gen_example_hash__P_long( long val ) { return val * 2654435761ull; } #define GENERIC_SLOT_2_gen_example_hash long long, gen_example_hash__P_long_long size_t gen_example_hash__P_long_long( long long val ) { return val * 2654435761ull; } -// 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, +// If using an Editor with support for syntax hightlighting macros: +// GENERIC_SLOT_1_gen_example_hash and GENERIC_SLOT_2_gen_example_hash should show color highlighting indicating the slot is enabled, // or, "defined" for usage during the compilation pass that handles the _Generic instrinsic. -#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 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_2 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_3 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_4 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_5 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_6 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_7 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( HASH__ARGS_SIG_8 ) \ - default: gen_generic_selection_fail \ +#define gen_hash_example( function_arguments ) _Generic( \ +(function_arguments), /* Select Via Expression*/ \ + /* Extendibility slots: */ \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_1_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_2_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_3_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_4_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_5_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_6_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_7_gen_example_hash ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_8_gen_example_hash ) \ + default: gen_generic_selection_fail \ ) GEN_RESOLVED_FUNCTION_CALL( function_arguments ) // Additional Variations: @@ -89,20 +90,20 @@ size_t gen_example_hash__P_long_long( long long val ) { return val * 2654435761u // If the function takes more than one argument the following is used: #define GEN_FUNCTION_GENERIC_EXAMPLE_VARADIC( selector_arg, ... ) _Generic( \ (selector_arg), \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_1 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_2 ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_1__function_sig ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_2__function_sig ) \ /* ... */ \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT(FunctionID__ARGS_SIG_N ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT(GENERIC_SLOT_N__function_sig ) \ default: gen_generic_selection_fail \ ) GEN_RESOLVED_FUNCTION_CALL( selector_arg, __VA_ARG__ ) // If the function does not take the arugment as a parameter: #define GEN_FUNCTION_GENERIC_EXAMPLE_DIRECT_TYPE( selector_arg ) _Generic( \ ( GEN_TYPE_TO_EXP(selector_arg) ), \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_1 ) \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( FunctionID__ARGS_SIG_2 ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_1__function_sig ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT_2__function_sig ) \ /* ... */ \ - GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT(FunctionID__ARGS_SIG_N ) \ + GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT(GENERIC_SLOT_N__function_sig ) \ default: gen_generic_selection_fail \ ) GEN_RESOLVED_FUNCTION_CALL() diff --git a/gen_c_library/components/misc.hpp b/gen_c_library/components/misc.hpp index ab1a9ae..0d66d4b 100644 --- a/gen_c_library/components/misc.hpp +++ b/gen_c_library/components/misc.hpp @@ -18,13 +18,13 @@ void convert_cpp_enum_to_c( CodeEnum to_convert, CodeBody to_append ) #pragma pop_macro("enum_underlying") } -b32 ignore_preprocess_cond_block( StrC cond_sig, Code& entry_iter, CodeBody& parsed_body, CodeBody& body ) +b32 ignore_preprocess_cond_block( Str cond_sig, Code& entry_iter, CodeBody& parsed_body, CodeBody& body ) { b32 found = false; CodePreprocessCond cond = cast(CodePreprocessCond, entry_iter); if ( cond->Content.is_equal(cond_sig) ) { - //log_fmt("Preprocess cond found: %SC\n", cond->Content); + //log_fmt("Preprocess cond found: %S\n", cond->Content); found = true; s32 depth = 1; @@ -72,7 +72,7 @@ b32 ignore_preprocess_cond_block( StrC cond_sig, Code& entry_iter, CodeBody& par constexpr bool GenericSel_One_Arg = true; enum GenericSelectionOpts : u32 { GenericSel_Default, GenericSel_By_Ref, GenericSel_Direct_Type }; -Code gen_generic_selection_function_macro( s32 num_slots, StrC macro_name, GenericSelectionOpts opts = GenericSel_Default, bool one_arg = false ) +Code gen_generic_selection_function_macro( s32 num_slots, Str macro_name, GenericSelectionOpts opts = GenericSel_Default, bool one_arg = false ) { /* Implements: #define GEN_FUNCTION_GENERIC_EXAMPLE( selector_arg, ... ) _Generic( \ @@ -84,18 +84,18 @@ Code gen_generic_selection_function_macro( s32 num_slots, StrC macro_name, Gener ) GEN_RESOLVED_FUNCTION_CALL( selector_arg ) */ local_persist - String define_builder = String::make_reserve(GlobalAllocator, kilobytes(64)); + StrBuilder define_builder = StrBuilder::make_reserve(GlobalAllocator, kilobytes(64)); define_builder.clear(); - StrC macro_begin; + Str macro_begin; if (opts == GenericSel_Direct_Type) { - macro_begin = token_fmt( "macro_name", (StrC)macro_name, + macro_begin = token_fmt( "macro_name", (Str)macro_name, R"(#define (selector_arg, ...) _Generic( (*(selector_arg*)NULL ), \ )" ); } else { - macro_begin = token_fmt( "macro_name", (StrC)macro_name, + macro_begin = token_fmt( "macro_name", (Str)macro_name, R"(#define (selector_arg, ...) _Generic( (selector_arg), \ )" ); @@ -104,7 +104,7 @@ R"(#define (selector_arg, ...) _Generic( (selector_arg), \ for ( s32 slot = 1; slot <= num_slots; ++ slot ) { - StrC slot_str = String::fmt_buf(GlobalAllocator, "%d", slot).to_strc(); + Str slot_str = StrBuilder::fmt_buf(GlobalAllocator, "%d", slot).to_str(); if (slot == num_slots && false) { define_builder.append( token_fmt( "macro_name", macro_name, "slot", slot_str, @@ -152,25 +152,25 @@ R"( GEN_IF_MACRO_DEFINED_INCLUDE_THIS_SLOT( GENERIC_SLOT___ ) // Add gap for next definition define_builder.append(txt("\n\n")); - Code macro = untyped_str(define_builder.to_strc()); + Code macro = untyped_str(define_builder.to_str()); return macro; } -CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("")) +CodeFn rename_function_to_unique_symbol(CodeFn fn, Str optional_prefix = txt("")) { // Get basic components for the name - StrC old_name = fn->Name; - String new_name; + Str old_name = fn->Name; + StrBuilder new_name; // Add prefix if provided if (optional_prefix.Len) - new_name = string_fmt_buf(GlobalAllocator, "%SC_%SC_", optional_prefix, old_name); + new_name = strbuilder_fmt_buf(GlobalAllocator, "%S_%S_", optional_prefix, old_name); else - new_name = string_fmt_buf(GlobalAllocator, "%SC_", old_name); + new_name = strbuilder_fmt_buf(GlobalAllocator, "%S_", old_name); // Add return type to the signature if (fn->ReturnType) - new_name.append_fmt("_%SC", fn->ReturnType->Name); + new_name.append_fmt("_%S", fn->ReturnType->Name); // Add parameter types to create a unique signature bool first_param = true; @@ -198,11 +198,11 @@ CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("" continue; } - new_name.append_fmt("%SC_", spec_to_str(spec)); + new_name.append_fmt("%S_", spec_to_str(spec)); } } - new_name.append_fmt("%SC", param->ValueType->Name); + new_name.append_fmt("%S", param->ValueType->Name); } } @@ -214,7 +214,7 @@ CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("" spec != end(fn->Specs); ++spec) { - new_name.append_fmt("%SC_", spec_to_str(*spec)); + new_name.append_fmt("%S_", spec_to_str(*spec)); } } @@ -223,13 +223,13 @@ CodeFn rename_function_to_unique_symbol(CodeFn fn, StrC optional_prefix = txt("" } using SwapContentProc = CodeBody(void); -bool swap_pragma_region_implementation( StrC region_name, SwapContentProc* swap_content, Code& entry_iter, CodeBody& body ) +bool swap_pragma_region_implementation( Str region_name, SwapContentProc* swap_content, Code& entry_iter, CodeBody& body ) { bool found = false; CodePragma possible_region = cast(CodePragma, entry_iter); - String region_sig = string_fmt_buf(GlobalAllocator, "region %s", region_name.Ptr); - String endregion_sig = string_fmt_buf(GlobalAllocator, "endregion %s", region_name.Ptr); + StrBuilder region_sig = strbuilder_fmt_buf(GlobalAllocator, "region %s", region_name.Ptr); + StrBuilder endregion_sig = strbuilder_fmt_buf(GlobalAllocator, "endregion %s", region_name.Ptr); if ( possible_region->Content.contains(region_sig)) { found = true; diff --git a/gen_segmented/segmented.cpp b/gen_segmented/segmented.cpp index d83b6f5..5fecd67 100644 --- a/gen_segmented/segmented.cpp +++ b/gen_segmented/segmented.cpp @@ -117,7 +117,7 @@ int gen_main() def_include(txt("components/types.hpp")), preprocess_endif, fmt_newline, - untyped_str( to_strc_from_c_str(generation_notice) ) + untyped_str( to_str_from_c_str(generation_notice) ) )); // gen.hpp diff --git a/gen_singleheader/singleheader.cpp b/gen_singleheader/singleheader.cpp index 3e43af7..6e1a756 100644 --- a/gen_singleheader/singleheader.cpp +++ b/gen_singleheader/singleheader.cpp @@ -17,24 +17,24 @@ constexpr char const* generation_notice = "// This file was generated automatially by gencpp's singleheader.cpp" "(See: https://github.com/Ed94/gencpp)\n\n"; -constexpr StrC implementation_guard_start = txt(R"( +constexpr Str implementation_guard_start = txt(R"( #pragma region GENCPP IMPLEMENTATION GUARD #if defined(GEN_IMPLEMENTATION) && ! defined(GEN_IMPLEMENTED) # define GEN_IMPLEMENTED )"); -constexpr StrC implementation_guard_end = txt(R"( +constexpr Str implementation_guard_end = txt(R"( #endif #pragma endregion GENCPP IMPLEMENTATION GUARD )"); -constexpr StrC roll_own_dependencies_guard_start = txt(R"( +constexpr Str roll_own_dependencies_guard_start = txt(R"( //! If its desired to roll your own dependencies, define GEN_ROLL_OWN_DEPENDENCIES before including this file. // Dependencies are derived from the c-zpl library: https://github.com/zpl-c/zpl #ifndef GEN_ROLL_OWN_DEPENDENCIES )"); -constexpr StrC roll_own_dependencies_guard_end = txt(R"( +constexpr Str roll_own_dependencies_guard_end = txt(R"( // GEN_ROLL_OWN_DEPENDENCIES #endif )"); @@ -77,7 +77,7 @@ int gen_main() Code basic_types = scan_file( path_base "dependencies/basic_types.hpp" ); Code debug = scan_file( path_base "dependencies/debug.hpp" ); Code memory = scan_file( path_base "dependencies/memory.hpp" ); - Code string_ops = scan_file( path_base "dependencies/string_ops.hpp" ); + Code stirng_ops = scan_file( path_base "dependencies/string_ops.hpp" ); Code printing = scan_file( path_base "dependencies/printing.hpp" ); Code containers = scan_file( path_base "dependencies/containers.hpp" ); Code hashing = scan_file( path_base "dependencies/hashing.hpp" ); @@ -93,7 +93,7 @@ int gen_main() header.print( basic_types ); header.print( debug ); header.print( memory ); - header.print( string_ops ); + header.print( stirng_ops ); header.print( printing ); header.print( containers ); header.print( hashing ); diff --git a/gen_unreal_engine/unreal.cpp b/gen_unreal_engine/unreal.cpp index d379897..dfaa72a 100644 --- a/gen_unreal_engine/unreal.cpp +++ b/gen_unreal_engine/unreal.cpp @@ -17,25 +17,25 @@ constexpr char const* generation_notice = "// This file was generated automatially by gencpp's unreal.cpp " "(See: https://github.com/Ed94/gencpp)\n\n"; -constexpr StrC implementation_guard_start = txt(R"( +constexpr Str implementation_guard_start = txt(R"( #pragma region GENCPP IMPLEMENTATION GUARD #if defined(GEN_IMPLEMENTATION) && ! defined(GEN_IMPLEMENTED) # define GEN_IMPLEMENTED )"); -constexpr StrC implementation_guard_end = txt(R"( +constexpr Str implementation_guard_end = txt(R"( #endif #pragma endregion GENCPP IMPLEMENTATION GUARD )"); -constexpr StrC roll_own_dependencies_guard_start = txt(R"( +constexpr Str roll_own_dependencies_guard_start = txt(R"( //! If its desired to roll your own dependencies, define GEN_ROLL_OWN_DEPENDENCIES before including this file. // Dependencies are derived from the c-zpl library: https://github.com/zpl-c/zpl #ifndef GEN_ROLL_OWN_DEPENDENCIES )"); -constexpr StrC roll_own_dependencies_guard_end = txt(R"( +constexpr Str roll_own_dependencies_guard_end = txt(R"( // GEN_ROLL_OWN_DEPENDENCIES #endif )"); @@ -68,7 +68,7 @@ int gen_main() CodeBody macros = def_body( CT_Global_Body ); { FileContents content = file_read_contents( GlobalAllocator, true, path_base "dependencies/macros.hpp" ); - CodeBody ori_macros = parse_global_body( StrC { content.size, (char const*)content.data }); + CodeBody ori_macros = parse_global_body( Str { content.size, (char const*)content.data }); for (Code code = ori_macros.begin(); code != ori_macros.end(); diff --git a/gencpp.sln.DotSettings.user b/gencpp.sln.DotSettings.user index b8b7acd..610c04f 100644 --- a/gencpp.sln.DotSettings.user +++ b/gencpp.sln.DotSettings.user @@ -1,3 +1,3 @@  - ForceIncluded - ShowAndRun \ No newline at end of file + ForceIncluded + ShowAndRun \ No newline at end of file diff --git a/scripts/genccp.natstepfilter b/scripts/genccp.natstepfilter index 403ae58..76db1c8 100644 --- a/scripts/genccp.natstepfilter +++ b/scripts/genccp.natstepfilter @@ -25,6 +25,6 @@ NoStepInto - gen::String::operator .* + gen::StrBuilder::operator .* diff --git a/scripts/gencpp.natvis b/scripts/gencpp.natvis index 99a113b..60b5a12 100644 --- a/scripts/gencpp.natvis +++ b/scripts/gencpp.natvis @@ -36,11 +36,11 @@ - + Len:{Len} Ptr:{Ptr, [Len]s} - + null {Data,na} @@ -55,7 +55,7 @@ - + Length: {Length}, Capacity: {Capacity} Allocator From 6ffdca8595cb71c73452086f0fa93b6dce13d901 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 13 Dec 2024 11:56:07 -0500 Subject: [PATCH 2/8] formatting, fixes from testing latest in Odin fork --- base/components/ast.hpp | 45 +++++++++++++------------ base/components/code_serialization.cpp | 2 +- base/components/code_types.hpp | 2 +- base/components/gen/ast_inlines.hpp | 46 +++++++++++++------------- base/components/parser.cpp | 10 +++--- base/helpers/base_codegen.hpp | 2 +- gen_singleheader/singleheader.cpp | 7 ++-- 7 files changed, 57 insertions(+), 57 deletions(-) diff --git a/base/components/ast.hpp b/base/components/ast.hpp index 0a60144..28e2c06 100644 --- a/base/components/ast.hpp +++ b/base/components/ast.hpp @@ -242,7 +242,7 @@ GEN_NS_PARSER_END // I have ideas for ways to pack that into the typedef/using ast, but for now just keeping it like this #define ParserTokenType GEN_NS_PARSER Token typedef ParserTokenType Token; -#undef ParserTokenType +#undef ParserTokenType #endif #if GEN_COMPILER_CPP @@ -251,19 +251,19 @@ template< class Type> forceinline Type tmpl_cast( Code self ) { return * rcast( #pragma region Code C-Interface -void code_append (Code code, Code other ); -Str code_debug_str (Code code); -Code code_duplicate (Code code); -Code* code_entry (Code code, u32 idx ); -bool code_has_entries (Code code); -bool code_is_body (Code code); -bool code_is_equal (Code code, Code other); -bool code_is_valid (Code code); -void code_set_global (Code code); -StrBuilder code_to_string (Code self ); -void code_to_strbuilder_ptr(Code self, StrBuilder* result ); -Str code_type_str (Code self ); -bool code_validate_body(Code self ); +void code_append (Code code, Code other ); +Str code_debug_str (Code code); +Code code_duplicate (Code code); +Code* code_entry (Code code, u32 idx ); +bool code_has_entries (Code code); +bool code_is_body (Code code); +bool code_is_equal (Code code, Code other); +bool code_is_valid (Code code); +void code_set_global (Code code); +StrBuilder code_to_string (Code self ); +void code_to_strbuilder_ptr(Code self, StrBuilder* result ); +Str code_type_str (Code self ); +bool code_validate_body (Code self ); #pragma endregion Code C-Interface @@ -278,7 +278,7 @@ struct Code AST* ast; # define Using_Code( Typename ) \ - forceinline Str debug_str() { return code_debug_str(* this); } \ + forceinline Str debug_str() { return code_debug_str(* this); } \ forceinline Code duplicate() { return code_duplicate(* this); } \ forceinline bool is_equal( Code other ) { return code_is_equal(* this, other); } \ forceinline bool is_body() { return code_is_body(* this); } \ @@ -295,16 +295,17 @@ struct Code #if ! GEN_C_LIKE_CPP Using_Code( Code ); - forceinline void append(Code other) { return code_append(* this, other); } - forceinline Code* entry(u32 idx) { return code_entry(* this, idx); } - forceinline bool has_entries() { return code_has_entries(* this); } - forceinline StrBuilder to_string() { return code_to_string(* this); } - forceinline void to_string(StrBuilder& result) { return code_to_strbuilder_ptr(* this, & result); } - forceinline Str type_str() { return code_type_str(* this); } - forceinline bool validate_body() { return code_validate_body(*this); } + forceinline void append(Code other) { return code_append(* this, other); } + forceinline Code* entry(u32 idx) { return code_entry(* this, idx); } + forceinline bool has_entries() { return code_has_entries(* this); } + forceinline StrBuilder to_string() { return code_to_string(* this); } + forceinline void to_string(StrBuilder& result) { return code_to_strbuilder_ptr(* this, & result); } + forceinline Str type_str() { return code_type_str(* this); } + forceinline bool validate_body() { return code_validate_body(*this); } #endif Using_CodeOps( Code ); + forceinline Code operator *() { return * this; } // Required for for-range iteration. forceinline AST* operator ->() { return ast; } Code& operator ++(); diff --git a/base/components/code_serialization.cpp b/base/components/code_serialization.cpp index d00bfaf..d000691 100644 --- a/base/components/code_serialization.cpp +++ b/base/components/code_serialization.cpp @@ -1414,7 +1414,7 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) strbuilder_append_fmt( result, "%SB %S", typename_to_string(self->ValueType), self->Name ); - if ( self->ValueType->ArrExpr ) + if ( self->ValueType && self->ValueType->ArrExpr ) { strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->ValueType->ArrExpr) ); diff --git a/base/components/code_types.hpp b/base/components/code_types.hpp index 04f6521..023c92d 100644 --- a/base/components/code_types.hpp +++ b/base/components/code_types.hpp @@ -161,9 +161,9 @@ struct CodeBody forceinline void to_string( StrBuilder& result ) { return body_to_strbuilder_ref(* this, & result ); } forceinline void to_strbuilder_export( StrBuilder& result ) { return body_to_strbuilder_export(* this, & result); } +#endif forceinline Code begin() { return begin_CodeBody(* this); } forceinline Code end() { return end_CodeBody(* this); } -#endif Using_CodeOps( CodeBody ); forceinline operator Code() { return * rcast( Code*, this ); } forceinline AST_Body* operator->() { return ast; } diff --git a/base/components/gen/ast_inlines.hpp b/base/components/gen/ast_inlines.hpp index 148e477..46e80ed 100644 --- a/base/components/gen/ast_inlines.hpp +++ b/base/components/gen/ast_inlines.hpp @@ -64,7 +64,7 @@ inline AST_Attributes* CodeAttributes::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -95,7 +95,7 @@ inline AST_Comment* CodeComment::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -126,7 +126,7 @@ inline AST_Constructor* CodeConstructor::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -173,7 +173,7 @@ inline AST_Define* CodeDefine::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -204,7 +204,7 @@ inline AST_Destructor* CodeDestructor::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -235,7 +235,7 @@ inline AST_Enum* CodeEnum::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -266,7 +266,7 @@ inline AST_Exec* CodeExec::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -297,7 +297,7 @@ inline AST_Extern* CodeExtern::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -328,7 +328,7 @@ inline AST_Friend* CodeFriend::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -359,7 +359,7 @@ inline AST_Fn* CodeFn::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -390,7 +390,7 @@ inline AST_Include* CodeInclude::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -421,7 +421,7 @@ inline AST_Module* CodeModule::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -452,7 +452,7 @@ inline AST_NS* CodeNS::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -483,7 +483,7 @@ inline AST_Operator* CodeOperator::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -514,7 +514,7 @@ inline AST_OpCast* CodeOpCast::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -561,7 +561,7 @@ inline AST_Pragma* CodePragma::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -592,7 +592,7 @@ inline AST_PreprocessCond* CodePreprocessCond::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -655,7 +655,7 @@ inline AST_Template* CodeTemplate::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -686,7 +686,7 @@ inline AST_Typename* CodeTypename::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -717,7 +717,7 @@ inline AST_Typedef* CodeTypedef::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -748,7 +748,7 @@ inline AST_Union* CodeUnion::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -779,7 +779,7 @@ inline AST_Using* CodeUsing::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; @@ -810,7 +810,7 @@ inline AST_Var* CodeVar::operator->() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; diff --git a/base/components/parser.cpp b/base/components/parser.cpp index 9ffdb8f..24376bf 100644 --- a/base/components/parser.cpp +++ b/base/components/parser.cpp @@ -124,7 +124,7 @@ bool lex__eat(TokArray* self, TokType type ) , tok.Column , parser_to_string(Context) ); - + GEN_DEBUG_TRAP(); return false; } @@ -515,7 +515,7 @@ Code parse_array_decl() if ( check( Tok_Operator ) && currtok.Text[0] == '[' && currtok.Text[1] == ']' ) { - Code array_expr = untyped_str( tok_to_str(currtok) ); + Code array_expr = untyped_str( txt(" ") ); eat( Tok_Operator ); // [] @@ -2391,7 +2391,7 @@ CodeOperator parse_operator_after_ret_type( case '<': { if ( currtok.Text[1] == '=' ) - op = Op_LEqual; + op = Op_LesserEqual; else if ( currtok.Text[1] == '<' ) { @@ -3428,12 +3428,12 @@ CodeVar parse_variable_declaration_list() break; } - // eat(currtok.Type); - if ( specifiers ) specifiers_append(specifiers, spec ); else specifiers = def_specifier( spec ); + + eat(currtok.Type); } // , diff --git a/base/helpers/base_codegen.hpp b/base/helpers/base_codegen.hpp index c3fdc37..68b6d55 100644 --- a/base/helpers/base_codegen.hpp +++ b/base/helpers/base_codegen.hpp @@ -505,7 +505,7 @@ CodeBody gen_ast_inlines() { if ( ast == nullptr ) { - log_failure( "Attempt to dereference a nullptr!" ); + log_failure( "Attempt to dereference a nullptr!\n" ); return nullptr; } return ast; diff --git a/gen_singleheader/singleheader.cpp b/gen_singleheader/singleheader.cpp index 6e1a756..d5adc4d 100644 --- a/gen_singleheader/singleheader.cpp +++ b/gen_singleheader/singleheader.cpp @@ -176,9 +176,9 @@ int gen_main() Code timing = scan_file( path_base "dependencies/timing.cpp" ); header.print_fmt( roll_own_dependencies_guard_start ); + header.print( impl_start ); header.print_fmt( "GEN_NS_BEGIN\n\n"); - header.print( impl_start ); header.print( debug ); header.print( string_ops ); header.print( printing ); @@ -209,8 +209,7 @@ int gen_main() Code parsing_interface = scan_file( path_base "components/interface.parsing.cpp" ); Code untyped = scan_file( path_base "components/interface.untyped.cpp" ); - CodeBody etoktype = gen_etoktype( path_base "enums/ETokType.csv", path_base "enums/AttributeTokens.csv" ); - CodeNS parser_nspace = def_namespace( name(parser), def_namespace_body( args(etoktype)) ); + CodeBody etoktype = gen_etoktype( path_base "enums/ETokType.csv", path_base "enums/AttributeTokens.csv" ); header.print_fmt( "\nGEN_NS_BEGIN\n"); header.print( static_data ); @@ -225,7 +224,7 @@ int gen_main() header.print( interface ); header.print( upfront ); header.print_fmt( "\n#pragma region Parsing\n\n" ); - header.print( format(parser_nspace) ); + header.print( format(etoktype) ); header.print( lexer ); header.print( parser ); header.print( parsing_interface ); From 012fcb6bd5930dc6cea0969236ebc8843feca97d Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 13 Dec 2024 13:20:16 -0500 Subject: [PATCH 3/8] Corrected order of Str to how the slice type is defined in Odin and RAD Debugger (my reference on slice types) --- base/auxillary/scanner.cpp | 2 +- base/base.cpp | 6 + base/components/gen/ecodetypes.hpp | 244 +++++++++++++------------- base/components/gen/eoperator.hpp | 94 +++++----- base/components/gen/especifier.hpp | 52 +++--- base/components/gen/etoktype.cpp | 196 ++++++++++----------- base/components/gen/etoktype.hpp | 235 +++++++++++++++++++++++++ base/components/inlines.hpp | 2 +- base/components/interface.hpp | 4 +- base/components/interface.untyped.cpp | 6 +- base/components/interface.upfront.cpp | 6 +- base/components/lexer.cpp | 2 +- base/components/parser.cpp | 16 +- base/components/types.hpp | 18 +- base/dependencies/strings.hpp | 14 +- base/helpers/base_codegen.hpp | 12 +- gen_c_library/c_library.cpp | 12 +- gen_unreal_engine/unreal.cpp | 2 +- 18 files changed, 582 insertions(+), 341 deletions(-) create mode 100644 base/components/gen/etoktype.hpp diff --git a/base/auxillary/scanner.cpp b/base/auxillary/scanner.cpp index fb1866f..0ac23a3 100644 --- a/base/auxillary/scanner.cpp +++ b/base/auxillary/scanner.cpp @@ -118,7 +118,7 @@ Code scan_file( char const* path ) CodeBody parse_file( const char* path ) { FileContents file = file_read_contents( GlobalAllocator, true, path ); - Str content = { file.size, (char const*)file.data }; + Str content = { (char const*)file.data, file.size }; CodeBody code = parse_global_body( content ); log_fmt("\nParsed: %s\n", path); return code; diff --git a/base/base.cpp b/base/base.cpp index 0f2b053..8701ad4 100644 --- a/base/base.cpp +++ b/base/base.cpp @@ -41,6 +41,7 @@ int gen_main() CodeBody ecode = gen_ecode ( "enums/ECodeTypes.csv" ); CodeBody eoperator = gen_eoperator ( "enums/EOperator.csv" ); CodeBody especifier = gen_especifier( "enums/ESpecifier.csv" ); + CodeBody etoktype = gen_etoktype ( "enums/ETokType.csv", "enums/AttributeTokens.csv" ); CodeBody ast_inlines = gen_ast_inlines(); Builder header_ecode = builder_open( "components/gen/ecodetypes.hpp" ); @@ -57,6 +58,11 @@ int gen_main() builder_print( & header_especifier, gen_component_header ); builder_print( & header_especifier, format(especifier) ); builder_write( & header_especifier); + + Builder header_etoktype = builder_open( "components/gen/etoktype.cpp" ); + builder_print( & header_etoktype, gen_component_header ); + builder_print( & header_etoktype, format(etoktype) ); + builder_write( & header_etoktype); Builder header_ast_inlines = builder_open( "components/gen/ast_inlines.hpp" ); builder_print( & header_ast_inlines, gen_component_header ); diff --git a/base/components/gen/ecodetypes.hpp b/base/components/gen/ecodetypes.hpp index 3a237c7..b378470 100644 --- a/base/components/gen/ecodetypes.hpp +++ b/base/components/gen/ecodetypes.hpp @@ -75,67 +75,67 @@ enum CodeType : u32 inline Str codetype_to_str( CodeType type ) { local_persist Str lookup[61] = { - { sizeof( "Invalid" ), "Invalid" }, - { sizeof( "Untyped" ), "Untyped" }, - { sizeof( "NewLine" ), "NewLine" }, - { sizeof( "Comment" ), "Comment" }, - { sizeof( "Access_Private" ), "Access_Private" }, - { sizeof( "Access_Protected" ), "Access_Protected" }, - { sizeof( "Access_Public" ), "Access_Public" }, - { sizeof( "PlatformAttributes" ), "PlatformAttributes" }, - { sizeof( "Class" ), "Class" }, - { sizeof( "Class_Fwd" ), "Class_Fwd" }, - { sizeof( "Class_Body" ), "Class_Body" }, - { sizeof( "Constructor" ), "Constructor" }, - { sizeof( "Constructor_Fwd" ), "Constructor_Fwd" }, - { sizeof( "Destructor" ), "Destructor" }, - { sizeof( "Destructor_Fwd" ), "Destructor_Fwd" }, - { sizeof( "Enum" ), "Enum" }, - { sizeof( "Enum_Fwd" ), "Enum_Fwd" }, - { sizeof( "Enum_Body" ), "Enum_Body" }, - { sizeof( "Enum_Class" ), "Enum_Class" }, - { sizeof( "Enum_Class_Fwd" ), "Enum_Class_Fwd" }, - { sizeof( "Execution" ), "Execution" }, - { sizeof( "Export_Body" ), "Export_Body" }, - { sizeof( "Extern_Linkage" ), "Extern_Linkage" }, - { sizeof( "Extern_Linkage_Body" ), "Extern_Linkage_Body" }, - { sizeof( "Friend" ), "Friend" }, - { sizeof( "Function" ), "Function" }, - { sizeof( "Function_Fwd" ), "Function_Fwd" }, - { sizeof( "Function_Body" ), "Function_Body" }, - { sizeof( "Global_Body" ), "Global_Body" }, - { sizeof( "Module" ), "Module" }, - { sizeof( "Namespace" ), "Namespace" }, - { sizeof( "Namespace_Body" ), "Namespace_Body" }, - { sizeof( "Operator" ), "Operator" }, - { sizeof( "Operator_Fwd" ), "Operator_Fwd" }, - { sizeof( "Operator_Member" ), "Operator_Member" }, - { sizeof( "Operator_Member_Fwd" ), "Operator_Member_Fwd" }, - { sizeof( "Operator_Cast" ), "Operator_Cast" }, - { sizeof( "Operator_Cast_Fwd" ), "Operator_Cast_Fwd" }, - { sizeof( "Parameters" ), "Parameters" }, - { sizeof( "Preprocess_Define" ), "Preprocess_Define" }, - { sizeof( "Preprocess_Include" ), "Preprocess_Include" }, - { sizeof( "Preprocess_If" ), "Preprocess_If" }, - { sizeof( "Preprocess_IfDef" ), "Preprocess_IfDef" }, - { sizeof( "Preprocess_IfNotDef" ), "Preprocess_IfNotDef" }, - { sizeof( "Preprocess_ElIf" ), "Preprocess_ElIf" }, - { sizeof( "Preprocess_Else" ), "Preprocess_Else" }, - { sizeof( "Preprocess_EndIf" ), "Preprocess_EndIf" }, - { sizeof( "Preprocess_Pragma" ), "Preprocess_Pragma" }, - { sizeof( "Specifiers" ), "Specifiers" }, - { sizeof( "Struct" ), "Struct" }, - { sizeof( "Struct_Fwd" ), "Struct_Fwd" }, - { sizeof( "Struct_Body" ), "Struct_Body" }, - { sizeof( "Template" ), "Template" }, - { sizeof( "Typedef" ), "Typedef" }, - { sizeof( "Typename" ), "Typename" }, - { sizeof( "Union" ), "Union" }, - { sizeof( "Union_Fwd" ), "Union_Fwd" }, - { sizeof( "Union_Body" ), "Union_Body" }, - { sizeof( "Using" ), "Using" }, - { sizeof( "Using_Namespace" ), "Using_Namespace" }, - { sizeof( "Variable" ), "Variable" }, + { "Invalid", sizeof( "Invalid" ) }, + { "Untyped", sizeof( "Untyped" ) }, + { "NewLine", sizeof( "NewLine" ) }, + { "Comment", sizeof( "Comment" ) }, + { "Access_Private", sizeof( "Access_Private" ) }, + { "Access_Protected", sizeof( "Access_Protected" ) }, + { "Access_Public", sizeof( "Access_Public" ) }, + { "PlatformAttributes", sizeof( "PlatformAttributes" ) }, + { "Class", sizeof( "Class" ) }, + { "Class_Fwd", sizeof( "Class_Fwd" ) }, + { "Class_Body", sizeof( "Class_Body" ) }, + { "Constructor", sizeof( "Constructor" ) }, + { "Constructor_Fwd", sizeof( "Constructor_Fwd" ) }, + { "Destructor", sizeof( "Destructor" ) }, + { "Destructor_Fwd", sizeof( "Destructor_Fwd" ) }, + { "Enum", sizeof( "Enum" ) }, + { "Enum_Fwd", sizeof( "Enum_Fwd" ) }, + { "Enum_Body", sizeof( "Enum_Body" ) }, + { "Enum_Class", sizeof( "Enum_Class" ) }, + { "Enum_Class_Fwd", sizeof( "Enum_Class_Fwd" ) }, + { "Execution", sizeof( "Execution" ) }, + { "Export_Body", sizeof( "Export_Body" ) }, + { "Extern_Linkage", sizeof( "Extern_Linkage" ) }, + { "Extern_Linkage_Body", sizeof( "Extern_Linkage_Body" ) }, + { "Friend", sizeof( "Friend" ) }, + { "Function", sizeof( "Function" ) }, + { "Function_Fwd", sizeof( "Function_Fwd" ) }, + { "Function_Body", sizeof( "Function_Body" ) }, + { "Global_Body", sizeof( "Global_Body" ) }, + { "Module", sizeof( "Module" ) }, + { "Namespace", sizeof( "Namespace" ) }, + { "Namespace_Body", sizeof( "Namespace_Body" ) }, + { "Operator", sizeof( "Operator" ) }, + { "Operator_Fwd", sizeof( "Operator_Fwd" ) }, + { "Operator_Member", sizeof( "Operator_Member" ) }, + { "Operator_Member_Fwd", sizeof( "Operator_Member_Fwd" ) }, + { "Operator_Cast", sizeof( "Operator_Cast" ) }, + { "Operator_Cast_Fwd", sizeof( "Operator_Cast_Fwd" ) }, + { "Parameters", sizeof( "Parameters" ) }, + { "Preprocess_Define", sizeof( "Preprocess_Define" ) }, + { "Preprocess_Include", sizeof( "Preprocess_Include" ) }, + { "Preprocess_If", sizeof( "Preprocess_If" ) }, + { "Preprocess_IfDef", sizeof( "Preprocess_IfDef" ) }, + { "Preprocess_IfNotDef", sizeof( "Preprocess_IfNotDef" ) }, + { "Preprocess_ElIf", sizeof( "Preprocess_ElIf" ) }, + { "Preprocess_Else", sizeof( "Preprocess_Else" ) }, + { "Preprocess_EndIf", sizeof( "Preprocess_EndIf" ) }, + { "Preprocess_Pragma", sizeof( "Preprocess_Pragma" ) }, + { "Specifiers", sizeof( "Specifiers" ) }, + { "Struct", sizeof( "Struct" ) }, + { "Struct_Fwd", sizeof( "Struct_Fwd" ) }, + { "Struct_Body", sizeof( "Struct_Body" ) }, + { "Template", sizeof( "Template" ) }, + { "Typedef", sizeof( "Typedef" ) }, + { "Typename", sizeof( "Typename" ) }, + { "Union", sizeof( "Union" ) }, + { "Union_Fwd", sizeof( "Union_Fwd" ) }, + { "Union_Body", sizeof( "Union_Body" ) }, + { "Using", sizeof( "Using" ) }, + { "Using_Namespace", sizeof( "Using_Namespace" ) }, + { "Variable", sizeof( "Variable" ) }, }; return lookup[type]; } @@ -143,67 +143,67 @@ inline Str codetype_to_str( CodeType type ) inline Str codetype_to_keyword_str( CodeType type ) { local_persist Str lookup[61] = { - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "//" ) - 1, "//" }, - { sizeof( "private" ) - 1, "private" }, - { sizeof( "protected" ) - 1, "protected" }, - { sizeof( "public" ) - 1, "public" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "class" ) - 1, "class" }, - { sizeof( "clsss" ) - 1, "clsss" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "enum" ) - 1, "enum" }, - { sizeof( "enum" ) - 1, "enum" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "enum class" ) - 1, "enum class" }, - { sizeof( "enum class" ) - 1, "enum class" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "extern" ) - 1, "extern" }, - { sizeof( "extern" ) - 1, "extern" }, - { sizeof( "friend" ) - 1, "friend" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "module" ) - 1, "module" }, - { sizeof( "namespace" ) - 1, "namespace" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "operator" ) - 1, "operator" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "define" ) - 1, "define" }, - { sizeof( "include" ) - 1, "include" }, - { sizeof( "if" ) - 1, "if" }, - { sizeof( "ifdef" ) - 1, "ifdef" }, - { sizeof( "ifndef" ) - 1, "ifndef" }, - { sizeof( "elif" ) - 1, "elif" }, - { sizeof( "else" ) - 1, "else" }, - { sizeof( "endif" ) - 1, "endif" }, - { sizeof( "pragma" ) - 1, "pragma" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "struct" ) - 1, "struct" }, - { sizeof( "struct" ) - 1, "struct" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "template" ) - 1, "template" }, - { sizeof( "typedef" ) - 1, "typedef" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "union" ) - 1, "union" }, - { sizeof( "union" ) - 1, "union" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, - { sizeof( "using" ) - 1, "using" }, - { sizeof( "using namespace" ) - 1, "using namespace" }, - { sizeof( "__NA__" ) - 1, "__NA__" }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "//", sizeof( "//" ) - 1 }, + { "private", sizeof( "private" ) - 1 }, + { "protected", sizeof( "protected" ) - 1 }, + { "public", sizeof( "public" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "class", sizeof( "class" ) - 1 }, + { "clsss", sizeof( "clsss" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "enum", sizeof( "enum" ) - 1 }, + { "enum", sizeof( "enum" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "enum class", sizeof( "enum class" ) - 1 }, + { "enum class", sizeof( "enum class" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "extern", sizeof( "extern" ) - 1 }, + { "extern", sizeof( "extern" ) - 1 }, + { "friend", sizeof( "friend" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "module", sizeof( "module" ) - 1 }, + { "namespace", sizeof( "namespace" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "define", sizeof( "define" ) - 1 }, + { "include", sizeof( "include" ) - 1 }, + { "if", sizeof( "if" ) - 1 }, + { "ifdef", sizeof( "ifdef" ) - 1 }, + { "ifndef", sizeof( "ifndef" ) - 1 }, + { "elif", sizeof( "elif" ) - 1 }, + { "else", sizeof( "else" ) - 1 }, + { "endif", sizeof( "endif" ) - 1 }, + { "pragma", sizeof( "pragma" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "struct", sizeof( "struct" ) - 1 }, + { "struct", sizeof( "struct" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "template", sizeof( "template" ) - 1 }, + { "typedef", sizeof( "typedef" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "union", sizeof( "union" ) - 1 }, + { "union", sizeof( "union" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, + { "using", sizeof( "using" ) - 1 }, + { "using namespace", sizeof( "using namespace" ) - 1 }, + { "__NA__", sizeof( "__NA__" ) - 1 }, }; return lookup[type]; } diff --git a/base/components/gen/eoperator.hpp b/base/components/gen/eoperator.hpp index 3a43b64..fa4f23b 100644 --- a/base/components/gen/eoperator.hpp +++ b/base/components/gen/eoperator.hpp @@ -61,53 +61,53 @@ enum Operator : u32 inline Str operator_to_str( Operator op ) { local_persist Str lookup[47] = { - { sizeof( "INVALID" ), "INVALID" }, - { sizeof( "=" ), "=" }, - { sizeof( "+=" ), "+=" }, - { sizeof( "-=" ), "-=" }, - { sizeof( "*=" ), "*=" }, - { sizeof( "/=" ), "/=" }, - { sizeof( "%=" ), "%=" }, - { sizeof( "&=" ), "&=" }, - { sizeof( "|=" ), "|=" }, - { sizeof( "^=" ), "^=" }, - { sizeof( "<<=" ), "<<=" }, - { sizeof( ">>=" ), ">>=" }, - { sizeof( "++" ), "++" }, - { sizeof( "--" ), "--" }, - { sizeof( "+" ), "+" }, - { sizeof( "-" ), "-" }, - { sizeof( "!" ), "!" }, - { sizeof( "+" ), "+" }, - { sizeof( "-" ), "-" }, - { sizeof( "*" ), "*" }, - { sizeof( "/" ), "/" }, - { sizeof( "%" ), "%" }, - { sizeof( "~" ), "~" }, - { sizeof( "&" ), "&" }, - { sizeof( "|" ), "|" }, - { sizeof( "^" ), "^" }, - { sizeof( "<<" ), "<<" }, - { sizeof( ">>" ), ">>" }, - { sizeof( "&&" ), "&&" }, - { sizeof( "||" ), "||" }, - { sizeof( "==" ), "==" }, - { sizeof( "!=" ), "!=" }, - { sizeof( "<" ), "<" }, - { sizeof( ">" ), ">" }, - { sizeof( "<=" ), "<=" }, - { sizeof( ">=" ), ">=" }, - { sizeof( "[]" ), "[]" }, - { sizeof( "*" ), "*" }, - { sizeof( "&" ), "&" }, - { sizeof( "->" ), "->" }, - { sizeof( "->*" ), "->*" }, - { sizeof( "()" ), "()" }, - { sizeof( "," ), "," }, - { sizeof( "new" ), "new" }, - { sizeof( "new[]" ), "new[]" }, - { sizeof( "delete" ), "delete" }, - { sizeof( "delete[]" ), "delete[]" }, + { "INVALID", sizeof( "INVALID" ) }, + { "=", sizeof( "=" ) }, + { "+=", sizeof( "+=" ) }, + { "-=", sizeof( "-=" ) }, + { "*=", sizeof( "*=" ) }, + { "/=", sizeof( "/=" ) }, + { "%=", sizeof( "%=" ) }, + { "&=", sizeof( "&=" ) }, + { "|=", sizeof( "|=" ) }, + { "^=", sizeof( "^=" ) }, + { "<<=", sizeof( "<<=" ) }, + { ">>=", sizeof( ">>=" ) }, + { "++", sizeof( "++" ) }, + { "--", sizeof( "--" ) }, + { "+", sizeof( "+" ) }, + { "-", sizeof( "-" ) }, + { "!", sizeof( "!" ) }, + { "+", sizeof( "+" ) }, + { "-", sizeof( "-" ) }, + { "*", sizeof( "*" ) }, + { "/", sizeof( "/" ) }, + { "%", sizeof( "%" ) }, + { "~", sizeof( "~" ) }, + { "&", sizeof( "&" ) }, + { "|", sizeof( "|" ) }, + { "^", sizeof( "^" ) }, + { "<<", sizeof( "<<" ) }, + { ">>", sizeof( ">>" ) }, + { "&&", sizeof( "&&" ) }, + { "||", sizeof( "||" ) }, + { "==", sizeof( "==" ) }, + { "!=", sizeof( "!=" ) }, + { "<", sizeof( "<" ) }, + { ">", sizeof( ">" ) }, + { "<=", sizeof( "<=" ) }, + { ">=", sizeof( ">=" ) }, + { "[]", sizeof( "[]" ) }, + { "*", sizeof( "*" ) }, + { "&", sizeof( "&" ) }, + { "->", sizeof( "->" ) }, + { "->*", sizeof( "->*" ) }, + { "()", sizeof( "()" ) }, + { ",", sizeof( "," ) }, + { "new", sizeof( "new" ) }, + { "new[]", sizeof( "new[]" ) }, + { "delete", sizeof( "delete" ) }, + { "delete[]", sizeof( "delete[]" ) }, }; return lookup[op]; } diff --git a/base/components/gen/especifier.hpp b/base/components/gen/especifier.hpp index 17ba5d8..f67dabd 100644 --- a/base/components/gen/especifier.hpp +++ b/base/components/gen/especifier.hpp @@ -40,32 +40,32 @@ enum Specifier : u32 inline Str spec_to_str( Specifier type ) { local_persist Str lookup[26] = { - { sizeof( "INVALID" ), "INVALID" }, - { sizeof( "consteval" ), "consteval" }, - { sizeof( "constexpr" ), "constexpr" }, - { sizeof( "constinit" ), "constinit" }, - { sizeof( "explicit" ), "explicit" }, - { sizeof( "extern" ), "extern" }, - { sizeof( "forceinline" ), "forceinline" }, - { sizeof( "global" ), "global" }, - { sizeof( "inline" ), "inline" }, - { sizeof( "internal" ), "internal" }, - { sizeof( "local_persist" ), "local_persist" }, - { sizeof( "mutable" ), "mutable" }, - { sizeof( "neverinline" ), "neverinline" }, - { sizeof( "*" ), "*" }, - { sizeof( "&" ), "&" }, - { sizeof( "register" ), "register" }, - { sizeof( "&&" ), "&&" }, - { sizeof( "static" ), "static" }, - { sizeof( "thread_local" ), "thread_local" }, - { sizeof( "virtual" ), "virtual" }, - { sizeof( "const" ), "const" }, - { sizeof( "final" ), "final" }, - { sizeof( "noexcept" ), "noexcept" }, - { sizeof( "override" ), "override" }, - { sizeof( "= 0" ), "= 0" }, - { sizeof( "volatile" ), "volatile" }, + { "INVALID", sizeof( "INVALID" ) }, + { "consteval", sizeof( "consteval" ) }, + { "constexpr", sizeof( "constexpr" ) }, + { "constinit", sizeof( "constinit" ) }, + { "explicit", sizeof( "explicit" ) }, + { "extern", sizeof( "extern" ) }, + { "forceinline", sizeof( "forceinline" ) }, + { "global", sizeof( "global" ) }, + { "inline", sizeof( "inline" ) }, + { "internal", sizeof( "internal" ) }, + { "local_persist", sizeof( "local_persist" ) }, + { "mutable", sizeof( "mutable" ) }, + { "neverinline", sizeof( "neverinline" ) }, + { "*", sizeof( "*" ) }, + { "&", sizeof( "&" ) }, + { "register", sizeof( "register" ) }, + { "&&", sizeof( "&&" ) }, + { "static", sizeof( "static" ) }, + { "thread_local", sizeof( "thread_local" ) }, + { "virtual", sizeof( "virtual" ) }, + { "const", sizeof( "const" ) }, + { "final", sizeof( "final" ) }, + { "noexcept", sizeof( "noexcept" ) }, + { "override", sizeof( "override" ) }, + { "= 0", sizeof( "= 0" ) }, + { "volatile", sizeof( "volatile" ) }, }; return lookup[type]; } diff --git a/base/components/gen/etoktype.cpp b/base/components/gen/etoktype.cpp index f4fb757..df50bbd 100644 --- a/base/components/gen/etoktype.cpp +++ b/base/components/gen/etoktype.cpp @@ -114,103 +114,103 @@ enum TokType : u32 inline Str toktype_to_str( TokType type ) { local_persist Str lookup[] = { - { sizeof( "__invalid__" ), "__invalid__" }, - { sizeof( "private" ), "private" }, - { sizeof( "protected" ), "protected" }, - { sizeof( "public" ), "public" }, - { sizeof( "." ), "." }, - { sizeof( "::" ), "::" }, - { sizeof( "&" ), "&" }, - { sizeof( "&&" ), "&&" }, - { sizeof( ":" ), ":" }, - { sizeof( "[[" ), "[[" }, - { sizeof( "]]" ), "]]" }, - { sizeof( "{" ), "{" }, - { sizeof( "}" ), "}" }, - { sizeof( "[" ), "[" }, - { sizeof( "]" ), "]" }, - { sizeof( "(" ), "(" }, - { sizeof( ")" ), ")" }, - { sizeof( "__comment__" ), "__comment__" }, - { sizeof( "__comment_end__" ), "__comment_end__" }, - { sizeof( "__comment_start__" ), "__comment_start__" }, - { sizeof( "__character__" ), "__character__" }, - { sizeof( "," ), "," }, - { sizeof( "class" ), "class" }, - { sizeof( "__attribute__" ), "__attribute__" }, - { sizeof( "__declspec" ), "__declspec" }, - { sizeof( "enum" ), "enum" }, - { sizeof( "extern" ), "extern" }, - { sizeof( "friend" ), "friend" }, - { sizeof( "module" ), "module" }, - { sizeof( "namespace" ), "namespace" }, - { sizeof( "operator" ), "operator" }, - { sizeof( "struct" ), "struct" }, - { sizeof( "template" ), "template" }, - { sizeof( "typedef" ), "typedef" }, - { sizeof( "using" ), "using" }, - { sizeof( "union" ), "union" }, - { sizeof( "__identifier__" ), "__identifier__" }, - { sizeof( "import" ), "import" }, - { sizeof( "export" ), "export" }, - { sizeof( "__new_line__" ), "__new_line__" }, - { sizeof( "__number__" ), "__number__" }, - { sizeof( "__operator__" ), "__operator__" }, - { sizeof( "#" ), "#" }, - { sizeof( "define" ), "define" }, - { sizeof( "if" ), "if" }, - { sizeof( "ifdef" ), "ifdef" }, - { sizeof( "ifndef" ), "ifndef" }, - { sizeof( "elif" ), "elif" }, - { sizeof( "else" ), "else" }, - { sizeof( "endif" ), "endif" }, - { sizeof( "include" ), "include" }, - { sizeof( "pragma" ), "pragma" }, - { sizeof( "__macro_content__" ), "__macro_content__" }, - { sizeof( "__macro__" ), "__macro__" }, - { sizeof( "__unsupported__" ), "__unsupported__" }, - { sizeof( "alignas" ), "alignas" }, - { sizeof( "const" ), "const" }, - { sizeof( "consteval" ), "consteval" }, - { sizeof( "constexpr" ), "constexpr" }, - { sizeof( "constinit" ), "constinit" }, - { sizeof( "explicit" ), "explicit" }, - { sizeof( "extern" ), "extern" }, - { sizeof( "final" ), "final" }, - { sizeof( "forceinline" ), "forceinline" }, - { sizeof( "global" ), "global" }, - { sizeof( "inline" ), "inline" }, - { sizeof( "internal" ), "internal" }, - { sizeof( "local_persist" ), "local_persist" }, - { sizeof( "mutable" ), "mutable" }, - { sizeof( "neverinline" ), "neverinline" }, - { sizeof( "override" ), "override" }, - { sizeof( "static" ), "static" }, - { sizeof( "thread_local" ), "thread_local" }, - { sizeof( "volatile" ), "volatile" }, - { sizeof( "virtual" ), "virtual" }, - { sizeof( "*" ), "*" }, - { sizeof( ";" ), ";" }, - { sizeof( "static_assert" ), "static_assert" }, - { sizeof( "__strbuilder__" ), "__strbuilder__" }, - { sizeof( "typename" ), "typename" }, - { sizeof( "unsigned" ), "unsigned" }, - { sizeof( "signed" ), "signed" }, - { sizeof( "short" ), "short" }, - { sizeof( "long" ), "long" }, - { sizeof( "bool" ), "bool" }, - { sizeof( "char" ), "char" }, - { sizeof( "int" ), "int" }, - { sizeof( "double" ), "double" }, - { sizeof( "__int8" ), "__int8" }, - { sizeof( "__int16" ), "__int16" }, - { sizeof( "__int32" ), "__int32" }, - { sizeof( "__int64" ), "__int64" }, - { sizeof( "_W64" ), "_W64" }, - { sizeof( "..." ), "..." }, - { sizeof( "__attrib_start__" ), "__attrib_start__" }, - { sizeof( "GEN_API_Export_Code" ), "GEN_API_Export_Code" }, - { sizeof( "GEN_API_Import_Code" ), "GEN_API_Import_Code" }, + { "__invalid__", sizeof( "__invalid__" ) }, + { "private", sizeof( "private" ) }, + { "protected", sizeof( "protected" ) }, + { "public", sizeof( "public" ) }, + { ".", sizeof( "." ) }, + { "::", sizeof( "::" ) }, + { "&", sizeof( "&" ) }, + { "&&", sizeof( "&&" ) }, + { ":", sizeof( ":" ) }, + { "[[", sizeof( "[[" ) }, + { "]]", sizeof( "]]" ) }, + { "{", sizeof( "{" ) }, + { "}", sizeof( "}" ) }, + { "[", sizeof( "[" ) }, + { "]", sizeof( "]" ) }, + { "(", sizeof( "(" ) }, + { ")", sizeof( ")" ) }, + { "__comment__", sizeof( "__comment__" ) }, + { "__comment_end__", sizeof( "__comment_end__" ) }, + { "__comment_start__", sizeof( "__comment_start__" ) }, + { "__character__", sizeof( "__character__" ) }, + { ",", sizeof( "," ) }, + { "class", sizeof( "class" ) }, + { "__attribute__", sizeof( "__attribute__" ) }, + { "__declspec", sizeof( "__declspec" ) }, + { "enum", sizeof( "enum" ) }, + { "extern", sizeof( "extern" ) }, + { "friend", sizeof( "friend" ) }, + { "module", sizeof( "module" ) }, + { "namespace", sizeof( "namespace" ) }, + { "operator", sizeof( "operator" ) }, + { "struct", sizeof( "struct" ) }, + { "template", sizeof( "template" ) }, + { "typedef", sizeof( "typedef" ) }, + { "using", sizeof( "using" ) }, + { "union", sizeof( "union" ) }, + { "__identifier__", sizeof( "__identifier__" ) }, + { "import", sizeof( "import" ) }, + { "export", sizeof( "export" ) }, + { "__new_line__", sizeof( "__new_line__" ) }, + { "__number__", sizeof( "__number__" ) }, + { "__operator__", sizeof( "__operator__" ) }, + { "#", sizeof( "#" ) }, + { "define", sizeof( "define" ) }, + { "if", sizeof( "if" ) }, + { "ifdef", sizeof( "ifdef" ) }, + { "ifndef", sizeof( "ifndef" ) }, + { "elif", sizeof( "elif" ) }, + { "else", sizeof( "else" ) }, + { "endif", sizeof( "endif" ) }, + { "include", sizeof( "include" ) }, + { "pragma", sizeof( "pragma" ) }, + { "__macro_content__", sizeof( "__macro_content__" ) }, + { "__macro__", sizeof( "__macro__" ) }, + { "__unsupported__", sizeof( "__unsupported__" ) }, + { "alignas", sizeof( "alignas" ) }, + { "const", sizeof( "const" ) }, + { "consteval", sizeof( "consteval" ) }, + { "constexpr", sizeof( "constexpr" ) }, + { "constinit", sizeof( "constinit" ) }, + { "explicit", sizeof( "explicit" ) }, + { "extern", sizeof( "extern" ) }, + { "final", sizeof( "final" ) }, + { "forceinline", sizeof( "forceinline" ) }, + { "global", sizeof( "global" ) }, + { "inline", sizeof( "inline" ) }, + { "internal", sizeof( "internal" ) }, + { "local_persist", sizeof( "local_persist" ) }, + { "mutable", sizeof( "mutable" ) }, + { "neverinline", sizeof( "neverinline" ) }, + { "override", sizeof( "override" ) }, + { "static", sizeof( "static" ) }, + { "thread_local", sizeof( "thread_local" ) }, + { "volatile", sizeof( "volatile" ) }, + { "virtual", sizeof( "virtual" ) }, + { "*", sizeof( "*" ) }, + { ";", sizeof( ";" ) }, + { "static_assert", sizeof( "static_assert" ) }, + { "__string__", sizeof( "__string__" ) }, + { "typename", sizeof( "typename" ) }, + { "unsigned", sizeof( "unsigned" ) }, + { "signed", sizeof( "signed" ) }, + { "short", sizeof( "short" ) }, + { "long", sizeof( "long" ) }, + { "bool", sizeof( "bool" ) }, + { "char", sizeof( "char" ) }, + { "int", sizeof( "int" ) }, + { "double", sizeof( "double" ) }, + { "__int8", sizeof( "__int8" ) }, + { "__int16", sizeof( "__int16" ) }, + { "__int32", sizeof( "__int32" ) }, + { "__int64", sizeof( "__int64" ) }, + { "_W64", sizeof( "_W64" ) }, + { "...", sizeof( "..." ) }, + { "__attrib_start__", sizeof( "__attrib_start__" ) }, + { "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, + { "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, }; return lookup[type]; } @@ -220,7 +220,7 @@ inline TokType str_to_toktype( Str str ) local_persist u32 keymap[Tok_NumTokens]; do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) { - Str enum_str = toktype_to_str( (TokType)index ); + Str enum_str = toktype_to_str( (TokType)index ); keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); } do_once_end u32 hash = crc32( str.Ptr, str.Len ); diff --git a/base/components/gen/etoktype.hpp b/base/components/gen/etoktype.hpp new file mode 100644 index 0000000..df50bbd --- /dev/null +++ b/base/components/gen/etoktype.hpp @@ -0,0 +1,235 @@ +#ifdef GEN_INTELLISENSE_DIRECTIVES +#pragma once +#include "components/types.hpp" +#endif + +// This file was generated automatially by gencpp's bootstrap.cpp (See: https://github.com/Ed94/gencpp) + +GEN_NS_PARSER_BEGIN + +#define GEN_DEFINE_ATTRIBUTE_TOKENS Entry( Tok_Attribute_API_Export, "GEN_API_Export_Code" ) Entry( Tok_Attribute_API_Import, "GEN_API_Import_Code" ) + +enum TokType : u32 +{ + Tok_Invalid, + Tok_Access_Private, + Tok_Access_Protected, + Tok_Access_Public, + Tok_Access_MemberSymbol, + Tok_Access_StaticSymbol, + Tok_Ampersand, + Tok_Ampersand_DBL, + Tok_Assign_Classifer, + Tok_Attribute_Open, + Tok_Attribute_Close, + Tok_BraceCurly_Open, + Tok_BraceCurly_Close, + Tok_BraceSquare_Open, + Tok_BraceSquare_Close, + Tok_Capture_Start, + Tok_Capture_End, + Tok_Comment, + Tok_Comment_End, + Tok_Comment_Start, + Tok_Char, + Tok_Comma, + Tok_Decl_Class, + Tok_Decl_GNU_Attribute, + Tok_Decl_MSVC_Attribute, + Tok_Decl_Enum, + Tok_Decl_Extern_Linkage, + Tok_Decl_Friend, + Tok_Decl_Module, + Tok_Decl_Namespace, + Tok_Decl_Operator, + Tok_Decl_Struct, + Tok_Decl_Template, + Tok_Decl_Typedef, + Tok_Decl_Using, + Tok_Decl_Union, + Tok_Identifier, + Tok_Module_Import, + Tok_Module_Export, + Tok_NewLine, + Tok_Number, + Tok_Operator, + Tok_Preprocess_Hash, + Tok_Preprocess_Define, + Tok_Preprocess_If, + Tok_Preprocess_IfDef, + Tok_Preprocess_IfNotDef, + Tok_Preprocess_ElIf, + Tok_Preprocess_Else, + Tok_Preprocess_EndIf, + Tok_Preprocess_Include, + Tok_Preprocess_Pragma, + Tok_Preprocess_Content, + Tok_Preprocess_Macro, + Tok_Preprocess_Unsupported, + Tok_Spec_Alignas, + Tok_Spec_Const, + Tok_Spec_Consteval, + Tok_Spec_Constexpr, + Tok_Spec_Constinit, + Tok_Spec_Explicit, + Tok_Spec_Extern, + Tok_Spec_Final, + Tok_Spec_ForceInline, + Tok_Spec_Global, + Tok_Spec_Inline, + Tok_Spec_Internal_Linkage, + Tok_Spec_LocalPersist, + Tok_Spec_Mutable, + Tok_Spec_NeverInline, + Tok_Spec_Override, + Tok_Spec_Static, + Tok_Spec_ThreadLocal, + Tok_Spec_Volatile, + Tok_Spec_Virtual, + Tok_Star, + Tok_Statement_End, + Tok_StaticAssert, + Tok_String, + Tok_Type_Typename, + Tok_Type_Unsigned, + Tok_Type_Signed, + Tok_Type_Short, + Tok_Type_Long, + Tok_Type_bool, + Tok_Type_char, + Tok_Type_int, + Tok_Type_double, + Tok_Type_MS_int8, + Tok_Type_MS_int16, + Tok_Type_MS_int32, + Tok_Type_MS_int64, + Tok_Type_MS_W64, + Tok_Varadic_Argument, + Tok___Attributes_Start, + Tok_Attribute_API_Export, + Tok_Attribute_API_Import, + Tok_NumTokens +}; + +inline Str toktype_to_str( TokType type ) +{ + local_persist Str lookup[] = { + { "__invalid__", sizeof( "__invalid__" ) }, + { "private", sizeof( "private" ) }, + { "protected", sizeof( "protected" ) }, + { "public", sizeof( "public" ) }, + { ".", sizeof( "." ) }, + { "::", sizeof( "::" ) }, + { "&", sizeof( "&" ) }, + { "&&", sizeof( "&&" ) }, + { ":", sizeof( ":" ) }, + { "[[", sizeof( "[[" ) }, + { "]]", sizeof( "]]" ) }, + { "{", sizeof( "{" ) }, + { "}", sizeof( "}" ) }, + { "[", sizeof( "[" ) }, + { "]", sizeof( "]" ) }, + { "(", sizeof( "(" ) }, + { ")", sizeof( ")" ) }, + { "__comment__", sizeof( "__comment__" ) }, + { "__comment_end__", sizeof( "__comment_end__" ) }, + { "__comment_start__", sizeof( "__comment_start__" ) }, + { "__character__", sizeof( "__character__" ) }, + { ",", sizeof( "," ) }, + { "class", sizeof( "class" ) }, + { "__attribute__", sizeof( "__attribute__" ) }, + { "__declspec", sizeof( "__declspec" ) }, + { "enum", sizeof( "enum" ) }, + { "extern", sizeof( "extern" ) }, + { "friend", sizeof( "friend" ) }, + { "module", sizeof( "module" ) }, + { "namespace", sizeof( "namespace" ) }, + { "operator", sizeof( "operator" ) }, + { "struct", sizeof( "struct" ) }, + { "template", sizeof( "template" ) }, + { "typedef", sizeof( "typedef" ) }, + { "using", sizeof( "using" ) }, + { "union", sizeof( "union" ) }, + { "__identifier__", sizeof( "__identifier__" ) }, + { "import", sizeof( "import" ) }, + { "export", sizeof( "export" ) }, + { "__new_line__", sizeof( "__new_line__" ) }, + { "__number__", sizeof( "__number__" ) }, + { "__operator__", sizeof( "__operator__" ) }, + { "#", sizeof( "#" ) }, + { "define", sizeof( "define" ) }, + { "if", sizeof( "if" ) }, + { "ifdef", sizeof( "ifdef" ) }, + { "ifndef", sizeof( "ifndef" ) }, + { "elif", sizeof( "elif" ) }, + { "else", sizeof( "else" ) }, + { "endif", sizeof( "endif" ) }, + { "include", sizeof( "include" ) }, + { "pragma", sizeof( "pragma" ) }, + { "__macro_content__", sizeof( "__macro_content__" ) }, + { "__macro__", sizeof( "__macro__" ) }, + { "__unsupported__", sizeof( "__unsupported__" ) }, + { "alignas", sizeof( "alignas" ) }, + { "const", sizeof( "const" ) }, + { "consteval", sizeof( "consteval" ) }, + { "constexpr", sizeof( "constexpr" ) }, + { "constinit", sizeof( "constinit" ) }, + { "explicit", sizeof( "explicit" ) }, + { "extern", sizeof( "extern" ) }, + { "final", sizeof( "final" ) }, + { "forceinline", sizeof( "forceinline" ) }, + { "global", sizeof( "global" ) }, + { "inline", sizeof( "inline" ) }, + { "internal", sizeof( "internal" ) }, + { "local_persist", sizeof( "local_persist" ) }, + { "mutable", sizeof( "mutable" ) }, + { "neverinline", sizeof( "neverinline" ) }, + { "override", sizeof( "override" ) }, + { "static", sizeof( "static" ) }, + { "thread_local", sizeof( "thread_local" ) }, + { "volatile", sizeof( "volatile" ) }, + { "virtual", sizeof( "virtual" ) }, + { "*", sizeof( "*" ) }, + { ";", sizeof( ";" ) }, + { "static_assert", sizeof( "static_assert" ) }, + { "__string__", sizeof( "__string__" ) }, + { "typename", sizeof( "typename" ) }, + { "unsigned", sizeof( "unsigned" ) }, + { "signed", sizeof( "signed" ) }, + { "short", sizeof( "short" ) }, + { "long", sizeof( "long" ) }, + { "bool", sizeof( "bool" ) }, + { "char", sizeof( "char" ) }, + { "int", sizeof( "int" ) }, + { "double", sizeof( "double" ) }, + { "__int8", sizeof( "__int8" ) }, + { "__int16", sizeof( "__int16" ) }, + { "__int32", sizeof( "__int32" ) }, + { "__int64", sizeof( "__int64" ) }, + { "_W64", sizeof( "_W64" ) }, + { "...", sizeof( "..." ) }, + { "__attrib_start__", sizeof( "__attrib_start__" ) }, + { "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, + { "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, + }; + return lookup[type]; +} + +inline TokType str_to_toktype( Str str ) +{ + local_persist u32 keymap[Tok_NumTokens]; + do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) + { + Str enum_str = toktype_to_str( (TokType)index ); + keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); + } + do_once_end u32 hash = crc32( str.Ptr, str.Len ); + for ( u32 index = 0; index < Tok_NumTokens; index++ ) + { + if ( keymap[index] == hash ) + return (TokType)index; + } + return Tok_Invalid; +} + +GEN_NS_PARSER_END diff --git a/base/components/inlines.hpp b/base/components/inlines.hpp index 9e4a5a6..7a74511 100644 --- a/base/components/inlines.hpp +++ b/base/components/inlines.hpp @@ -408,7 +408,7 @@ Str token_fmt_impl( ssize num, ... ) ssize result = token_fmt_va(buf, GEN_PRINTF_MAXLEN, num, va); va_end(va); - Str str = { result, buf }; + Str str = { buf, result }; return str; } #pragma endregion Interface diff --git a/base/components/interface.hpp b/base/components/interface.hpp index 96faa9d..178f57e 100644 --- a/base/components/interface.hpp +++ b/base/components/interface.hpp @@ -289,12 +289,12 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ); #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_) } +#define name( Id_ ) { stringize(Id_), sizeof(stringize( Id_ )) - 1 } #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__ ) } +#define code( ... ) { stringize( __VA_ARGS__ ), sizeof(stringize(__VA_ARGS__)) - 1 } #endif #ifndef args diff --git a/base/components/interface.untyped.cpp b/base/components/interface.untyped.cpp index 4aa466f..e8eb297 100644 --- a/base/components/interface.untyped.cpp +++ b/base/components/interface.untyped.cpp @@ -138,8 +138,8 @@ Code untyped_fmt( char const* fmt, ...) ssize length = c_str_fmt_va(buf, GEN_PRINTF_MAXLEN, fmt, va); va_end(va); - Str buf_str = { c_str_len_capped(fmt, MaxNameLength), fmt }; - Str uncapped_str = { length, buf }; + Str buf_str = { fmt, c_str_len_capped(fmt, MaxNameLength) }; + Str uncapped_str = { buf, length }; Code result = make_code(); @@ -172,7 +172,7 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ) ssize length = token_fmt_va(buf, GEN_PRINTF_MAXLEN, num_tokens, va); va_end(va); - Str buf_str = { length, buf }; + Str buf_str = { buf, length }; Code result = make_code(); diff --git a/base/components/interface.upfront.cpp b/base/components/interface.upfront.cpp index 1d03407..d7025f6 100644 --- a/base/components/interface.upfront.cpp +++ b/base/components/interface.upfront.cpp @@ -461,7 +461,7 @@ CodeComment def_comment( Str content ) if ( * strbuilder_back(cmt_formatted) != '\n' ) strbuilder_append_str( & cmt_formatted, txt("\n") ); - Str name = { strbuilder_length(cmt_formatted), cmt_formatted }; + Str name = strbuilder_to_str(cmt_formatted); Code result = make_code(); @@ -589,7 +589,7 @@ CodeDefine def_define( Str name, Str content, Opts_def_define p ) if ( result->Name.Ptr[lex_id_len] == '(' ) break; } - Str lex_id = { lex_id_len, result->Name.Ptr }; + Str lex_id = { result->Name.Ptr, lex_id_len }; array_append(PreprocessorDefines, lex_id ); } return result; @@ -895,7 +895,7 @@ CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator p ) else name = c_str_fmt_buf( "operator %.*s", op_str.Len, op_str.Ptr ); - Str name_resolved = { c_str_len(name), name }; + Str name_resolved = { name, c_str_len(name) }; CodeOperator result = (CodeOperator) make_code(); diff --git a/base/components/lexer.cpp b/base/components/lexer.cpp index 692322c..07ca9e2 100644 --- a/base/components/lexer.cpp +++ b/base/components/lexer.cpp @@ -43,7 +43,7 @@ AccessSpec tok_to_access_specifier(Token tok) Str tok_to_str(Token tok) { - Str str = { tok.Length, tok.Text }; + Str str = { tok.Text, tok.Length }; return str; } diff --git a/base/components/parser.cpp b/base/components/parser.cpp index 24376bf..11db847 100644 --- a/base/components/parser.cpp +++ b/base/components/parser.cpp @@ -60,7 +60,7 @@ StrBuilder parser_to_string(ParseContext ctx) length++; } - Str scope_str = { length, scope_start.Text }; + Str scope_str = { scope_start.Text, length }; StrBuilder line = strbuilder_make_str( GlobalAllocator, scope_str ); strbuilder_append_fmt( & result, "\tScope : %s\n", line ); strbuilder_free(& line); @@ -68,7 +68,7 @@ StrBuilder parser_to_string(ParseContext ctx) sptr dist = (sptr)last_valid.Text - (sptr)scope_start.Text + 2; sptr length_from_err = dist; - Str err_str = { length_from_err, last_valid.Text }; + Str err_str = { last_valid.Text, length_from_err }; StrBuilder line_from_err = strbuilder_make_str( GlobalAllocator, err_str ); if ( length_from_err < 100 ) @@ -681,7 +681,7 @@ CodeAttributes parse_attributes() if ( len > 0 ) { - Str attribute_txt = { len, start.Text }; + Str attribute_txt = { start.Text, len }; parser_pop(& Context); StrBuilder name_stripped = parser_strip_formatting( attribute_txt, parser_strip_formatting_dont_preserve_newlines ); @@ -1072,7 +1072,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) StrBuilder fused = strbuilder_make_reserve( GlobalAllocator, attributes->Content.Len + more_attributes->Content.Len ); strbuilder_append_fmt( & fused, "%SB %SB", attributes->Content, more_attributes->Content ); - Str attrib_name = { strbuilder_length(fused), fused }; + Str attrib_name = strbuilder_to_str(fused); attributes->Name = get_cached_string( attrib_name ); attributes->Content = attributes->Name; // @@ -1616,7 +1616,7 @@ Code parse_function_body() if ( len > 0 ) { - Str str = { len, start.Text }; + Str str = { start.Text, len }; body_append( result, cast(Code, def_execution( str )) ); } @@ -3157,7 +3157,7 @@ Code parse_static_assert() content.Length = ( (sptr)prevtok.Text + prevtok.Length ) - (sptr)content.Text; char const* str = c_str_fmt_buf( "%.*s\n", content.Length, content.Text ); - Str content_str = { content.Length + 1, str }; + Str content_str = { str, content.Length + 1 }; assert->Content = get_cached_string( content_str ); assert->Name = assert->Content; @@ -5082,7 +5082,7 @@ CodeTypedef parser_parse_typedef() if ( currtok.Type == Tok_Identifier ) { - Str name_str = { name.Length, name.Text }; + Str name_str = { name.Text, name.Length }; type = untyped_str(name_str); name = currtok; eat(Tok_Identifier); @@ -5279,7 +5279,7 @@ CodeUnion parser_parse_union( bool inplace_def ) CodeAttributes attributes = parse_attributes(); // union - Str name = { 0, nullptr }; + Str name = { nullptr, 0 }; if ( check( Tok_Identifier ) ) { name = tok_to_str(currtok); diff --git a/base/components/types.hpp b/base/components/types.hpp index 2b3a614..c2a1c32 100644 --- a/base/components/types.hpp +++ b/base/components/types.hpp @@ -48,13 +48,13 @@ Str access_spec_to_str( AccessSpec type ) { local_persist Str lookup[ (u32)AccessSpec_Num_AccessSpec ] = { - { sizeof("") - 1, "" }, - { sizeof("prviate") - 1, "private" }, - { sizeof("protected") - 1, "private" }, - { sizeof("public") - 1, "public" }, + { "", sizeof( "" ) - 1 }, + { "private", sizeof("prviate") - 1 }, + { "private", sizeof("protected") - 1 }, + { "public", sizeof("public") - 1 }, }; - Str invalid = { sizeof("Invalid") - 1, "Invalid" }; + Str invalid = { "Invalid", sizeof("Invalid") - 1 }; if ( type > AccessSpec_Public ) return invalid; @@ -101,13 +101,13 @@ Str module_flag_to_str( ModuleFlag flag ) { local_persist Str lookup[ (u32)Num_ModuleFlags ] = { - { sizeof("__none__"), "__none__" }, - { sizeof("export"), "export" }, - { sizeof("import"), "import" }, + { "__none__", sizeof("__none__") - 1 }, + { "export", sizeof("export") - 1 }, + { "import", sizeof("import") - 1 }, }; local_persist - Str invalid_flag = { sizeof("invalid"), "invalid" }; + Str invalid_flag = { "invalid", sizeof("invalid") }; if ( flag > ModuleFlag_Import ) return invalid_flag; diff --git a/base/dependencies/strings.hpp b/base/dependencies/strings.hpp index 58c2400..fa28fbd 100644 --- a/base/dependencies/strings.hpp +++ b/base/dependencies/strings.hpp @@ -18,8 +18,8 @@ Str str_visualize_whitespace(Str str, AllocatorInfo allocator); // Constant string with length. struct Str { - ssize Len; char const* Ptr; + ssize Len; #if GEN_COMPILER_CPP forceinline operator char const* () const { return Ptr; } @@ -40,9 +40,9 @@ struct Str #ifndef txt # if GEN_COMPILER_CPP -# define txt( text ) Str { sizeof( text ) - 1, ( text ) } +# define txt( text ) Str { ( text ), sizeof( text ) - 1 } # else -# define txt( text ) (Str){ sizeof( text ) - 1, ( text ) } +# define txt( text ) (Str){ ( text ), sizeof( text ) - 1 } # endif #endif @@ -103,7 +103,7 @@ b32 str_starts_with(Str str, Str substring) { inline Str to_str_from_c_str( char const* bad_str ) { - Str result = { c_str_len( bad_str ), bad_str }; + Str result = { bad_str, c_str_len( bad_str ) }; return result; } @@ -170,7 +170,7 @@ struct StrBuilder forceinline operator char*() { return Data; } forceinline operator char const*() const { return Data; } - forceinline operator Str() const { return { strbuilder_length(* this), Data }; } + forceinline operator Str() const { return { Data, strbuilder_length(* this) }; } StrBuilder const& operator=(StrBuilder const& other) const { if (this == &other) @@ -243,7 +243,7 @@ struct StrBuilder forceinline b32 starts_with(StrBuilder substring) const { return strbuilder_starts_with_string(* this, substring); } forceinline void skip_line() { strbuilder_skip_line(* this); } forceinline void strip_space() { strbuilder_strip_space(* this); } - forceinline Str to_str() { return { strbuilder_length(*this), Data}; } + forceinline Str to_str() { return { Data, strbuilder_length(*this) }; } forceinline void trim(char const* cut_set) { strbuilder_trim(* this, cut_set); } forceinline void trim_space() { strbuilder_trim_space(* this); } forceinline StrBuilder visualize_whitespace() const { return strbuilder_visualize_whitespace(* this); } @@ -621,7 +621,7 @@ void strip_space(StrBuilder str) forceinline Str strbuilder_to_str(StrBuilder str) { - Str result = { strbuilder_length(str), (char const*)str }; + Str result = { (char const*)str, strbuilder_length(str) }; return result; } diff --git a/base/helpers/base_codegen.hpp b/base/helpers/base_codegen.hpp index 68b6d55..f68dcec 100644 --- a/base/helpers/base_codegen.hpp +++ b/base/helpers/base_codegen.hpp @@ -22,8 +22,8 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) char const* keyword = csv_enum.Col_2[idx].string; // TODO(Ed): to_c_str_entries and the others in here didn't have proper sizing of the Str slice. strbuilder_append_fmt( & enum_entries, "CT_%s,\n", code ); - strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", code, code ); - strbuilder_append_fmt( & to_keyword_c_str_entries, "{ sizeof(\"%s\") - 1, \"%s\" },\n", keyword, keyword ); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", code, code ); + strbuilder_append_fmt( & to_keyword_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", keyword, keyword ); } CodeEnum enum_code; @@ -104,7 +104,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; strbuilder_append_fmt( & enum_entries, "Op_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -190,7 +190,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; strbuilder_append_fmt( & enum_entries, "Spec_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -347,7 +347,7 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ char const* entry_to_str = enum_c_str_strs [idx].string; strbuilder_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); } for ( usize idx = 0; idx < array_num(attribute_strs); idx++ ) @@ -356,7 +356,7 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ char const* entry_to_str = attribute_c_str_strs [idx].string; strbuilder_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); - strbuilder_append_fmt( & to_c_str_attributes, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_attributes, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); strbuilder_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); if ( idx < array_num(attribute_strs) - 1 ) diff --git a/gen_c_library/c_library.cpp b/gen_c_library/c_library.cpp index 13d1ece..e2d0eee 100644 --- a/gen_c_library/c_library.cpp +++ b/gen_c_library/c_library.cpp @@ -646,7 +646,7 @@ do \ if (fn->Name.starts_with(txt("code_"))) { Str old_prefix = txt("code_"); - Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + Str actual_name = { fn->Name.Ptr + old_prefix.Len, fn->Name.Len - old_prefix.Len }; StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); @@ -796,7 +796,7 @@ R"(#define AST_ArrSpecs_Cap \ { generic_selector.clear(); Str private_prefix = txt("code__"); - Str actual_name = { fn->Name.Len - private_prefix.Len, fn->Name.Ptr + private_prefix.Len }; + Str actual_name = { fn->Name.Ptr + private_prefix.Len, fn->Name.Len - private_prefix.Len }; StrBuilder interface_name = StrBuilder::fmt_buf(GlobalAllocator, "code_%S", actual_name ); // Resolve generic's arguments @@ -941,7 +941,7 @@ R"(#define ( code ) _Generic( (code), \ { // Convert the definition to use a default struct: https://vxtwitter.com/vkrajacic/status/1749816169736073295 Str prefix = txt("def_"); - Str actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; + Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len }; Str new_name = StrBuilder::fmt_buf(GlobalAllocator, "def__%S", actual_name ).to_str(); // Resolve define's arguments @@ -1020,7 +1020,7 @@ R"(#define ( code ) _Generic( (code), \ if (fn->Name.starts_with(txt("code_"))) { Str old_prefix = txt("code_"); - Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + Str actual_name = { fn->Name.Ptr + old_prefix.Len, fn->Name.Len - old_prefix.Len }; StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); @@ -1175,7 +1175,7 @@ R"(#define ( code ) _Generic( (code), \ if (fn->Name.starts_with(txt("code_"))) { Str old_prefix = txt("code_"); - Str actual_name = { fn->Name.Len - old_prefix.Len, fn->Name.Ptr + old_prefix.Len }; + Str actual_name = { fn->Name.Ptr + old_prefix.Len, fn->Name.Len - old_prefix.Len }; StrBuilder new_name = StrBuilder::fmt_buf(GlobalAllocator, "code__%S", actual_name ); fn->Name = get_cached_string(new_name); @@ -1227,7 +1227,7 @@ R"(#define ( code ) _Generic( (code), \ for ( CodeParams opt_param : fn->Params ) if (opt_param->ValueType->Name.starts_with(txt("Opts_"))) { Str prefix = txt("def_"); - Str actual_name = { fn->Name.Len - prefix.Len, fn->Name.Ptr + prefix.Len }; + Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len }; Str new_name = StrBuilder::fmt_buf(GlobalAllocator, "def__%S", actual_name ).to_str(); fn->Name = get_cached_string(new_name); diff --git a/gen_unreal_engine/unreal.cpp b/gen_unreal_engine/unreal.cpp index dfaa72a..9d86080 100644 --- a/gen_unreal_engine/unreal.cpp +++ b/gen_unreal_engine/unreal.cpp @@ -68,7 +68,7 @@ int gen_main() CodeBody macros = def_body( CT_Global_Body ); { FileContents content = file_read_contents( GlobalAllocator, true, path_base "dependencies/macros.hpp" ); - CodeBody ori_macros = parse_global_body( Str { content.size, (char const*)content.data }); + CodeBody ori_macros = parse_global_body( Str { (char const*)content.data, content.size }); for (Code code = ori_macros.begin(); code != ori_macros.end(); From bac57a58722e25ff6943e99ee83ae32bde861b32 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 13 Dec 2024 14:38:27 -0500 Subject: [PATCH 4/8] Corrected enum serialization of ecodetypes, eoperator, especifier, and etoktype, some more naming refactors for strbuilder... formatting --- base/Readme.md | 2 +- base/auxillary/builder.cpp | 2 +- base/components/ast.cpp | 214 ++++----- base/components/ast.hpp | 18 +- base/components/code_serialization.cpp | 278 +++++------ base/components/code_types.hpp | 613 +++++++++++++------------ base/components/gen/ecodetypes.hpp | 122 ++--- base/components/gen/eoperator.hpp | 94 ++-- base/components/gen/especifier.hpp | 54 +-- base/components/gen/etoktype.cpp | 196 ++++---- base/components/gen/etoktype.hpp | 235 ---------- base/components/interface.hpp | 2 +- base/components/interface.parsing.cpp | 2 +- base/components/lexer.cpp | 6 +- base/components/parser.cpp | 142 +++--- base/components/types.hpp | 2 +- base/dependencies/containers.hpp | 20 +- base/dependencies/debug.hpp | 8 +- base/dependencies/strings.hpp | 50 +- base/helpers/base_codegen.hpp | 32 +- docs/AST_Design.md | 6 +- gen_c_library/c_library.cpp | 14 +- scripts/genccp.natstepfilter | 2 +- 23 files changed, 942 insertions(+), 1172 deletions(-) delete mode 100644 base/components/gen/etoktype.hpp diff --git a/base/Readme.md b/base/Readme.md index 5bbe56c..1175e1e 100644 --- a/base/Readme.md +++ b/base/Readme.md @@ -148,7 +148,7 @@ The convention you'll see used throughout the upfront interface of the library i 1. Check name or parameters to make sure they are valid for the construction requested 2. Create a code object using `make_code`. 3. Populate immediate fields (Name, Type, ModuleFlags, etc) -4. Populate sub-entires using `add_entry`. If using the default serialization function `to_string`, follow the order at which entires are expected to appear (there is a strong ordering expected). +4. Populate sub-entires using `add_entry`. If using the default serialization function `to_strbuilder`, follow the order at which entires are expected to appear (there is a strong ordering expected). Names or Content fields are interned strings and thus showed be cached using `get_cached_string` if its desired to preserve that behavior. diff --git a/base/auxillary/builder.cpp b/base/auxillary/builder.cpp index 186a306..d7797f2 100644 --- a/base/auxillary/builder.cpp +++ b/base/auxillary/builder.cpp @@ -28,7 +28,7 @@ void builder_pad_lines( Builder* builder, s32 num ) void builder_print( Builder* builder, Code code ) { - StrBuilder str = code_to_string(code); + StrBuilder str = code_to_strbuilder(code); // const ssize len = str.length(); // log_fmt( "%s - print: %.*s\n", File.filename, len > 80 ? 80 : len, str.Data ); strbuilder_append_string( & builder->Buffer, str ); diff --git a/base/components/ast.cpp b/base/components/ast.cpp index 4ab638a..75bd779 100644 --- a/base/components/ast.cpp +++ b/base/components/ast.cpp @@ -62,11 +62,11 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); - strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); + strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Class_Fwd: @@ -76,10 +76,10 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); - strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParentAccess: %S", self->ParentType ? access_spec_to_str( self->ParentAccess ) : txt("No Parent") ); + strbuilder_append_fmt( result, "\n\tParentType : %S", self->ParentType ? code_type_str(self->ParentType) : txt("Null") ); break; case CT_Constructor: @@ -88,11 +88,11 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_string(self->InitializerList) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_strbuilder(self->InitializerList) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Constructor_Fwd: @@ -101,10 +101,10 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_string(self->InitializerList) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInitializerList: %S", self->InitializerList ? strbuilder_to_str( code_to_strbuilder(self->InitializerList) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params) ) : txt("Null") ); break; case CT_Destructor: @@ -113,9 +113,9 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Destructor_Fwd: @@ -128,10 +128,10 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_strbuilder(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Enum_Fwd: @@ -141,9 +141,9 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlying Type : %S", self->UnderlyingType ? strbuilder_to_str( code_to_strbuilder(self->UnderlyingType)) : txt("Null") ); break; case CT_Extern_Linkage: @@ -162,8 +162,8 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_string(self->Declaration)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_strbuilder(self->Declaration)) : txt("Null") ); break; case CT_Function: @@ -172,12 +172,12 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_strbuilder(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Function_Fwd: @@ -186,11 +186,11 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_strbuilder(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params)) : txt("Null") ); break; case CT_Module: @@ -207,12 +207,12 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_strbuilder(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); strbuilder_append_fmt( result, "\n\tOp : %S", operator_to_str( self->Op ) ); break; @@ -223,11 +223,11 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType: %S", self->ReturnType ? strbuilder_to_str( code_to_strbuilder(self->ReturnType) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params) ) : txt("Null") ); strbuilder_append_fmt( result, "\n\tOp : %S", operator_to_str( self->Op ) ); break; @@ -237,10 +237,10 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_strbuilder(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Operator_Cast_Fwd: @@ -249,17 +249,17 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_strbuilder(self->ValueType)) : txt("Null") ); break; case CT_Parameters: strbuilder_append_fmt( result, "\n\tNumEntries: %d", self->NumEntries ); strbuilder_append_fmt( result, "\n\tLast : %S", self->Last->Name ); strbuilder_append_fmt( result, "\n\tNext : %S", self->Next->Name ); - strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_strbuilder(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_strbuilder(self->Value)) : txt("Null") ); break; case CT_Specifiers: @@ -285,8 +285,8 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_string(self->Declaration)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tDeclaration: %S", self->Declaration ? strbuilder_to_str( code_to_strbuilder(self->Declaration)) : txt("Null") ); break; case CT_Typedef: @@ -295,16 +295,16 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_strbuilder(self->UnderlyingType)) : txt("Null") ); break; case CT_Typename: - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tReturnType : %S", self->ReturnType ? strbuilder_to_str( code_to_string(self->ReturnType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_string(self->Params)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tArrExpr : %S", self->ArrExpr ? strbuilder_to_str( code_to_string(self->ArrExpr)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tReturnType : %S", self->ReturnType ? strbuilder_to_str( code_to_strbuilder(self->ReturnType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tParams : %S", self->Params ? strbuilder_to_str( code_to_strbuilder(self->Params)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tArrExpr : %S", self->ArrExpr ? strbuilder_to_str( code_to_strbuilder(self->ArrExpr)) : txt("Null") ); break; case CT_Union: @@ -313,8 +313,8 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes: %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBody : %S", self->Body ? code_debug_str(self->Body) : txt("Null") ); break; case CT_Using: @@ -323,9 +323,9 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_string(self->UnderlyingType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tUnderlyingType: %S", self->UnderlyingType ? strbuilder_to_str( code_to_strbuilder(self->UnderlyingType)) : txt("Null") ); break; case CT_Variable: @@ -333,10 +333,10 @@ Str code_debug_str(Code self) if ( self->Parent && self->Parent->Type == CT_Variable ) { // Its a NextVar - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_string(self->BitfieldSize)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_strbuilder(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_strbuilder(self->BitfieldSize)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); break; } @@ -345,13 +345,13 @@ Str code_debug_str(Code self) if ( self->Next ) strbuilder_append_fmt( result, "\n\tNext: %S %S", code_type_str(self->Prev), self->Prev->Name.Len ? self->Prev->Name : txt("Null") ); - strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); - strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_string(self->Attributes) ) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_string(self->Specs)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_string(self->ValueType)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_string(self->BitfieldSize)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_string(self->Value)) : txt("Null") ); - strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tInlineCmt : %S", self->InlineCmt ? self->InlineCmt->Content : txt("Null") ); + strbuilder_append_fmt( result, "\n\tAttributes : %S", self->Attributes ? strbuilder_to_str( code_to_strbuilder(self->Attributes) ) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tSpecs : %S", self->Specs ? strbuilder_to_str( code_to_strbuilder(self->Specs)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValueType : %S", self->ValueType ? strbuilder_to_str( code_to_strbuilder(self->ValueType)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tBitfieldSize: %S", self->BitfieldSize ? strbuilder_to_str( code_to_strbuilder(self->BitfieldSize)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tValue : %S", self->Value ? strbuilder_to_str( code_to_strbuilder(self->Value)) : txt("Null") ); + strbuilder_append_fmt( result, "\n\tNextVar : %S", self->NextVar ? code_debug_str(self->NextVar) : txt("Null") ); break; } @@ -370,7 +370,7 @@ Code code_duplicate(Code self) return result; } -StrBuilder code_to_string(Code self) +StrBuilder code_to_strbuilder(Code self) { StrBuilder result = strbuilder_make_str( GlobalAllocator, txt("") ); code_to_strbuilder_ptr( self, & result ); @@ -455,7 +455,7 @@ void code_to_strbuilder_ptr( Code self, StrBuilder* result ) break; case CT_Extern_Linkage: - extern_to_string(cast(CodeExtern, self), result ); + extern_to_strbuilder(cast(CodeExtern, self), result ); break; case CT_Friend: @@ -624,8 +624,8 @@ bool code_is_equal( Code self, Code other ) if ( self->val != other->val ) \ { \ log_fmt("\nAST::is_equal: Member - " #val " failed\n" \ - "AST : %S\n" \ - "Other: %S\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ ,code_debug_str(other) \ ); \ @@ -634,11 +634,11 @@ bool code_is_equal( Code self, Code other ) } #define check_member_str( str ) \ - if ( ! str_are_equal( self->str, other->str ) ) \ + if ( ! str_are_equal( self->str, other->str ) ) \ { \ log_fmt("\nAST::is_equal: Member string - "#str " failed\n" \ - "AST : %S\n" \ - "Other: %S\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ ,code_debug_str(other) \ ); \ @@ -647,21 +647,21 @@ bool code_is_equal( Code self, Code other ) } #define check_member_content( content ) \ - if ( ! str_are_equal( self->content, other->content )) \ + if ( ! str_are_equal( self->content, other->content )) \ { \ log_fmt("\nAST::is_equal: Member content - "#content " failed\n" \ - "AST : %S\n" \ - "Other: %S\n" \ + "AST : %S\n" \ + "Other: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ ); \ \ log_fmt("Content cannot be trusted to be unique with this check " \ "so it must be verified by eye for now\n" \ - "AST Content:\n%S\n" \ - "Other Content:\n%S\n" \ - , str_visualize_whitespace(self->content, GlobalAllocator) \ - , str_visualize_whitespace(other->content, GlobalAllocator) \ + "AST Content:\n%S\n" \ + "Other Content:\n%S\n" \ + , str_visualize_whitespace(self->content, GlobalAllocator) \ + , str_visualize_whitespace(other->content, GlobalAllocator) \ ); \ } @@ -671,9 +671,9 @@ bool code_is_equal( Code self, Code other ) if ( other->ast == nullptr ) \ { \ log_fmt("\nAST::is_equal: Failed for member " #ast " other equivalent param is null\n" \ - "AST : %S\n" \ - "Other: %S\n" \ - "For ast member: %S\n" \ + "AST : %S\n" \ + "Other: %S\n" \ + "For ast member: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ , code_debug_str(self->ast) \ @@ -685,10 +685,10 @@ bool code_is_equal( Code self, Code other ) if ( ! code_is_equal(self->ast, other->ast ) ) \ { \ log_fmt( "\nAST::is_equal: Failed for " #ast"\n" \ - "AST : %S\n" \ - "Other: %S\n" \ - "For ast member: %S\n" \ - "other's ast member: %S\n" \ + "AST : %S\n" \ + "Other: %S\n" \ + "For ast member: %S\n" \ + "other's ast member: %S\n" \ , code_debug_str(self) \ , code_debug_str(other) \ , code_debug_str(self->ast) \ diff --git a/base/components/ast.hpp b/base/components/ast.hpp index 28e2c06..03f94bc 100644 --- a/base/components/ast.hpp +++ b/base/components/ast.hpp @@ -260,7 +260,7 @@ bool code_is_body (Code code); bool code_is_equal (Code code, Code other); bool code_is_valid (Code code); void code_set_global (Code code); -StrBuilder code_to_string (Code self ); +StrBuilder code_to_strbuilder (Code self ); void code_to_strbuilder_ptr(Code self, StrBuilder* result ); Str code_type_str (Code self ); bool code_validate_body (Code self ); @@ -295,17 +295,17 @@ struct Code #if ! GEN_C_LIKE_CPP Using_Code( Code ); - forceinline void append(Code other) { return code_append(* this, other); } - forceinline Code* entry(u32 idx) { return code_entry(* this, idx); } - forceinline bool has_entries() { return code_has_entries(* this); } - forceinline StrBuilder to_string() { return code_to_string(* this); } - forceinline void to_string(StrBuilder& result) { return code_to_strbuilder_ptr(* this, & result); } - forceinline Str type_str() { return code_type_str(* this); } - forceinline bool validate_body() { return code_validate_body(*this); } + forceinline void append(Code other) { return code_append(* this, other); } + forceinline Code* entry(u32 idx) { return code_entry(* this, idx); } + forceinline bool has_entries() { return code_has_entries(* this); } + forceinline StrBuilder to_strbuilder() { return code_to_strbuilder(* this); } + forceinline void to_strbuilder(StrBuilder& result) { return code_to_strbuilder_ptr(* this, & result); } + forceinline Str type_str() { return code_type_str(* this); } + forceinline bool validate_body() { return code_validate_body(*this); } #endif Using_CodeOps( Code ); - forceinline Code operator *() { return * this; } // Required for for-range iteration. + forceinline Code operator *() { return * this; } // Required to support for-range iteration. forceinline AST* operator ->() { return ast; } Code& operator ++(); diff --git a/base/components/code_serialization.cpp b/base/components/code_serialization.cpp index d000691..2e8794d 100644 --- a/base/components/code_serialization.cpp +++ b/base/components/code_serialization.cpp @@ -4,7 +4,7 @@ #endif inline -StrBuilder attributes_to_string(CodeAttributes attributes) { +StrBuilder attributes_to_strbuilder(CodeAttributes attributes) { GEN_ASSERT(attributes); char* raw = ccast(char*, str_duplicate( attributes->Content, GlobalAllocator ).Ptr); StrBuilder result = { raw }; @@ -18,7 +18,7 @@ void attributes_to_strbuilder_ref(CodeAttributes attributes, StrBuilder* result) strbuilder_append_str(result, attributes->Content); } -StrBuilder body_to_string(CodeBody body) +StrBuilder body_to_strbuilder(CodeBody body) { GEN_ASSERT(body); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); @@ -56,7 +56,7 @@ void body_to_strbuilder_ref( CodeBody body, StrBuilder* result ) while ( left -- ) { code_to_strbuilder_ptr(curr, result); - // strbuilder_append_fmt( result, "%SB", code_to_string(curr) ); + // strbuilder_append_fmt( result, "%SB", code_to_strbuilder(curr) ); ++curr; } } @@ -72,7 +72,7 @@ void body_to_strbuilder_export( CodeBody body, StrBuilder* result ) while ( left-- ) { code_to_strbuilder_ptr(curr, result); - // strbuilder_append_fmt( result, "%SB", code_to_string(curr) ); + // strbuilder_append_fmt( result, "%SB", code_to_strbuilder(curr) ); ++curr; } @@ -80,7 +80,7 @@ void body_to_strbuilder_export( CodeBody body, StrBuilder* result ) } inline -StrBuilder comment_to_string(CodeComment comment) { +StrBuilder comment_to_strbuilder(CodeComment comment) { GEN_ASSERT(comment); char* raw = ccast(char*, str_duplicate( comment->Content, GlobalAllocator ).Ptr); StrBuilder result = { raw }; @@ -94,7 +94,7 @@ void comment_to_strbuilder_ref(CodeComment comment, StrBuilder* result) { strbuilder_append_str(result, comment->Content); } -StrBuilder constructor_to_string(CodeConstructor self) +StrBuilder constructor_to_strbuilder(CodeConstructor self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch (self->Type) @@ -120,17 +120,17 @@ void constructor_to_strbuilder_def(CodeConstructor self, StrBuilder* result ) } if ( self->Params ) - strbuilder_append_fmt( result, "( %SB )", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "( %SB )", params_to_strbuilder(self->Params) ); else strbuilder_append_str( result, txt("()") ); if ( self->InitializerList ) - strbuilder_append_fmt( result, " : %SB", code_to_string(self->InitializerList) ); + strbuilder_append_fmt( result, " : %SB", code_to_strbuilder(self->InitializerList) ); if ( self->InlineCmt ) strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); - strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_strbuilder(self->Body) ); } void constructor_to_strbuilder_fwd(CodeConstructor self, StrBuilder* result ) @@ -144,12 +144,12 @@ void constructor_to_strbuilder_fwd(CodeConstructor self, StrBuilder* result ) } if ( self->Params ) - strbuilder_append_fmt( result, "( %SB )", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "( %SB )", params_to_strbuilder(self->Params) ); else strbuilder_append_fmt( result, "()"); if (self->Body) - strbuilder_append_fmt( result, " = %SB", code_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB", code_to_strbuilder(self->Body) ); if ( self->InlineCmt ) strbuilder_append_fmt( result, "; // %S\n", self->InlineCmt->Content ); @@ -157,7 +157,7 @@ void constructor_to_strbuilder_fwd(CodeConstructor self, StrBuilder* result ) strbuilder_append_str( result, txt(";\n") ); } -StrBuilder class_to_string( CodeClass self ) +StrBuilder class_to_strbuilder( CodeClass self ) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) @@ -183,13 +183,13 @@ void class_to_strbuilder_def( CodeClass self, StrBuilder* result ) if ( self->Attributes ) { - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); } if ( self->ParentType ) { Str access_level = access_spec_to_str( self->ParentAccess ); - strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_string(self->ParentType) ); + strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_strbuilder(self->ParentType) ); CodeTypename interface = cast(CodeTypename, self->ParentType->Next); if ( interface ) @@ -197,7 +197,7 @@ void class_to_strbuilder_def( CodeClass self, StrBuilder* result ) while ( interface ) { - strbuilder_append_fmt( result, ", public %SB", typename_to_string(interface) ); + strbuilder_append_fmt( result, ", public %SB", typename_to_strbuilder(interface) ); interface = interface->Next ? cast(CodeTypename, interface->Next) : NullCode; } } @@ -211,7 +211,7 @@ void class_to_strbuilder_def( CodeClass self, StrBuilder* result ) strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); } - strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_strbuilder(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) strbuilder_append_str( result, txt(";\n") ); @@ -225,7 +225,7 @@ void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "class %SB %S", attributes_to_string(self->Attributes), self->Name ); + strbuilder_append_fmt( result, "class %SB %S", attributes_to_strbuilder(self->Attributes), self->Name ); else strbuilder_append_fmt( result, "class %S", self->Name ); @@ -239,7 +239,7 @@ void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ) } } -StrBuilder define_to_string(CodeDefine define) +StrBuilder define_to_strbuilder(CodeDefine define) { return strbuilder_fmt_buf( GlobalAllocator, "#define %S %S", define->Name, define->Content ); } @@ -249,7 +249,7 @@ void define_to_strbuilder_ref(CodeDefine define, StrBuilder* result ) strbuilder_append_fmt( result, "#define %S %S", define->Name, define->Content ); } -StrBuilder destructor_to_string(CodeDestructor self) +StrBuilder destructor_to_strbuilder(CodeDestructor self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( self->Type ) @@ -280,7 +280,7 @@ void destructor_to_strbuilder_def(CodeDestructor self, StrBuilder* result ) else strbuilder_append_fmt( result, "~%S()", self->Parent->Name ); - strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", code_to_strbuilder(self->Body) ); } void destructor_to_strbuilder_fwd(CodeDestructor self, StrBuilder* result ) @@ -295,7 +295,7 @@ void destructor_to_strbuilder_fwd(CodeDestructor self, StrBuilder* result ) if ( specifiers_has(self->Specs, Spec_Pure ) ) strbuilder_append_str( result, txt(" = 0;") ); else if (self->Body) - strbuilder_append_fmt( result, " = %SB;", code_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB;", code_to_strbuilder(self->Body) ); } else strbuilder_append_fmt( result, "~%S();", self->Parent->Name ); @@ -306,7 +306,7 @@ void destructor_to_strbuilder_fwd(CodeDestructor self, StrBuilder* result ) strbuilder_append_str( result, txt("\n")); } -StrBuilder enum_to_string(CodeEnum self) +StrBuilder enum_to_strbuilder(CodeEnum self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) @@ -337,24 +337,24 @@ void enum_to_strbuilder_def(CodeEnum self, StrBuilder* result ) strbuilder_append_str( result, txt("enum ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->UnderlyingType ) strbuilder_append_fmt( result, "%S : %SB\n{\n%SB\n}" , self->Name - , typename_to_string(self->UnderlyingType) - , body_to_string(self->Body) + , typename_to_strbuilder(self->UnderlyingType) + , body_to_strbuilder(self->Body) ); else if ( self->UnderlyingTypeMacro ) strbuilder_append_fmt( result, "%S %SB\n{\n%SB\n}" , self->Name - , code_to_string(self->UnderlyingTypeMacro) - , body_to_string(self->Body) + , code_to_strbuilder(self->UnderlyingTypeMacro) + , body_to_strbuilder(self->Body) ); - else strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); + else strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_strbuilder(self->Body) ); } - else strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); + else strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_strbuilder(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) strbuilder_append_str( result, txt(";\n")); @@ -366,14 +366,14 @@ void enum_to_strbuilder_fwd(CodeEnum self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->UnderlyingType ) - strbuilder_append_fmt( result, "enum %S : %SB", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "enum %S : %SB", self->Name, typename_to_strbuilder(self->UnderlyingType) ); else if (self->UnderlyingTypeMacro) { log_fmt("IDENTIFIED A UNDERLYING ENUM MACRO"); - strbuilder_append_fmt( result, "enum %S %SB", self->Name, code_to_string(self->UnderlyingTypeMacro) ); + strbuilder_append_fmt( result, "enum %S %SB", self->Name, code_to_strbuilder(self->UnderlyingTypeMacro) ); } else strbuilder_append_fmt( result, "enum %S", self->Name ); @@ -398,21 +398,21 @@ void enum_to_strbuilder_class_def(CodeEnum self, StrBuilder* result ) if ( self->Attributes ) { - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); } if ( self->UnderlyingType ) { - strbuilder_append_fmt( result, "%S : %SB\n{\n%SB\n}", self->Name, typename_to_string(self->UnderlyingType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S : %SB\n{\n%SB\n}", self->Name, typename_to_strbuilder(self->UnderlyingType), body_to_strbuilder(self->Body) ); } else { - strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S\n{\n%SB\n}", self->Name, body_to_strbuilder(self->Body) ); } } else { - strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "enum %S\n{\n%SB\n}", self->Name, body_to_strbuilder(self->Body) ); } if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) @@ -427,9 +427,9 @@ void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ) strbuilder_append_str( result, txt("enum class ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); - strbuilder_append_fmt( result, "%S : %SB", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "%S : %SB", self->Name, typename_to_strbuilder(self->UnderlyingType) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) { @@ -440,7 +440,7 @@ void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ) } } -StrBuilder exec_to_string(CodeExec exec) +StrBuilder exec_to_strbuilder(CodeExec exec) { GEN_ASSERT(exec); char* raw = ccast(char*, str_duplicate( exec->Content, GlobalAllocator ).Ptr); @@ -448,15 +448,15 @@ StrBuilder exec_to_string(CodeExec exec) return result; } -void extern_to_string(CodeExtern self, StrBuilder* result ) +void extern_to_strbuilder(CodeExtern self, StrBuilder* result ) { if ( self->Body ) - strbuilder_append_fmt( result, "extern \"%S\"\n{\n%SB\n}\n", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "extern \"%S\"\n{\n%SB\n}\n", self->Name, body_to_strbuilder(self->Body) ); else strbuilder_append_fmt( result, "extern \"%S\"\n{}\n", self->Name ); } -StrBuilder include_to_string(CodeInclude include) +StrBuilder include_to_strbuilder(CodeInclude include) { return strbuilder_fmt_buf( GlobalAllocator, "#include %S\n", include->Content ); } @@ -466,7 +466,7 @@ void include_to_strbuilder_ref( CodeInclude include, StrBuilder* result ) strbuilder_append_fmt( result, "#include %S\n", include->Content ); } -StrBuilder friend_to_string(CodeFriend self) +StrBuilder friend_to_strbuilder(CodeFriend self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); friend_to_strbuilder_ref( self, & result ); @@ -475,7 +475,7 @@ StrBuilder friend_to_string(CodeFriend self) void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result ) { - strbuilder_append_fmt( result, "friend %SB", code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "friend %SB", code_to_strbuilder(self->Declaration) ); if ( self->Declaration->Type != CT_Function && self->Declaration->Type != CT_Operator && (* result)[ strbuilder_length(* result) - 1 ] != ';' ) { @@ -488,7 +488,7 @@ void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result ) strbuilder_append_str( result, txt("\n")); } -StrBuilder fn_to_string(CodeFn self) +StrBuilder fn_to_strbuilder(CodeFn self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) @@ -509,7 +509,7 @@ void fn_to_strbuilder_def(CodeFn self, StrBuilder* result ) strbuilder_append_str( result, txt("export") ); if ( self->Attributes ) - strbuilder_append_fmt( result, " %SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, " %SB ", attributes_to_strbuilder(self->Attributes) ); bool prefix_specs = false; if ( self->Specs ) @@ -530,13 +530,13 @@ void fn_to_strbuilder_def(CodeFn self, StrBuilder* result ) strbuilder_append_str( result, txt("\n") ); if ( self->ReturnType ) - strbuilder_append_fmt( result, "%SB %S(", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S(", typename_to_strbuilder(self->ReturnType), self->Name ); else strbuilder_append_fmt( result, "%S(", self->Name ); if ( self->Params ) - strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_strbuilder(self->Params) ); else strbuilder_append_str( result, txt(")") ); @@ -553,7 +553,7 @@ void fn_to_strbuilder_def(CodeFn self, StrBuilder* result ) } } - strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_strbuilder(self->Body) ); } void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) @@ -562,7 +562,7 @@ void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); b32 prefix_specs = false; if ( self->Specs ) @@ -585,13 +585,13 @@ void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) } if ( self->ReturnType ) - strbuilder_append_fmt( result, "%SB %S(", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S(", typename_to_strbuilder(self->ReturnType), self->Name ); else strbuilder_append_fmt( result, "%S(", self->Name ); if ( self->Params ) - strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_strbuilder(self->Params) ); else strbuilder_append_str( result, txt(")") ); @@ -611,7 +611,7 @@ void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) if ( self->Specs && specifiers_has(self->Specs, Spec_Pure ) >= 0 ) strbuilder_append_str( result, txt(" = 0;") ); else if (self->Body) - strbuilder_append_fmt( result, " = %SB;", body_to_string(self->Body) ); + strbuilder_append_fmt( result, " = %SB;", body_to_strbuilder(self->Body) ); if ( self->InlineCmt ) strbuilder_append_fmt( result, "; %S", self->InlineCmt->Content ); @@ -619,7 +619,7 @@ void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result ) strbuilder_append_str( result, txt(";\n") ); } -StrBuilder module_to_string(CodeModule self) +StrBuilder module_to_strbuilder(CodeModule self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 64 ); module_to_strbuilder_ref( self, & result ); @@ -637,7 +637,7 @@ void module_to_strbuilder_ref(CodeModule self, StrBuilder* result ) strbuilder_append_fmt( result, "%S;\n", self->Name ); } -StrBuilder namespace_to_string(CodeNS self) +StrBuilder namespace_to_strbuilder(CodeNS self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); namespace_to_strbuilder_ref( self, & result ); @@ -649,10 +649,10 @@ void namespace_to_strbuilder_ref(CodeNS self, StrBuilder* result ) if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) strbuilder_append_str( result, txt("export ") ); - strbuilder_append_fmt( result, "namespace %S\n{\n%SB\n}\n", self->Name, body_to_string(self->Body) ); + strbuilder_append_fmt( result, "namespace %S\n{\n%SB\n}\n", self->Name, body_to_strbuilder(self->Body) ); } -StrBuilder code_op_to_string(CodeOperator self) +StrBuilder code_op_to_strbuilder(CodeOperator self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) @@ -675,10 +675,10 @@ void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->Specs ) { @@ -698,10 +698,10 @@ void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ) } if ( self->ReturnType ) - strbuilder_append_fmt( result, "%SB %S (", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S (", typename_to_strbuilder(self->ReturnType), self->Name ); if ( self->Params ) - strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_strbuilder(self->Params) ); else strbuilder_append_str( result, txt(")") ); @@ -719,7 +719,7 @@ void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ) } strbuilder_append_fmt( result, "\n{\n%SB\n}\n" - , body_to_string(self->Body) + , body_to_strbuilder(self->Body) ); } @@ -729,7 +729,7 @@ void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB\n", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB\n", attributes_to_strbuilder(self->Attributes) ); if ( self->Specs ) { @@ -748,10 +748,10 @@ void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ) strbuilder_append_str( result, txt("\n") ); } - strbuilder_append_fmt( result, "%SB %S (", typename_to_string(self->ReturnType), self->Name ); + strbuilder_append_fmt( result, "%SB %S (", typename_to_strbuilder(self->ReturnType), self->Name ); if ( self->Params ) - strbuilder_append_fmt( result, "%SB)", params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB)", params_to_strbuilder(self->Params) ); else strbuilder_append_fmt( result, ")" ); @@ -774,7 +774,7 @@ void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ) strbuilder_append_str( result, txt(";\n") ); } -StrBuilder opcast_to_string(CodeOpCast self) +StrBuilder opcast_to_strbuilder(CodeOpCast self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); switch ( self->Type ) @@ -803,9 +803,9 @@ void opcast_to_strbuilder_def(CodeOpCast self, StrBuilder* result ) } if ( self->Name.Ptr && self->Name.Len ) - strbuilder_append_fmt( result, "%S operator %SB()", self->Name, typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "%S operator %SB()", self->Name, typename_to_strbuilder(self->ValueType) ); else - strbuilder_append_fmt( result, "operator %SB()", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB()", typename_to_strbuilder(self->ValueType) ); for ( Specifier* spec = begin_CodeSpecifiers(self->Specs); spec != end_CodeSpecifiers(self->Specs); spec = next_CodeSpecifiers(self->Specs, spec) ) { @@ -816,14 +816,14 @@ void opcast_to_strbuilder_def(CodeOpCast self, StrBuilder* result ) } } - strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}\n", body_to_strbuilder(self->Body) ); return; } if ( self->Name.Ptr && self->Name.Len ) - strbuilder_append_fmt( result, "%S operator %SB()\n{\n%SB\n}\n", self->Name, typename_to_string(self->ValueType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "%S operator %SB()\n{\n%SB\n}\n", self->Name, typename_to_strbuilder(self->ValueType), body_to_strbuilder(self->Body) ); else - strbuilder_append_fmt( result, "operator %SB()\n{\n%SB\n}\n", typename_to_string(self->ValueType), body_to_string(self->Body) ); + strbuilder_append_fmt( result, "operator %SB()\n{\n%SB\n}\n", typename_to_strbuilder(self->ValueType), body_to_strbuilder(self->Body) ); } void opcast_to_strbuilder_fwd(CodeOpCast self, StrBuilder* result ) @@ -839,7 +839,7 @@ void opcast_to_strbuilder_fwd(CodeOpCast self, StrBuilder* result ) } } - strbuilder_append_fmt( result, "operator %SB()", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB()", typename_to_strbuilder(self->ValueType) ); for ( Specifier* spec = begin_CodeSpecifiers(self->Specs); spec != end_CodeSpecifiers(self->Specs); spec = next_CodeSpecifiers(self->Specs, spec) ) { @@ -858,12 +858,12 @@ void opcast_to_strbuilder_fwd(CodeOpCast self, StrBuilder* result ) } if ( self->InlineCmt ) - strbuilder_append_fmt( result, "operator %SB(); %SB", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB(); %SB", typename_to_strbuilder(self->ValueType) ); else - strbuilder_append_fmt( result, "operator %SB();\n", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, "operator %SB();\n", typename_to_strbuilder(self->ValueType) ); } -StrBuilder params_to_string(CodeParams self) +StrBuilder params_to_strbuilder(CodeParams self) { GEN_ASSERT(self); GEN_ASSERT(self); @@ -888,30 +888,30 @@ void params_to_strbuilder_ref( CodeParams self, StrBuilder* result ) if ( self->ValueType == nullptr ) strbuilder_append_fmt( result, " %S", self->Name ); else - strbuilder_append_fmt( result, " %SB %S", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, " %SB %S", typename_to_strbuilder(self->ValueType), self->Name ); } else if ( self->ValueType ) - strbuilder_append_fmt( result, " %SB", typename_to_string(self->ValueType) ); + strbuilder_append_fmt( result, " %SB", typename_to_strbuilder(self->ValueType) ); if ( self->PostNameMacro ) { - strbuilder_append_fmt( result, " %SB", code_to_string(self->PostNameMacro) ); + strbuilder_append_fmt( result, " %SB", code_to_strbuilder(self->PostNameMacro) ); } if ( self->Value ) - strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_strbuilder(self->Value) ); if ( self->NumEntries - 1 > 0 ) { for ( CodeParams param = begin_CodeParams(self->Next); param != end_CodeParams(self->Next); param = next_CodeParams(self->Next, param) ) { - strbuilder_append_fmt( result, ", %SB", params_to_string(param) ); + strbuilder_append_fmt( result, ", %SB", params_to_strbuilder(param) ); } } } -StrBuilder preprocess_to_string(CodePreprocessCond self) +StrBuilder preprocess_to_strbuilder(CodePreprocessCond self) { GEN_ASSERT(self); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); @@ -975,7 +975,7 @@ void preprocess_to_strbuilder_endif(CodePreprocessCond cond, StrBuilder* result strbuilder_append_str( result, txt("#endif\n") ); } -StrBuilder pragma_to_string(CodePragma self) +StrBuilder pragma_to_strbuilder(CodePragma self) { GEN_ASSERT(self); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); @@ -988,7 +988,7 @@ void pragma_to_strbuilder_ref(CodePragma self, StrBuilder* result ) strbuilder_append_fmt( result, "#pragma %S\n", self->Content ); } -StrBuilder specifiers_to_string(CodeSpecifiers self) +StrBuilder specifiers_to_strbuilder(CodeSpecifiers self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 64 ); specifiers_to_strbuilder_ref( self, & result ); @@ -1009,7 +1009,7 @@ void specifiers_to_strbuilder_ref( CodeSpecifiers self, StrBuilder* result ) } } -StrBuilder struct_to_string(CodeStruct self) +StrBuilder struct_to_strbuilder(CodeStruct self) { GEN_ASSERT(self); GEN_ASSERT(self); @@ -1037,14 +1037,14 @@ void struct_to_strbuilder_def( CodeStruct self, StrBuilder* result ) if ( self->Attributes ) { - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); } if ( self->ParentType ) { Str access_level = access_spec_to_str( self->ParentAccess ); - strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_string(self->ParentType) ); + strbuilder_append_fmt( result, "%S : %S %SB", self->Name, access_level, typename_to_strbuilder(self->ParentType) ); CodeTypename interface = cast(CodeTypename, self->ParentType->Next); if ( interface ) @@ -1052,7 +1052,7 @@ void struct_to_strbuilder_def( CodeStruct self, StrBuilder* result ) while ( interface ) { - strbuilder_append_fmt( result, ", %SB", typename_to_string(interface) ); + strbuilder_append_fmt( result, ", %SB", typename_to_strbuilder(interface) ); interface = interface->Next ? cast( CodeTypename, interface->Next) : NullCode; } } @@ -1066,7 +1066,7 @@ void struct_to_strbuilder_def( CodeStruct self, StrBuilder* result ) strbuilder_append_fmt( result, " // %S", self->InlineCmt->Content ); } - strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_string(self->Body) ); + strbuilder_append_fmt( result, "\n{\n%SB\n}", body_to_strbuilder(self->Body) ); if ( self->Parent == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) strbuilder_append_str( result, txt(";\n")); @@ -1080,7 +1080,7 @@ void struct_to_strbuilder_fwd( CodeStruct self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "struct %SB %S", attributes_to_string(self->Attributes), self->Name ); + strbuilder_append_fmt( result, "struct %SB %S", attributes_to_strbuilder(self->Attributes), self->Name ); else strbuilder_append_fmt( result, "struct %S", self->Name ); @@ -1093,7 +1093,7 @@ void struct_to_strbuilder_fwd( CodeStruct self, StrBuilder* result ) } } -StrBuilder template_to_string(CodeTemplate self) +StrBuilder template_to_strbuilder(CodeTemplate self) { GEN_ASSERT(self); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 1024 ); @@ -1109,12 +1109,12 @@ void template_to_strbuilder_ref(CodeTemplate self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Params ) - strbuilder_append_fmt( result, "template< %SB >\n%SB", params_to_string(self->Params), code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "template< %SB >\n%SB", params_to_strbuilder(self->Params), code_to_strbuilder(self->Declaration) ); else - strbuilder_append_fmt( result, "template<>\n%SB", code_to_string(self->Declaration) ); + strbuilder_append_fmt( result, "template<>\n%SB", code_to_strbuilder(self->Declaration) ); } -StrBuilder typedef_to_string(CodeTypedef self) +StrBuilder typedef_to_strbuilder(CodeTypedef self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); typedef_to_strbuilder_ref( self, & result ); @@ -1130,18 +1130,18 @@ void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ) // Determines if the typedef is a function typename if ( self->UnderlyingType->ReturnType ) - strbuilder_append_string( result, code_to_string(self->UnderlyingType) ); + strbuilder_append_string( result, code_to_strbuilder(self->UnderlyingType) ); else - strbuilder_append_fmt( result, "%SB %S", code_to_string(self->UnderlyingType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", code_to_strbuilder(self->UnderlyingType), self->Name ); if ( self->UnderlyingType->Type == CT_Typename && self->UnderlyingType->ArrExpr ) { - strbuilder_append_fmt( result, "[ %SB ];", code_to_string(self->UnderlyingType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ];", code_to_strbuilder(self->UnderlyingType->ArrExpr) ); Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; while ( next_arr_expr ) { - strbuilder_append_fmt( result, "[ %SB ];", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ];", code_to_strbuilder(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } @@ -1156,7 +1156,7 @@ void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ) strbuilder_append_str( result, txt("\n")); } -StrBuilder typename_to_string(CodeTypename self) +StrBuilder typename_to_strbuilder(CodeTypename self) { StrBuilder result = strbuilder_make_str( GlobalAllocator, txt("") ); typename_to_strbuilder_ref( self, & result ); @@ -1169,13 +1169,13 @@ void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) if ( self->ReturnType && self->Params ) { if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); else { if ( self->Specs ) - strbuilder_append_fmt( result, "%SB ( %S ) ( %SB ) %SB", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ( %S ) ( %SB ) %SB", typename_to_strbuilder(self->ReturnType), self->Name, params_to_strbuilder(self->Params), specifiers_to_strbuilder(self->Specs) ); else - strbuilder_append_fmt( result, "%SB ( %S ) ( %SB )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB ( %S ) ( %SB )", typename_to_strbuilder(self->ReturnType), self->Name, params_to_strbuilder(self->Params) ); } break; @@ -1184,13 +1184,13 @@ void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) if ( self->ReturnType && self->Params ) { if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); else { if ( self->Specs ) - strbuilder_append_fmt( result, "%SB %S ( %SB ) %SB", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params), specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB %S ( %SB ) %SB", typename_to_strbuilder(self->ReturnType), self->Name, params_to_strbuilder(self->Params), specifiers_to_strbuilder(self->Specs) ); else - strbuilder_append_fmt( result, "%SB %S ( %SB )", typename_to_string(self->ReturnType), self->Name, params_to_string(self->Params) ); + strbuilder_append_fmt( result, "%SB %S ( %SB )", typename_to_strbuilder(self->ReturnType), self->Name, params_to_strbuilder(self->Params) ); } return; @@ -1198,7 +1198,7 @@ void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) #endif if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); switch ( self->TypeTag ) { @@ -1211,7 +1211,7 @@ void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) } if ( self->Specs ) - strbuilder_append_fmt( result, "%S %SB", self->Name, specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%S %SB", self->Name, specifiers_to_strbuilder(self->Specs) ); else strbuilder_append_fmt( result, "%S", self->Name ); @@ -1219,7 +1219,7 @@ void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result ) strbuilder_append_str( result, txt("...")); } -StrBuilder union_to_string(CodeUnion self) +StrBuilder union_to_strbuilder(CodeUnion self) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 512 ); switch ( self->Type ) @@ -1242,20 +1242,20 @@ void union_to_strbuilder_def(CodeUnion self, StrBuilder* result ) strbuilder_append_str( result, txt("union ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->Name.Len ) { strbuilder_append_fmt( result, "%S\n{\n%SB\n}" , self->Name - , body_to_string(self->Body) + , body_to_strbuilder(self->Body) ); } else { // Anonymous union strbuilder_append_fmt( result, "\n{\n%SB\n}" - , body_to_string(self->Body) + , body_to_strbuilder(self->Body) ); } @@ -1273,7 +1273,7 @@ void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result ) strbuilder_append_str( result, txt("union ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->Name.Len ) { @@ -1284,7 +1284,7 @@ void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result ) strbuilder_append_str( result, txt(";\n")); } -StrBuilder using_to_string(CodeUsing self) +StrBuilder using_to_strbuilder(CodeUsing self) { GEN_ASSERT(self); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 128 ); @@ -1308,20 +1308,20 @@ void using_to_strbuilder_ref(CodeUsing self, StrBuilder* result ) strbuilder_append_str( result, txt("export ") ); if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", attributes_to_string(self->Attributes) ); + strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); if ( self->UnderlyingType ) { - strbuilder_append_fmt( result, "using %S = %SB", self->Name, typename_to_string(self->UnderlyingType) ); + strbuilder_append_fmt( result, "using %S = %SB", self->Name, typename_to_strbuilder(self->UnderlyingType) ); if ( self->UnderlyingType->ArrExpr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->UnderlyingType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(self->UnderlyingType->ArrExpr) ); Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; while ( next_arr_expr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } @@ -1349,7 +1349,7 @@ void using_to_strbuilder_ns(CodeUsing self, StrBuilder* result ) } inline -StrBuilder var_to_string(CodeVar self) +StrBuilder var_to_strbuilder(CodeVar self) { GEN_ASSERT(self); StrBuilder result = strbuilder_make_reserve( GlobalAllocator, 256 ); @@ -1367,18 +1367,18 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) // Its a comma-separated variable ( a NextVar ) if ( self->Specs ) - strbuilder_append_fmt( result, "%SB ", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ", specifiers_to_strbuilder(self->Specs) ); strbuilder_append_str( result, self->Name ); if ( self->ValueType->ArrExpr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } @@ -1386,14 +1386,14 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) if ( self->Value ) { if ( self->VarParenthesizedInit ) - strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_strbuilder(self->Value) ); else - strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_strbuilder(self->Value) ); } // Keep the chain going... if ( self->NextVar ) - strbuilder_append_fmt( result, ", %SB", var_to_string(self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_strbuilder(self->NextVar) ); if ( self->VarParenthesizedInit ) strbuilder_append_str( result, txt(" )")); @@ -1407,38 +1407,38 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) if ( self->Attributes || self->Specs ) { if ( self->Attributes ) - strbuilder_append_fmt( result, "%SB ", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB ", specifiers_to_strbuilder(self->Specs) ); if ( self->Specs ) - strbuilder_append_fmt( result, "%SB\n", specifiers_to_string(self->Specs) ); + strbuilder_append_fmt( result, "%SB\n", specifiers_to_strbuilder(self->Specs) ); - strbuilder_append_fmt( result, "%SB %S", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", typename_to_strbuilder(self->ValueType), self->Name ); if ( self->ValueType && self->ValueType->ArrExpr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } if ( self->BitfieldSize ) - strbuilder_append_fmt( result, " : %SB", code_to_string(self->BitfieldSize) ); + strbuilder_append_fmt( result, " : %SB", code_to_strbuilder(self->BitfieldSize) ); if ( self->Value ) { if ( self->VarParenthesizedInit ) - strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_strbuilder(self->Value) ); else - strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_strbuilder(self->Value) ); } if ( self->NextVar ) - strbuilder_append_fmt( result, ", %SB", var_to_string(self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_strbuilder(self->NextVar) ); if ( self->VarParenthesizedInit ) strbuilder_append_str( result, txt(" )")); @@ -1452,33 +1452,33 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) } if ( self->BitfieldSize ) - strbuilder_append_fmt( result, "%SB %S : %SB", typename_to_string(self->ValueType), self->Name, code_to_string(self->BitfieldSize) ); + strbuilder_append_fmt( result, "%SB %S : %SB", typename_to_strbuilder(self->ValueType), self->Name, code_to_strbuilder(self->BitfieldSize) ); else if ( self->ValueType->ArrExpr ) { - strbuilder_append_fmt( result, "%SB %S[ %SB ]", typename_to_string(self->ValueType), self->Name, code_to_string(self->ValueType->ArrExpr) ); + strbuilder_append_fmt( result, "%SB %S[ %SB ]", typename_to_strbuilder(self->ValueType), self->Name, code_to_strbuilder(self->ValueType->ArrExpr) ); Code next_arr_expr = self->ValueType->ArrExpr->Next; while ( next_arr_expr ) { - strbuilder_append_fmt( result, "[ %SB ]", code_to_string(next_arr_expr) ); + strbuilder_append_fmt( result, "[ %SB ]", code_to_strbuilder(next_arr_expr) ); next_arr_expr = next_arr_expr->Next; } } else - strbuilder_append_fmt( result, "%SB %S", typename_to_string(self->ValueType), self->Name ); + strbuilder_append_fmt( result, "%SB %S", typename_to_strbuilder(self->ValueType), self->Name ); if ( self->Value ) { if ( self->VarParenthesizedInit ) - strbuilder_append_fmt( result, "( %SB ", code_to_string(self->Value) ); + strbuilder_append_fmt( result, "( %SB ", code_to_strbuilder(self->Value) ); else - strbuilder_append_fmt( result, " = %SB", code_to_string(self->Value) ); + strbuilder_append_fmt( result, " = %SB", code_to_strbuilder(self->Value) ); } if ( self->NextVar ) - strbuilder_append_fmt( result, ", %SB", var_to_string( self->NextVar) ); + strbuilder_append_fmt( result, ", %SB", var_to_strbuilder( self->NextVar) ); if ( self->VarParenthesizedInit ) strbuilder_append_str( result, txt(" )")); diff --git a/base/components/code_types.hpp b/base/components/code_types.hpp index 023c92d..0611e0b 100644 --- a/base/components/code_types.hpp +++ b/base/components/code_types.hpp @@ -17,128 +17,128 @@ #pragma region Code Type C-Interface -void body_append ( CodeBody body, Code other ); -void body_append_body ( CodeBody body, CodeBody other ); -StrBuilder body_to_string ( CodeBody body ); -void body_to_strbuilder_ref ( CodeBody body, StrBuilder* result ); -void body_to_strbuilder_export( CodeBody body, StrBuilder* result ); +void body_append ( CodeBody body, Code other ); +void body_append_body ( CodeBody body, CodeBody other ); +StrBuilder body_to_strbuilder ( CodeBody body ); +void body_to_strbuilder_ref ( CodeBody body, StrBuilder* result ); +void body_to_strbuilder_export( CodeBody body, StrBuilder* result ); Code begin_CodeBody( CodeBody body); Code end_CodeBody ( CodeBody body ); Code next_CodeBody ( CodeBody body, Code entry_iter ); -void class_add_interface( CodeClass self, CodeTypename interface ); -StrBuilder class_to_string ( CodeClass self ); -void class_to_strbuilder_def( CodeClass self, StrBuilder* result ); -void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ); +void class_add_interface ( CodeClass self, CodeTypename interface ); +StrBuilder class_to_strbuilder ( CodeClass self ); +void class_to_strbuilder_def( CodeClass self, StrBuilder* result ); +void class_to_strbuilder_fwd( CodeClass self, StrBuilder* result ); -void params_append (CodeParams params, CodeParams param ); -CodeParams params_get (CodeParams params, s32 idx); -bool params_has_entries (CodeParams params ); -StrBuilder params_to_string (CodeParams params ); +void params_append (CodeParams params, CodeParams param ); +CodeParams params_get (CodeParams params, s32 idx); +bool params_has_entries (CodeParams params ); +StrBuilder params_to_strbuilder (CodeParams params ); void params_to_strbuilder_ref(CodeParams params, StrBuilder* result ); CodeParams begin_CodeParams(CodeParams params); CodeParams end_CodeParams (CodeParams params); CodeParams next_CodeParams (CodeParams params, CodeParams entry_iter); -bool specifiers_append (CodeSpecifiers specifiers, Specifier spec); -s32 specifiers_has (CodeSpecifiers specifiers, Specifier spec); -s32 specifiers_remove (CodeSpecifiers specifiers, Specifier to_remove ); -StrBuilder specifiers_to_string (CodeSpecifiers specifiers); -void specifiers_to_strbuilder_ref(CodeSpecifiers specifiers, StrBuilder* result); +bool specifiers_append (CodeSpecifiers specifiers, Specifier spec); +s32 specifiers_has (CodeSpecifiers specifiers, Specifier spec); +s32 specifiers_remove (CodeSpecifiers specifiers, Specifier to_remove ); +StrBuilder specifiers_to_strbuilder (CodeSpecifiers specifiers); +void specifiers_to_strbuilder_ref(CodeSpecifiers specifiers, StrBuilder* result); Specifier* begin_CodeSpecifiers(CodeSpecifiers specifiers); Specifier* end_CodeSpecifiers (CodeSpecifiers specifiers); Specifier* next_CodeSpecifiers (CodeSpecifiers specifiers, Specifier* spec_iter); -void struct_add_interface(CodeStruct self, CodeTypename interface); -StrBuilder struct_to_string (CodeStruct self); -void struct_to_strbuilder_fwd(CodeStruct self, StrBuilder* result); -void struct_to_strbuilder_def(CodeStruct self, StrBuilder* result); +void struct_add_interface (CodeStruct self, CodeTypename interface); +StrBuilder struct_to_strbuilder (CodeStruct self); +void struct_to_strbuilder_fwd(CodeStruct self, StrBuilder* result); +void struct_to_strbuilder_def(CodeStruct self, StrBuilder* result); -StrBuilder attributes_to_string (CodeAttributes attributes); -void attributes_to_strbuilder_ref(CodeAttributes attributes, StrBuilder* result); +StrBuilder attributes_to_strbuilder (CodeAttributes attributes); +void attributes_to_strbuilder_ref(CodeAttributes attributes, StrBuilder* result); -StrBuilder comment_to_string (CodeComment comment ); -void comment_to_strbuilder_ref(CodeComment comment, StrBuilder* result ); +StrBuilder comment_to_strbuilder (CodeComment comment ); +void comment_to_strbuilder_ref(CodeComment comment, StrBuilder* result ); -StrBuilder constructor_to_string (CodeConstructor constructor); -void constructor_to_strbuilder_def(CodeConstructor constructor, StrBuilder* result ); -void constructor_to_strbuilder_fwd(CodeConstructor constructor, StrBuilder* result ); +StrBuilder constructor_to_strbuilder (CodeConstructor constructor); +void constructor_to_strbuilder_def(CodeConstructor constructor, StrBuilder* result ); +void constructor_to_strbuilder_fwd(CodeConstructor constructor, StrBuilder* result ); -StrBuilder define_to_string (CodeDefine self); -void define_to_strbuilder_ref(CodeDefine self, StrBuilder* result); +StrBuilder define_to_strbuilder (CodeDefine self); +void define_to_strbuilder_ref(CodeDefine self, StrBuilder* result); -StrBuilder destructor_to_string (CodeDestructor destructor); -void destructor_to_strbuilder_def(CodeDestructor destructor, StrBuilder* result ); -void destructor_to_strbuilder_fwd(CodeDestructor destructor, StrBuilder* result ); +StrBuilder destructor_to_strbuilder (CodeDestructor destructor); +void destructor_to_strbuilder_fwd(CodeDestructor destructor, StrBuilder* result ); +void destructor_to_strbuilder_def(CodeDestructor destructor, StrBuilder* result ); -StrBuilder enum_to_string (CodeEnum self); -void enum_to_strbuilder_def (CodeEnum self, StrBuilder* result ); -void enum_to_strbuilder_fwd (CodeEnum self, StrBuilder* result ); -void enum_to_strbuilder_class_def(CodeEnum self, StrBuilder* result ); -void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ); +StrBuilder enum_to_strbuilder (CodeEnum self); +void enum_to_strbuilder_def (CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_fwd (CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_class_def(CodeEnum self, StrBuilder* result ); +void enum_to_strbuilder_class_fwd(CodeEnum self, StrBuilder* result ); -StrBuilder exec_to_string (CodeExec exec); -void exec_to_strbuilder_ref(CodeExec exec, StrBuilder* result); +StrBuilder exec_to_strbuilder (CodeExec exec); +void exec_to_strbuilder_ref(CodeExec exec, StrBuilder* result); -void extern_to_string(CodeExtern self, StrBuilder* result); +void extern_to_strbuilder(CodeExtern self, StrBuilder* result); -StrBuilder include_to_string (CodeInclude self); -void include_to_strbuilder_ref(CodeInclude self, StrBuilder* result); +StrBuilder include_to_strbuilder (CodeInclude self); +void include_to_strbuilder_ref(CodeInclude self, StrBuilder* result); -StrBuilder friend_to_string (CodeFriend self); -void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result); +StrBuilder friend_to_strbuilder (CodeFriend self); +void friend_to_strbuilder_ref(CodeFriend self, StrBuilder* result); -StrBuilder fn_to_string (CodeFn self); -void fn_to_strbuilder_def(CodeFn self, StrBuilder* result); -void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result); +StrBuilder fn_to_strbuilder (CodeFn self); +void fn_to_strbuilder_def(CodeFn self, StrBuilder* result); +void fn_to_strbuilder_fwd(CodeFn self, StrBuilder* result); -StrBuilder module_to_string (CodeModule self); -void module_to_strbuilder_ref(CodeModule self, StrBuilder* result); +StrBuilder module_to_strbuilder (CodeModule self); +void module_to_strbuilder_ref(CodeModule self, StrBuilder* result); -StrBuilder namespace_to_string (CodeNS self); -void namespace_to_strbuilder_ref(CodeNS self, StrBuilder* result); +StrBuilder namespace_to_strbuilder (CodeNS self); +void namespace_to_strbuilder_ref(CodeNS self, StrBuilder* result); -StrBuilder code_op_to_string (CodeOperator self); -void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ); -void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ); +StrBuilder code_op_to_strbuilder (CodeOperator self); +void code_op_to_strbuilder_fwd(CodeOperator self, StrBuilder* result ); +void code_op_to_strbuilder_def(CodeOperator self, StrBuilder* result ); -StrBuilder opcast_to_string (CodeOpCast op_cast ); -void opcast_to_strbuilder_def(CodeOpCast op_cast, StrBuilder* result ); -void opcast_to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder* result ); +StrBuilder opcast_to_strbuilder (CodeOpCast op_cast ); +void opcast_to_strbuilder_def(CodeOpCast op_cast, StrBuilder* result ); +void opcast_to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder* result ); -StrBuilder pragma_to_string (CodePragma self); -void pragma_to_strbuilder_ref(CodePragma self, StrBuilder* result); +StrBuilder pragma_to_strbuilder (CodePragma self); +void pragma_to_strbuilder_ref(CodePragma self, StrBuilder* result); -StrBuilder preprocess_to_string (CodePreprocessCond cond); -void preprocess_to_strbuilder_if (CodePreprocessCond cond, StrBuilder* result ); -void preprocess_to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder* result ); -void preprocess_to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder* result ); -void preprocess_to_strbuilder_elif (CodePreprocessCond cond, StrBuilder* result ); -void preprocess_to_strbuilder_else (CodePreprocessCond cond, StrBuilder* result ); -void preprocess_to_strbuilder_endif (CodePreprocessCond cond, StrBuilder* result ); +StrBuilder preprocess_to_strbuilder (CodePreprocessCond cond); +void preprocess_to_strbuilder_if (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_elif (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_else (CodePreprocessCond cond, StrBuilder* result ); +void preprocess_to_strbuilder_endif (CodePreprocessCond cond, StrBuilder* result ); -StrBuilder template_to_string (CodeTemplate self); -void template_to_strbuilder_ref(CodeTemplate self, StrBuilder* result); +StrBuilder template_to_strbuilder (CodeTemplate self); +void template_to_strbuilder_ref(CodeTemplate self, StrBuilder* result); -StrBuilder typename_to_string (CodeTypename self); -void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result); +StrBuilder typename_to_strbuilder (CodeTypename self); +void typename_to_strbuilder_ref(CodeTypename self, StrBuilder* result); -StrBuilder typedef_to_string (CodeTypedef self); -void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ); +StrBuilder typedef_to_strbuilder (CodeTypedef self); +void typedef_to_strbuilder_ref(CodeTypedef self, StrBuilder* result ); -StrBuilder union_to_string (CodeUnion self); -void union_to_strbuilder_def(CodeUnion self, StrBuilder* result); -void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result); +StrBuilder union_to_strbuilder (CodeUnion self); +void union_to_strbuilder_def(CodeUnion self, StrBuilder* result); +void union_to_strbuilder_fwd(CodeUnion self, StrBuilder* result); -StrBuilder using_to_string (CodeUsing op_cast ); -void using_to_strbuilder_ref(CodeUsing op_cast, StrBuilder* result ); -void using_to_strbuilder_ns (CodeUsing op_cast, StrBuilder* result ); +StrBuilder using_to_strbuilder (CodeUsing op_cast ); +void using_to_strbuilder_ref(CodeUsing op_cast, StrBuilder* result ); +void using_to_strbuilder_ns (CodeUsing op_cast, StrBuilder* result ); -StrBuilder var_to_string (CodeVar self); -void var_to_strbuilder_ref(CodeVar self, StrBuilder* result); +StrBuilder var_to_strbuilder (CodeVar self); +void var_to_strbuilder_ref(CodeVar self, StrBuilder* result); #pragma endregion Code Type C-Interface @@ -154,12 +154,12 @@ struct CodeBody { #if ! GEN_C_LIKE_CPP Using_Code( CodeBody ); - forceinline void append( Code other ) { return body_append( *this, other ); } - forceinline void append( CodeBody body ) { return body_append(*this, body); } - forceinline bool has_entries() { return code_has_entries(* this); } - forceinline StrBuilder to_string() { return body_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return body_to_strbuilder_ref(* this, & result ); } - forceinline void to_strbuilder_export( StrBuilder& result ) { return body_to_strbuilder_export(* this, & result); } + forceinline void append( Code other ) { return body_append( *this, other ); } + forceinline void append( CodeBody body ) { return body_append(*this, body); } + forceinline bool has_entries() { return code_has_entries(* this); } + forceinline StrBuilder to_strbuilder() { return body_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return body_to_strbuilder_ref(* this, & result ); } + forceinline void to_strbuilder_export( StrBuilder& result ) { return body_to_strbuilder_export(* this, & result); } #endif forceinline Code begin() { return begin_CodeBody(* this); } @@ -174,10 +174,10 @@ struct CodeClass { #if ! GEN_C_LIKE_CPP Using_Code( CodeClass ); - forceinline void add_interface( CodeType interface ); - forceinline StrBuilder to_string(); - forceinline void to_strbuilder_def( StrBuilder& result ); - forceinline void to_strbuilder_fwd( StrBuilder& result ); + forceinline void add_interface( CodeType interface ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder_def( StrBuilder& result ); + forceinline void to_strbuilder_fwd( StrBuilder& result ); #endif Using_CodeOps( CodeClass ); forceinline operator Code() { return * rcast( Code*, this ); } @@ -192,18 +192,18 @@ struct CodeParams { #if ! GEN_C_LIKE_CPP Using_Code( CodeParams ); - forceinline void append( CodeParams other ); - forceinline CodeParams get( s32 idx ); - forceinline bool has_entries(); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline void append( CodeParams other ); + forceinline CodeParams get( s32 idx ); + forceinline bool has_entries(); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); - forceinline CodeParams begin() { return begin_CodeParams(* this); } - forceinline CodeParams end() { return end_CodeParams(* this); } #endif Using_CodeOps( CodeParams ); - forceinline operator Code() { return { (AST*)ast }; } - forceinline CodeParams operator*() { return * this; } + forceinline CodeParams begin() { return begin_CodeParams(* this); } + forceinline CodeParams end() { return end_CodeParams(* this); } + forceinline operator Code() { return { (AST*)ast }; } + forceinline CodeParams operator *() { return * this; } // Required to support for-range iteration. forceinline AST_Params* operator->() { GEN_ASSERT(ast); return ast; @@ -216,14 +216,15 @@ struct CodeSpecifiers { #if ! GEN_C_LIKE_CPP Using_Code( CodeSpecifiers ); - bool append( Specifier spec ) { return specifiers_append(* this, spec); } - s32 has( Specifier spec ) { return specifiers_has(* this, spec); } - s32 remove( Specifier to_remove ) { return specifiers_remove(* this, to_remove); } - StrBuilder to_string() { return specifiers_to_string(* this ); } - void to_string( StrBuilder& result ) { return specifiers_to_strbuilder_ref(* this, & result); } + bool append( Specifier spec ) { return specifiers_append(* this, spec); } + s32 has( Specifier spec ) { return specifiers_has(* this, spec); } + s32 remove( Specifier to_remove ) { return specifiers_remove(* this, to_remove); } + StrBuilder to_strbuilder() { return specifiers_to_strbuilder(* this ); } + void to_strbuilder( StrBuilder& result ) { return specifiers_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeSpecifiers); forceinline operator Code() { return { (AST*) ast }; } + forceinline Code operator *() { return * this; } // Required to support for-range iteration. forceinline AST_Specifiers* operator->() { GEN_ASSERT(ast); return ast; @@ -235,8 +236,8 @@ struct CodeAttributes { #if ! GEN_C_LIKE_CPP Using_Code(CodeAttributes); - forceinline StrBuilder to_string() { return attributes_to_string(* this); } - forceinline void to_string(StrBuilder& result) { return attributes_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return attributes_to_strbuilder(* this); } + forceinline void to_strbuilder(StrBuilder& result) { return attributes_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeAttributes); operator Code(); @@ -250,8 +251,8 @@ struct CodeComment { #if ! GEN_C_LIKE_CPP Using_Code(CodeComment); - forceinline StrBuilder to_string() { return comment_to_string (* this); } - forceinline void to_string(StrBuilder& result) { return comment_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return comment_to_strbuilder (* this); } + forceinline void to_strbuilder(StrBuilder& result) { return comment_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeComment); operator Code(); @@ -263,9 +264,9 @@ struct CodeConstructor { #if ! GEN_C_LIKE_CPP Using_Code( CodeConstructor ); - forceinline StrBuilder to_string() { return constructor_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return constructor_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return constructor_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return constructor_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return constructor_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return constructor_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeConstructor); operator Code(); @@ -277,8 +278,8 @@ struct CodeDefine { #if ! GEN_C_LIKE_CPP Using_Code( CodeDefine ); - forceinline StrBuilder to_string() { return define_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return define_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return define_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return define_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeDefine); operator Code(); @@ -290,9 +291,9 @@ struct CodeDestructor { #if ! GEN_C_LIKE_CPP Using_Code( CodeDestructor ); - forceinline StrBuilder to_string() { return destructor_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return destructor_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return destructor_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return destructor_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return destructor_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return destructor_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeDestructor); operator Code(); @@ -304,11 +305,11 @@ struct CodeEnum { #if ! GEN_C_LIKE_CPP Using_Code( CodeEnum ); - forceinline StrBuilder to_string() { return enum_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return enum_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return enum_to_strbuilder_fwd(* this, & result); } - forceinline void to_strbuilder_class_def( StrBuilder& result ) { return enum_to_strbuilder_class_def(* this, & result); } - forceinline void to_strbuilder_class_fwd( StrBuilder& result ) { return enum_to_strbuilder_class_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return enum_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return enum_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return enum_to_strbuilder_fwd(* this, & result); } + forceinline void to_strbuilder_class_def( StrBuilder& result ) { return enum_to_strbuilder_class_def(* this, & result); } + forceinline void to_strbuilder_class_fwd( StrBuilder& result ) { return enum_to_strbuilder_class_fwd(* this, & result); } #endif Using_CodeOps(CodeEnum); operator Code(); @@ -320,8 +321,8 @@ struct CodeExec { #if ! GEN_C_LIKE_CPP Using_Code(CodeExec); - forceinline StrBuilder to_string() { return exec_to_string(* this); } - forceinline void to_string(StrBuilder& result) { return exec_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return exec_to_strbuilder(* this); } + forceinline void to_strbuilder(StrBuilder& result) { return exec_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeExec); operator Code(); @@ -334,7 +335,7 @@ struct CodeExpr { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr* operator->(); @@ -345,7 +346,7 @@ struct CodeExpr_Assign { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Assign ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Assign* operator->(); @@ -356,7 +357,7 @@ struct CodeExpr_Alignof { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Alignof ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Alignof* operator->(); @@ -367,7 +368,7 @@ struct CodeExpr_Binary { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Binary ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Binary* operator->(); @@ -378,7 +379,7 @@ struct CodeExpr_CStyleCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_CStyleCast ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_CStyleCast* operator->(); @@ -389,7 +390,7 @@ struct CodeExpr_FunctionalCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_FunctionalCast ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_FunctionalCast* operator->(); @@ -400,7 +401,7 @@ struct CodeExpr_CppCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_CppCast ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_CppCast* operator->(); @@ -411,7 +412,7 @@ struct CodeExpr_Element { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Element ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Element* operator->(); @@ -422,7 +423,7 @@ struct CodeExpr_ProcCall { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_ProcCall ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_ProcCall* operator->(); @@ -433,7 +434,7 @@ struct CodeExpr_Decltype { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Decltype ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Decltype* operator->(); @@ -444,7 +445,7 @@ struct CodeExpr_Comma { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Comma ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Comma* operator->(); @@ -455,7 +456,7 @@ struct CodeExpr_AMS { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_AMS ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_AMS* operator->(); @@ -466,7 +467,7 @@ struct CodeExpr_Sizeof { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Sizeof ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Sizeof* operator->(); @@ -477,7 +478,7 @@ struct CodeExpr_Subscript { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Subscript ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Subscript* operator->(); @@ -488,7 +489,7 @@ struct CodeExpr_Ternary { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_Ternary ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_Ternary* operator->(); @@ -499,7 +500,7 @@ struct CodeExpr_UnaryPrefix { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_UnaryPrefix ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Expr_UnaryPrefix* operator->(); @@ -510,7 +511,7 @@ struct CodeExpr_UnaryPostfix { #if ! GEN_C_LIKE_CPP Using_Code( CodeExpr_UnaryPostfix ); - forceinline void to_string( StrBuilder& result ); + forceinline void to_strbuilder( StrBuilder& result ); #endif AST* raw(); operator Code(); @@ -523,7 +524,7 @@ struct CodeExtern { #if ! GEN_C_LIKE_CPP Using_Code( CodeExtern ); - forceinline void to_string( StrBuilder& result ) { return extern_to_string(* this, & result); } + forceinline void to_strbuilder( StrBuilder& result ) { return extern_to_strbuilder(* this, & result); } #endif Using_CodeOps(CodeExtern); operator Code(); @@ -535,8 +536,8 @@ struct CodeInclude { #if ! GEN_C_LIKE_CPP Using_Code( CodeInclude ); - StrBuilder to_string() { return include_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return include_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return include_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return include_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeInclude); operator Code(); @@ -548,8 +549,8 @@ struct CodeFriend { #if ! GEN_C_LIKE_CPP Using_Code( CodeFriend ); - forceinline StrBuilder to_string() { return friend_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return friend_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return friend_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return friend_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeFriend); operator Code(); @@ -561,9 +562,9 @@ struct CodeFn { #if ! GEN_C_LIKE_CPP Using_Code( CodeFn ); - forceinline StrBuilder to_string() { return fn_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return fn_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return fn_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return fn_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return fn_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return fn_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeFn); operator Code(); @@ -575,8 +576,8 @@ struct CodeModule { #if ! GEN_C_LIKE_CPP Using_Code( CodeModule ); - forceinline StrBuilder to_string() { return module_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return module_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return module_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return module_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeModule); operator Code(); @@ -588,8 +589,8 @@ struct CodeNS { #if ! GEN_C_LIKE_CPP Using_Code( CodeNS ); - forceinline StrBuilder to_string() { return namespace_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return namespace_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return namespace_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return namespace_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeNS); operator Code(); @@ -601,9 +602,9 @@ struct CodeOperator { #if ! GEN_C_LIKE_CPP Using_Code( CodeOperator ); - forceinline StrBuilder to_string() { return code_op_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return code_op_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return code_op_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return code_op_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return code_op_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return code_op_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeOperator); operator Code(); @@ -615,9 +616,9 @@ struct CodeOpCast { #if ! GEN_C_LIKE_CPP Using_Code( CodeOpCast ); - forceinline StrBuilder to_string() { return opcast_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return opcast_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return opcast_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return opcast_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return opcast_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return opcast_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeOpCast); operator Code(); @@ -629,8 +630,8 @@ struct CodePragma { #if ! GEN_C_LIKE_CPP Using_Code( CodePragma ); - forceinline StrBuilder to_string() { return pragma_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return pragma_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return pragma_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return pragma_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodePragma ); operator Code(); @@ -642,13 +643,13 @@ struct CodePreprocessCond { #if ! GEN_C_LIKE_CPP Using_Code( CodePreprocessCond ); - forceinline StrBuilder to_string() { return preprocess_to_string(* this); } - forceinline void to_strbuilder_if( StrBuilder& result ) { return preprocess_to_strbuilder_if(* this, & result); } - forceinline void to_strbuilder_ifdef( StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(* this, & result); } - forceinline void to_strbuilder_ifndef( StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(* this, & result); } - forceinline void to_strbuilder_elif( StrBuilder& result ) { return preprocess_to_strbuilder_elif(* this, & result); } - forceinline void to_strbuilder_else( StrBuilder& result ) { return preprocess_to_strbuilder_else(* this, & result); } - forceinline void to_strbuilder_endif( StrBuilder& result ) { return preprocess_to_strbuilder_endif(* this, & result); } + forceinline StrBuilder to_strbuilder() { return preprocess_to_strbuilder(* this); } + forceinline void to_strbuilder_if( StrBuilder& result ) { return preprocess_to_strbuilder_if(* this, & result); } + forceinline void to_strbuilder_ifdef( StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(* this, & result); } + forceinline void to_strbuilder_ifndef( StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(* this, & result); } + forceinline void to_strbuilder_elif( StrBuilder& result ) { return preprocess_to_strbuilder_elif(* this, & result); } + forceinline void to_strbuilder_else( StrBuilder& result ) { return preprocess_to_strbuilder_else(* this, & result); } + forceinline void to_strbuilder_endif( StrBuilder& result ) { return preprocess_to_strbuilder_endif(* this, & result); } #endif Using_CodeOps( CodePreprocessCond ); operator Code(); @@ -661,8 +662,8 @@ struct CodeStmt { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt* operator->(); @@ -673,8 +674,8 @@ struct CodeStmt_Break { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Break ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Break* operator->(); @@ -685,8 +686,8 @@ struct CodeStmt_Case { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Case ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Case* operator->(); @@ -697,8 +698,8 @@ struct CodeStmt_Continue { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Continue ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Continue* operator->(); @@ -709,8 +710,8 @@ struct CodeStmt_Decl { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Decl ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Decl* operator->(); @@ -721,8 +722,8 @@ struct CodeStmt_Do { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Do ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Do* operator->(); @@ -733,8 +734,8 @@ struct CodeStmt_Expr { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Expr ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Expr* operator->(); @@ -745,8 +746,8 @@ struct CodeStmt_Else { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Else ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Else* operator->(); @@ -757,8 +758,8 @@ struct CodeStmt_If { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_If ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_If* operator->(); @@ -769,8 +770,8 @@ struct CodeStmt_For { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_For ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_For* operator->(); @@ -781,8 +782,8 @@ struct CodeStmt_Goto { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Goto ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Goto* operator->(); @@ -793,8 +794,8 @@ struct CodeStmt_Label { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Label ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Label* operator->(); @@ -805,8 +806,8 @@ struct CodeStmt_Switch { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_Switch ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_Switch* operator->(); @@ -817,8 +818,8 @@ struct CodeStmt_While { #if ! GEN_C_LIKE_CPP Using_Code( CodeStmt_While ); - forceinline StrBuilder to_string(); - forceinline void to_string( StrBuilder& result ); + forceinline StrBuilder to_strbuilder(); + forceinline void to_strbuilder( StrBuilder& result ); #endif operator Code(); AST_Stmt_While* operator->(); @@ -830,8 +831,8 @@ struct CodeTemplate { #if ! GEN_C_LIKE_CPP Using_Code( CodeTemplate ); - forceinline StrBuilder to_string() { return template_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return template_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return template_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return template_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTemplate ); operator Code(); @@ -843,8 +844,8 @@ struct CodeTypename { #if ! GEN_C_LIKE_CPP Using_Code( CodeTypename ); - forceinline StrBuilder to_string() { return typename_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return typename_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return typename_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return typename_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTypename ); operator Code(); @@ -856,8 +857,8 @@ struct CodeTypedef { #if ! GEN_C_LIKE_CPP Using_Code( CodeTypedef ); - forceinline StrBuilder to_string() { return typedef_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return typedef_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return typedef_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return typedef_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps( CodeTypedef ); operator Code(); @@ -869,9 +870,9 @@ struct CodeUnion { #if ! GEN_C_LIKE_CPP Using_Code( CodeUnion ); - forceinline StrBuilder to_string() { return union_to_string(* this); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return union_to_strbuilder_def(* this, & result); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return union_to_strbuilder_fwd(* this, & result); } + forceinline StrBuilder to_strbuilder() { return union_to_strbuilder(* this); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return union_to_strbuilder_def(* this, & result); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return union_to_strbuilder_fwd(* this, & result); } #endif Using_CodeOps(CodeUnion); operator Code(); @@ -883,9 +884,9 @@ struct CodeUsing { #if ! GEN_C_LIKE_CPP Using_Code( CodeUsing ); - forceinline StrBuilder to_string() { return using_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return using_to_strbuilder_ref(* this, & result); } - forceinline void to_strbuilder_ns( StrBuilder& result ) { return using_to_strbuilder_ns(* this, & result); } + forceinline StrBuilder to_strbuilder() { return using_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return using_to_strbuilder_ref(* this, & result); } + forceinline void to_strbuilder_ns( StrBuilder& result ) { return using_to_strbuilder_ns(* this, & result); } #endif Using_CodeOps(CodeUsing); operator Code(); @@ -897,8 +898,8 @@ struct CodeVar { #if ! GEN_C_LIKE_CPP Using_Code( CodeVar ); - forceinline StrBuilder to_string() { return var_to_string(* this); } - forceinline void to_string( StrBuilder& result ) { return var_to_strbuilder_ref(* this, & result); } + forceinline StrBuilder to_strbuilder() { return var_to_strbuilder(* this); } + forceinline void to_strbuilder( StrBuilder& result ) { return var_to_strbuilder_ref(* this, & result); } #endif Using_CodeOps(CodeVar); operator Code(); @@ -910,10 +911,10 @@ struct CodeStruct { #if ! GEN_C_LIKE_CPP Using_Code( CodeStruct ); - forceinline void add_interface( CodeTypename interface ) { return struct_add_interface(* this, interface); } - forceinline StrBuilder to_string() { return struct_to_string(* this); } - forceinline void to_strbuilder_fwd( StrBuilder& result ) { return struct_to_strbuilder_fwd(* this, & result); } - forceinline void to_strbuilder_def( StrBuilder& result ) { return struct_to_strbuilder_def(* this, & result); } + forceinline void add_interface( CodeTypename interface ) { return struct_add_interface(* this, interface); } + forceinline StrBuilder to_strbuilder() { return struct_to_strbuilder(* this); } + forceinline void to_strbuilder_fwd( StrBuilder& result ) { return struct_to_strbuilder_fwd(* this, & result); } + forceinline void to_strbuilder_def( StrBuilder& result ) { return struct_to_strbuilder_def(* this, & result); } #endif Using_CodeOps( CodeStruct ); forceinline operator Code() { return * rcast( Code*, this ); } @@ -951,7 +952,7 @@ struct InvalidCode_ImplictCaster operator CodeNS () const { return cast(CodeNS, Code_Invalid); } operator CodeOperator () const { return cast(CodeOperator, Code_Invalid); } operator CodeOpCast () const { return cast(CodeOpCast, Code_Invalid); } - operator CodeParams () const { return cast(CodeParams, Code_Invalid); } + operator CodeParams () const { return cast(CodeParams, Code_Invalid); } operator CodePragma () const { return cast(CodePragma, Code_Invalid); } operator CodePreprocessCond() const { return cast(CodePreprocessCond, Code_Invalid); } operator CodeSpecifiers () const { return cast(CodeSpecifiers, Code_Invalid); } @@ -997,131 +998,131 @@ struct NullCode_ImplicitCaster operator CodeVar () const { return {nullptr}; } }; -#if ! GEN_C_LIKE_CPP -GEN_OPTIMIZE_MAPPINGS_BEGIN - -forceinline void append ( CodeBody body, Code other ) { return body_append(body, other); } -forceinline void append ( CodeBody body, CodeBody other ) { return body_append_body(body, other); } -forceinline StrBuilder to_string ( CodeBody body ) { return body_to_string(body); } -forceinline void to_string ( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_ref(body, & result); } -forceinline void to_strbuilder_export( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_export(body, & result); } - forceinline Code begin( CodeBody body) { return begin_CodeBody(body); } forceinline Code end ( CodeBody body ) { return end_CodeBody(body); } forceinline Code next ( CodeBody body, Code entry_iter ) { return next_CodeBody(body, entry_iter); } -forceinline void add_interface( CodeClass self, CodeTypename interface ) { return class_add_interface(self, interface); } -forceinline StrBuilder to_string ( CodeClass self ) { return class_to_string(self); } -forceinline void to_strbuilder_def( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_def(self, & result); } -forceinline void to_strbuilder_fwd( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_fwd(self, & result); } - -forceinline void append (CodeParams params, CodeParams param ) { return params_append(params, param); } -forceinline CodeParams get (CodeParams params, s32 idx) { return params_get(params, idx); } -forceinline bool has_entries(CodeParams params ) { return params_has_entries(params); } -forceinline StrBuilder to_string (CodeParams params ) { return params_to_string(params); } -forceinline void to_string (CodeParams params, StrBuilder& result ) { return params_to_strbuilder_ref(params, & result); } - forceinline CodeParams begin(CodeParams params) { return begin_CodeParams(params); } forceinline CodeParams end (CodeParams params) { return end_CodeParams(params); } forceinline CodeParams next (CodeParams params, CodeParams entry_iter) { return next_CodeParams(params, entry_iter); } -forceinline bool append (CodeSpecifiers specifiers, Specifier spec) { return specifiers_append(specifiers, spec); } -forceinline s32 has (CodeSpecifiers specifiers, Specifier spec) { return specifiers_has(specifiers, spec); } -forceinline s32 remove (CodeSpecifiers specifiers, Specifier to_remove ) { return specifiers_remove(specifiers, to_remove); } -forceinline StrBuilder to_string(CodeSpecifiers specifiers) { return specifiers_to_string(specifiers); } -forceinline void to_string(CodeSpecifiers specifiers, StrBuilder& result) { return specifiers_to_strbuilder_ref(specifiers, & result); } - forceinline Specifier* begin(CodeSpecifiers specifiers) { return begin_CodeSpecifiers(specifiers); } forceinline Specifier* end (CodeSpecifiers specifiers) { return end_CodeSpecifiers(specifiers); } forceinline Specifier* next (CodeSpecifiers specifiers, Specifier& spec_iter) { return next_CodeSpecifiers(specifiers, & spec_iter); } -forceinline void add_interface(CodeStruct self, CodeTypename interface) { return struct_add_interface(self, interface); } -forceinline StrBuilder to_string (CodeStruct self) { return struct_to_string(self); } -forceinline void to_strbuilder_fwd(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_fwd(self, & result); } -forceinline void to_strbuilder_def(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_def(self, & result); } +#if ! GEN_C_LIKE_CPP +GEN_OPTIMIZE_MAPPINGS_BEGIN -forceinline StrBuilder to_string(CodeAttributes attributes) { return attributes_to_string(attributes); } -forceinline void to_string(CodeAttributes attributes, StrBuilder& result) { return attributes_to_strbuilder_ref(attributes, & result); } +forceinline void append ( CodeBody body, Code other ) { return body_append(body, other); } +forceinline void append ( CodeBody body, CodeBody other ) { return body_append_body(body, other); } +forceinline StrBuilder to_strbuilder ( CodeBody body ) { return body_to_strbuilder(body); } +forceinline void to_strbuilder ( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_ref(body, & result); } +forceinline void to_strbuilder_export( CodeBody body, StrBuilder& result ) { return body_to_strbuilder_export(body, & result); } -forceinline StrBuilder to_string(CodeComment comment ) { return comment_to_string(comment); } -forceinline void to_string(CodeComment comment, StrBuilder& result ) { return comment_to_strbuilder_ref(comment, & result); } +forceinline void add_interface ( CodeClass self, CodeTypename interface ) { return class_add_interface(self, interface); } +forceinline StrBuilder to_strbuilder ( CodeClass self ) { return class_to_strbuilder(self); } +forceinline void to_strbuilder_def( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd( CodeClass self, StrBuilder& result ) { return class_to_strbuilder_fwd(self, & result); } -forceinline StrBuilder to_string (CodeConstructor constructor) { return constructor_to_string(constructor); } -forceinline void to_strbuilder_def(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_def(constructor, & result); } -forceinline void to_strbuilder_fwd(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_fwd(constructor, & result); } +forceinline void append (CodeParams params, CodeParams param ) { return params_append(params, param); } +forceinline CodeParams get (CodeParams params, s32 idx) { return params_get(params, idx); } +forceinline bool has_entries (CodeParams params ) { return params_has_entries(params); } +forceinline StrBuilder to_strbuilder(CodeParams params ) { return params_to_strbuilder(params); } +forceinline void to_strbuilder(CodeParams params, StrBuilder& result ) { return params_to_strbuilder_ref(params, & result); } + +forceinline bool append (CodeSpecifiers specifiers, Specifier spec) { return specifiers_append(specifiers, spec); } +forceinline s32 has (CodeSpecifiers specifiers, Specifier spec) { return specifiers_has(specifiers, spec); } +forceinline s32 remove (CodeSpecifiers specifiers, Specifier to_remove ) { return specifiers_remove(specifiers, to_remove); } +forceinline StrBuilder to_strbuilder(CodeSpecifiers specifiers) { return specifiers_to_strbuilder(specifiers); } +forceinline void to_strbuilder(CodeSpecifiers specifiers, StrBuilder& result) { return specifiers_to_strbuilder_ref(specifiers, & result); } -forceinline StrBuilder to_string(CodeDefine self) { return define_to_string(self); } -forceinline void to_string(CodeDefine self, StrBuilder& result) { return define_to_strbuilder_ref(self, & result); } +forceinline void add_interface (CodeStruct self, CodeTypename interface) { return struct_add_interface(self, interface); } +forceinline StrBuilder to_strbuilder (CodeStruct self) { return struct_to_strbuilder(self); } +forceinline void to_strbuilder_fwd(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_def(CodeStruct self, StrBuilder& result) { return struct_to_strbuilder_def(self, & result); } -forceinline StrBuilder to_string (CodeDestructor destructor) { return destructor_to_string(destructor); } -forceinline void to_strbuilder_def(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_def(destructor, & result); } -forceinline void to_strbuilder_fwd(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_fwd(destructor, & result); } +forceinline StrBuilder to_strbuilder(CodeAttributes attributes) { return attributes_to_strbuilder(attributes); } +forceinline void to_strbuilder(CodeAttributes attributes, StrBuilder& result) { return attributes_to_strbuilder_ref(attributes, & result); } -forceinline StrBuilder to_string (CodeEnum self) { return enum_to_string(self); } -forceinline void to_strbuilder_def (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_def(self, & result); } -forceinline void to_strbuilder_fwd (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_fwd(self, & result); } -forceinline void to_strbuilder_class_def(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_def(self, & result); } -forceinline void to_strbuilder_class_fwd(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_fwd(self, & result); } +forceinline StrBuilder to_strbuilder(CodeComment comment ) { return comment_to_strbuilder(comment); } +forceinline void to_strbuilder(CodeComment comment, StrBuilder& result ) { return comment_to_strbuilder_ref(comment, & result); } -forceinline StrBuilder to_string(CodeExec exec) { return exec_to_string(exec); } -forceinline void to_string(CodeExec exec, StrBuilder& result) { return exec_to_strbuilder_ref(exec, & result); } +forceinline StrBuilder to_strbuilder (CodeConstructor constructor) { return constructor_to_strbuilder(constructor); } +forceinline void to_strbuilder_def(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_def(constructor, & result); } +forceinline void to_strbuilder_fwd(CodeConstructor constructor, StrBuilder& result ) { return constructor_to_strbuilder_fwd(constructor, & result); } -forceinline void to_string(CodeExtern self, StrBuilder& result) { return extern_to_string(self, & result); } +forceinline StrBuilder to_strbuilder(CodeDefine self) { return define_to_strbuilder(self); } +forceinline void to_strbuilder(CodeDefine self, StrBuilder& result) { return define_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string(CodeInclude self) { return include_to_string(self); } -forceinline void to_string(CodeInclude self, StrBuilder& result) { return include_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder (CodeDestructor destructor) { return destructor_to_strbuilder(destructor); } +forceinline void to_strbuilder_def(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_def(destructor, & result); } +forceinline void to_strbuilder_fwd(CodeDestructor destructor, StrBuilder& result ) { return destructor_to_strbuilder_fwd(destructor, & result); } -forceinline StrBuilder to_string(CodeFriend self) { return friend_to_string(self); } -forceinline void to_string(CodeFriend self, StrBuilder& result) { return friend_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder (CodeEnum self) { return enum_to_strbuilder(self); } +forceinline void to_strbuilder_def (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd (CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_class_def(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_def(self, & result); } +forceinline void to_strbuilder_class_fwd(CodeEnum self, StrBuilder& result ) { return enum_to_strbuilder_class_fwd(self, & result); } -forceinline StrBuilder to_string (CodeFn self) { return fn_to_string(self); } -forceinline void to_strbuilder_def(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_def(self, & result); } -forceinline void to_strbuilder_fwd(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_fwd(self, & result); } +forceinline StrBuilder to_strbuilder(CodeExec exec) { return exec_to_strbuilder(exec); } +forceinline void to_strbuilder(CodeExec exec, StrBuilder& result) { return exec_to_strbuilder_ref(exec, & result); } -forceinline StrBuilder to_string(CodeModule self) { return module_to_string(self); } -forceinline void to_string(CodeModule self, StrBuilder& result) { return module_to_strbuilder_ref(self, & result); } +forceinline void to_strbuilder(CodeExtern self, StrBuilder& result) { return extern_to_strbuilder(self, & result); } -forceinline StrBuilder to_string(CodeNS self) { return namespace_to_string(self); } -forceinline void to_string(CodeNS self, StrBuilder& result) { return namespace_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder(CodeInclude self) { return include_to_strbuilder(self); } +forceinline void to_strbuilder(CodeInclude self, StrBuilder& result) { return include_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string (CodeOperator self) { return code_op_to_string(self); } -forceinline void to_strbuilder_fwd(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_fwd(self, & result); } -forceinline void to_strbuilder_def(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_def(self, & result); } +forceinline StrBuilder to_strbuilder(CodeFriend self) { return friend_to_strbuilder(self); } +forceinline void to_strbuilder(CodeFriend self, StrBuilder& result) { return friend_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string (CodeOpCast op_cast ) { return opcast_to_string(op_cast); } -forceinline void to_strbuilder_def(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_def(op_cast, & result); } -forceinline void to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_fwd(op_cast, & result); } +forceinline StrBuilder to_strbuilder (CodeFn self) { return fn_to_strbuilder(self); } +forceinline void to_strbuilder_def(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd(CodeFn self, StrBuilder& result) { return fn_to_strbuilder_fwd(self, & result); } -forceinline StrBuilder to_string(CodePragma self) { return pragma_to_string(self); } -forceinline void to_string(CodePragma self, StrBuilder& result) { return pragma_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder(CodeModule self) { return module_to_strbuilder(self); } +forceinline void to_strbuilder(CodeModule self, StrBuilder& result) { return module_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string (CodePreprocessCond cond) { return preprocess_to_string(cond); } -forceinline void to_strbuilder_if (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_if(cond, & result); } -forceinline void to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(cond, & result); } -forceinline void to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(cond, & result); } -forceinline void to_strbuilder_elif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_elif(cond, & result); } -forceinline void to_strbuilder_else (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_else(cond, & result); } -forceinline void to_strbuilder_endif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_endif(cond, & result); } +forceinline StrBuilder to_strbuilder(CodeNS self) { return namespace_to_strbuilder(self); } +forceinline void to_strbuilder(CodeNS self, StrBuilder& result) { return namespace_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string(CodeTemplate self) { return template_to_string(self); } -forceinline void to_string(CodeTemplate self, StrBuilder& result) { return template_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder (CodeOperator self) { return code_op_to_strbuilder(self); } +forceinline void to_strbuilder_fwd(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_fwd(self, & result); } +forceinline void to_strbuilder_def(CodeOperator self, StrBuilder& result ) { return code_op_to_strbuilder_def(self, & result); } -forceinline StrBuilder to_string(CodeTypename self) { return typename_to_string(self); } -forceinline void to_string(CodeTypename self, StrBuilder& result) { return typename_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder (CodeOpCast op_cast ) { return opcast_to_strbuilder(op_cast); } +forceinline void to_strbuilder_def(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_def(op_cast, & result); } +forceinline void to_strbuilder_fwd(CodeOpCast op_cast, StrBuilder& result ) { return opcast_to_strbuilder_fwd(op_cast, & result); } -forceinline StrBuilder to_string(CodeTypedef self) { return typedef_to_string(self); } -forceinline void to_string(CodeTypedef self, StrBuilder& result ) { return typedef_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder(CodePragma self) { return pragma_to_strbuilder(self); } +forceinline void to_strbuilder(CodePragma self, StrBuilder& result) { return pragma_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string (CodeUnion self) { return union_to_string(self); } -forceinline void to_strbuilder_def(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_def(self, & result); } -forceinline void to_strbuilder_fwd(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_fwd(self, & result); } +forceinline StrBuilder to_strbuilder (CodePreprocessCond cond) { return preprocess_to_strbuilder(cond); } +forceinline void to_strbuilder_if (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_if(cond, & result); } +forceinline void to_strbuilder_ifdef (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifdef(cond, & result); } +forceinline void to_strbuilder_ifndef(CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_ifndef(cond, & result); } +forceinline void to_strbuilder_elif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_elif(cond, & result); } +forceinline void to_strbuilder_else (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_else(cond, & result); } +forceinline void to_strbuilder_endif (CodePreprocessCond cond, StrBuilder& result ) { return preprocess_to_strbuilder_endif(cond, & result); } -forceinline StrBuilder to_string (CodeUsing op_cast ) { return using_to_string(op_cast); } -forceinline void to_string (CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ref(op_cast, & result); } -forceinline void to_strbuilder_ns(CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ns(op_cast, & result); } +forceinline StrBuilder to_strbuilder(CodeTemplate self) { return template_to_strbuilder(self); } +forceinline void to_strbuilder(CodeTemplate self, StrBuilder& result) { return template_to_strbuilder_ref(self, & result); } -forceinline StrBuilder to_string(CodeVar self) { return var_to_string(self); } -forceinline void to_string(CodeVar self, StrBuilder& result) { return var_to_strbuilder_ref(self, & result); } +forceinline StrBuilder to_strbuilder(CodeTypename self) { return typename_to_strbuilder(self); } +forceinline void to_strbuilder(CodeTypename self, StrBuilder& result) { return typename_to_strbuilder_ref(self, & result); } + +forceinline StrBuilder to_strbuilder(CodeTypedef self) { return typedef_to_strbuilder(self); } +forceinline void to_strbuilder(CodeTypedef self, StrBuilder& result ) { return typedef_to_strbuilder_ref(self, & result); } + +forceinline StrBuilder to_strbuilder (CodeUnion self) { return union_to_strbuilder(self); } +forceinline void to_strbuilder_def(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_def(self, & result); } +forceinline void to_strbuilder_fwd(CodeUnion self, StrBuilder& result) { return union_to_strbuilder_fwd(self, & result); } + +forceinline StrBuilder to_strbuilder (CodeUsing op_cast ) { return using_to_strbuilder(op_cast); } +forceinline void to_strbuilder (CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ref(op_cast, & result); } +forceinline void to_strbuilder_ns(CodeUsing op_cast, StrBuilder& result ) { return using_to_strbuilder_ns(op_cast, & result); } + +forceinline StrBuilder to_strbuilder(CodeVar self) { return var_to_strbuilder(self); } +forceinline void to_strbuilder(CodeVar self, StrBuilder& result) { return var_to_strbuilder_ref(self, & result); } GEN_OPITMIZE_MAPPINGS_END #endif //if GEN_C_LIKE_CPP diff --git a/base/components/gen/ecodetypes.hpp b/base/components/gen/ecodetypes.hpp index b378470..aaf6d0d 100644 --- a/base/components/gen/ecodetypes.hpp +++ b/base/components/gen/ecodetypes.hpp @@ -75,67 +75,67 @@ enum CodeType : u32 inline Str codetype_to_str( CodeType type ) { local_persist Str lookup[61] = { - { "Invalid", sizeof( "Invalid" ) }, - { "Untyped", sizeof( "Untyped" ) }, - { "NewLine", sizeof( "NewLine" ) }, - { "Comment", sizeof( "Comment" ) }, - { "Access_Private", sizeof( "Access_Private" ) }, - { "Access_Protected", sizeof( "Access_Protected" ) }, - { "Access_Public", sizeof( "Access_Public" ) }, - { "PlatformAttributes", sizeof( "PlatformAttributes" ) }, - { "Class", sizeof( "Class" ) }, - { "Class_Fwd", sizeof( "Class_Fwd" ) }, - { "Class_Body", sizeof( "Class_Body" ) }, - { "Constructor", sizeof( "Constructor" ) }, - { "Constructor_Fwd", sizeof( "Constructor_Fwd" ) }, - { "Destructor", sizeof( "Destructor" ) }, - { "Destructor_Fwd", sizeof( "Destructor_Fwd" ) }, - { "Enum", sizeof( "Enum" ) }, - { "Enum_Fwd", sizeof( "Enum_Fwd" ) }, - { "Enum_Body", sizeof( "Enum_Body" ) }, - { "Enum_Class", sizeof( "Enum_Class" ) }, - { "Enum_Class_Fwd", sizeof( "Enum_Class_Fwd" ) }, - { "Execution", sizeof( "Execution" ) }, - { "Export_Body", sizeof( "Export_Body" ) }, - { "Extern_Linkage", sizeof( "Extern_Linkage" ) }, - { "Extern_Linkage_Body", sizeof( "Extern_Linkage_Body" ) }, - { "Friend", sizeof( "Friend" ) }, - { "Function", sizeof( "Function" ) }, - { "Function_Fwd", sizeof( "Function_Fwd" ) }, - { "Function_Body", sizeof( "Function_Body" ) }, - { "Global_Body", sizeof( "Global_Body" ) }, - { "Module", sizeof( "Module" ) }, - { "Namespace", sizeof( "Namespace" ) }, - { "Namespace_Body", sizeof( "Namespace_Body" ) }, - { "Operator", sizeof( "Operator" ) }, - { "Operator_Fwd", sizeof( "Operator_Fwd" ) }, - { "Operator_Member", sizeof( "Operator_Member" ) }, - { "Operator_Member_Fwd", sizeof( "Operator_Member_Fwd" ) }, - { "Operator_Cast", sizeof( "Operator_Cast" ) }, - { "Operator_Cast_Fwd", sizeof( "Operator_Cast_Fwd" ) }, - { "Parameters", sizeof( "Parameters" ) }, - { "Preprocess_Define", sizeof( "Preprocess_Define" ) }, - { "Preprocess_Include", sizeof( "Preprocess_Include" ) }, - { "Preprocess_If", sizeof( "Preprocess_If" ) }, - { "Preprocess_IfDef", sizeof( "Preprocess_IfDef" ) }, - { "Preprocess_IfNotDef", sizeof( "Preprocess_IfNotDef" ) }, - { "Preprocess_ElIf", sizeof( "Preprocess_ElIf" ) }, - { "Preprocess_Else", sizeof( "Preprocess_Else" ) }, - { "Preprocess_EndIf", sizeof( "Preprocess_EndIf" ) }, - { "Preprocess_Pragma", sizeof( "Preprocess_Pragma" ) }, - { "Specifiers", sizeof( "Specifiers" ) }, - { "Struct", sizeof( "Struct" ) }, - { "Struct_Fwd", sizeof( "Struct_Fwd" ) }, - { "Struct_Body", sizeof( "Struct_Body" ) }, - { "Template", sizeof( "Template" ) }, - { "Typedef", sizeof( "Typedef" ) }, - { "Typename", sizeof( "Typename" ) }, - { "Union", sizeof( "Union" ) }, - { "Union_Fwd", sizeof( "Union_Fwd" ) }, - { "Union_Body", sizeof( "Union_Body" ) }, - { "Using", sizeof( "Using" ) }, - { "Using_Namespace", sizeof( "Using_Namespace" ) }, - { "Variable", sizeof( "Variable" ) }, + { "Invalid", sizeof( "Invalid" ) - 1 }, + { "Untyped", sizeof( "Untyped" ) - 1 }, + { "NewLine", sizeof( "NewLine" ) - 1 }, + { "Comment", sizeof( "Comment" ) - 1 }, + { "Access_Private", sizeof( "Access_Private" ) - 1 }, + { "Access_Protected", sizeof( "Access_Protected" ) - 1 }, + { "Access_Public", sizeof( "Access_Public" ) - 1 }, + { "PlatformAttributes", sizeof( "PlatformAttributes" ) - 1 }, + { "Class", sizeof( "Class" ) - 1 }, + { "Class_Fwd", sizeof( "Class_Fwd" ) - 1 }, + { "Class_Body", sizeof( "Class_Body" ) - 1 }, + { "Constructor", sizeof( "Constructor" ) - 1 }, + { "Constructor_Fwd", sizeof( "Constructor_Fwd" ) - 1 }, + { "Destructor", sizeof( "Destructor" ) - 1 }, + { "Destructor_Fwd", sizeof( "Destructor_Fwd" ) - 1 }, + { "Enum", sizeof( "Enum" ) - 1 }, + { "Enum_Fwd", sizeof( "Enum_Fwd" ) - 1 }, + { "Enum_Body", sizeof( "Enum_Body" ) - 1 }, + { "Enum_Class", sizeof( "Enum_Class" ) - 1 }, + { "Enum_Class_Fwd", sizeof( "Enum_Class_Fwd" ) - 1 }, + { "Execution", sizeof( "Execution" ) - 1 }, + { "Export_Body", sizeof( "Export_Body" ) - 1 }, + { "Extern_Linkage", sizeof( "Extern_Linkage" ) - 1 }, + { "Extern_Linkage_Body", sizeof( "Extern_Linkage_Body" ) - 1 }, + { "Friend", sizeof( "Friend" ) - 1 }, + { "Function", sizeof( "Function" ) - 1 }, + { "Function_Fwd", sizeof( "Function_Fwd" ) - 1 }, + { "Function_Body", sizeof( "Function_Body" ) - 1 }, + { "Global_Body", sizeof( "Global_Body" ) - 1 }, + { "Module", sizeof( "Module" ) - 1 }, + { "Namespace", sizeof( "Namespace" ) - 1 }, + { "Namespace_Body", sizeof( "Namespace_Body" ) - 1 }, + { "Operator", sizeof( "Operator" ) - 1 }, + { "Operator_Fwd", sizeof( "Operator_Fwd" ) - 1 }, + { "Operator_Member", sizeof( "Operator_Member" ) - 1 }, + { "Operator_Member_Fwd", sizeof( "Operator_Member_Fwd" ) - 1 }, + { "Operator_Cast", sizeof( "Operator_Cast" ) - 1 }, + { "Operator_Cast_Fwd", sizeof( "Operator_Cast_Fwd" ) - 1 }, + { "Parameters", sizeof( "Parameters" ) - 1 }, + { "Preprocess_Define", sizeof( "Preprocess_Define" ) - 1 }, + { "Preprocess_Include", sizeof( "Preprocess_Include" ) - 1 }, + { "Preprocess_If", sizeof( "Preprocess_If" ) - 1 }, + { "Preprocess_IfDef", sizeof( "Preprocess_IfDef" ) - 1 }, + { "Preprocess_IfNotDef", sizeof( "Preprocess_IfNotDef" ) - 1 }, + { "Preprocess_ElIf", sizeof( "Preprocess_ElIf" ) - 1 }, + { "Preprocess_Else", sizeof( "Preprocess_Else" ) - 1 }, + { "Preprocess_EndIf", sizeof( "Preprocess_EndIf" ) - 1 }, + { "Preprocess_Pragma", sizeof( "Preprocess_Pragma" ) - 1 }, + { "Specifiers", sizeof( "Specifiers" ) - 1 }, + { "Struct", sizeof( "Struct" ) - 1 }, + { "Struct_Fwd", sizeof( "Struct_Fwd" ) - 1 }, + { "Struct_Body", sizeof( "Struct_Body" ) - 1 }, + { "Template", sizeof( "Template" ) - 1 }, + { "Typedef", sizeof( "Typedef" ) - 1 }, + { "Typename", sizeof( "Typename" ) - 1 }, + { "Union", sizeof( "Union" ) - 1 }, + { "Union_Fwd", sizeof( "Union_Fwd" ) - 1 }, + { "Union_Body", sizeof( "Union_Body" ) - 1 }, + { "Using", sizeof( "Using" ) - 1 }, + { "Using_Namespace", sizeof( "Using_Namespace" ) - 1 }, + { "Variable", sizeof( "Variable" ) - 1 }, }; return lookup[type]; } diff --git a/base/components/gen/eoperator.hpp b/base/components/gen/eoperator.hpp index fa4f23b..b447d7a 100644 --- a/base/components/gen/eoperator.hpp +++ b/base/components/gen/eoperator.hpp @@ -61,53 +61,53 @@ enum Operator : u32 inline Str operator_to_str( Operator op ) { local_persist Str lookup[47] = { - { "INVALID", sizeof( "INVALID" ) }, - { "=", sizeof( "=" ) }, - { "+=", sizeof( "+=" ) }, - { "-=", sizeof( "-=" ) }, - { "*=", sizeof( "*=" ) }, - { "/=", sizeof( "/=" ) }, - { "%=", sizeof( "%=" ) }, - { "&=", sizeof( "&=" ) }, - { "|=", sizeof( "|=" ) }, - { "^=", sizeof( "^=" ) }, - { "<<=", sizeof( "<<=" ) }, - { ">>=", sizeof( ">>=" ) }, - { "++", sizeof( "++" ) }, - { "--", sizeof( "--" ) }, - { "+", sizeof( "+" ) }, - { "-", sizeof( "-" ) }, - { "!", sizeof( "!" ) }, - { "+", sizeof( "+" ) }, - { "-", sizeof( "-" ) }, - { "*", sizeof( "*" ) }, - { "/", sizeof( "/" ) }, - { "%", sizeof( "%" ) }, - { "~", sizeof( "~" ) }, - { "&", sizeof( "&" ) }, - { "|", sizeof( "|" ) }, - { "^", sizeof( "^" ) }, - { "<<", sizeof( "<<" ) }, - { ">>", sizeof( ">>" ) }, - { "&&", sizeof( "&&" ) }, - { "||", sizeof( "||" ) }, - { "==", sizeof( "==" ) }, - { "!=", sizeof( "!=" ) }, - { "<", sizeof( "<" ) }, - { ">", sizeof( ">" ) }, - { "<=", sizeof( "<=" ) }, - { ">=", sizeof( ">=" ) }, - { "[]", sizeof( "[]" ) }, - { "*", sizeof( "*" ) }, - { "&", sizeof( "&" ) }, - { "->", sizeof( "->" ) }, - { "->*", sizeof( "->*" ) }, - { "()", sizeof( "()" ) }, - { ",", sizeof( "," ) }, - { "new", sizeof( "new" ) }, - { "new[]", sizeof( "new[]" ) }, - { "delete", sizeof( "delete" ) }, - { "delete[]", sizeof( "delete[]" ) }, + { "INVALID", sizeof( "INVALID" ) - 1 }, + { "=", sizeof( "=" ) - 1 }, + { "+=", sizeof( "+=" ) - 1 }, + { "-=", sizeof( "-=" ) - 1 }, + { "*=", sizeof( "*=" ) - 1 }, + { "/=", sizeof( "/=" ) - 1 }, + { "%=", sizeof( "%=" ) - 1 }, + { "&=", sizeof( "&=" ) - 1 }, + { "|=", sizeof( "|=" ) - 1 }, + { "^=", sizeof( "^=" ) - 1 }, + { "<<=", sizeof( "<<=" ) - 1 }, + { ">>=", sizeof( ">>=" ) - 1 }, + { "++", sizeof( "++" ) - 1 }, + { "--", sizeof( "--" ) - 1 }, + { "+", sizeof( "+" ) - 1 }, + { "-", sizeof( "-" ) - 1 }, + { "!", sizeof( "!" ) - 1 }, + { "+", sizeof( "+" ) - 1 }, + { "-", sizeof( "-" ) - 1 }, + { "*", sizeof( "*" ) - 1 }, + { "/", sizeof( "/" ) - 1 }, + { "%", sizeof( "%" ) - 1 }, + { "~", sizeof( "~" ) - 1 }, + { "&", sizeof( "&" ) - 1 }, + { "|", sizeof( "|" ) - 1 }, + { "^", sizeof( "^" ) - 1 }, + { "<<", sizeof( "<<" ) - 1 }, + { ">>", sizeof( ">>" ) - 1 }, + { "&&", sizeof( "&&" ) - 1 }, + { "||", sizeof( "||" ) - 1 }, + { "==", sizeof( "==" ) - 1 }, + { "!=", sizeof( "!=" ) - 1 }, + { "<", sizeof( "<" ) - 1 }, + { ">", sizeof( ">" ) - 1 }, + { "<=", sizeof( "<=" ) - 1 }, + { ">=", sizeof( ">=" ) - 1 }, + { "[]", sizeof( "[]" ) - 1 }, + { "*", sizeof( "*" ) - 1 }, + { "&", sizeof( "&" ) - 1 }, + { "->", sizeof( "->" ) - 1 }, + { "->*", sizeof( "->*" ) - 1 }, + { "()", sizeof( "()" ) - 1 }, + { ",", sizeof( "," ) - 1 }, + { "new", sizeof( "new" ) - 1 }, + { "new[]", sizeof( "new[]" ) - 1 }, + { "delete", sizeof( "delete" ) - 1 }, + { "delete[]", sizeof( "delete[]" ) - 1 }, }; return lookup[op]; } diff --git a/base/components/gen/especifier.hpp b/base/components/gen/especifier.hpp index f67dabd..f75f94d 100644 --- a/base/components/gen/especifier.hpp +++ b/base/components/gen/especifier.hpp @@ -40,32 +40,32 @@ enum Specifier : u32 inline Str spec_to_str( Specifier type ) { local_persist Str lookup[26] = { - { "INVALID", sizeof( "INVALID" ) }, - { "consteval", sizeof( "consteval" ) }, - { "constexpr", sizeof( "constexpr" ) }, - { "constinit", sizeof( "constinit" ) }, - { "explicit", sizeof( "explicit" ) }, - { "extern", sizeof( "extern" ) }, - { "forceinline", sizeof( "forceinline" ) }, - { "global", sizeof( "global" ) }, - { "inline", sizeof( "inline" ) }, - { "internal", sizeof( "internal" ) }, - { "local_persist", sizeof( "local_persist" ) }, - { "mutable", sizeof( "mutable" ) }, - { "neverinline", sizeof( "neverinline" ) }, - { "*", sizeof( "*" ) }, - { "&", sizeof( "&" ) }, - { "register", sizeof( "register" ) }, - { "&&", sizeof( "&&" ) }, - { "static", sizeof( "static" ) }, - { "thread_local", sizeof( "thread_local" ) }, - { "virtual", sizeof( "virtual" ) }, - { "const", sizeof( "const" ) }, - { "final", sizeof( "final" ) }, - { "noexcept", sizeof( "noexcept" ) }, - { "override", sizeof( "override" ) }, - { "= 0", sizeof( "= 0" ) }, - { "volatile", sizeof( "volatile" ) }, + { "INVALID", sizeof( "INVALID" ) - 1 }, + { "consteval", sizeof( "consteval" ) - 1 }, + { "constexpr", sizeof( "constexpr" ) - 1 }, + { "constinit", sizeof( "constinit" ) - 1 }, + { "explicit", sizeof( "explicit" ) - 1 }, + { "extern", sizeof( "extern" ) - 1 }, + { "forceinline", sizeof( "forceinline" ) - 1 }, + { "global", sizeof( "global" ) - 1 }, + { "inline", sizeof( "inline" ) - 1 }, + { "internal", sizeof( "internal" ) - 1 }, + { "local_persist", sizeof( "local_persist" ) - 1 }, + { "mutable", sizeof( "mutable" ) - 1 }, + { "neverinline", sizeof( "neverinline" ) - 1 }, + { "*", sizeof( "*" ) - 1 }, + { "&", sizeof( "&" ) - 1 }, + { "register", sizeof( "register" ) - 1 }, + { "&&", sizeof( "&&" ) - 1 }, + { "static", sizeof( "static" ) - 1 }, + { "thread_local", sizeof( "thread_local" ) - 1 }, + { "virtual", sizeof( "virtual" ) - 1 }, + { "const", sizeof( "const" ) - 1 }, + { "final", sizeof( "final" ) - 1 }, + { "noexcept", sizeof( "noexcept" ) - 1 }, + { "override", sizeof( "override" ) - 1 }, + { "= 0", sizeof( "= 0" ) - 1 }, + { "volatile", sizeof( "volatile" ) - 1 }, }; return lookup[type]; } @@ -81,7 +81,7 @@ inline Specifier str_to_specifier( Str str ) do_once_start for ( u32 index = 0; index < Spec_NumSpecifiers; index++ ) { Str enum_str = spec_to_str( (Specifier)index ); - keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); + keymap[index] = crc32( enum_str.Ptr, enum_str.Len ); } do_once_end u32 hash = crc32( str.Ptr, str.Len ); for ( u32 index = 0; index < Spec_NumSpecifiers; index++ ) diff --git a/base/components/gen/etoktype.cpp b/base/components/gen/etoktype.cpp index df50bbd..e5b4c68 100644 --- a/base/components/gen/etoktype.cpp +++ b/base/components/gen/etoktype.cpp @@ -114,103 +114,103 @@ enum TokType : u32 inline Str toktype_to_str( TokType type ) { local_persist Str lookup[] = { - { "__invalid__", sizeof( "__invalid__" ) }, - { "private", sizeof( "private" ) }, - { "protected", sizeof( "protected" ) }, - { "public", sizeof( "public" ) }, - { ".", sizeof( "." ) }, - { "::", sizeof( "::" ) }, - { "&", sizeof( "&" ) }, - { "&&", sizeof( "&&" ) }, - { ":", sizeof( ":" ) }, - { "[[", sizeof( "[[" ) }, - { "]]", sizeof( "]]" ) }, - { "{", sizeof( "{" ) }, - { "}", sizeof( "}" ) }, - { "[", sizeof( "[" ) }, - { "]", sizeof( "]" ) }, - { "(", sizeof( "(" ) }, - { ")", sizeof( ")" ) }, - { "__comment__", sizeof( "__comment__" ) }, - { "__comment_end__", sizeof( "__comment_end__" ) }, - { "__comment_start__", sizeof( "__comment_start__" ) }, - { "__character__", sizeof( "__character__" ) }, - { ",", sizeof( "," ) }, - { "class", sizeof( "class" ) }, - { "__attribute__", sizeof( "__attribute__" ) }, - { "__declspec", sizeof( "__declspec" ) }, - { "enum", sizeof( "enum" ) }, - { "extern", sizeof( "extern" ) }, - { "friend", sizeof( "friend" ) }, - { "module", sizeof( "module" ) }, - { "namespace", sizeof( "namespace" ) }, - { "operator", sizeof( "operator" ) }, - { "struct", sizeof( "struct" ) }, - { "template", sizeof( "template" ) }, - { "typedef", sizeof( "typedef" ) }, - { "using", sizeof( "using" ) }, - { "union", sizeof( "union" ) }, - { "__identifier__", sizeof( "__identifier__" ) }, - { "import", sizeof( "import" ) }, - { "export", sizeof( "export" ) }, - { "__new_line__", sizeof( "__new_line__" ) }, - { "__number__", sizeof( "__number__" ) }, - { "__operator__", sizeof( "__operator__" ) }, - { "#", sizeof( "#" ) }, - { "define", sizeof( "define" ) }, - { "if", sizeof( "if" ) }, - { "ifdef", sizeof( "ifdef" ) }, - { "ifndef", sizeof( "ifndef" ) }, - { "elif", sizeof( "elif" ) }, - { "else", sizeof( "else" ) }, - { "endif", sizeof( "endif" ) }, - { "include", sizeof( "include" ) }, - { "pragma", sizeof( "pragma" ) }, - { "__macro_content__", sizeof( "__macro_content__" ) }, - { "__macro__", sizeof( "__macro__" ) }, - { "__unsupported__", sizeof( "__unsupported__" ) }, - { "alignas", sizeof( "alignas" ) }, - { "const", sizeof( "const" ) }, - { "consteval", sizeof( "consteval" ) }, - { "constexpr", sizeof( "constexpr" ) }, - { "constinit", sizeof( "constinit" ) }, - { "explicit", sizeof( "explicit" ) }, - { "extern", sizeof( "extern" ) }, - { "final", sizeof( "final" ) }, - { "forceinline", sizeof( "forceinline" ) }, - { "global", sizeof( "global" ) }, - { "inline", sizeof( "inline" ) }, - { "internal", sizeof( "internal" ) }, - { "local_persist", sizeof( "local_persist" ) }, - { "mutable", sizeof( "mutable" ) }, - { "neverinline", sizeof( "neverinline" ) }, - { "override", sizeof( "override" ) }, - { "static", sizeof( "static" ) }, - { "thread_local", sizeof( "thread_local" ) }, - { "volatile", sizeof( "volatile" ) }, - { "virtual", sizeof( "virtual" ) }, - { "*", sizeof( "*" ) }, - { ";", sizeof( ";" ) }, - { "static_assert", sizeof( "static_assert" ) }, - { "__string__", sizeof( "__string__" ) }, - { "typename", sizeof( "typename" ) }, - { "unsigned", sizeof( "unsigned" ) }, - { "signed", sizeof( "signed" ) }, - { "short", sizeof( "short" ) }, - { "long", sizeof( "long" ) }, - { "bool", sizeof( "bool" ) }, - { "char", sizeof( "char" ) }, - { "int", sizeof( "int" ) }, - { "double", sizeof( "double" ) }, - { "__int8", sizeof( "__int8" ) }, - { "__int16", sizeof( "__int16" ) }, - { "__int32", sizeof( "__int32" ) }, - { "__int64", sizeof( "__int64" ) }, - { "_W64", sizeof( "_W64" ) }, - { "...", sizeof( "..." ) }, - { "__attrib_start__", sizeof( "__attrib_start__" ) }, - { "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, - { "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, + { "__invalid__", sizeof( "__invalid__" ) - 1 }, + { "private", sizeof( "private" ) - 1 }, + { "protected", sizeof( "protected" ) - 1 }, + { "public", sizeof( "public" ) - 1 }, + { ".", sizeof( "." ) - 1 }, + { "::", sizeof( "::" ) - 1 }, + { "&", sizeof( "&" ) - 1 }, + { "&&", sizeof( "&&" ) - 1 }, + { ":", sizeof( ":" ) - 1 }, + { "[[", sizeof( "[[" ) - 1 }, + { "]]", sizeof( "]]" ) - 1 }, + { "{", sizeof( "{" ) - 1 }, + { "}", sizeof( "}" ) - 1 }, + { "[", sizeof( "[" ) - 1 }, + { "]", sizeof( "]" ) - 1 }, + { "(", sizeof( "(" ) - 1 }, + { ")", sizeof( ")" ) - 1 }, + { "__comment__", sizeof( "__comment__" ) - 1 }, + { "__comment_end__", sizeof( "__comment_end__" ) - 1 }, + { "__comment_start__", sizeof( "__comment_start__" ) - 1 }, + { "__character__", sizeof( "__character__" ) - 1 }, + { ",", sizeof( "," ) - 1 }, + { "class", sizeof( "class" ) - 1 }, + { "__attribute__", sizeof( "__attribute__" ) - 1 }, + { "__declspec", sizeof( "__declspec" ) - 1 }, + { "enum", sizeof( "enum" ) - 1 }, + { "extern", sizeof( "extern" ) - 1 }, + { "friend", sizeof( "friend" ) - 1 }, + { "module", sizeof( "module" ) - 1 }, + { "namespace", sizeof( "namespace" ) - 1 }, + { "operator", sizeof( "operator" ) - 1 }, + { "struct", sizeof( "struct" ) - 1 }, + { "template", sizeof( "template" ) - 1 }, + { "typedef", sizeof( "typedef" ) - 1 }, + { "using", sizeof( "using" ) - 1 }, + { "union", sizeof( "union" ) - 1 }, + { "__identifier__", sizeof( "__identifier__" ) - 1 }, + { "import", sizeof( "import" ) - 1 }, + { "export", sizeof( "export" ) - 1 }, + { "__new_line__", sizeof( "__new_line__" ) - 1 }, + { "__number__", sizeof( "__number__" ) - 1 }, + { "__operator__", sizeof( "__operator__" ) - 1 }, + { "#", sizeof( "#" ) - 1 }, + { "define", sizeof( "define" ) - 1 }, + { "if", sizeof( "if" ) - 1 }, + { "ifdef", sizeof( "ifdef" ) - 1 }, + { "ifndef", sizeof( "ifndef" ) - 1 }, + { "elif", sizeof( "elif" ) - 1 }, + { "else", sizeof( "else" ) - 1 }, + { "endif", sizeof( "endif" ) - 1 }, + { "include", sizeof( "include" ) - 1 }, + { "pragma", sizeof( "pragma" ) - 1 }, + { "__macro_content__", sizeof( "__macro_content__" ) - 1 }, + { "__macro__", sizeof( "__macro__" ) - 1 }, + { "__unsupported__", sizeof( "__unsupported__" ) - 1 }, + { "alignas", sizeof( "alignas" ) - 1 }, + { "const", sizeof( "const" ) - 1 }, + { "consteval", sizeof( "consteval" ) - 1 }, + { "constexpr", sizeof( "constexpr" ) - 1 }, + { "constinit", sizeof( "constinit" ) - 1 }, + { "explicit", sizeof( "explicit" ) - 1 }, + { "extern", sizeof( "extern" ) - 1 }, + { "final", sizeof( "final" ) - 1 }, + { "forceinline", sizeof( "forceinline" ) - 1 }, + { "global", sizeof( "global" ) - 1 }, + { "inline", sizeof( "inline" ) - 1 }, + { "internal", sizeof( "internal" ) - 1 }, + { "local_persist", sizeof( "local_persist" ) - 1 }, + { "mutable", sizeof( "mutable" ) - 1 }, + { "neverinline", sizeof( "neverinline" ) - 1 }, + { "override", sizeof( "override" ) - 1 }, + { "static", sizeof( "static" ) - 1 }, + { "thread_local", sizeof( "thread_local" ) - 1 }, + { "volatile", sizeof( "volatile" ) - 1 }, + { "virtual", sizeof( "virtual" ) - 1 }, + { "*", sizeof( "*" ) - 1 }, + { ";", sizeof( ";" ) - 1 }, + { "static_assert", sizeof( "static_assert" ) - 1 }, + { "__string__", sizeof( "__string__" ) - 1 }, + { "typename", sizeof( "typename" ) - 1 }, + { "unsigned", sizeof( "unsigned" ) - 1 }, + { "signed", sizeof( "signed" ) - 1 }, + { "short", sizeof( "short" ) - 1 }, + { "long", sizeof( "long" ) - 1 }, + { "bool", sizeof( "bool" ) - 1 }, + { "char", sizeof( "char" ) - 1 }, + { "int", sizeof( "int" ) - 1 }, + { "double", sizeof( "double" ) - 1 }, + { "__int8", sizeof( "__int8" ) - 1 }, + { "__int16", sizeof( "__int16" ) - 1 }, + { "__int32", sizeof( "__int32" ) - 1 }, + { "__int64", sizeof( "__int64" ) - 1 }, + { "_W64", sizeof( "_W64" ) - 1 }, + { "...", sizeof( "..." ) - 1 }, + { "__attrib_start__", sizeof( "__attrib_start__" ) - 1 }, + { "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) - 1 }, + { "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) - 1 }, }; return lookup[type]; } @@ -221,7 +221,7 @@ inline TokType str_to_toktype( Str str ) do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) { Str enum_str = toktype_to_str( (TokType)index ); - keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); + keymap[index] = crc32( enum_str.Ptr, enum_str.Len ); } do_once_end u32 hash = crc32( str.Ptr, str.Len ); for ( u32 index = 0; index < Tok_NumTokens; index++ ) diff --git a/base/components/gen/etoktype.hpp b/base/components/gen/etoktype.hpp deleted file mode 100644 index df50bbd..0000000 --- a/base/components/gen/etoktype.hpp +++ /dev/null @@ -1,235 +0,0 @@ -#ifdef GEN_INTELLISENSE_DIRECTIVES -#pragma once -#include "components/types.hpp" -#endif - -// This file was generated automatially by gencpp's bootstrap.cpp (See: https://github.com/Ed94/gencpp) - -GEN_NS_PARSER_BEGIN - -#define GEN_DEFINE_ATTRIBUTE_TOKENS Entry( Tok_Attribute_API_Export, "GEN_API_Export_Code" ) Entry( Tok_Attribute_API_Import, "GEN_API_Import_Code" ) - -enum TokType : u32 -{ - Tok_Invalid, - Tok_Access_Private, - Tok_Access_Protected, - Tok_Access_Public, - Tok_Access_MemberSymbol, - Tok_Access_StaticSymbol, - Tok_Ampersand, - Tok_Ampersand_DBL, - Tok_Assign_Classifer, - Tok_Attribute_Open, - Tok_Attribute_Close, - Tok_BraceCurly_Open, - Tok_BraceCurly_Close, - Tok_BraceSquare_Open, - Tok_BraceSquare_Close, - Tok_Capture_Start, - Tok_Capture_End, - Tok_Comment, - Tok_Comment_End, - Tok_Comment_Start, - Tok_Char, - Tok_Comma, - Tok_Decl_Class, - Tok_Decl_GNU_Attribute, - Tok_Decl_MSVC_Attribute, - Tok_Decl_Enum, - Tok_Decl_Extern_Linkage, - Tok_Decl_Friend, - Tok_Decl_Module, - Tok_Decl_Namespace, - Tok_Decl_Operator, - Tok_Decl_Struct, - Tok_Decl_Template, - Tok_Decl_Typedef, - Tok_Decl_Using, - Tok_Decl_Union, - Tok_Identifier, - Tok_Module_Import, - Tok_Module_Export, - Tok_NewLine, - Tok_Number, - Tok_Operator, - Tok_Preprocess_Hash, - Tok_Preprocess_Define, - Tok_Preprocess_If, - Tok_Preprocess_IfDef, - Tok_Preprocess_IfNotDef, - Tok_Preprocess_ElIf, - Tok_Preprocess_Else, - Tok_Preprocess_EndIf, - Tok_Preprocess_Include, - Tok_Preprocess_Pragma, - Tok_Preprocess_Content, - Tok_Preprocess_Macro, - Tok_Preprocess_Unsupported, - Tok_Spec_Alignas, - Tok_Spec_Const, - Tok_Spec_Consteval, - Tok_Spec_Constexpr, - Tok_Spec_Constinit, - Tok_Spec_Explicit, - Tok_Spec_Extern, - Tok_Spec_Final, - Tok_Spec_ForceInline, - Tok_Spec_Global, - Tok_Spec_Inline, - Tok_Spec_Internal_Linkage, - Tok_Spec_LocalPersist, - Tok_Spec_Mutable, - Tok_Spec_NeverInline, - Tok_Spec_Override, - Tok_Spec_Static, - Tok_Spec_ThreadLocal, - Tok_Spec_Volatile, - Tok_Spec_Virtual, - Tok_Star, - Tok_Statement_End, - Tok_StaticAssert, - Tok_String, - Tok_Type_Typename, - Tok_Type_Unsigned, - Tok_Type_Signed, - Tok_Type_Short, - Tok_Type_Long, - Tok_Type_bool, - Tok_Type_char, - Tok_Type_int, - Tok_Type_double, - Tok_Type_MS_int8, - Tok_Type_MS_int16, - Tok_Type_MS_int32, - Tok_Type_MS_int64, - Tok_Type_MS_W64, - Tok_Varadic_Argument, - Tok___Attributes_Start, - Tok_Attribute_API_Export, - Tok_Attribute_API_Import, - Tok_NumTokens -}; - -inline Str toktype_to_str( TokType type ) -{ - local_persist Str lookup[] = { - { "__invalid__", sizeof( "__invalid__" ) }, - { "private", sizeof( "private" ) }, - { "protected", sizeof( "protected" ) }, - { "public", sizeof( "public" ) }, - { ".", sizeof( "." ) }, - { "::", sizeof( "::" ) }, - { "&", sizeof( "&" ) }, - { "&&", sizeof( "&&" ) }, - { ":", sizeof( ":" ) }, - { "[[", sizeof( "[[" ) }, - { "]]", sizeof( "]]" ) }, - { "{", sizeof( "{" ) }, - { "}", sizeof( "}" ) }, - { "[", sizeof( "[" ) }, - { "]", sizeof( "]" ) }, - { "(", sizeof( "(" ) }, - { ")", sizeof( ")" ) }, - { "__comment__", sizeof( "__comment__" ) }, - { "__comment_end__", sizeof( "__comment_end__" ) }, - { "__comment_start__", sizeof( "__comment_start__" ) }, - { "__character__", sizeof( "__character__" ) }, - { ",", sizeof( "," ) }, - { "class", sizeof( "class" ) }, - { "__attribute__", sizeof( "__attribute__" ) }, - { "__declspec", sizeof( "__declspec" ) }, - { "enum", sizeof( "enum" ) }, - { "extern", sizeof( "extern" ) }, - { "friend", sizeof( "friend" ) }, - { "module", sizeof( "module" ) }, - { "namespace", sizeof( "namespace" ) }, - { "operator", sizeof( "operator" ) }, - { "struct", sizeof( "struct" ) }, - { "template", sizeof( "template" ) }, - { "typedef", sizeof( "typedef" ) }, - { "using", sizeof( "using" ) }, - { "union", sizeof( "union" ) }, - { "__identifier__", sizeof( "__identifier__" ) }, - { "import", sizeof( "import" ) }, - { "export", sizeof( "export" ) }, - { "__new_line__", sizeof( "__new_line__" ) }, - { "__number__", sizeof( "__number__" ) }, - { "__operator__", sizeof( "__operator__" ) }, - { "#", sizeof( "#" ) }, - { "define", sizeof( "define" ) }, - { "if", sizeof( "if" ) }, - { "ifdef", sizeof( "ifdef" ) }, - { "ifndef", sizeof( "ifndef" ) }, - { "elif", sizeof( "elif" ) }, - { "else", sizeof( "else" ) }, - { "endif", sizeof( "endif" ) }, - { "include", sizeof( "include" ) }, - { "pragma", sizeof( "pragma" ) }, - { "__macro_content__", sizeof( "__macro_content__" ) }, - { "__macro__", sizeof( "__macro__" ) }, - { "__unsupported__", sizeof( "__unsupported__" ) }, - { "alignas", sizeof( "alignas" ) }, - { "const", sizeof( "const" ) }, - { "consteval", sizeof( "consteval" ) }, - { "constexpr", sizeof( "constexpr" ) }, - { "constinit", sizeof( "constinit" ) }, - { "explicit", sizeof( "explicit" ) }, - { "extern", sizeof( "extern" ) }, - { "final", sizeof( "final" ) }, - { "forceinline", sizeof( "forceinline" ) }, - { "global", sizeof( "global" ) }, - { "inline", sizeof( "inline" ) }, - { "internal", sizeof( "internal" ) }, - { "local_persist", sizeof( "local_persist" ) }, - { "mutable", sizeof( "mutable" ) }, - { "neverinline", sizeof( "neverinline" ) }, - { "override", sizeof( "override" ) }, - { "static", sizeof( "static" ) }, - { "thread_local", sizeof( "thread_local" ) }, - { "volatile", sizeof( "volatile" ) }, - { "virtual", sizeof( "virtual" ) }, - { "*", sizeof( "*" ) }, - { ";", sizeof( ";" ) }, - { "static_assert", sizeof( "static_assert" ) }, - { "__string__", sizeof( "__string__" ) }, - { "typename", sizeof( "typename" ) }, - { "unsigned", sizeof( "unsigned" ) }, - { "signed", sizeof( "signed" ) }, - { "short", sizeof( "short" ) }, - { "long", sizeof( "long" ) }, - { "bool", sizeof( "bool" ) }, - { "char", sizeof( "char" ) }, - { "int", sizeof( "int" ) }, - { "double", sizeof( "double" ) }, - { "__int8", sizeof( "__int8" ) }, - { "__int16", sizeof( "__int16" ) }, - { "__int32", sizeof( "__int32" ) }, - { "__int64", sizeof( "__int64" ) }, - { "_W64", sizeof( "_W64" ) }, - { "...", sizeof( "..." ) }, - { "__attrib_start__", sizeof( "__attrib_start__" ) }, - { "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, - { "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, - }; - return lookup[type]; -} - -inline TokType str_to_toktype( Str str ) -{ - local_persist u32 keymap[Tok_NumTokens]; - do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) - { - Str enum_str = toktype_to_str( (TokType)index ); - keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); - } - do_once_end u32 hash = crc32( str.Ptr, str.Len ); - for ( u32 index = 0; index < Tok_NumTokens; index++ ) - { - if ( keymap[index] == hash ) - return (TokType)index; - } - return Tok_Invalid; -} - -GEN_NS_PARSER_END diff --git a/base/components/interface.hpp b/base/components/interface.hpp index 178f57e..5f7b590 100644 --- a/base/components/interface.hpp +++ b/base/components/interface.hpp @@ -294,7 +294,7 @@ Code untyped_token_fmt( s32 num_tokens, char const* fmt, ... ); #ifndef code // Same as name just used to indicate intention of literal for code instead of names. -#define code( ... ) { stringize( __VA_ARGS__ ), sizeof(stringize(__VA_ARGS__)) - 1 } +#define code( ... ) { stringize( __VA_ARGS__ ), sizeof(stringize(__VA_ARGS__)) - 1 } #endif #ifndef args diff --git a/base/components/interface.parsing.cpp b/base/components/interface.parsing.cpp index 4b0679a..e8fc53e 100644 --- a/base/components/interface.parsing.cpp +++ b/base/components/interface.parsing.cpp @@ -59,7 +59,7 @@ CodeConstructor parse_constructor( Str def ) break; default : - log_failure( "Invalid specifier %s for variable\n%s", spec_to_str( spec ), parser_to_string(Context) ); + log_failure( "Invalid specifier %s for variable\n%S", spec_to_str( spec ), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } diff --git a/base/components/lexer.cpp b/base/components/lexer.cpp index 07ca9e2..492a8ff 100644 --- a/base/components/lexer.cpp +++ b/base/components/lexer.cpp @@ -92,7 +92,7 @@ bool tok_is_end_definition(Token tok) return bitfield_is_equal( u32, tok.Flags, TF_EndDefinition ); } -StrBuilder tok_to_string(Token tok) +StrBuilder tok_to_strbuilder(Token tok) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); @@ -183,7 +183,7 @@ enum struct LexContext { - Str content; + Str content; s32 left; char const* scanner; s32 line; @@ -620,7 +620,7 @@ TokArray lex( Str content ) #if 0 if (Tokens.num()) { - log_fmt("\nLastTok: %SB", Tokens.back().to_string()); + log_fmt("\nLastTok: %SB", Tokens.back().to_strbuilder()); } #endif diff --git a/base/components/parser.cpp b/base/components/parser.cpp index 11db847..671afea 100644 --- a/base/components/parser.cpp +++ b/base/components/parser.cpp @@ -45,7 +45,7 @@ void parser_pop(ParseContext* ctx) ctx->Scope = ctx->Scope->Prev; } -StrBuilder parser_to_string(ParseContext ctx) +StrBuilder parser_to_strbuilder(ParseContext ctx) { StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); @@ -102,7 +102,7 @@ bool lex__eat(TokArray* self, TokType type ) { if ( array_num(self->Arr) - self->Idx <= 0 ) { - log_failure( "No tokens left.\n%s", parser_to_string(Context) ); + log_failure( "No tokens left.\n%s", parser_to_strbuilder(Context) ); return false; } @@ -122,14 +122,14 @@ bool lex__eat(TokArray* self, TokType type ) , at_idx.Length, at_idx.Text , tok.Line , tok.Column - , parser_to_string(Context) + , parser_to_strbuilder(Context) ); GEN_DEBUG_TRAP(); return false; } #if 0 && GEN_BUILD_DEBUG - log_fmt("Ate: %SB\n", self->Arr[Idx].to_string() ); + log_fmt("Ate: %SB\n", self->Arr[Idx].to_strbuilder() ); #endif self->Idx ++; @@ -530,14 +530,14 @@ Code parse_array_decl() if ( left == 0 ) { - log_failure( "Error, unexpected end of array declaration ( '[]' scope started )\n%s", parser_to_string(Context) ); + log_failure( "Error, unexpected end of array declaration ( '[]' scope started )\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } if ( currtok.Type == Tok_BraceSquare_Close ) { - log_failure( "Error, empty array expression in definition\n%s", parser_to_string(Context) ); + log_failure( "Error, empty array expression in definition\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -556,14 +556,14 @@ Code parse_array_decl() if ( left == 0 ) { - log_failure( "Error, unexpected end of array declaration, expected ]\n%s", parser_to_string(Context) ); + log_failure( "Error, unexpected end of array declaration, expected ]\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } if ( currtok.Type != Tok_BraceSquare_Close ) { - log_failure( "%s: Error, expected ] in array declaration, not %s\n%s", toktype_to_str( currtok.Type ), parser_to_string(Context) ); + log_failure( "%s: Error, expected ] in array declaration, not %s\n%s", toktype_to_str( currtok.Type ), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -704,7 +704,7 @@ Code parse_class_struct( TokType which, bool inplace_def ) { if ( which != Tok_Decl_Class && which != Tok_Decl_Struct ) { - log_failure( "Error, expected class or struct, not %s\n%s", toktype_to_str( which ), parser_to_string(Context) ); + log_failure( "Error, expected class or struct, not %s\n%s", toktype_to_str( which ), parser_to_strbuilder(Context) ); return InvalidCode; } @@ -846,7 +846,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) case Tok_Statement_End: { // TODO(Ed): Convert this to a general warning procedure - log_fmt("Dangling end statement found %SB\n", tok_to_string(currtok_noskip)); + log_fmt("Dangling end statement found %SB\n", tok_to_strbuilder(currtok_noskip)); eat( Tok_Statement_End ); continue; } @@ -928,7 +928,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) case Tok_Operator: //if ( currtok.Text[0] != '~' ) //{ - // log_failure( "Operator token found in global body but not destructor unary negation\n%s", to_string(Context) ); + // log_failure( "Operator token found in global body but not destructor unary negation\n%s", to_strbuilder(Context) ); // return InvalidCode; //} @@ -1042,7 +1042,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) break; default: - log_failure( "Invalid specifier %s for variable\n%s", spec_to_str(spec), parser_to_string(Context) ); + log_failure( "Invalid specifier %S for variable\n%S", spec_to_str(spec), strbuilder_to_str( parser_to_strbuilder(Context)) ); parser_pop(& Context); return InvalidCode; } @@ -1128,7 +1128,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse member\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1162,7 +1162,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse member\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1249,7 +1249,7 @@ Code parse_complicated_definition( TokType which ) return result; } - log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1294,7 +1294,7 @@ Code parse_complicated_definition( TokType which ) if ( ! ok_to_parse ) { - log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1313,7 +1313,7 @@ Code parse_complicated_definition( TokType which ) && ( tokens.Arr[idx - 4].Type != which)) ) { - log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after %s declaration\n%s", toktype_to_str(which), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1343,7 +1343,7 @@ Code parse_complicated_definition( TokType which ) } else { - log_failure( "Unsupported or bad member definition after %s declaration\n%SB", toktype_to_str(which).Ptr, parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after %s declaration\n%SB", toktype_to_str(which).Ptr, parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1362,7 +1362,7 @@ CodeDefine parse_define() if ( ! check( Tok_Identifier ) ) { - log_failure( "Error, expected identifier after #define\n%s", parser_to_string(Context) ); + log_failure( "Error, expected identifier after #define\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1374,7 +1374,7 @@ CodeDefine parse_define() if ( ! check( Tok_Preprocess_Content )) { - log_failure( "Error, expected content after #define %s\n%s", define->Name, parser_to_string(Context) ); + log_failure( "Error, expected content after #define %s\n%s", define->Name, parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1409,7 +1409,7 @@ Code parse_assignment_expression() if ( currtok.Type == Tok_Statement_End && currtok.Type != Tok_Comma ) { - log_failure( "Expected expression after assignment operator\n%s", parser_to_string(Context) ); + log_failure( "Expected expression after assignment operator\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1461,7 +1461,7 @@ Code parse_forward_or_definition( TokType which, bool is_inplace ) default: log_failure( "Error, wrong token type given to parse_complicated_definition " "(only supports class, enum, struct, union) \n%s" - , parser_to_string(Context) ); + , parser_to_strbuilder(Context) ); return InvalidCode; } @@ -1552,7 +1552,7 @@ CodeFn parse_function_after_name( default: { - log_failure("Body must be either of Function_Body or Untyped type, %s\n%s", code_debug_str(body), parser_to_string(Context)); + log_failure("Body must be either of Function_Body or Untyped type, %s\n%s", code_debug_str(body), parser_to_strbuilder(Context)); parser_pop(& Context); return InvalidCode; } @@ -1661,7 +1661,7 @@ CodeBody parse_global_nspace( CodeType which ) { case Tok_Comma: { - log_failure("Dangling comma found: %SB\nContext:\n%SB", tok_to_string(currtok), parser_to_string(Context)); + log_failure("Dangling comma found: %SB\nContext:\n%SB", tok_to_strbuilder(currtok), parser_to_strbuilder(Context)); parser_pop( & Context); return InvalidCode; } @@ -1669,7 +1669,7 @@ CodeBody parse_global_nspace( CodeType which ) case Tok_Statement_End: { // TODO(Ed): Convert this to a general warning procedure - log_fmt("Dangling end statement found %SB\n", tok_to_string(currtok_noskip)); + log_fmt("Dangling end statement found %SB\n", tok_to_strbuilder(currtok_noskip)); eat( Tok_Statement_End ); continue; } @@ -1695,7 +1695,7 @@ CodeBody parse_global_nspace( CodeType which ) case Tok_Decl_Extern_Linkage: if ( which == CT_Extern_Linkage_Body ) - log_failure( "Nested extern linkage\n%s", parser_to_string(Context) ); + log_failure( "Nested extern linkage\n%s", parser_to_strbuilder(Context) ); member = cast(Code, parser_parse_extern_link()); // extern "..." { ... } @@ -1788,7 +1788,7 @@ CodeBody parse_global_nspace( CodeType which ) case Tok_Module_Export: { if ( which == CT_Export_Body ) - log_failure( "Nested export declaration\n%s", parser_to_string(Context) ); + log_failure( "Nested export declaration\n%s", parser_to_strbuilder(Context) ); member = cast(Code, parser_parse_export_body()); // export { ... } @@ -1858,7 +1858,7 @@ CodeBody parse_global_nspace( CodeType which ) default: Str spec_str = spec_to_str(spec); - log_failure( "Invalid specifier %.*s for variable\n%s", spec_str.Len, spec_str, parser_to_string(Context) ); + log_failure( "Invalid specifier %S for variable\n%S", spec_str, strbuilder_to_str( parser_to_strbuilder(Context)) ); parser_pop(& Context); return InvalidCode; } @@ -1941,7 +1941,7 @@ CodeBody parse_global_nspace( CodeType which ) if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse member\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -1960,7 +1960,7 @@ CodeBody parse_global_nspace( CodeType which ) Member_Resolved_To_Lone_Macro: if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\nToken: %SB\nContext:\n%SB", tok_to_string(currtok_noskip), parser_to_string(Context) ); + log_failure( "Failed to parse member\nToken: %SB\nContext:\n%SB", tok_to_strbuilder(currtok_noskip), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2129,7 +2129,7 @@ Token parse_identifier( bool* possible_member_function ) Token invalid = { nullptr, 0, Tok_Invalid }; if ( left == 0 ) { - log_failure( "Error, unexpected end of static symbol identifier\n%s", parser_to_string(Context) ); + log_failure( "Error, unexpected end of static symbol identifier\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return invalid; } @@ -2144,7 +2144,7 @@ Token parse_identifier( bool* possible_member_function ) return name; } - log_failure( "Error, had a ~ operator after %SB but not a destructor\n%s", toktype_to_str( prevtok.Type ), parser_to_string(Context) ); + log_failure( "Error, had a ~ operator after %SB but not a destructor\n%s", toktype_to_str( prevtok.Type ), parser_to_strbuilder(Context) ); parser_pop(& Context); return invalid; } @@ -2156,7 +2156,7 @@ Token parse_identifier( bool* possible_member_function ) else { - log_failure( "Found a member function pointer identifier but the parsing context did not expect it\n%s", parser_to_string(Context) ); + log_failure( "Found a member function pointer identifier but the parsing context did not expect it\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return invalid; } @@ -2164,7 +2164,7 @@ Token parse_identifier( bool* possible_member_function ) if ( currtok.Type != Tok_Identifier ) { - log_failure( "Error, expected static symbol identifier, not %s\n%s", toktype_to_str( currtok.Type ), parser_to_string(Context) ); + log_failure( "Error, expected static symbol identifier, not %s\n%s", toktype_to_str( currtok.Type ), parser_to_strbuilder(Context) ); parser_pop(& Context); return invalid; } @@ -2195,7 +2195,7 @@ CodeInclude parse_include() if ( ! check( Tok_String )) { - log_failure( "Error, expected include string after #include\n%s", parser_to_string(Context) ); + log_failure( "Error, expected include string after #include\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2243,7 +2243,7 @@ CodeOperator parse_operator_after_ret_type( && currtok.Type != Tok_Ampersand && currtok.Type != Tok_Ampersand_DBL ) { - log_failure( "Expected operator after 'operator' keyword\n%s", parser_to_string(Context) ); + log_failure( "Expected operator after 'operator' keyword\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2496,7 +2496,7 @@ CodeOperator parse_operator_after_ret_type( { if ( op == Op_Invalid ) { - log_failure( "Invalid operator '%s'\n%s", prevtok.Text, parser_to_string(Context) ); + log_failure( "Invalid operator '%s'\n%s", prevtok.Text, parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2506,7 +2506,7 @@ CodeOperator parse_operator_after_ret_type( if ( op == Op_Invalid ) { - log_failure( "Invalid operator '%s'\n%s", currtok.Text, parser_to_string(Context) ); + log_failure( "Invalid operator '%s'\n%s", currtok.Text, parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2650,7 +2650,7 @@ Code parse_operator_function_or_variable( bool expects_function, CodeAttributes { if ( expects_function ) { - log_failure( "Expected function declaration (consteval was used)\n%s", parser_to_string(Context) ); + log_failure( "Expected function declaration (consteval was used)\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2678,7 +2678,7 @@ CodePragma parse_pragma() if ( ! check( Tok_Preprocess_Content )) { - log_failure( "Error, expected content after #pragma\n%s", parser_to_string(Context) ); + log_failure( "Error, expected content after #pragma\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2791,7 +2791,7 @@ CodeParams parse_params( bool use_template_capture ) if ( currtok.Type == Tok_Comma ) { - log_failure( "Expected value after assignment operator\n%s.", parser_to_string(Context) ); + log_failure( "Expected value after assignment operator\n%s.", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2904,7 +2904,7 @@ CodeParams parse_params( bool use_template_capture ) if ( currtok.Type == Tok_Comma ) { - log_failure( "Expected value after assignment operator\n%s", parser_to_string(Context) ); + log_failure( "Expected value after assignment operator\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2965,7 +2965,7 @@ CodeParams parse_params( bool use_template_capture ) { if ( ! check( Tok_Operator ) || currtok.Text[ 0 ] != '>' ) { - log_failure( "Expected '<' after 'template' keyword\n%s", parser_to_string(Context) ); + log_failure( "Expected '<' after 'template' keyword\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2985,7 +2985,7 @@ CodePreprocessCond parse_preprocess_cond() if ( ! tok_is_preprocess_cond(currtok) ) { - log_failure( "Error, expected preprocess conditional\n%s", parser_to_string(Context) ); + log_failure( "Error, expected preprocess conditional\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -2998,7 +2998,7 @@ CodePreprocessCond parse_preprocess_cond() if ( ! check( Tok_Preprocess_Content )) { - log_failure( "Error, expected content after #define\n%s", parser_to_string(Context) ); + log_failure( "Error, expected content after #define\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -3289,7 +3289,7 @@ CodeVar parse_variable_after_name( if ( currtok.Type == Tok_Statement_End ) { - log_failure( "Expected expression after bitfield \n%SB", parser_to_string(Context) ); + log_failure( "Expected expression after bitfield \n%SB", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -3407,7 +3407,7 @@ CodeVar parse_variable_declaration_list() { log_failure( "Error, const specifier must come after pointer specifier for variable declaration proceeding comma\n" "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%SB" - , parser_to_string(Context) ); + , parser_to_strbuilder(Context) ); specifiers_append(specifiers, spec ); } @@ -3420,9 +3420,9 @@ CodeVar parse_variable_declaration_list() default: { - log_failure( "Error, invalid specifier '%s' proceeding comma\n" + log_failure( "Error, invalid specifier '%S' proceeding comma\n" "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%S" - , tok_to_str(currtok), parser_to_string(Context) ); + , tok_to_str(currtok), strbuilder_to_str( parser_to_strbuilder(Context)) ); continue; } break; @@ -3586,7 +3586,7 @@ CodeDestructor parser_parse_destructor( CodeSpecifiers specifiers ) eat( Tok_Operator ); else { - log_failure( "Expected destructor '~' token\n%s", parser_to_string(Context) ); + log_failure( "Expected destructor '~' token\n%s", parser_to_strbuilder(Context) ); parser_pop( & Context); return InvalidCode; } @@ -3624,7 +3624,7 @@ CodeDestructor parser_parse_destructor( CodeSpecifiers specifiers ) } else { - log_failure( "Pure or default specifier expected due to '=' token\n%s", parser_to_string(Context) ); + log_failure( "Pure or default specifier expected due to '=' token\n%s", parser_to_strbuilder(Context) ); parser_pop( & Context); return InvalidCode; } @@ -3722,7 +3722,7 @@ CodeEnum parser_parse_enum( bool inplace_def ) type = parser_parse_type(parser_not_from_template, nullptr); if ( cast(Code, type) == Code_Invalid ) { - log_failure( "Failed to parse enum classifier\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse enum classifier\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -3755,7 +3755,7 @@ CodeEnum parser_parse_enum( bool inplace_def ) { if ( ! expects_entry ) { - log_failure( "Did not expect an entry after last member of enum body.\n%s", parser_to_string(Context) ); + log_failure( "Did not expect an entry after last member of enum body.\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); break; } @@ -3862,7 +3862,7 @@ CodeEnum parser_parse_enum( bool inplace_def ) if ( member == Code_Invalid ) { - log_failure( "Failed to parse member\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse member\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -3957,7 +3957,7 @@ CodeExtern parser_parse_extern_link() CodeBody entry = parser_parse_extern_link_body(); if ( cast(Code, entry) == Code_Invalid ) { - log_failure( "Failed to parse body\n%s", parser_to_string(Context) ); + log_failure( "Failed to parse body\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return result; } @@ -3998,7 +3998,7 @@ CodeFriend parser_parse_friend() break; default : - log_failure( "Invalid specifier %s for friend definition\n%s", spec_to_str( spec ), parser_to_string(Context) ); + log_failure( "Invalid specifier %S for friend definition\n%S", spec_to_str( spec ), strbuilder_to_str( parser_to_strbuilder(Context)) ); parser_pop(& Context); return InvalidCode; } @@ -4127,7 +4127,7 @@ CodeFn parser_parse_function() break; default: - log_failure( "Invalid specifier %s for functon\n%s", spec_to_str(spec), parser_to_string(Context) ); + log_failure( "Invalid specifier %S for functon\n%SB", spec_to_str(spec), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4238,7 +4238,7 @@ CodeOperator parser_parse_operator() break; default: - log_failure( "Invalid specifier " "%S" " for operator\n%SB", spec_to_str(spec), parser_to_string(Context) ); + log_failure( "Invalid specifier " "%S" " for operator\n%SB", spec_to_str(spec), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4490,7 +4490,7 @@ CodeTemplate parser_parse_template() break; default : - log_failure( "Invalid specifier %s for variable or function\n%s", spec_to_str( spec ), parser_to_string(Context) ); + log_failure( "Invalid specifier %S for variable or function\n%SB", spec_to_str( spec ), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4614,7 +4614,7 @@ CodeTypename parser_parse_type( bool from_template, bool* typedef_is_function ) if ( spec != Spec_Const ) { - log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4627,7 +4627,7 @@ CodeTypename parser_parse_type( bool from_template, bool* typedef_is_function ) if ( left == 0 ) { - log_failure( "Error, unexpected end of type definition\n%SB", parser_to_string(Context) ); + log_failure( "Error, unexpected end of type definition\n%SB", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4719,7 +4719,7 @@ else if ( currtok.Type == Tok_DeclType ) Context.Scope->Name = name; if ( ! tok_is_valid(name) ) { - log_failure( "Error, failed to type signature\n%s", parser_to_string(Context) ); + log_failure( "Error, failed to type signature\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4738,7 +4738,7 @@ else if ( currtok.Type == Tok_DeclType ) Context.Scope->Name = name; if ( ! tok_is_valid(name) ) { - log_failure( "Error, failed to type signature\n%s", parser_to_string(Context) ); + log_failure( "Error, failed to type signature\n%s", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4753,7 +4753,7 @@ else if ( currtok.Type == Tok_DeclType ) if ( spec != Spec_Const && spec != Spec_Ptr && spec != Spec_Ref && spec != Spec_RValue ) { - log_failure( "Error, invalid specifier used in type definition: %s\n%s", currtok.Text, parser_to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -4885,7 +4885,7 @@ else if ( currtok.Type == Tok_DeclType ) if ( spec != Spec_Ptr && spec != Spec_Ref && spec != Spec_RValue ) { - log_failure( "Error, invalid specifier used in type definition: %s\n%s", currtok.Text, to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%SB", toktype_to_str(currtok), to_strbuilder(Context) ); pop(& Context); return InvalidCode; } @@ -4955,7 +4955,7 @@ else if ( currtok.Type == Tok_DeclType ) // && spec != Spec_NoExcept && spec != Spec_RValue ) { - log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_string(Context) ); + log_failure( "Error, invalid specifier used in type definition: %S\n%S", tok_to_str(currtok), strbuilder_to_str( parser_to_strbuilder(Context)) ); parser_pop(& Context); return InvalidCode; } @@ -4996,7 +4996,7 @@ else if ( currtok.Type == Tok_DeclType ) #ifdef GEN_USE_NEW_TYPENAME_PARSING if ( params_nested ) { - name_stripped.append( params_nested->to_string() ); + name_stripped.append( params_nested->to_strbuilder() ); } #endif @@ -5161,7 +5161,7 @@ CodeTypedef parser_parse_typedef() if ( ! ok_to_parse ) { - log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5187,7 +5187,7 @@ CodeTypedef parser_parse_typedef() } else { - log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_string(Context) ); + log_failure( "Unsupported or bad member definition after struct declaration\n%SB", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5208,7 +5208,7 @@ CodeTypedef parser_parse_typedef() } else if ( ! is_function ) { - log_failure( "Error, expected identifier for typedef\n%SB", parser_to_string(Context) ); + log_failure( "Error, expected identifier for typedef\n%SB", parser_to_strbuilder(Context) ); parser_pop(& Context); return InvalidCode; } @@ -5544,7 +5544,7 @@ CodeVar parser_parse_variable() break; default: - log_failure( "Invalid specifier %s for variable\n%s", spec_to_str( spec ), parser_to_string(Context) ); + log_failure( "Invalid specifier %S for variable\n%S", spec_to_str( spec ), strbuilder_to_str( parser_to_strbuilder(Context)) ); parser_pop(& Context); return InvalidCode; } diff --git a/base/components/types.hpp b/base/components/types.hpp index c2a1c32..3b69a80 100644 --- a/base/components/types.hpp +++ b/base/components/types.hpp @@ -102,7 +102,7 @@ Str module_flag_to_str( ModuleFlag flag ) local_persist Str lookup[ (u32)Num_ModuleFlags ] = { { "__none__", sizeof("__none__") - 1 }, - { "export", sizeof("export") - 1 }, + { "export", sizeof("export") - 1 }, { "import", sizeof("import") - 1 }, }; diff --git a/base/dependencies/containers.hpp b/base/dependencies/containers.hpp index 321ed4b..9fb6f36 100644 --- a/base/dependencies/containers.hpp +++ b/base/dependencies/containers.hpp @@ -102,16 +102,16 @@ struct Array #endif #if GEN_COMPILER_CPP && 0 -template bool append(Array& array, Array other) { return append( & array, other ); } -template bool append(Array& array, Type value) { return append( & array, value ); } -template bool append(Array& array, Type* items, usize item_num) { return append( & array, items, item_num ); } -template bool append_at(Array& array, Type item, usize idx) { return append_at( & array, item, idx ); } -template bool append_at(Array& array, Type* items, usize item_num, usize idx) { return append_at( & array, items, item_num, idx ); } -template void free(Array& array) { return free( & array ); } -template bool grow(Array& array, usize min_capacity) { return grow( & array, min_capacity); } -template bool reserve(Array& array, usize new_capacity) { return reserve( & array, new_capacity); } -template bool resize(Array& array, usize num) { return resize( & array, num); } -template bool set_capacity(Array& array, usize new_capacity) { return set_capacity( & array, new_capacity); } +template bool append(Array& array, Array other) { return append( & array, other ); } +template bool append(Array& array, Type value) { return append( & array, value ); } +template bool append(Array& array, Type* items, usize item_num) { return append( & array, items, item_num ); } +template bool append_at(Array& array, Type item, usize idx) { return append_at( & array, item, idx ); } +template bool append_at(Array& array, Type* items, usize item_num, usize idx) { return append_at( & array, items, item_num, idx ); } +template void free(Array& array) { return free( & array ); } +template bool grow(Array& array, usize min_capacity) { return grow( & array, min_capacity); } +template bool reserve(Array& array, usize new_capacity) { return reserve( & array, new_capacity); } +template bool resize(Array& array, usize num) { return resize( & array, num); } +template bool set_capacity(Array& array, usize new_capacity) { return set_capacity( & array, new_capacity); } template forceinline Type* begin(Array& array) { return array; } template forceinline Type* end(Array& array) { return array + array_get_header(array)->Num; } diff --git a/base/dependencies/debug.hpp b/base/dependencies/debug.hpp index fb48432..6870261 100644 --- a/base/dependencies/debug.hpp +++ b/base/dependencies/debug.hpp @@ -11,8 +11,10 @@ #if GEN_BUILD_DEBUG # if defined( GEN_COMPILER_MSVC ) # if _MSC_VER < 1300 +#pragma message("GEN_BUILD_DEBUG: __asm int 3") # define GEN_DEBUG_TRAP() __asm int 3 /* Trap to debugger! */ # else +#pragma message("GEN_BUILD_DEBUG: __debugbreak()") # define GEN_DEBUG_TRAP() __debugbreak() # endif # elif defined( GEN_COMPILER_TINYC ) @@ -21,6 +23,7 @@ # define GEN_DEBUG_TRAP() __builtin_trap() # endif #else +#pragma message("GEN_BUILD_DEBUG: omitted") # define GEN_DEBUG_TRAP() #endif @@ -48,7 +51,7 @@ local_persist thread_local \ char buf[GEN_PRINTF_MAXLEN] = { 0 }; \ \ - c_str_fmt(buf, GEN_PRINTF_MAXLEN, __VA_ARGS__); \ + c_str_fmt(buf, GEN_PRINTF_MAXLEN, __VA_ARGS__); \ GEN_PANIC(buf); \ } \ while (0) @@ -57,7 +60,8 @@ # define GEN_FATAL( ... ) \ do \ { \ - c_str_fmt_out_err( __VA_ARGS__ ); \ + c_str_fmt_out_err( __VA_ARGS__ ); \ + GEN_DEBUG_TRAP(); \ process_exit(1); \ } \ while (0) diff --git a/base/dependencies/strings.hpp b/base/dependencies/strings.hpp index fa28fbd..0c375d2 100644 --- a/base/dependencies/strings.hpp +++ b/base/dependencies/strings.hpp @@ -222,31 +222,31 @@ struct StrBuilder return strbuilder_make_length(allocator, buf, res); } - forceinline bool make_space_for(char const* str, ssize add_len) { return strbuilder_make_space_for(this, str, add_len); } - forceinline bool append(char c) { return strbuilder_append_char(this, c); } - forceinline bool append(char const* str) { return strbuilder_append_c_str(this, str); } - forceinline bool append(char const* str, ssize length) { return strbuilder_append_c_str_len(this, str, length); } - forceinline bool append(Str str) { return strbuilder_append_str(this, str); } - forceinline bool append(const StrBuilder other) { return strbuilder_append_string(this, other); } - forceinline ssize avail_space() const { return strbuilder_avail_space(* this); } - forceinline char* back() { return strbuilder_back(* this); } - forceinline bool contains(Str substring) const { return strbuilder_contains_str(* this, substring); } - forceinline bool contains(StrBuilder const& substring) const { return strbuilder_contains_string(* this, substring); } - forceinline ssize capacity() const { return strbuilder_capacity(* this); } - forceinline void clear() { strbuilder_clear(* this); } - forceinline StrBuilder duplicate(AllocatorInfo allocator) const { return strbuilder_duplicate(* this, allocator); } - forceinline void free() { strbuilder_free(this); } - forceinline bool is_equal(StrBuilder const& other) const { return strbuilder_are_equal(* this, other); } - forceinline bool is_equal(Str other) const { return strbuilder_are_equal_str(* this, other); } - forceinline ssize length() const { return strbuilder_length(* this); } - forceinline b32 starts_with(Str substring) const { return strbuilder_starts_with_str(* this, substring); } - forceinline b32 starts_with(StrBuilder substring) const { return strbuilder_starts_with_string(* this, substring); } - forceinline void skip_line() { strbuilder_skip_line(* this); } - forceinline void strip_space() { strbuilder_strip_space(* this); } - forceinline Str to_str() { return { Data, strbuilder_length(*this) }; } - forceinline void trim(char const* cut_set) { strbuilder_trim(* this, cut_set); } - forceinline void trim_space() { strbuilder_trim_space(* this); } - forceinline StrBuilder visualize_whitespace() const { return strbuilder_visualize_whitespace(* this); } + forceinline bool make_space_for(char const* str, ssize add_len) { return strbuilder_make_space_for(this, str, add_len); } + forceinline bool append(char c) { return strbuilder_append_char(this, c); } + forceinline bool append(char const* str) { return strbuilder_append_c_str(this, str); } + forceinline bool append(char const* str, ssize length) { return strbuilder_append_c_str_len(this, str, length); } + forceinline bool append(Str str) { return strbuilder_append_str(this, str); } + forceinline bool append(const StrBuilder other) { return strbuilder_append_string(this, other); } + forceinline ssize avail_space() const { return strbuilder_avail_space(* this); } + forceinline char* back() { return strbuilder_back(* this); } + forceinline bool contains(Str substring) const { return strbuilder_contains_str(* this, substring); } + forceinline bool contains(StrBuilder const& substring) const { return strbuilder_contains_string(* this, substring); } + forceinline ssize capacity() const { return strbuilder_capacity(* this); } + forceinline void clear() { strbuilder_clear(* this); } + forceinline StrBuilder duplicate(AllocatorInfo allocator) const { return strbuilder_duplicate(* this, allocator); } + forceinline void free() { strbuilder_free(this); } + forceinline bool is_equal(StrBuilder const& other) const { return strbuilder_are_equal(* this, other); } + forceinline bool is_equal(Str other) const { return strbuilder_are_equal_str(* this, other); } + forceinline ssize length() const { return strbuilder_length(* this); } + forceinline b32 starts_with(Str substring) const { return strbuilder_starts_with_str(* this, substring); } + forceinline b32 starts_with(StrBuilder substring) const { return strbuilder_starts_with_string(* this, substring); } + forceinline void skip_line() { strbuilder_skip_line(* this); } + forceinline void strip_space() { strbuilder_strip_space(* this); } + forceinline Str to_str() { return { Data, strbuilder_length(*this) }; } + forceinline void trim(char const* cut_set) { strbuilder_trim(* this, cut_set); } + forceinline void trim_space() { strbuilder_trim_space(* this); } + forceinline StrBuilder visualize_whitespace() const { return strbuilder_visualize_whitespace(* this); } forceinline StrBuilderHeader& get_header() { return * strbuilder_get_header(* this); } bool append_fmt(char const* fmt, ...) { diff --git a/base/helpers/base_codegen.hpp b/base/helpers/base_codegen.hpp index f68dcec..ec6be09 100644 --- a/base/helpers/base_codegen.hpp +++ b/base/helpers/base_codegen.hpp @@ -22,7 +22,7 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) char const* keyword = csv_enum.Col_2[idx].string; // TODO(Ed): to_c_str_entries and the others in here didn't have proper sizing of the Str slice. strbuilder_append_fmt( & enum_entries, "CT_%s,\n", code ); - strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", code, code ); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", code, code ); strbuilder_append_fmt( & to_keyword_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", keyword, keyword ); } @@ -40,7 +40,7 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) #pragma push_macro("local_persist") #undef local_persist - Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); + Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); CodeBody to_c_str_fns = parse_global_body( token_fmt( "entries", strbuilder_to_str(to_c_str_entries) , "keywords", strbuilder_to_str(to_keyword_c_str_entries) @@ -104,7 +104,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; strbuilder_append_fmt( & enum_entries, "Op_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -181,7 +181,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) FixedArena_16KB scratch; fixed_arena_init(& scratch); AllocatorInfo scratch_info = fixed_arena_allocator_info(& scratch); - CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); + CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); StrBuilder enum_entries = strbuilder_make_reserve( scratch_info, kilobytes(1) ); StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(1) ); @@ -190,7 +190,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) char const* enum_str = csv_enum.Col_1[idx].string; char const* entry_to_str = csv_enum.Col_2[idx].string; strbuilder_append_fmt( & enum_entries, "Spec_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", entry_to_str, entry_to_str); } CodeEnum enum_code; @@ -267,7 +267,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) // We subtract 1 to remove the null terminator // This is because the tokens lexed are not null terminated. - keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1); + keymap[index] = crc32( enum_str.Ptr, enum_str.Len ); } do_once_end @@ -317,7 +317,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_definition = false ) { - FixedArena_64KB scratch; fixed_arena_init(& scratch); + FixedArena_64KB scratch; fixed_arena_init(& scratch); AllocatorInfo scratch_info = fixed_arena_allocator_info(& scratch); FileContents enum_content = file_read_contents( scratch_info, file_zero_terminate, etok_path ); @@ -330,15 +330,15 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ CSV_Object csv_attr_nodes; csv_parse( &csv_attr_nodes, rcast(char*, attrib_content.data), scratch_info, false ); - Array enum_strs = csv_enum_nodes.nodes[0].nodes; + Array enum_strs = csv_enum_nodes.nodes[0].nodes; Array enum_c_str_strs = csv_enum_nodes.nodes[1].nodes; - Array attribute_strs = csv_attr_nodes.nodes[0].nodes; + Array attribute_strs = csv_attr_nodes.nodes[0].nodes; Array attribute_c_str_strs = csv_attr_nodes.nodes[1].nodes; StrBuilder enum_entries = strbuilder_make_reserve( scratch_info, kilobytes(2) ); - StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); + StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); StrBuilder attribute_entries = strbuilder_make_reserve( scratch_info, kilobytes(2) ); - StrBuilder to_c_str_attributes = strbuilder_make_reserve( scratch_info, kilobytes(4) ); + StrBuilder to_c_str_attributes = strbuilder_make_reserve( scratch_info, kilobytes(4) ); StrBuilder attribute_define_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); for (usize idx = 0; idx < array_num(enum_strs); idx++) @@ -346,8 +346,8 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ char const* enum_str = enum_strs[idx].string; char const* entry_to_str = enum_c_str_strs [idx].string; - strbuilder_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); - strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); + strbuilder_append_fmt( & to_c_str_entries, "{ \"%s\", sizeof(\"%s\") - 1 },\n", entry_to_str, entry_to_str); } for ( usize idx = 0; idx < array_num(attribute_strs); idx++ ) @@ -355,8 +355,8 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ char const* attribute_str = attribute_strs[idx].string; char const* entry_to_str = attribute_c_str_strs [idx].string; - strbuilder_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); - strbuilder_append_fmt( & to_c_str_attributes, "{ \"%s\", sizeof(\"%s\") },\n", entry_to_str, entry_to_str); + strbuilder_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); + strbuilder_append_fmt( & to_c_str_attributes, "{ \"%s\", sizeof(\"%s\") - 1 },\n", entry_to_str, entry_to_str); strbuilder_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); if ( idx < array_num(attribute_strs) - 1 ) @@ -429,7 +429,7 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ // We subtract 1 to remove the null terminator // This is because the tokens lexed are not null terminated. - keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1); + keymap[index] = crc32( enum_str.Ptr, enum_str.Len); } do_once_end diff --git a/docs/AST_Design.md b/docs/AST_Design.md index cff0b14..2f3175a 100644 --- a/docs/AST_Design.md +++ b/docs/AST_Design.md @@ -46,13 +46,13 @@ The C/C++ interface procedures are located with `ast.hpp` (for the Code type), a All code types can either serialize using a function of the pattern: ```c -StrBuilder _to_string(Code code); +StrBuilder _to_strbuilder(Code code); // or -_to_string(Code code, StrBuilder& result); +_to_strbuilder(Code code, StrBuilder& result); ``` Where the first generates strings allocated using Allocator_StringArena and the other appends an existing strings with their backed allocator. -Serialization of for the AST is defined for `Code` in [`ast.chpp`](../base/components/ast.cpp) with `code_to_strbuilder_ptr` & `code_to_string`. +Serialization of for the AST is defined for `Code` in [`ast.chpp`](../base/components/ast.cpp) with `code_to_strbuilder_ptr` & `code_to_strbuilder`. Serializtion for the rest of the code types is within [`code_serialization.cpp`](../base/components/code_serialization.cpp). Gencpp's serialization does not provide coherent formatting of the code. The user should use a formatter after serializing. diff --git a/gen_c_library/c_library.cpp b/gen_c_library/c_library.cpp index e2d0eee..da92a1f 100644 --- a/gen_c_library/c_library.cpp +++ b/gen_c_library/c_library.cpp @@ -126,7 +126,7 @@ int gen_main() if (fn->Specs) { s32 constexpr_found = fn->Specs.remove( Spec_Constexpr ); if (constexpr_found > -1) { - //log_fmt("Found constexpr: %SB\n", entry.to_string()); + //log_fmt("Found constexpr: %SB\n", entry.to_strbuilder()); fn->Specs.append(Spec_Inline); } } @@ -549,9 +549,9 @@ do \ { CodeTypename type = using_ver->UnderlyingType; CodeTypedef typedef_ver = parse_typedef(token_fmt( - "ReturnType", to_string(type->ReturnType).to_str() + "ReturnType", to_strbuilder(type->ReturnType).to_str() , "Name" , using_ver->Name - , "Parameters", to_string(type->Params).to_str() + , "Parameters", to_strbuilder(type->Params).to_str() , stringize( typedef ( * )(); ))); @@ -694,7 +694,7 @@ do \ s32 constexpr_found = var->Specs ? var->Specs.remove( Spec_Constexpr ) : - 1; if (constexpr_found > -1) { - //log_fmt("Found constexpr: %SB\n", entry.to_string()); + //log_fmt("Found constexpr: %SB\n", entry.to_strbuilder()); if (var->Name.contains(txt("AST_ArrSpecs_Cap"))) { Code def = untyped_str(txt( @@ -716,7 +716,7 @@ R"(#define AST_ArrSpecs_Cap \ ast.append(def); break; } - CodeDefine def = def_define(var->Name, var->Value.to_string()); + CodeDefine def = def_define(var->Name, var->Value.to_strbuilder()); ast.append(def); break; } @@ -1319,7 +1319,7 @@ R"(#define ( code ) _Generic( (code), \ Code define_ver = untyped_str(token_fmt( "name", var->Name , "value", var->Value->Content - , "type", var->ValueType.to_string().to_str() + , "type", var->ValueType.to_strbuilder().to_str() , "#define () \n" )); src_lexer.append(define_ver); @@ -1364,7 +1364,7 @@ R"(#define ( code ) _Generic( (code), \ Code define_ver = untyped_str(token_fmt( "name", var->Name , "value", var->Value->Content - , "type", var->ValueType.to_string().to_str() + , "type", var->ValueType.to_strbuilder().to_str() , "#define () \n" )); src_parser.append(define_ver); diff --git a/scripts/genccp.natstepfilter b/scripts/genccp.natstepfilter index 76db1c8..b4b5e86 100644 --- a/scripts/genccp.natstepfilter +++ b/scripts/genccp.natstepfilter @@ -21,7 +21,7 @@ NoStepInto - gen::Code.*::to_string + gen::Code.*::to_strbuilder NoStepInto From e15ac22132949e4def4fcb07db6989a88ae7d608 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 13 Dec 2024 15:36:40 -0500 Subject: [PATCH 5/8] Made Token::Text/Length into Str Text; (Str slice) --- base/components/lexer.cpp | 351 ++++++++++++++++++------------------- base/components/parser.cpp | 241 +++++++++++++------------ 2 files changed, 290 insertions(+), 302 deletions(-) diff --git a/base/components/lexer.cpp b/base/components/lexer.cpp index 492a8ff..4009ec0 100644 --- a/base/components/lexer.cpp +++ b/base/components/lexer.cpp @@ -26,88 +26,84 @@ enum TokFlags : u32 struct Token { - char const* Text; - sptr Length; - TokType Type; - s32 Line; - s32 Column; - u32 Flags; + Str Text; + TokType Type; + s32 Line; + s32 Column; + u32 Flags; }; constexpr Token NullToken { nullptr, 0, Tok_Invalid, false, 0, TF_Null }; -AccessSpec tok_to_access_specifier(Token tok) -{ +forceinline +AccessSpec tok_to_access_specifier(Token tok) { return scast(AccessSpec, tok.Type); } -Str tok_to_str(Token tok) -{ - Str str = { tok.Text, tok.Length }; - return str; +forceinline +Str tok_to_str(Token tok) { + return tok.Text; } -bool tok_is_valid( Token tok ) -{ - return tok.Text && tok.Length && tok.Type != Tok_Invalid; +forceinline +bool tok_is_valid( Token tok ) { + return tok.Text.Ptr && tok.Text.Len && tok.Type != Tok_Invalid; } -bool tok_is_access_operator(Token tok) -{ +forceinline +bool tok_is_access_operator(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_AccessOperator ); } -bool tok_is_access_specifier(Token tok) -{ +forceinline +bool tok_is_access_specifier(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_AccessSpecifier ); } -bool tok_is_attribute(Token tok) -{ +forceinline +bool tok_is_attribute(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_Attribute ); } -bool tok_is_operator(Token tok) -{ +forceinline +bool tok_is_operator(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_Operator ); } -bool tok_is_preprocessor(Token tok) -{ +forceinline +bool tok_is_preprocessor(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_Preprocess ); } -bool tok_is_preprocess_cond(Token tok) -{ +forceinline +bool tok_is_preprocess_cond(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_Preprocess_Cond ); } -bool tok_is_specifier(Token tok) -{ +forceinline +bool tok_is_specifier(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_Specifier ); } -bool tok_is_end_definition(Token tok) -{ +forceinline +bool tok_is_end_definition(Token tok) { return bitfield_is_equal( u32, tok.Flags, TF_EndDefinition ); } StrBuilder tok_to_strbuilder(Token tok) { - StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); - - Str type_str = toktype_to_str( tok.Type ); + StrBuilder result = strbuilder_make_reserve( GlobalAllocator, kilobytes(4) ); + Str type_str = toktype_to_str( tok.Type ); strbuilder_append_fmt( & result, "Line: %d Column: %d, Type: %.*s Content: %.*s" , tok.Line, tok.Column , type_str.Len, type_str.Ptr - , tok.Length, tok.Text + , tok.Text.Len, tok.Text.Ptr ); - return result; } -struct TokArray +struct TokArray { Array(Token) Arr; s32 Idx; @@ -122,14 +118,12 @@ Token* lex_current(TokArray* self, bool skip_formatting ) while ( self->Arr[self->Idx].Type == Tok_NewLine || self->Arr[self->Idx].Type == Tok_Comment ) self->Idx++; } - return & self->Arr[self->Idx]; } Token* lex_peek(TokArray self, bool skip_formatting) { s32 idx = self.Idx; - if ( skip_formatting ) { while ( self.Arr[idx].Type == Tok_NewLine ) @@ -137,14 +131,12 @@ Token* lex_peek(TokArray self, bool skip_formatting) return & self.Arr[idx]; } - return & self.Arr[idx]; } Token* lex_previous(TokArray self, bool skip_formatting) { s32 idx = self.Idx; - if ( skip_formatting ) { while ( self.Arr[idx].Type == Tok_NewLine ) @@ -152,14 +144,12 @@ Token* lex_previous(TokArray self, bool skip_formatting) return & self.Arr[idx]; } - return & self.Arr[idx - 1]; } Token* lex_next(TokArray self, bool skip_formatting) { s32 idx = self.Idx; - if ( skip_formatting ) { while ( self.Arr[idx].Type == Tok_NewLine ) @@ -167,7 +157,6 @@ Token* lex_next(TokArray self, bool skip_formatting) return & self.Arr[idx + 1]; } - return & self.Arr[idx + 1]; } @@ -234,17 +223,17 @@ forceinline s32 lex_preprocessor_directive( LexContext* ctx ) { char const* hash = ctx->scanner; - Token hash_tok = { hash, 1, Tok_Preprocess_Hash, ctx->line, ctx->column, TF_Preprocess }; + Token hash_tok = { { hash, 1 }, Tok_Preprocess_Hash, ctx->line, ctx->column, TF_Preprocess }; array_append( Lexer_Tokens, hash_tok ); move_forward(); skip_whitespace(); - ctx->token.Text = ctx->scanner; + ctx->token.Text.Ptr = ctx->scanner; while (ctx->left && ! char_is_space((* ctx->scanner)) ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } ctx->token.Type = str_to_toktype( tok_to_str(ctx->token) ); @@ -268,18 +257,18 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( * ctx->scanner == '\\' && ! within_string && ! within_char ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; if ( (* ctx->scanner) == '\r' ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } if ( (* ctx->scanner) == '\n' ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; continue; } else @@ -295,22 +284,22 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( (* ctx->scanner) == '\r' ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } if ( (* ctx->scanner) == '\n' ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; break; } move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } - ctx->token.Length = ctx->token.Length + ctx->token.Text - hash; - ctx->token.Text = hash; + ctx->token.Text.Len = ctx->token.Text.Len + ctx->token.Text.Ptr - hash; + ctx->token.Text.Ptr = hash; array_append( Lexer_Tokens, ctx->token ); return Lex_Continue; // Skip found token, its all handled here. } @@ -333,31 +322,31 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( ctx->token.Type == Tok_Preprocess_Define ) { - Token name = { ctx->scanner, 0, Tok_Identifier, ctx->line, ctx->column, TF_Preprocess }; + Token name = { { ctx->scanner, 0 }, Tok_Identifier, ctx->line, ctx->column, TF_Preprocess }; - name.Text = ctx->scanner; - name.Length = 1; + name.Text.Ptr = ctx->scanner; + name.Text.Len = 1; move_forward(); while ( ctx->left && ( char_is_alphanumeric((* ctx->scanner)) || (* ctx->scanner) == '_' ) ) { move_forward(); - name.Length++; + name.Text.Len++; } if ( ctx->left && (* ctx->scanner) == '(' ) { move_forward(); - name.Length++; + name.Text.Len++; } array_append( Lexer_Tokens, name ); - u64 key = crc32( name.Text, name.Length ); + u64 key = crc32( name.Text.Ptr, name.Text.Len ); hashtable_set(ctx->defines, key, tok_to_str(name) ); } - Token preprocess_content = { ctx->scanner, 0, Tok_Preprocess_Content, ctx->line, ctx->column, TF_Preprocess }; + Token preprocess_content = { { ctx->scanner, 0 }, Tok_Preprocess_Content, ctx->line, ctx->column, TF_Preprocess }; if ( ctx->token.Type == Tok_Preprocess_Include ) { @@ -365,7 +354,7 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( (* ctx->scanner) != '"' && (* ctx->scanner) != '<' ) { - StrBuilder directive_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 80, ctx->left + preprocess_content.Length ), ctx->token.Text ); + StrBuilder directive_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 80, ctx->left + preprocess_content.Text.Len ), ctx->token.Text.Ptr ); log_failure( "gen::Parser::lex: Expected '\"' or '<' after #include, not '%c' (%d, %d)\n%s" , (* ctx->scanner) @@ -376,16 +365,16 @@ s32 lex_preprocessor_directive( LexContext* ctx ) return Lex_ReturnNull; } move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; while ( ctx->left && (* ctx->scanner) != '"' && (* ctx->scanner) != '>' ) { move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; } move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; if ( (* ctx->scanner) == '\r' && ctx->scanner[1] == '\n' ) { @@ -416,24 +405,24 @@ s32 lex_preprocessor_directive( LexContext* ctx ) if ( (* ctx->scanner) == '\\' && ! within_string && ! within_char ) { move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; if ( (* ctx->scanner) == '\r' ) { move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; } if ( (* ctx->scanner) == '\n' ) { move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; continue; } else { - StrBuilder directive_str = strbuilder_make_length( GlobalAllocator, ctx->token.Text, ctx->token.Length ); - StrBuilder content_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 400, ctx->left + preprocess_content.Length ), preprocess_content.Text ); + StrBuilder directive_str = strbuilder_make_length( GlobalAllocator, ctx->token.Text.Ptr, ctx->token.Text.Len ); + StrBuilder content_str = strbuilder_fmt_buf( GlobalAllocator, "%.*s", min( 400, ctx->left + preprocess_content.Text.Len ), preprocess_content.Text.Ptr ); log_failure( "gen::Parser::lex: Invalid escape sequence '\\%c' (%d, %d)" " in preprocessor directive '%s' (%d, %d)\n%s" @@ -457,7 +446,7 @@ s32 lex_preprocessor_directive( LexContext* ctx ) } move_forward(); - preprocess_content.Length++; + preprocess_content.Text.Len++; } array_append( Lexer_Tokens, preprocess_content ); @@ -520,9 +509,9 @@ void lex_found_token( LexContext* ctx ) u64 key = 0; if ( (* ctx->scanner) == '(') - key = crc32( ctx->token.Text, ctx->token.Length + 1 ); + key = crc32( ctx->token.Text.Ptr, ctx->token.Text.Len + 1 ); else - key = crc32( ctx->token.Text, ctx->token.Length ); + key = crc32( ctx->token.Text.Ptr, ctx->token.Text.Len ); Str* define = hashtable_get(ctx->defines, key ); if ( define ) @@ -533,7 +522,7 @@ void lex_found_token( LexContext* ctx ) if ( ctx->left && (* ctx->scanner) == '(' ) { move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; s32 level = 0; while ( ctx->left && ((* ctx->scanner) != ')' || level > 0) ) @@ -545,22 +534,22 @@ void lex_found_token( LexContext* ctx ) level--; move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } move_forward(); - ctx->token.Length++; + ctx->token.Text.Len++; } //if ( (* ctx->scanner) == '\r' && ctx->scanner[1] == '\n' ) //{ // move_forward(); - // ctx->token.Length++; + // ctx->token..Text.Length++; //} //else if ( (* ctx->scanner) == '\n' ) //{ // move_forward(); - // ctx->token.Length++; + // ctx->token..Text.Length++; //} } else @@ -625,7 +614,7 @@ TokArray lex( Str content ) #endif { - Token thanks_c = { c.scanner, 0, Tok_Invalid, c.line, c.column, TF_Null }; + Token thanks_c = { { c.scanner, 0 }, Tok_Invalid, c.line, c.column, TF_Null }; c.token = thanks_c; } @@ -636,7 +625,7 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '\r') { move_forward(); - c.token.Length = 1; + c.token.Text.Len = 1; } if ( (* ctx->scanner) == '\n' ) @@ -644,14 +633,14 @@ TokArray lex( Str content ) move_forward(); c.token.Type = Tok_NewLine; - c.token.Length++; + c.token.Text.Len++; array_append( Lexer_Tokens, c.token ); continue; } } - c.token.Length = 0; + c.token.Text.Len = 0; skip_whitespace(); if ( c.left <= 0 ) @@ -670,19 +659,19 @@ TokArray lex( Str content ) //if ( last_type == Tok_Preprocess_Pragma ) { { - Token thanks_c = { c.scanner, 0, Tok_Invalid, c.line, c.column, TF_Null }; + Token thanks_c = { { c.scanner, 0 }, Tok_Invalid, c.line, c.column, TF_Null }; c.token = thanks_c; } if ( (* ctx->scanner) == '\r') { move_forward(); - c.token.Length = 1; + c.token.Text.Len = 1; } if ( (* ctx->scanner) == '\n' ) { c.token.Type = Tok_NewLine; - c.token.Length++; + c.token.Text.Len++; move_forward(); array_append( Lexer_Tokens, c.token ); @@ -700,8 +689,8 @@ TokArray lex( Str content ) } case '.': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Access_MemberSymbol; c.token.Flags = TF_AccessOperator; @@ -714,9 +703,9 @@ TokArray lex( Str content ) move_forward(); if( (* ctx->scanner) == '.' ) { - c.token.Length = 3; - c.token.Type = Tok_Varadic_Argument; - c.token.Flags = TF_Null; + c.token.Text.Len = 3; + c.token.Type = Tok_Varadic_Argument; + c.token.Flags = TF_Null; move_forward(); } else @@ -731,8 +720,8 @@ TokArray lex( Str content ) } case '&' : { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Ampersand; c.token.Flags |= TF_Operator; c.token.Flags |= TF_Specifier; @@ -742,8 +731,8 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '&' ) // && { - c.token.Length = 2; - c.token.Type = Tok_Ampersand_DBL; + c.token.Text.Len = 2; + c.token.Type = Tok_Ampersand_DBL; if (c.left) move_forward(); @@ -753,9 +742,9 @@ TokArray lex( Str content ) } case ':': { - c.token.Text = c.scanner; - c.token.Length = 1; - c.token.Type = Tok_Assign_Classifer; + Str text = { c.scanner, 1 }; + c.token.Text = text; + c.token.Type = Tok_Assign_Classifer; // Can be either a classifier (ParentType, Bitfield width), or ternary else // token.Type = Tok_Colon; @@ -765,15 +754,15 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == ':' ) { move_forward(); - c.token.Type = Tok_Access_StaticSymbol; - c.token.Length++; + c.token.Type = Tok_Access_StaticSymbol; + c.token.Text.Len++; } goto FoundToken; } case '{': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_BraceCurly_Open; if (c.left) @@ -782,8 +771,8 @@ TokArray lex( Str content ) } case '}': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_BraceCurly_Close; c.token.Flags = TF_EndDefinition; @@ -795,8 +784,8 @@ TokArray lex( Str content ) } case '[': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_BraceSquare_Open; if ( c.left ) { @@ -804,8 +793,8 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == ']' ) { - c.token.Length = 2; - c.token.Type = Tok_Operator; + c.token.Text.Len = 2; + c.token.Type = Tok_Operator; move_forward(); } } @@ -813,8 +802,8 @@ TokArray lex( Str content ) } case ']': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_BraceSquare_Close; if (c.left) @@ -823,8 +812,8 @@ TokArray lex( Str content ) } case '(': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Capture_Start; if (c.left) @@ -833,8 +822,8 @@ TokArray lex( Str content ) } case ')': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Capture_End; if (c.left) @@ -843,8 +832,8 @@ TokArray lex( Str content ) } case '\'': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Char; c.token.Flags = TF_Literal; @@ -853,32 +842,32 @@ TokArray lex( Str content ) if ( c.left && (* ctx->scanner) == '\\' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; if ( (* ctx->scanner) == '\'' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } } while ( c.left && (* ctx->scanner) != '\'' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } if ( c.left ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } goto FoundToken; } case ',': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Comma; c.token.Flags = TF_Operator; @@ -888,8 +877,8 @@ TokArray lex( Str content ) } case '*': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Star; c.token.Flags |= TF_Specifier; c.token.Flags |= TF_Operator; @@ -899,7 +888,7 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '=' ) { - c.token.Length++; + c.token.Text.Len++; c.token.Flags |= TF_Assign; // c.token.Type = Tok_Assign_Multiply; @@ -911,8 +900,8 @@ TokArray lex( Str content ) } case ';': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Statement_End; c.token.Flags = TF_EndDefinition; @@ -924,8 +913,8 @@ TokArray lex( Str content ) } case '"': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_String; c.token.Flags |= TF_Literal; @@ -941,25 +930,25 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '\\' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; if ( c.left ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } continue; } move_forward(); - c.token.Length++; + c.token.Text.Len++; } goto FoundToken; } case '?': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Operator; // c.token.Type = Tok_Ternary; c.token.Flags = TF_Operator; @@ -971,8 +960,8 @@ TokArray lex( Str content ) } case '=': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Operator; // c.token.Type = Tok_Assign; c.token.Flags = TF_Operator; @@ -983,7 +972,7 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '=' ) { - c.token.Length++; + c.token.Text.Len++; c.token.Flags = TF_Operator; if (c.left) @@ -1027,8 +1016,8 @@ TokArray lex( Str content ) } case '|': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Operator; c.token.Flags = TF_Operator; // token.Type = Tok_L_Or; @@ -1038,7 +1027,7 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '=' ) { - c.token.Length++; + c.token.Text.Len++; c.token.Flags |= TF_Assign; // token.Flags |= TokFlags::Assignment; // token.Type = Tok_Assign_L_Or; @@ -1046,9 +1035,9 @@ TokArray lex( Str content ) if (c.left) move_forward(); } - else while ( c.left && (* ctx->scanner) == *(c.scanner - 1) && c.token.Length < 3 ) + else while ( c.left && (* ctx->scanner) == *(c.scanner - 1) && c.token.Text.Len < 3 ) { - c.token.Length++; + c.token.Text.Len++; if (c.left) move_forward(); @@ -1059,8 +1048,8 @@ TokArray lex( Str content ) // Dash is unfortunatlly a bit more complicated... case '-': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Operator; // token.Type = Tok_Subtract; c.token.Flags = TF_Operator; @@ -1070,7 +1059,7 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '>' ) { - c.token.Length++; + c.token.Text.Len++; // token.Type = Tok_Access_PointerToMemberSymbol; c.token.Flags |= TF_AccessOperator; move_forward(); @@ -1078,22 +1067,22 @@ TokArray lex( Str content ) if ( (* ctx->scanner) == '*' ) { // token.Type = Tok_Access_PointerToMemberOfPointerSymbol; - c.token.Length++; + c.token.Text.Len++; move_forward(); } } else if ( (* ctx->scanner) == '=' ) { - c.token.Length++; + c.token.Text.Len++; // token.Type = Tok_Assign_Subtract; c.token.Flags |= TF_Assign; if (c.left) move_forward(); } - else while ( c.left && (* ctx->scanner) == *(c.scanner - 1) && c.token.Length < 3 ) + else while ( c.left && (* ctx->scanner) == *(c.scanner - 1) && c.token.Text.Len < 3 ) { - c.token.Length++; + c.token.Text.Len++; if (c.left) move_forward(); @@ -1103,8 +1092,8 @@ TokArray lex( Str content ) } case '/': { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Operator; // token.Type = Tok_Divide; c.token.Flags = TF_Operator; @@ -1116,40 +1105,40 @@ TokArray lex( Str content ) { // token.Type = TokeType::Assign_Divide; move_forward(); - c.token.Length++; + c.token.Text.Len++; c.token.Flags = TF_Assign; } else if ( (* ctx->scanner) == '/' ) { - c.token.Type = Tok_Comment; - c.token.Length = 2; - c.token.Flags = TF_Null; + c.token.Type = Tok_Comment; + c.token.Text.Len = 2; + c.token.Flags = TF_Null; move_forward(); while ( c.left && (* ctx->scanner) != '\n' && (* ctx->scanner) != '\r' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } if ( (* ctx->scanner) == '\r' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } if ( (* ctx->scanner) == '\n' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } array_append( Lexer_Tokens, c.token ); continue; } else if ( (* ctx->scanner) == '*' ) { - c.token.Type = Tok_Comment; - c.token.Length = 2; - c.token.Flags = TF_Null; + c.token.Type = Tok_Comment; + c.token.Text.Len = 2; + c.token.Flags = TF_Null; move_forward(); bool star = (* ctx->scanner) == '*'; @@ -1158,25 +1147,25 @@ TokArray lex( Str content ) while ( c.left && ! at_end ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; star = (* ctx->scanner) == '*'; slash = c.scanner[1] == '/'; at_end = star && slash; } - c.token.Length += 2; + c.token.Text.Len += 2; move_forward(); move_forward(); if ( (* ctx->scanner) == '\r' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } if ( (* ctx->scanner) == '\n' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } array_append( Lexer_Tokens, c.token ); // end_line(); @@ -1189,14 +1178,14 @@ TokArray lex( Str content ) if ( char_is_alpha( (* ctx->scanner) ) || (* ctx->scanner) == '_' ) { - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; move_forward(); while ( c.left && ( char_is_alphanumeric((* ctx->scanner)) || (* ctx->scanner) == '_' ) ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } goto FoundToken; @@ -1205,8 +1194,8 @@ TokArray lex( Str content ) { // This is a very brute force lex, no checks are done for validity of literal. - c.token.Text = c.scanner; - c.token.Length = 1; + Str text = { c.scanner, 1 }; + c.token.Text = text; c.token.Type = Tok_Number; c.token.Flags = TF_Literal; move_forward(); @@ -1218,12 +1207,12 @@ TokArray lex( Str content ) ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; while ( c.left && char_is_hex_digit((* ctx->scanner)) ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } goto FoundToken; @@ -1232,18 +1221,18 @@ TokArray lex( Str content ) while ( c.left && char_is_digit((* ctx->scanner)) ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } if ( c.left && (* ctx->scanner) == '.' ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; while ( c.left && char_is_digit((* ctx->scanner)) ) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } // Handle number literal suffixes in a botched way @@ -1256,13 +1245,13 @@ TokArray lex( Str content ) { char prev = (* ctx->scanner); move_forward(); - c.token.Length++; + c.token.Text.Len++; // Handle 'll'/'LL' as a special case when we just processed an 'l'/'L' if (c.left && (prev == 'l' || prev == 'L') && ((* ctx->scanner) == 'l' || (* ctx->scanner) == 'L')) { move_forward(); - c.token.Length++; + c.token.Text.Len++; } } } @@ -1278,7 +1267,7 @@ TokArray lex( Str content ) log_fmt( "Token %d Type: %s : %.*s\n" , idx , toktype_to_str( Lexer_Tokens[ idx ].Type ).Ptr - , Lexer_Tokens[ idx ].Length, Lexer_Tokens[ idx ].Text + , Lexer_Tokens[ idx ].Text.Len, Lexer_Tokens[ idx ].Text.Ptr ); } @@ -1298,18 +1287,18 @@ TokArray lex( Str content ) TokType last_type = array_back(Lexer_Tokens)->Type; if ( last_type == Tok_Preprocess_Macro ) { - Token thanks_c = { c.scanner, 0, Tok_Invalid, c.line, c.column, TF_Null }; + Token thanks_c = { { c.scanner, 0 }, Tok_Invalid, c.line, c.column, TF_Null }; c.token = thanks_c; if ( (* ctx->scanner) == '\r') { move_forward(); - c.token.Length = 1; + c.token.Text.Len = 1; } if ( (* ctx->scanner) == '\n' ) { c.token.Type = Tok_NewLine; - c.token.Length++; + c.token.Text.Len++; move_forward(); array_append( Lexer_Tokens, c.token ); diff --git a/base/components/parser.cpp b/base/components/parser.cpp index 671afea..aad9116 100644 --- a/base/components/parser.cpp +++ b/base/components/parser.cpp @@ -52,23 +52,23 @@ StrBuilder parser_to_strbuilder(ParseContext ctx) Token scope_start = ctx.Scope->Start; Token last_valid = ctx.Tokens.Idx >= array_num(ctx.Tokens.Arr) ? ctx.Tokens.Arr[array_num(ctx.Tokens.Arr) -1] : (* lex_current(& ctx.Tokens, true)); - sptr length = scope_start.Length; - char const* current = scope_start.Text + length; - while ( current <= array_back( ctx.Tokens.Arr)->Text && *current != '\n' && length < 74 ) + sptr length = scope_start.Text.Len; + char const* current = scope_start.Text.Ptr + length; + while ( current <= array_back( ctx.Tokens.Arr)->Text.Ptr && (* current) != '\n' && length < 74 ) { current++; length++; } - Str scope_str = { scope_start.Text, length }; + Str scope_str = { scope_start.Text.Ptr, length }; StrBuilder line = strbuilder_make_str( GlobalAllocator, scope_str ); strbuilder_append_fmt( & result, "\tScope : %s\n", line ); strbuilder_free(& line); - sptr dist = (sptr)last_valid.Text - (sptr)scope_start.Text + 2; + sptr dist = (sptr)last_valid.Text.Ptr - (sptr)scope_start.Text.Ptr + 2; sptr length_from_err = dist; - Str err_str = { last_valid.Text, length_from_err }; + Str err_str = { last_valid.Text.Ptr, length_from_err }; StrBuilder line_from_err = strbuilder_make_str( GlobalAllocator, err_str ); if ( length_from_err < 100 ) @@ -82,7 +82,7 @@ StrBuilder parser_to_strbuilder(ParseContext ctx) { if ( tok_is_valid(curr_scope->Name) ) { - strbuilder_append_fmt(& result, "\t%d: %s, AST Name: %.*s\n", level, curr_scope->ProcName.Ptr, curr_scope->Name.Length, curr_scope->Name.Text ); + strbuilder_append_fmt(& result, "\t%d: %s, AST Name: %.*s\n", level, curr_scope->ProcName.Ptr, curr_scope->Name.Text.Len, curr_scope->Name.Text.Ptr ); } else { @@ -119,7 +119,7 @@ bool lex__eat(TokArray* self, TokType type ) Token tok = * lex_current( self, lex_skip_formatting ); log_failure( "Parse Error, TokArray::eat, Expected: ' %s ' not ' %.*s ' (%d, %d)`\n%s" , toktype_to_str(type).Ptr - , at_idx.Length, at_idx.Text + , at_idx.Text.Len, at_idx.Text.Ptr , tok.Line , tok.Column , parser_to_strbuilder(Context) @@ -513,7 +513,7 @@ Code parse_array_decl() { push_scope(); - if ( check( Tok_Operator ) && currtok.Text[0] == '[' && currtok.Text[1] == ']' ) + if ( check( Tok_Operator ) && currtok.Text.Ptr[0] == '[' && currtok.Text.Ptr[1] == ']' ) { Code array_expr = untyped_str( txt(" ") ); eat( Tok_Operator ); @@ -549,7 +549,7 @@ Code parse_array_decl() eat( currtok.Type ); } - untyped_tok.Length = ( (sptr)prevtok.Text + prevtok.Length ) - (sptr)untyped_tok.Text; + untyped_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr; Code array_expr = untyped_str( tok_to_str(untyped_tok) ); // [ @@ -614,7 +614,7 @@ CodeAttributes parse_attributes() eat( Tok_Attribute_Close ); // [[ ]] - len = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )start.Text; + len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )start.Text.Ptr; } else if ( check( Tok_Decl_GNU_Attribute ) ) { @@ -633,7 +633,7 @@ CodeAttributes parse_attributes() eat( Tok_Capture_End ); // __attribute__(( )) - len = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )start.Text; + len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )start.Text.Ptr; } else if ( check( Tok_Decl_MSVC_Attribute ) ) { @@ -650,7 +650,7 @@ CodeAttributes parse_attributes() eat( Tok_Capture_End ); // __declspec( ) - len = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )start.Text; + len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )start.Text.Ptr; } else if ( tok_is_attribute(currtok) ) { @@ -674,14 +674,14 @@ CodeAttributes parse_attributes() eat(Tok_Capture_End); } - len = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )start.Text; + len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )start.Text.Ptr; // ( ... ) } } if ( len > 0 ) { - Str attribute_txt = { start.Text, len }; + Str attribute_txt = { start.Text.Ptr, len }; parser_pop(& Context); StrBuilder name_stripped = parser_strip_formatting( attribute_txt, parser_strip_formatting_dont_preserve_newlines ); @@ -1081,7 +1081,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) attributes = more_attributes; } - if ( currtok.Type == Tok_Operator && currtok.Text[0] == '~' ) + if ( currtok.Type == Tok_Operator && currtok.Text.Ptr[0] == '~' ) { member = cast(Code, parser_parse_destructor( specifiers )); // ~() @@ -1107,9 +1107,9 @@ CodeBody parse_class_struct_body( TokType which, Token name ) case Tok_Type_int: case Tok_Type_double: { - if ( nexttok.Type == Tok_Capture_Start && name.Length && currtok.Type == Tok_Identifier ) + if ( nexttok.Type == Tok_Capture_Start && name.Text.Len && currtok.Type == Tok_Identifier ) { - if ( c_str_compare_len( name.Text, currtok.Text, name.Length ) == 0 ) + if ( c_str_compare_len( name.Text.Ptr, currtok.Text.Ptr, name.Text.Len ) == 0 ) { member = cast(Code, parser_parse_constructor( specifiers )); // () @@ -1151,7 +1151,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) while ( left && currtok.Type != Tok_BraceCurly_Close ) { - untyped_tok.Length = ( (sptr)currtok.Text + currtok.Length ) - (sptr)untyped_tok.Text; + untyped_tok.Text.Len = ( (sptr)currtok.Text.Ptr + currtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr; eat( currtok.Type ); } @@ -1379,7 +1379,7 @@ CodeDefine parse_define() return InvalidCode; } - if ( currtok.Length == 0 ) + if ( currtok.Text.Len == 0 ) { define->Content = get_cached_string( tok_to_str(currtok) ); eat( Tok_Preprocess_Content ); @@ -1429,8 +1429,8 @@ Code parse_assignment_expression() eat( currtok.Type ); } - expr_tok.Length = ( ( sptr )currtok.Text + currtok.Length ) - ( sptr )expr_tok.Text - 1; - expr = untyped_str( tok_to_str(expr_tok) ); + expr_tok.Text.Len = ( ( sptr )currtok.Text.Ptr + currtok.Text.Len ) - ( sptr )expr_tok.Text.Ptr - 1; + expr = untyped_str( tok_to_str(expr_tok) ); // = return expr; } @@ -1508,7 +1508,7 @@ CodeFn parse_function_after_name( } // ( ) { } } - else if ( check(Tok_Operator) && currtok.Text[0] == '=' ) + else if ( check(Tok_Operator) && currtok.Text.Ptr[0] == '=' ) { eat(Tok_Operator); specifiers_append(specifiers, Spec_Pure ); @@ -1612,11 +1612,11 @@ Code parse_function_body() Token past = prevtok; - s32 len = ( (sptr)prevtok.Text + prevtok.Length ) - (sptr)start.Text; + s32 len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)start.Text.Ptr; if ( len > 0 ) { - Str str = { start.Text, len }; + Str str = { start.Text.Ptr, len }; body_append( result, cast(Code, def_execution( str )) ); } @@ -2000,19 +2000,19 @@ Code parse_global_nspace_constructor_destructor( CodeSpecifiers specifiers ) Token nav = tokens.Arr[ idx ]; for ( ; idx < array_num(tokens.Arr); idx++, nav = tokens.Arr[ idx ] ) { - if ( nav.Text[0] == '<' ) + if ( nav.Text.Ptr[0] == '<' ) { // Skip templated expressions as they mey have expressions with the () operators s32 capture_level = 0; s32 template_level = 0; for ( ; idx < array_num(tokens.Arr); idx++, nav = tokens.Arr[idx] ) { - if (nav.Text[ 0 ] == '<') + if (nav.Text.Ptr[ 0 ] == '<') ++ template_level; - if (nav.Text[ 0 ] == '>') + if (nav.Text.Ptr[ 0 ] == '>') -- template_level; - if (nav.Type == Tok_Operator && nav.Text[1] == '>') + if (nav.Type == Tok_Operator && nav.Text.Ptr[1] == '>') -- template_level; if ( nav.Type == Tok_Capture_Start) @@ -2047,7 +2047,7 @@ Code parse_global_nspace_constructor_destructor( CodeSpecifiers specifiers ) // ... bool possible_destructor = false; - if ( tok_left.Type == Tok_Operator && tok_left.Text[0] == '~') + if ( tok_left.Type == Tok_Operator && tok_left.Text.Ptr[0] == '~') { possible_destructor = true; -- idx; @@ -2066,12 +2066,12 @@ Code parse_global_nspace_constructor_destructor( CodeSpecifiers specifiers ) s32 template_level = 0; while ( idx != tokens.Idx ) { - if (tok_left.Text[ 0 ] == '<') + if (tok_left.Text.Ptr[ 0 ] == '<') ++ template_level; - if (tok_left.Text[ 0 ] == '>') + if (tok_left.Text.Ptr[ 0 ] == '>') -- template_level; - if (tok_left.Type == Tok_Operator && tok_left.Text[1] == '>') + if (tok_left.Type == Tok_Operator && tok_left.Text.Ptr[1] == '>') -- template_level; if ( template_level != 0 && tok_left.Type == Tok_Capture_Start) @@ -2087,7 +2087,7 @@ Code parse_global_nspace_constructor_destructor( CodeSpecifiers specifiers ) tok_left = tokens.Arr[idx]; } - bool is_same = c_str_compare_len( tok_right.Text, tok_left.Text, tok_right.Length ) == 0; + bool is_same = c_str_compare_len( tok_right.Text.Ptr, tok_left.Text.Ptr, tok_right.Text.Len ) == 0; if (tok_left.Type == Tok_Identifier && is_same) { // We have found the pattern we desired @@ -2134,12 +2134,12 @@ Token parse_identifier( bool* possible_member_function ) return invalid; } - if ( currtok.Type == Tok_Operator && currtok.Text[0] == '~' ) + if ( currtok.Type == Tok_Operator && currtok.Text.Ptr[0] == '~' ) { bool is_destructor = str_are_equal( Context.Scope->Prev->ProcName, txt("parser_parse_destructor")); if (is_destructor) { - name.Length = ( ( sptr )prevtok.Text + prevtok.Length ) - ( sptr )name.Text; + name.Text.Len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )name.Text.Ptr; parser_pop(& Context); return name; } @@ -2149,7 +2149,7 @@ Token parse_identifier( bool* possible_member_function ) return invalid; } - if ( currtok.Type == Tok_Operator && currtok.Text[0] == '*' && currtok.Length == 1 ) + if ( currtok.Type == Tok_Operator && currtok.Text.Ptr[0] == '*' && currtok.Text.Len == 1 ) { if ( possible_member_function ) *possible_member_function = true; @@ -2169,7 +2169,7 @@ Token parse_identifier( bool* possible_member_function ) return invalid; } - name.Length = ( (sptr)currtok.Text + currtok.Length ) - (sptr)name.Text; + name.Text.Len = ( (sptr)currtok.Text.Ptr + currtok.Text.Len ) - (sptr)name.Text.Ptr; eat( Tok_Identifier ); //