Completed initial conversion

This commit is contained in:
Edward R. Gonzalez 2024-12-03 19:31:26 -05:00
parent ba1dd1894a
commit d686831a7c
3 changed files with 160 additions and 151 deletions

View File

@ -97,17 +97,17 @@ void to_string_def(CodeConstructor self, String* result )
} }
if ( self->Params ) if ( self->Params )
append_fmt( result, "( %S )", GEN_NS to_string(self->Params) ); append_fmt( result, "( %S )", to_string(self->Params) );
else else
append( result, "()" ); append( result, "()" );
if ( self->InitializerList ) if ( self->InitializerList )
append_fmt( result, " : %S", GEN_NS to_string(self->InitializerList) ); append_fmt( result, " : %S", to_string(self->InitializerList) );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " // %s", self->InlineCmt->Content.Ptr ); append_fmt( result, " // %SC", self->InlineCmt->Content );
append_fmt( result, "\n{\n%S\n}\n", GEN_NS to_string(self->Body) ); append_fmt( result, "\n{\n%S\n}\n", to_string(self->Body) );
} }
void to_string_fwd(CodeConstructor self, String* result ) void to_string_fwd(CodeConstructor self, String* result )
@ -121,15 +121,15 @@ void to_string_fwd(CodeConstructor self, String* result )
} }
if ( self->Params ) if ( self->Params )
append_fmt( result, "( %S )", GEN_NS to_string(self->Params) ); append_fmt( result, "( %S )", to_string(self->Params) );
else else
append_fmt( result, "()"); append_fmt( result, "()");
if (self->Body) if (self->Body)
append_fmt( result, " = %S", GEN_NS to_string(self->Body) ); append_fmt( result, " = %S", to_string(self->Body) );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; // %s\n", self->InlineCmt->Content.ptr ); append_fmt( result, "; // %SC\n", self->InlineCmt->Content );
else else
append( result, ";\n" ); append( result, ";\n" );
} }
@ -168,7 +168,7 @@ void to_string_def( CodeClass self, String* result )
{ {
char const* access_level = to_str( ast->ParentAccess ); char const* access_level = to_str( ast->ParentAccess );
append_fmt( result, "%S : %s %S", ast->Name, access_level, to_string(ast->ParentType) ); append_fmt( result, "%SC : %s %S", ast->Name, access_level, to_string(ast->ParentType) );
CodeTypename interface = cast(CodeTypename, ast->ParentType->Next); CodeTypename interface = cast(CodeTypename, ast->ParentType->Next);
if ( interface ) if ( interface )
@ -187,10 +187,10 @@ void to_string_def( CodeClass self, String* result )
if ( ast->InlineCmt ) if ( ast->InlineCmt )
{ {
append_fmt( result, " // %s", ast->InlineCmt->Content.Ptr ); append_fmt( result, " // %SC", ast->InlineCmt->Content );
} }
append_fmt( result, "\n{\n%S\n}", GEN_NS to_string(ast->Body) ); append_fmt( result, "\n{\n%S\n}", to_string(ast->Body) );
if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) ) if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) )
append( result, ";\n"); append( result, ";\n");
@ -205,15 +205,15 @@ void to_string_fwd( CodeClass self, String* result )
append( result, "export " ); append( result, "export " );
if ( ast->Attributes ) if ( ast->Attributes )
append_fmt( result, "class %S %S", to_string(ast->Attributes), ast->Name ); append_fmt( result, "class %S %SC", to_string(ast->Attributes), ast->Name );
else append_fmt( result, "class %S", ast->Name ); else append_fmt( result, "class %SC", ast->Name );
// Check if it can have an end-statement // Check if it can have an end-statement
if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) ) if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) )
{ {
if ( ast->InlineCmt ) if ( ast->InlineCmt )
append_fmt( result, "; // %S\n", ast->InlineCmt->Content ); append_fmt( result, "; // %SC\n", ast->InlineCmt->Content );
else else
append( result,";\n"); append( result,";\n");
} }
@ -221,12 +221,12 @@ void to_string_fwd( CodeClass self, String* result )
String to_string(CodeDefine define) String to_string(CodeDefine define)
{ {
return string_fmt_buf( GlobalAllocator, "#define %S %S\n", define->Name, define->Content ); return string_fmt_buf( GlobalAllocator, "#define %SC %SC\n", define->Name, define->Content );
} }
void to_string(CodeDefine define, String* result ) void to_string(CodeDefine define, String* result )
{ {
append_fmt( result, "#define %S %S\n", define->Name, define->Content ); append_fmt( result, "#define %SC %SC\n", define->Name, define->Content );
} }
String to_string(CodeDestructor self) String to_string(CodeDestructor self)
@ -248,19 +248,19 @@ void to_string_def(CodeDestructor self, String* result )
{ {
if ( self->Name ) if ( self->Name )
{ {
append_fmt( result, "%S()", self->Name ); append_fmt( result, "%SC()", self->Name );
} }
else if ( self->Specs ) else if ( self->Specs )
{ {
if ( has(self->Specs, Spec_Virtual ) ) if ( has(self->Specs, Spec_Virtual ) )
append_fmt( result, "virtual ~%S()", self->Parent->Name ); append_fmt( result, "virtual ~%SC()", self->Parent->Name );
else else
append_fmt( result, "~%S()", self->Parent->Name ); append_fmt( result, "~%SC()", self->Parent->Name );
} }
else else
append_fmt( result, "~%S()", self->Parent->Name ); append_fmt( result, "~%SC()", self->Parent->Name );
append_fmt( result, "\n{\n%S\n}\n", GEN_NS to_string(self->Body) ); append_fmt( result, "\n{\n%S\n}\n", to_string(self->Body) );
} }
void to_string_fwd(CodeDestructor self, String* result ) void to_string_fwd(CodeDestructor self, String* result )
@ -268,20 +268,20 @@ void to_string_fwd(CodeDestructor self, String* result )
if ( self->Specs ) if ( self->Specs )
{ {
if ( has(self->Specs, Spec_Virtual ) ) if ( has(self->Specs, Spec_Virtual ) )
append_fmt( result, "virtual ~%S();\n", self->Parent->Name ); append_fmt( result, "virtual ~%SC();\n", self->Parent->Name );
else else
append_fmt( result, "~%S()", self->Parent->Name ); append_fmt( result, "~%SC()", self->Parent->Name );
if ( has(self->Specs, Spec_Pure ) ) if ( has(self->Specs, Spec_Pure ) )
append( result, " = 0;" ); append( result, " = 0;" );
else if (self->Body) else if (self->Body)
append_fmt( result, " = %S;", GEN_NS to_string(self->Body) ); append_fmt( result, " = %S;", to_string(self->Body) );
} }
else else
append_fmt( result, "~%S();", self->Parent->Name ); append_fmt( result, "~%SC();", self->Parent->Name );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " %S", self->InlineCmt->Content ); append_fmt( result, " %SC", self->InlineCmt->Content );
else else
append( result, "\n"); append( result, "\n");
} }
@ -317,24 +317,24 @@ void to_string_def(CodeEnum self, String* result )
append( result, "enum " ); append( result, "enum " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ", GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->UnderlyingType ) if ( self->UnderlyingType )
append_fmt( result, "%S : %S\n{\n%S\n}" append_fmt( result, "%SC : %S\n{\n%S\n}"
, self->Name , self->Name
, to_string(self->UnderlyingType) , to_string(self->UnderlyingType)
, GEN_NS to_string(self->Body) , to_string(self->Body)
); );
else if ( self->UnderlyingTypeMacro ) else if ( self->UnderlyingTypeMacro )
append_fmt( result, "%S : %S\n{\n%S\n}" append_fmt( result, "%SC : %S\n{\n%S\n}"
, self->Name , self->Name
, GEN_NS to_string(self->UnderlyingTypeMacro) , to_string(self->UnderlyingTypeMacro)
, GEN_NS to_string(self->Body) , to_string(self->Body)
); );
else append_fmt( result, "%S\n{\n%S\n}", self->Name, GEN_NS to_string(self->Body) ); else append_fmt( result, "%SC\n{\n%S\n}", self->Name, to_string(self->Body) );
} }
else append_fmt( result, "enum %S\n{\n%S\n}", self->Name, GEN_NS to_string(self->Body) ); else append_fmt( result, "enum %SC\n{\n%S\n}", self->Name, to_string(self->Body) );
if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) )
append( result, ";\n"); append( result, ";\n");
@ -346,17 +346,17 @@ void to_string_fwd(CodeEnum self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->UnderlyingType ) if ( self->UnderlyingType )
append_fmt( result, "enum %S : %S", self->Name, to_string(self->UnderlyingType) ); append_fmt( result, "enum %SC : %S", self->Name, to_string(self->UnderlyingType) );
else else
append_fmt( result, "enum %S", self->Name ); append_fmt( result, "enum %SC", self->Name );
if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) )
{ {
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content ); append_fmt( result, "; %SC", self->InlineCmt->Content );
else else
append( result, ";\n"); append( result, ";\n");
} }
@ -373,21 +373,21 @@ void to_string_class_def(CodeEnum self, String* result )
if ( self->Attributes ) if ( self->Attributes )
{ {
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
} }
if ( self->UnderlyingType ) if ( self->UnderlyingType )
{ {
append_fmt( result, "%S : %S\n{\n%S\n}", self->Name, to_string(self->UnderlyingType), GEN_NS to_string(self->Body) ); append_fmt( result, "%SC : %S\n{\n%S\n}", self->Name, to_string(self->UnderlyingType), to_string(self->Body) );
} }
else else
{ {
append_fmt( result, "%S\n{\n%S\n}", self->Name, GEN_NS to_string(self->Body) ); append_fmt( result, "%SC\n{\n%S\n}", self->Name, to_string(self->Body) );
} }
} }
else else
{ {
append_fmt( result, "enum class %S\n{\n%S\n}", GEN_NS to_string(self->Body) ); append_fmt( result, "enum %SC\n{\n%S\n}", self->Name, to_string(self->Body) );
} }
if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) )
@ -402,14 +402,14 @@ void to_string_class_fwd(CodeEnum self, String* result )
append( result, "enum class " ); append( result, "enum class " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
append_fmt( result, "%S : %S", self->Name, to_string(self->UnderlyingType) ); append_fmt( result, "%SC : %S", self->Name, to_string(self->UnderlyingType) );
if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) ) if ( self->Parent.ast == nullptr || ( self->Parent->Type != CT_Typedef && self->Parent->Type != CT_Variable ) )
{ {
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content ); append_fmt( result, "; %SC", self->InlineCmt->Content );
else else
append( result, ";\n"); append( result, ";\n");
} }
@ -423,19 +423,19 @@ String to_string(CodeExec exec)
void to_string(CodeExtern self, String* result ) void to_string(CodeExtern self, String* result )
{ {
if ( self->Body ) if ( self->Body )
append_fmt( result, "extern \"%S\"\n{\n%S\n}\n", self->Name, GEN_NS to_string(self->Body) ); append_fmt( result, "extern \"%SC\"\n{\n%S\n}\n", self->Name, to_string(self->Body) );
else else
append_fmt( result, "extern \"%S\"\n{}\n", self->Name ); append_fmt( result, "extern \"%SC\"\n{}\n", self->Name );
} }
String to_string(CodeInclude include) String to_string(CodeInclude include)
{ {
return string_fmt_buf( GlobalAllocator, "#include %S\n", include->Content ); return string_fmt_buf( GlobalAllocator, "#include %SC\n", include->Content );
} }
void to_string( CodeInclude include, String* result ) void to_string( CodeInclude include, String* result )
{ {
append_fmt( result, "#include %S\n", include->Content ); append_fmt( result, "#include %SC\n", include->Content );
} }
String to_string(CodeFriend self) String to_string(CodeFriend self)
@ -447,7 +447,7 @@ String to_string(CodeFriend self)
void to_string(CodeFriend self, String* result ) void to_string(CodeFriend self, String* result )
{ {
append_fmt( result, "friend %S", GEN_NS to_string(self->Declaration) ); append_fmt( result, "friend %S", to_string(self->Declaration) );
if ( self->Declaration->Type != CT_Function && (* result)[ length(* result) - 1 ] != ';' ) if ( self->Declaration->Type != CT_Function && (* result)[ length(* result) - 1 ] != ';' )
{ {
@ -455,7 +455,7 @@ void to_string(CodeFriend self, String* result )
} }
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " %S", self->InlineCmt->Content ); append_fmt( result, " %SC", self->InlineCmt->Content );
else else
append( result, "\n"); append( result, "\n");
} }
@ -481,7 +481,7 @@ void to_string_def(CodeFn self, String* result )
append( result, "export" ); append( result, "export" );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, " %S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, " %S ", to_string(self->Attributes) );
bool prefix_specs = false; bool prefix_specs = false;
if ( self->Specs ) if ( self->Specs )
@ -502,13 +502,13 @@ void to_string_def(CodeFn self, String* result )
append( result, "\n" ); append( result, "\n" );
if ( self->ReturnType ) if ( self->ReturnType )
append_fmt( result, "%S %S(", to_string(self->ReturnType), self->Name ); append_fmt( result, "%S %SC(", to_string(self->ReturnType), self->Name );
else else
append_fmt( result, "%S(", self->Name ); append_fmt( result, "%SC(", self->Name );
if ( self->Params ) if ( self->Params )
append_fmt( result, "%S)", GEN_NS to_string(self->Params) ); append_fmt( result, "%S)", to_string(self->Params) );
else else
append( result, ")" ); append( result, ")" );
@ -525,7 +525,7 @@ void to_string_def(CodeFn self, String* result )
} }
} }
append_fmt( result, "\n{\n%S\n}\n", GEN_NS to_string(self->Body) ); append_fmt( result, "\n{\n%S\n}\n", to_string(self->Body) );
} }
void to_string_fwd(CodeFn self, String* result ) void to_string_fwd(CodeFn self, String* result )
@ -534,7 +534,7 @@ void to_string_fwd(CodeFn self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
b32 prefix_specs = false; b32 prefix_specs = false;
if ( self->Specs ) if ( self->Specs )
@ -557,13 +557,13 @@ void to_string_fwd(CodeFn self, String* result )
} }
if ( self->ReturnType ) if ( self->ReturnType )
append_fmt( result, "%S %S(", to_string(self->ReturnType), self->Name ); append_fmt( result, "%S %SC(", to_string(self->ReturnType), self->Name );
else else
append_fmt( result, "%S(", self->Name ); append_fmt( result, "%SC(", self->Name );
if ( self->Params ) if ( self->Params )
append_fmt( result, "%S)", GEN_NS to_string(self->Params) ); append_fmt( result, "%S)", to_string(self->Params) );
else else
append( result, ")" ); append( result, ")" );
@ -583,10 +583,10 @@ void to_string_fwd(CodeFn self, String* result )
if ( self->Specs && has(self->Specs, Spec_Pure ) >= 0 ) if ( self->Specs && has(self->Specs, Spec_Pure ) >= 0 )
append( result, " = 0;" ); append( result, " = 0;" );
else if (self->Body) else if (self->Body)
append_fmt( result, " = %S;", GEN_NS to_string(self->Body) ); append_fmt( result, " = %S;", to_string(self->Body) );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content ); append_fmt( result, "; %SC", self->InlineCmt->Content );
else else
append( result, ";\n" ); append( result, ";\n" );
} }
@ -606,7 +606,7 @@ void to_string(CodeModule self, String* result )
if (((u32(ModuleFlag_Import) & u32(self->ModuleFlags)) == u32(ModuleFlag_Import))) if (((u32(ModuleFlag_Import) & u32(self->ModuleFlags)) == u32(ModuleFlag_Import)))
append( result, "import "); append( result, "import ");
append_fmt( result, "%S;\n", self->Name ); append_fmt( result, "%SC;\n", self->Name );
} }
String to_string(CodeNS self) String to_string(CodeNS self)
@ -621,7 +621,7 @@ void to_string(CodeNS self, String* result )
if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export )) if ( bitfield_is_equal( u32, self->ModuleFlags, ModuleFlag_Export ))
append( result, "export " ); append( result, "export " );
append_fmt( result, "namespace %S\n{\n%S\n}\n", self->Name, to_string(self->Body) ); append_fmt( result, "namespace %SC\n{\n%S\n}\n", self->Name, to_string(self->Body) );
} }
String to_string(CodeOperator self) String to_string(CodeOperator self)
@ -647,10 +647,10 @@ void to_string_def(CodeOperator self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->Specs ) if ( self->Specs )
{ {
@ -670,10 +670,10 @@ void to_string_def(CodeOperator self, String* result )
} }
if ( self->ReturnType ) if ( self->ReturnType )
append_fmt( result, "%S %S (", GEN_NS to_string(self->ReturnType), self->Name ); append_fmt( result, "%S %SC (", to_string(self->ReturnType), self->Name );
if ( self->Params ) if ( self->Params )
append_fmt( result, "%S)", GEN_NS to_string(self->Params) ); append_fmt( result, "%S)", to_string(self->Params) );
else else
append( result, ")" ); append( result, ")" );
@ -691,7 +691,7 @@ void to_string_def(CodeOperator self, String* result )
} }
append_fmt( result, "\n{\n%S\n}\n" append_fmt( result, "\n{\n%S\n}\n"
, GEN_NS to_string(self->Body) , to_string(self->Body)
); );
} }
@ -701,7 +701,7 @@ void to_string_fwd(CodeOperator self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S\n",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S\n", to_string(self->Attributes) );
if ( self->Specs ) if ( self->Specs )
{ {
@ -720,10 +720,10 @@ void to_string_fwd(CodeOperator self, String* result )
append( result, "\n" ); append( result, "\n" );
} }
append_fmt( result, "%S %S (", to_string(self->ReturnType), self->Name ); append_fmt( result, "%S %SC (", to_string(self->ReturnType), self->Name );
if ( self->Params ) if ( self->Params )
append_fmt( result, "%S)", GEN_NS to_string(self->Params) ); append_fmt( result, "%S)", to_string(self->Params) );
else else
append_fmt( result, ")" ); append_fmt( result, ")" );
@ -741,7 +741,7 @@ void to_string_fwd(CodeOperator self, String* result )
} }
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content ); append_fmt( result, "; %SC", self->InlineCmt->Content );
else else
append( result, ";\n" ); append( result, ";\n" );
} }
@ -775,7 +775,7 @@ void to_string_def(CodeOpCast self, String* result )
} }
if ( self->Name && self->Name.Len ) if ( self->Name && self->Name.Len )
append_fmt( result, "%Soperator %S()", self->Name, to_string(self->ValueType) ); append_fmt( result, "%SC operator %S()", self->Name, to_string(self->ValueType) );
else else
append_fmt( result, "operator %S()", to_string(self->ValueType) ); append_fmt( result, "operator %S()", to_string(self->ValueType) );
@ -788,14 +788,14 @@ void to_string_def(CodeOpCast self, String* result )
} }
} }
append_fmt( result, "\n{\n%S\n}\n", GEN_NS to_string(self->Body) ); append_fmt( result, "\n{\n%S\n}\n", to_string(self->Body) );
return; return;
} }
if ( self->Name && self->Name.Len ) if ( self->Name && self->Name.Len )
append_fmt( result, "%Soperator %S()\n{\n%S\n}\n", self->Name, to_string(self->ValueType), GEN_NS to_string(self->Body) ); append_fmt( result, "%SC operator %S()\n{\n%S\n}\n", self->Name, to_string(self->ValueType), to_string(self->Body) );
else else
append_fmt( result, "operator %S()\n{\n%S\n}\n", to_string(self->ValueType), GEN_NS to_string(self->Body) ); append_fmt( result, "operator %S()\n{\n%S\n}\n", to_string(self->ValueType), to_string(self->Body) );
} }
void to_string_fwd(CodeOpCast self, String* result ) void to_string_fwd(CodeOpCast self, String* result )
@ -823,7 +823,7 @@ void to_string_fwd(CodeOpCast self, String* result )
} }
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content ); append_fmt( result, "; %SC", self->InlineCmt->Content );
else else
append( result, ";\n" ); append( result, ";\n" );
return; return;
@ -848,16 +848,16 @@ void to_string( CodeParam self, String* result )
if ( ast->Macro ) if ( ast->Macro )
{ {
// Related to parsing: ( <macro>, ... ) // Related to parsing: ( <macro>, ... )
GEN_NS append( result, ast->Macro.ast->Content ); append( result, ast->Macro.ast->Content );
// Could also be: ( <macro> <type <name>, ... ) // Could also be: ( <macro> <type <name>, ... )
} }
if ( ast->Name ) if ( ast->Name )
{ {
if ( ast->ValueType.ast == nullptr ) if ( ast->ValueType.ast == nullptr )
append_fmt( result, " %S", ast->Name ); append_fmt( result, " %SC", ast->Name );
else else
append_fmt( result, " %S %S", to_string(ast->ValueType), ast->Name ); append_fmt( result, " %S %SC", to_string(ast->ValueType), ast->Name );
} }
else if ( ast->ValueType ) else if ( ast->ValueType )
@ -865,11 +865,11 @@ void to_string( CodeParam self, String* result )
if ( ast->PostNameMacro ) if ( ast->PostNameMacro )
{ {
append_fmt( result, " %S", GEN_NS to_string(ast->PostNameMacro) ); append_fmt( result, " %S", to_string(ast->PostNameMacro) );
} }
if ( ast->Value ) if ( ast->Value )
append_fmt( result, " = %S", GEN_NS to_string(ast->Value) ); append_fmt( result, " = %S", to_string(ast->Value) );
if ( ast->NumEntries - 1 > 0 ) if ( ast->NumEntries - 1 > 0 )
{ {
@ -909,22 +909,22 @@ String to_string(CodePreprocessCond self)
void to_string_if(CodePreprocessCond cond, String* result ) void to_string_if(CodePreprocessCond cond, String* result )
{ {
append_fmt( result, "#if %S\n", cond->Content ); append_fmt( result, "#if %SC\n", cond->Content );
} }
void to_string_ifdef(CodePreprocessCond cond, String* result ) void to_string_ifdef(CodePreprocessCond cond, String* result )
{ {
append_fmt( result, "#ifdef %S\n", cond->Content ); append_fmt( result, "#ifdef %SC\n", cond->Content );
} }
void to_string_ifndef(CodePreprocessCond cond, String* result ) void to_string_ifndef(CodePreprocessCond cond, String* result )
{ {
append_fmt( result, "#ifndef %S\n", cond->Content ); append_fmt( result, "#ifndef %SC\n", cond->Content );
} }
void to_string_elif(CodePreprocessCond cond, String* result ) void to_string_elif(CodePreprocessCond cond, String* result )
{ {
append_fmt( result, "#elif %S\n", cond->Content ); append_fmt( result, "#elif %SC\n", cond->Content );
} }
void to_string_else(CodePreprocessCond cond, String* result ) void to_string_else(CodePreprocessCond cond, String* result )
@ -946,7 +946,7 @@ String to_string(CodePragma self)
void to_string(CodePragma self, String* result ) void to_string(CodePragma self, String* result )
{ {
append_fmt( result, "#pragma %S\n", self->Content ); append_fmt( result, "#pragma %SC\n", self->Content );
} }
String to_string(CodeSpecifiers self) String to_string(CodeSpecifiers self)
@ -998,14 +998,14 @@ void to_string_def( CodeStruct self, String* result )
if ( ast->Attributes ) if ( ast->Attributes )
{ {
append_fmt( result, "%S ",GEN_NS to_string(ast->Attributes) ); append_fmt( result, "%S ", to_string(ast->Attributes) );
} }
if ( ast->ParentType ) if ( ast->ParentType )
{ {
char const* access_level = to_str( ast->ParentAccess ); char const* access_level = to_str( ast->ParentAccess );
append_fmt( result, "%S : %s %S", ast->Name, access_level, GEN_NS to_string(ast->ParentType) ); append_fmt( result, "%SC : %s %S", ast->Name, access_level, to_string(ast->ParentType) );
CodeTypename interface = cast(CodeTypename, ast->ParentType->Next); CodeTypename interface = cast(CodeTypename, ast->ParentType->Next);
if ( interface ) if ( interface )
@ -1013,7 +1013,7 @@ void to_string_def( CodeStruct self, String* result )
while ( interface ) while ( interface )
{ {
append_fmt( result, ", %S", GEN_NS to_string(interface) ); append_fmt( result, ", %S", to_string(interface) );
interface = interface->Next ? cast( CodeTypename, interface->Next) : CodeTypename { nullptr }; interface = interface->Next ? cast( CodeTypename, interface->Next) : CodeTypename { nullptr };
} }
} }
@ -1024,10 +1024,10 @@ void to_string_def( CodeStruct self, String* result )
if ( ast->InlineCmt ) if ( ast->InlineCmt )
{ {
append_fmt( result, " // %S", ast->InlineCmt->Content ); append_fmt( result, " // %SC", ast->InlineCmt->Content );
} }
append_fmt( result, "\n{\n%S\n}", GEN_NS to_string(ast->Body) ); append_fmt( result, "\n{\n%S\n}", to_string(ast->Body) );
if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) ) if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) )
append( result, ";\n"); append( result, ";\n");
@ -1042,14 +1042,14 @@ void to_string_fwd( CodeStruct self, String* result )
append( result, "export " ); append( result, "export " );
if ( ast->Attributes ) if ( ast->Attributes )
append_fmt( result, "struct %S %S", GEN_NS to_string(ast->Attributes), ast->Name ); append_fmt( result, "struct %S %SC", to_string(ast->Attributes), ast->Name );
else append_fmt( result, "struct %S", ast->Name ); else append_fmt( result, "struct %SC", ast->Name );
if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) ) if ( ast->Parent.ast == nullptr || ( ast->Parent->Type != CT_Typedef && ast->Parent->Type != CT_Variable ) )
{ {
if ( ast->InlineCmt ) if ( ast->InlineCmt )
append_fmt( result, "; %S", ast->InlineCmt->Content ); append_fmt( result, "; %SC", ast->InlineCmt->Content );
else else
append( result, ";\n"); append( result, ";\n");
} }
@ -1068,9 +1068,9 @@ void to_string(CodeTemplate self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Params ) if ( self->Params )
append_fmt( result, "template< %S >\n%S", GEN_NS to_string(self->Params), GEN_NS to_string(self->Declaration) ); append_fmt( result, "template< %S >\n%S", to_string(self->Params), to_string(self->Declaration) );
else else
append_fmt( result, "template<>\n%S", GEN_NS to_string(self->Declaration) ); append_fmt( result, "template<>\n%S", to_string(self->Declaration) );
} }
String to_string(CodeTypedef self) String to_string(CodeTypedef self)
@ -1089,18 +1089,18 @@ void to_string(CodeTypedef self, String* result )
// Determines if the typedef is a function typename // Determines if the typedef is a function typename
if ( self->UnderlyingType->ReturnType ) if ( self->UnderlyingType->ReturnType )
append( result, GEN_NS to_string(self->UnderlyingType) ); append( result, to_string(self->UnderlyingType) );
else else
append_fmt( result, "%S %S", GEN_NS to_string(self->UnderlyingType), self->Name ); append_fmt( result, "%S %SC", to_string(self->UnderlyingType), self->Name );
if ( self->UnderlyingType->Type == CT_Typename && self->UnderlyingType->ArrExpr ) if ( self->UnderlyingType->Type == CT_Typename && self->UnderlyingType->ArrExpr )
{ {
append_fmt( result, "[ %S ];", GEN_NS to_string(self->UnderlyingType->ArrExpr) ); append_fmt( result, "[ %S ];", to_string(self->UnderlyingType->ArrExpr) );
Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; Code next_arr_expr = self->UnderlyingType->ArrExpr->Next;
while ( next_arr_expr ) while ( next_arr_expr )
{ {
append_fmt( result, "[ %S ];", GEN_NS to_string(next_arr_expr) ); append_fmt( result, "[ %S ];", to_string(next_arr_expr) );
next_arr_expr = next_arr_expr->Next; next_arr_expr = next_arr_expr->Next;
} }
} }
@ -1110,7 +1110,7 @@ void to_string(CodeTypedef self, String* result )
} }
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " %S", self->InlineCmt->Content); append_fmt( result, " %SC", self->InlineCmt->Content);
else else
append( result, "\n"); append( result, "\n");
} }
@ -1128,13 +1128,13 @@ void to_string(CodeTypename self, String* result )
if ( self->ReturnType && self->Params ) if ( self->ReturnType && self->Params )
{ {
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
else else
{ {
if ( self->Specs ) if ( self->Specs )
append_fmt( result, "%S ( %S ) ( %S ) %S", self->ReturnType.to_string(), self->Name, self->Params.to_string(), self->Specs.to_string() ); append_fmt( result, "%S ( %SC ) ( %S ) %S", to_string(self->ReturnType), self->Name, to_string(self->Params), to_string(self->Specs) );
else else
append_fmt( result, "%S ( %S ) ( %S )", self->ReturnType.to_string(), self->Name, self->Params.to_string() ); append_fmt( result, "%S ( %SC ) ( %S )", to_string(self->ReturnType), self->Name, to_string(self->Params) );
} }
break; break;
@ -1143,13 +1143,13 @@ void to_string(CodeTypename self, String* result )
if ( self->ReturnType && self->Params ) if ( self->ReturnType && self->Params )
{ {
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
else else
{ {
if ( self->Specs ) if ( self->Specs )
append_fmt( result, "%S %S ( %S ) %S", GEN_NS to_string(self->ReturnType), self->Name, GEN_NS to_string(self->Params), GEN_NS to_string(self->Specs) ); append_fmt( result, "%S %SC ( %S ) %S", to_string(self->ReturnType), self->Name, to_string(self->Params), to_string(self->Specs) );
else else
append_fmt( result, "%S %S ( %S )", GEN_NS to_string(self->ReturnType), self->Name, GEN_NS to_string(self->Params) ); append_fmt( result, "%S %SC ( %S )", to_string(self->ReturnType), self->Name, to_string(self->Params) );
} }
return; return;
@ -1157,12 +1157,12 @@ void to_string(CodeTypename self, String* result )
#endif #endif
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->Specs ) if ( self->Specs )
append_fmt( result, "%S %S", self->Name, GEN_NS to_string(self->Specs) ); append_fmt( result, "%SC %S", self->Name, to_string(self->Specs) );
else else
append_fmt( result, "%S", self->Name ); append_fmt( result, "%SC", self->Name );
if ( self->IsParamPack ) if ( self->IsParamPack )
append( result, "..."); append( result, "...");
@ -1183,11 +1183,11 @@ void to_string(CodeUnion self, String* result )
append( result, "union " ); append( result, "union " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->Name ) if ( self->Name )
{ {
append_fmt( result, "%S\n{\n%S\n}" append_fmt( result, "%SC\n{\n%S\n}"
, self->Name , self->Name
, GEN_NS to_string(self->Body) , GEN_NS to_string(self->Body)
); );
@ -1225,20 +1225,20 @@ void to_string(CodeUsing self, String* result )
append( result, "export " ); append( result, "export " );
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ",GEN_NS to_string(self->Attributes) ); append_fmt( result, "%S ", to_string(self->Attributes) );
if ( self->UnderlyingType ) if ( self->UnderlyingType )
{ {
append_fmt( result, "using %S = %S", self->Name, GEN_NS to_string(self->UnderlyingType) ); append_fmt( result, "using %SC = %S", self->Name, to_string(self->UnderlyingType) );
if ( self->UnderlyingType->ArrExpr ) if ( self->UnderlyingType->ArrExpr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(self->UnderlyingType->ArrExpr) ); append_fmt( result, "[ %S ]", to_string(self->UnderlyingType->ArrExpr) );
Code next_arr_expr = self->UnderlyingType->ArrExpr->Next; Code next_arr_expr = self->UnderlyingType->ArrExpr->Next;
while ( next_arr_expr ) while ( next_arr_expr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(next_arr_expr) ); append_fmt( result, "[ %S ]", to_string(next_arr_expr) );
next_arr_expr = next_arr_expr->Next; next_arr_expr = next_arr_expr->Next;
} }
} }
@ -1246,10 +1246,10 @@ void to_string(CodeUsing self, String* result )
append( result, ";" ); append( result, ";" );
} }
else else
append_fmt( result, "using %S;", self->Name ); append_fmt( result, "using %SC;", self->Name );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " %S\n", self->InlineCmt->Content ); append_fmt( result, " %SC\n", self->InlineCmt->Content );
else else
append( result, "\n"); append( result, "\n");
} }
@ -1257,9 +1257,9 @@ void to_string(CodeUsing self, String* result )
void to_string_ns(CodeUsing self, String* result ) void to_string_ns(CodeUsing self, String* result )
{ {
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "using namespace $S; %S", self->Name, self->InlineCmt->Content ); append_fmt( result, "using namespace $SC; %SC", self->Name, self->InlineCmt->Content );
else else
append_fmt( result, "using namespace %s;\n", self->Name ); append_fmt( result, "using namespace %SC;\n", self->Name );
} }
String to_string(CodeVar self) String to_string(CodeVar self)
@ -1276,18 +1276,18 @@ void to_string(CodeVar self, String* result )
// Its a comma-separated variable ( a NextVar ) // Its a comma-separated variable ( a NextVar )
if ( self->Specs ) if ( self->Specs )
append_fmt( result, "%S ", GEN_NS to_string(self->Specs) ); append_fmt( result, "%S ", to_string(self->Specs) );
append( result, self->Name ); append( result, self->Name );
if ( self->ValueType->ArrExpr ) if ( self->ValueType->ArrExpr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(self->ValueType->ArrExpr) ); append_fmt( result, "[ %S ]", to_string(self->ValueType->ArrExpr) );
Code next_arr_expr = self->ValueType->ArrExpr->Next; Code next_arr_expr = self->ValueType->ArrExpr->Next;
while ( next_arr_expr ) while ( next_arr_expr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(next_arr_expr) ); append_fmt( result, "[ %S ]", to_string(next_arr_expr) );
next_arr_expr = next_arr_expr->Next; next_arr_expr = next_arr_expr->Next;
} }
} }
@ -1295,14 +1295,14 @@ void to_string(CodeVar self, String* result )
if ( self->Value ) if ( self->Value )
{ {
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append_fmt( result, "( %S ", GEN_NS to_string(self->Value) ); append_fmt( result, "( %S ", to_string(self->Value) );
else else
append_fmt( result, " = %S", GEN_NS to_string(self->Value) ); append_fmt( result, " = %S", to_string(self->Value) );
} }
// Keep the chain going... // Keep the chain going...
if ( self->NextVar ) if ( self->NextVar )
append_fmt( result, ", %S", self->NextVar.to_string() ); append_fmt( result, ", %S", to_string(self->NextVar) );
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append( result, " )"); append( result, " )");
@ -1316,44 +1316,44 @@ void to_string(CodeVar self, String* result )
if ( self->Attributes || self->Specs ) if ( self->Attributes || self->Specs )
{ {
if ( self->Attributes ) if ( self->Attributes )
append_fmt( result, "%S ", GEN_NS to_string(self->Specs) ); append_fmt( result, "%S ", to_string(self->Specs) );
if ( self->Specs ) if ( self->Specs )
append_fmt( result, "%S\n", GEN_NS to_string(self->Specs) ); append_fmt( result, "%S\n", to_string(self->Specs) );
append_fmt( result, "%S %S", GEN_NS to_string(self->ValueType), self->Name ); append_fmt( result, "%S %SC", to_string(self->ValueType), self->Name );
if ( self->ValueType->ArrExpr ) if ( self->ValueType->ArrExpr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(self->ValueType->ArrExpr) ); append_fmt( result, "[ %S ]", to_string(self->ValueType->ArrExpr) );
Code next_arr_expr = self->ValueType->ArrExpr->Next; Code next_arr_expr = self->ValueType->ArrExpr->Next;
while ( next_arr_expr ) while ( next_arr_expr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(next_arr_expr) ); append_fmt( result, "[ %S ]", to_string(next_arr_expr) );
next_arr_expr = next_arr_expr->Next; next_arr_expr = next_arr_expr->Next;
} }
} }
if ( self->BitfieldSize ) if ( self->BitfieldSize )
append_fmt( result, " : %S", GEN_NS to_string(self->BitfieldSize) ); append_fmt( result, " : %S", to_string(self->BitfieldSize) );
if ( self->Value ) if ( self->Value )
{ {
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append_fmt( result, "( %S ", GEN_NS to_string(self->Value) ); append_fmt( result, "( %S ", to_string(self->Value) );
else else
append_fmt( result, " = %S", GEN_NS to_string(self->Value) ); append_fmt( result, " = %S", to_string(self->Value) );
} }
if ( self->NextVar ) if ( self->NextVar )
append_fmt( result, ", %S", self->NextVar.to_string() ); append_fmt( result, ", %S", to_string(self->NextVar) );
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append( result, " )"); append( result, " )");
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, "; %S", self->InlineCmt->Content); append_fmt( result, "; %SC", self->InlineCmt->Content);
else else
append( result, ";\n" ); append( result, ";\n" );
@ -1361,33 +1361,33 @@ void to_string(CodeVar self, String* result )
} }
if ( self->BitfieldSize ) if ( self->BitfieldSize )
append_fmt( result, "%S %S : %S", GEN_NS to_string(self->ValueType), self->Name, GEN_NS to_string(self->BitfieldSize) ); append_fmt( result, "%S %SC : %S", to_string(self->ValueType), self->Name, to_string(self->BitfieldSize) );
else if ( self->ValueType->ArrExpr ) else if ( self->ValueType->ArrExpr )
{ {
append_fmt( result, "%S %S[ %S ]", GEN_NS to_string(self->ValueType), self->Name, GEN_NS to_string(self->ValueType->ArrExpr) ); append_fmt( result, "%S %SC[ %S ]", to_string(self->ValueType), self->Name, to_string(self->ValueType->ArrExpr) );
Code next_arr_expr = self->ValueType->ArrExpr->Next; Code next_arr_expr = self->ValueType->ArrExpr->Next;
while ( next_arr_expr ) while ( next_arr_expr )
{ {
append_fmt( result, "[ %S ]", GEN_NS to_string(next_arr_expr) ); append_fmt( result, "[ %S ]", to_string(next_arr_expr) );
next_arr_expr = next_arr_expr->Next; next_arr_expr = next_arr_expr->Next;
} }
} }
else else
append_fmt( result, "%S %S", GEN_NS to_string(self->ValueType), self->Name ); append_fmt( result, "%S %SC", to_string(self->ValueType), self->Name );
if ( self->Value ) if ( self->Value )
{ {
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append_fmt( result, "( %S ", GEN_NS to_string(self->Value) ); append_fmt( result, "( %S ", to_string(self->Value) );
else else
append_fmt( result, " = %S", GEN_NS to_string(self->Value) ); append_fmt( result, " = %S", to_string(self->Value) );
} }
if ( self->NextVar ) if ( self->NextVar )
append_fmt( result, ", %S", self->NextVar.to_string() ); append_fmt( result, ", %S", to_string( self->NextVar) );
if ( self->VarConstructorInit ) if ( self->VarConstructorInit )
append( result, " )"); append( result, " )");
@ -1395,7 +1395,7 @@ void to_string(CodeVar self, String* result )
append( result, ";" ); append( result, ";" );
if ( self->InlineCmt ) if ( self->InlineCmt )
append_fmt( result, " %S", self->InlineCmt->Content); append_fmt( result, " %SC", self->InlineCmt->Content);
else else
append( result, "\n"); append( result, "\n");
} }

View File

@ -959,7 +959,7 @@ struct CodeTypedef
struct CodeUnion struct CodeUnion
{ {
#if GEN_SUPPORT_CPP_MEMBER_FEATURES || 1 #if GEN_SUPPORT_CPP_MEMBER_FEATURES
Using_Code( CodeUnion ); Using_Code( CodeUnion );
String to_string() { return GEN_NS to_string(* this); } String to_string() { return GEN_NS to_string(* this); }
@ -974,7 +974,7 @@ struct CodeUnion
struct CodeUsing struct CodeUsing
{ {
#if GEN_SUPPORT_CPP_MEMBER_FEATURES || 1 #if GEN_SUPPORT_CPP_MEMBER_FEATURES
Using_Code( CodeUsing ); Using_Code( CodeUsing );
String to_string() { return GEN_NS to_string(* this); } String to_string() { return GEN_NS to_string(* this); }
@ -990,7 +990,7 @@ struct CodeUsing
struct CodeVar struct CodeVar
{ {
#if GEN_SUPPORT_CPP_MEMBER_FEATURES || 1 #if GEN_SUPPORT_CPP_MEMBER_FEATURES
Using_Code( CodeVar ); Using_Code( CodeVar );
String to_string() { return GEN_NS to_string(* this); } String to_string() { return GEN_NS to_string(* this); }

View File

@ -43,8 +43,8 @@ struct _format_info
internal ssize _print_string( char* text, ssize max_len, _format_info* info, char const* str ) internal ssize _print_string( char* text, ssize max_len, _format_info* info, char const* str )
{ {
ssize res = 0, len = 0; ssize res = 0, len = 0;
ssize remaining = max_len; ssize remaining = max_len;
char* begin = text; char* begin = text;
if ( str == NULL && max_len >= 6 ) if ( str == NULL && max_len >= 6 )
@ -247,7 +247,7 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis
while ( *fmt ) while ( *fmt )
{ {
_format_info info = { 0 }; _format_info info = { 0 };
ssize len = 0; ssize len = 0;
info.precision = -1; info.precision = -1;
while ( *fmt && *fmt != '%' && remaining ) while ( *fmt && *fmt != '%' && remaining )
@ -420,6 +420,15 @@ neverinline ssize str_fmt_va( char* text, ssize max_len, char const* fmt, va_lis
case 'S': case 'S':
{ {
if ( *(fmt + 1) == 'C' )
{
++ fmt;
StrC gen_str = va_arg( va, StrC);
info.precision = gen_str.Len;
len = _print_string( text, remaining, &info, gen_str.Ptr );
break;
}
String gen_str = String { va_arg( va, char*) }; String gen_str = String { va_arg( va, char*) };
info.precision = length(gen_str); info.precision = length(gen_str);