Compare commits

...

2 Commits

Author SHA1 Message Date
Ed_
13ebd105c4 Fix for convert_cpp_enum_to_c for gen_c_library
It wasn't generating correct typedefs for when underlying type was used over the enum name.
2025-01-30 14:14:53 -05:00
Ed_
bdd9c9bcdf Fixes for building all library types 2025-01-30 13:57:42 -05:00
5 changed files with 32 additions and 11 deletions

View File

@ -2045,9 +2045,12 @@ Token parse_identifier( bool* possible_member_function )
Token name = currtok;
_ctx->parser.Scope->Name = name.Text;
Macro* macro = lookup_macro(currtok.Text);
b32 accept_as_identifier = macro && bitfield_is_set(MacroFlags, macro->Flags, MF_Allow_As_Identifier );
// Typename can be: '::' <name>
// If that is the case first option will be Tok_Access_StaticSymbol below
if (check(Tok_Identifier))
if (check(Tok_Identifier) || accept_as_identifier)
eat( Tok_Identifier );
// <Name>

View File

@ -25,8 +25,12 @@
#endif
#endif // GEN_API
#ifndef global
#define global static // Global variables
#ifndef global // Global variables
# ifdef GEN_DYN_EXPORT
# define global
# else
# define global static
# endif
#endif
#ifndef internal
#define internal static // Internal linkage

View File

@ -7,8 +7,19 @@ void convert_cpp_enum_to_c( CodeEnum to_convert, CodeBody to_append )
{
#pragma push_macro("enum_underlying")
#undef enum_underlying
StrCached type = to_convert->UnderlyingType ? to_convert->UnderlyingType.to_strbuilder().to_str() : to_convert->Name;
CodeTypedef tdef = parse_typedef(token_fmt("type", type, "name", to_convert->Name, stringize( typedef enum <type> <name>; )));
StrCached type;
CodeTypedef tdef;
if (to_convert->UnderlyingType)
{
type = to_convert->UnderlyingType.to_strbuilder().to_str();
tdef = parse_typedef(token_fmt("type", type, "name", to_convert->Name, stringize( typedef <type> <name>; )));
}
else
{
type = to_convert->Name;
tdef = parse_typedef(token_fmt("type", type, "name", to_convert->Name, stringize( typedef enum <type> <name>; )));
}
if (to_convert->UnderlyingType)
{
to_convert->UnderlyingTypeMacro = untyped_str(token_fmt("type", to_convert->UnderlyingType->Name, stringize(enum_underlying(<type>))));

View File

@ -280,6 +280,7 @@ if ( $c_lib_dyn )
$compiler_args += $flag_c11
$compiler_args += ( $flag_define + 'GEN_DYN_LINK' )
$compiler_args += ( $flag_define + 'GEN_DYN_EXPORT' )
$compiler_args += ( $flag_define + 'GEN_DEFINE_LIBRARY_CODE_CONSTANTS' )
$linker_args = @()
$result = build-simple $path_build $includes $compiler_args $linker_args $unit $path_dll

View File

@ -344,15 +344,17 @@ if ( $vendor -match "clang" )
}
# Check if output is a static library
# if ( $binary -match '\.lib$' )
# {
# $lib_args = @()
if ( $binary -match '\.lib$' )
{
$lib_args = @()
# $lib_args += $flag_nologo
# $lib_args += $flag_link_win_machine_64
# $lib_args += ( $flag_link_win_path_output + $binary )
# $lib_args += $object
# return run-archiver $archiver $binary $lib_args
# }
# $lib_args += '--format=windows'
# $lib_args += '-X64'
$lib_args += $object
return run-archiver $archiver $binary $lib_args
}
$linker_args += $object
return run-linker $linker $binary $linker_args