Improved tokenizing of extension attribute "depends" (#1546)

This commit is contained in:
Andreas Süßenbach 2023-03-29 13:33:42 +02:00 committed by GitHub
parent 4420e1f91e
commit 2175530fd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 12 deletions

View File

@ -1071,24 +1071,29 @@ void VulkanHppGenerator::checkExtensionCorrectness() const
{
for ( auto const & extension : m_extensions )
{
// check for existence of any deprecation, obsoletion, or promotion
// check for existence of any depends, deprecation, obsoletion, or promotion
for ( auto const & depends : extension.depends )
{
checkForError(
isFeature( depends ) || isExtension( depends ), extension.xmlLine, "extension <" + extension.name + "> lists an unknown depends <" + depends + ">" );
}
if ( !extension.deprecatedBy.empty() )
{
checkForError( isFeature( extension.deprecatedBy ) || isExtension( extension.deprecatedBy ),
extension.xmlLine,
"extension deprecated by unknown extension/version <" + extension.promotedTo + ">" );
"extension <" + extension.name + "> is deprecated by unknown extension/version <" + extension.promotedTo + ">" );
}
if ( !extension.obsoletedBy.empty() )
{
checkForError( isFeature( extension.obsoletedBy ) || isExtension( extension.obsoletedBy ),
extension.xmlLine,
"extension obsoleted by unknown extension/version <" + extension.promotedTo + ">" );
"extension <" + extension.name + "> is obsoleted by unknown extension/version <" + extension.promotedTo + ">" );
}
if ( !extension.promotedTo.empty() )
{
checkForError( isFeature( extension.promotedTo ) || isExtension( extension.promotedTo ),
extension.xmlLine,
"extension promoted to unknown extension/version <" + extension.promotedTo + ">" );
"extension <" + extension.name + "> is promoted to unknown extension/version <" + extension.promotedTo + ">" );
}
// check for existence of any requirement
@ -11483,7 +11488,7 @@ void VulkanHppGenerator::readExtension( tinyxml2::XMLElement const * element )
if ( attribute.first == "depends" )
{
// we don't care about the logical implications of ',' and '+' here, we're just interested to get the depends strings
extensionData.depends = tokenize( attribute.second, "," );
extensionData.depends = tokenizeAny( attribute.second, ",+()" );
}
else if ( attribute.first == "deprecatedby" )
{
@ -13750,6 +13755,7 @@ std::vector<std::string> tokenize( std::string const & tokenString, std::string
std::vector<std::string> tokenizeAny( std::string const & tokenString, std::string const & separators )
{
size_t len = tokenString.length();
std::vector<std::string> tokens;
if ( !tokenString.empty() )
{
@ -13757,7 +13763,7 @@ std::vector<std::string> tokenizeAny( std::string const & tokenString, std::stri
do
{
end = tokenString.find_first_of( separators, start );
if ( start != end )
if ( ( start != end ) && ( start < len ) )
{
tokens.push_back( trim( tokenString.substr( start, end - start ) ) );
}

View File

@ -140,13 +140,16 @@ static_assert( VK_HEADER_VERSION == 245, "Wrong VK_HEADER_VERSION!" );
# undef MemoryBarrier
#endif
#if defined( __GNUC__ )
# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ )
#endif
#if !defined( VULKAN_HPP_HAS_UNRESTRICTED_UNIONS )
# if defined( __clang__ )
# if __has_feature( cxx_unrestricted_unions )
# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
# endif
# elif defined( __GNUC__ )
# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ )
# if 40600 <= GCC_VERSION
# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
# endif
@ -181,12 +184,12 @@ static_assert( VK_HEADER_VERSION == 245, "Wrong VK_HEADER_VERSION!" );
#if defined( __cpp_constexpr )
# define VULKAN_HPP_CONSTEXPR constexpr
# if __cpp_constexpr >= 201304
# if 201304 <= __cpp_constexpr
# define VULKAN_HPP_CONSTEXPR_14 constexpr
# else
# define VULKAN_HPP_CONSTEXPR_14
# endif
# if __cpp_constexpr >= 201907
# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 110300 < GCC_VERSION ) )
# define VULKAN_HPP_CONSTEXPR_20 constexpr
# else
# define VULKAN_HPP_CONSTEXPR_20

View File

@ -140,13 +140,16 @@ static_assert( VK_HEADER_VERSION == 12, "Wrong VK_HEADER_VERSION!" );
# undef MemoryBarrier
#endif
#if defined( __GNUC__ )
# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ )
#endif
#if !defined( VULKAN_HPP_HAS_UNRESTRICTED_UNIONS )
# if defined( __clang__ )
# if __has_feature( cxx_unrestricted_unions )
# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
# endif
# elif defined( __GNUC__ )
# define GCC_VERSION ( __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ )
# if 40600 <= GCC_VERSION
# define VULKAN_HPP_HAS_UNRESTRICTED_UNIONS
# endif
@ -181,12 +184,12 @@ static_assert( VK_HEADER_VERSION == 12, "Wrong VK_HEADER_VERSION!" );
#if defined( __cpp_constexpr )
# define VULKAN_HPP_CONSTEXPR constexpr
# if __cpp_constexpr >= 201304
# if 201304 <= __cpp_constexpr
# define VULKAN_HPP_CONSTEXPR_14 constexpr
# else
# define VULKAN_HPP_CONSTEXPR_14
# endif
# if __cpp_constexpr >= 201907
# if ( 201907 <= __cpp_constexpr ) && ( !defined( __GNUC__ ) || ( 110300 < GCC_VERSION ) )
# define VULKAN_HPP_CONSTEXPR_20 constexpr
# else
# define VULKAN_HPP_CONSTEXPR_20