mirror of
https://github.com/Ed94/gencpp.git
synced 2025-02-24 06:08:37 -08:00
made optionals for c11 actually work...
This commit is contained in:
parent
75b1d42cca
commit
ef72d27f3e
@ -473,8 +473,10 @@ CodeComment def_comment( Str content )
|
|||||||
return (CodeComment) result;
|
return (CodeComment) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeConstructor def_constructor( Opts_def_constructor p )
|
CodeConstructor def_constructor( Opts_def_constructor opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_constructor p = get_optional(opt);
|
||||||
|
|
||||||
if ( p.params && p.params->Type != CT_Parameters ) {
|
if ( p.params && p.params->Type != CT_Parameters ) {
|
||||||
log_failure("gen::def_constructor: params must be of Parameters type - %s", code_debug_str((Code)p.params));
|
log_failure("gen::def_constructor: params must be of Parameters type - %s", code_debug_str((Code)p.params));
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
@ -510,8 +512,10 @@ CodeConstructor def_constructor( Opts_def_constructor p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeClass def_class( Str name, Opts_def_struct p )
|
CodeClass def_class( Str name, Opts_def_struct opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_struct p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_class, name ) ) {
|
if ( ! name_check( def_class, name ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -561,8 +565,10 @@ CodeClass def_class( Str name, Opts_def_struct p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeDefine def_define( Str name, MacroType type, Opts_def_define p )
|
CodeDefine def_define( Str name, MacroType type, Opts_def_define opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_define p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_define, name ) ) {
|
if ( ! name_check( def_define, name ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -585,8 +591,10 @@ CodeDefine def_define( Str name, MacroType type, Opts_def_define p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeDestructor def_destructor( Opts_def_destructor p )
|
CodeDestructor def_destructor( Opts_def_destructor opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_destructor p = get_optional(opt);
|
||||||
|
|
||||||
if ( p.specifiers && p.specifiers->Type != CT_Specifiers ) {
|
if ( p.specifiers && p.specifiers->Type != CT_Specifiers ) {
|
||||||
log_failure( "gen::def_destructor: specifiers was not a 'Specifiers' type: %s", code_debug_str(p.specifiers) );
|
log_failure( "gen::def_destructor: specifiers was not a 'Specifiers' type: %s", code_debug_str(p.specifiers) );
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
@ -619,8 +627,10 @@ CodeDestructor def_destructor( Opts_def_destructor p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeEnum def_enum( Str name, Opts_def_enum p )
|
CodeEnum def_enum( Str name, Opts_def_enum opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_enum p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_enum, name ) ) {
|
if ( ! name_check( def_enum, name ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -742,8 +752,10 @@ CodeFriend def_friend( Code declaration )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeFn def_function( Str name, Opts_def_function p )
|
CodeFn def_function( Str name, Opts_def_function opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_function p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_function, name )) {
|
if ( ! name_check( def_function, name )) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -802,8 +814,10 @@ CodeFn def_function( Str name, Opts_def_function p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeInclude def_include( Str path, Opts_def_include p )
|
CodeInclude def_include( Str path, Opts_def_include opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_include p = get_optional(opt);
|
||||||
|
|
||||||
if ( path.Len <= 0 || path.Ptr == nullptr ) {
|
if ( path.Len <= 0 || path.Ptr == nullptr ) {
|
||||||
log_failure( "gen::def_include: Invalid path provided - %d" );
|
log_failure( "gen::def_include: Invalid path provided - %d" );
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
@ -821,8 +835,10 @@ CodeInclude def_include( Str path, Opts_def_include p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeModule def_module( Str name, Opts_def_module p )
|
CodeModule def_module( Str name, Opts_def_module opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_module p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_module, name )) {
|
if ( ! name_check( def_module, name )) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -835,8 +851,10 @@ CodeModule def_module( Str name, Opts_def_module p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeNS def_namespace( Str name, CodeBody body, Opts_def_namespace p )
|
CodeNS def_namespace( Str name, CodeBody body, Opts_def_namespace opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_namespace p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_namespace, name )) {
|
if ( ! name_check( def_namespace, name )) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -859,8 +877,10 @@ CodeNS def_namespace( Str name, CodeBody body, Opts_def_namespace p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator p )
|
CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_operator p = get_optional(opt);
|
||||||
|
|
||||||
if ( p.attributes && p.attributes->Type != CT_PlatformAttributes ) {
|
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) );
|
log_failure( "gen::def_operator: PlatformAttributes was provided but its not of attributes type: %s", code_debug_str(p.attributes) );
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
@ -926,8 +946,10 @@ CodeOperator def_operator( Operator op, Str nspace, Opts_def_operator p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeOpCast def_operator_cast( CodeTypename type, Opts_def_operator_cast p )
|
CodeOpCast def_operator_cast( CodeTypename type, Opts_def_operator_cast opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_operator_cast p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! null_check( def_operator_cast, type )) {
|
if ( ! null_check( def_operator_cast, type )) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -959,8 +981,10 @@ CodeOpCast def_operator_cast( CodeTypename type, Opts_def_operator_cast p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeParams def_param( CodeTypename type, Str name, Opts_def_param p )
|
CodeParams def_param( CodeTypename type, Str name, Opts_def_param opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_param p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_param, name ) || ! null_check( def_param, type ) ) {
|
if ( ! name_check( def_param, name ) || ! null_check( def_param, type ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1034,8 +1058,10 @@ CodeSpecifiers def_specifier( Specifier spec )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeStruct def_struct( Str name, Opts_def_struct p )
|
CodeStruct def_struct( Str name, Opts_def_struct opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_struct p = get_optional(opt);
|
||||||
|
|
||||||
if ( p.attributes && p.attributes->Type != CT_PlatformAttributes ) {
|
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)) );
|
log_failure( "gen::def_struct: attributes was not a `PlatformAttributes` type - %s", code_debug_str(cast(Code, p.attributes)) );
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
@ -1076,8 +1102,10 @@ CodeStruct def_struct( Str name, Opts_def_struct p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeTemplate def_template( CodeParams params, Code declaration, Opts_def_template p )
|
CodeTemplate def_template( CodeParams params, Code declaration, Opts_def_template opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_template p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! null_check( def_template, declaration ) ) {
|
if ( ! null_check( def_template, declaration ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1108,8 +1136,10 @@ CodeTemplate def_template( CodeParams params, Code declaration, Opts_def_templat
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeTypename def_type( Str name, Opts_def_type p )
|
CodeTypename def_type( Str name, Opts_def_type opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_type p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_type, name )) {
|
if ( ! name_check( def_type, name )) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1143,8 +1173,10 @@ CodeTypename def_type( Str name, Opts_def_type p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeTypedef def_typedef( Str name, Code type, Opts_def_typedef p )
|
CodeTypedef def_typedef( Str name, Code type, Opts_def_typedef opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_typedef p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! null_check( def_typedef, type ) ) {
|
if ( ! null_check( def_typedef, type ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1206,8 +1238,10 @@ CodeTypedef def_typedef( Str name, Code type, Opts_def_typedef p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeUnion def_union( Str name, CodeBody body, Opts_def_union p )
|
CodeUnion def_union( Str name, CodeBody body, Opts_def_union opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_union p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! null_check( def_union, body ) ) {
|
if ( ! null_check( def_union, body ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1233,8 +1267,10 @@ CodeUnion def_union( Str name, CodeBody body, Opts_def_union p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeUsing def_using( Str name, CodeTypename type, Opts_def_using p )
|
CodeUsing def_using( Str name, CodeTypename type, Opts_def_using opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_using p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_using, name ) || null_check( def_using, type ) ) {
|
if ( ! name_check( def_using, name ) || null_check( def_using, type ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
@ -1274,8 +1310,10 @@ CodeUsing def_using_namespace( Str name )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeVar def_variable( CodeTypename type, Str name, Opts_def_variable p )
|
CodeVar def_variable( CodeTypename type, Str name, Opts_def_variable opt )
|
||||||
{
|
{
|
||||||
|
Opts_def_variable p = get_optional(opt);
|
||||||
|
|
||||||
if ( ! name_check( def_variable, name ) || ! null_check( def_variable, type ) ) {
|
if ( ! name_check( def_variable, name ) || ! null_check( def_variable, type ) ) {
|
||||||
GEN_DEBUG_TRAP();
|
GEN_DEBUG_TRAP();
|
||||||
return InvalidCode;
|
return InvalidCode;
|
||||||
|
@ -314,4 +314,12 @@
|
|||||||
# define GEN_OPITMIZE_MAPPINGS_END
|
# define GEN_OPITMIZE_MAPPINGS_END
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef get_optional
|
||||||
|
# if GEN_COMPILER_C
|
||||||
|
# define get_optional(opt) opt ? *opt : (typeof(*opt)){0}
|
||||||
|
# else
|
||||||
|
# define get_optional(opt) opt
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma endregion Macros
|
#pragma endregion Macros
|
||||||
|
@ -1159,6 +1159,8 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
|||||||
Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len };
|
Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len };
|
||||||
Str new_name = StrBuilder::fmt_buf(_ctx->Allocator_Temp, "def__%S", actual_name ).to_str();
|
Str new_name = StrBuilder::fmt_buf(_ctx->Allocator_Temp, "def__%S", actual_name ).to_str();
|
||||||
|
|
||||||
|
opt_param->ValueType->Specs = def_specifier(Spec_Ptr);
|
||||||
|
|
||||||
// Resolve define's arguments
|
// Resolve define's arguments
|
||||||
b32 has_args = fn->Params->NumEntries > 1;
|
b32 has_args = fn->Params->NumEntries > 1;
|
||||||
StrBuilder params_str = StrBuilder::make_reserve(_ctx->Allocator_Temp, 32);
|
StrBuilder params_str = StrBuilder::make_reserve(_ctx->Allocator_Temp, 32);
|
||||||
@ -1172,10 +1174,10 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
|||||||
}
|
}
|
||||||
char const* tmpl_fn_macro = nullptr;
|
char const* tmpl_fn_macro = nullptr;
|
||||||
if (params_str.length() > 0 ) {
|
if (params_str.length() > 0 ) {
|
||||||
tmpl_fn_macro= "#define <def_name>( <params> ... ) <def__name>( <params> (<opts_type>) { __VA_ARGS__ } )\n";
|
tmpl_fn_macro= "#define <def_name>( <params> ... ) <def__name>( <params> & (<opts_type>) { __VA_ARGS__ } )\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tmpl_fn_macro= "#define <def_name>( ... ) <def__name>( (<opts_type>) { __VA_ARGS__ } )\n";
|
tmpl_fn_macro= "#define <def_name>( ... ) <def__name>( & (<opts_type>) { __VA_ARGS__ } )\n";
|
||||||
}
|
}
|
||||||
Code fn_macro = untyped_str(token_fmt(
|
Code fn_macro = untyped_str(token_fmt(
|
||||||
"def_name", fn->Name
|
"def_name", fn->Name
|
||||||
@ -1504,6 +1506,7 @@ R"(#define <interface_name>( code ) _Generic( (code), \
|
|||||||
Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len };
|
Str actual_name = { fn->Name.Ptr + prefix.Len, fn->Name.Len - prefix.Len };
|
||||||
Str new_name = StrBuilder::fmt_buf(_ctx->Allocator_Temp, "def__%S", actual_name ).to_str();
|
Str new_name = StrBuilder::fmt_buf(_ctx->Allocator_Temp, "def__%S", actual_name ).to_str();
|
||||||
fn->Name = cache_str(new_name);
|
fn->Name = cache_str(new_name);
|
||||||
|
opt_param->ValueType->Specs = def_specifier(Spec_Ptr);
|
||||||
}
|
}
|
||||||
src_upfront.append(fn);
|
src_upfront.append(fn);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user