From 2175530fd0f811e0c817dc6d6e685c464b862a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Wed, 29 Mar 2023 13:33:42 +0200 Subject: [PATCH] Improved tokenizing of extension attribute "depends" (#1546) --- VulkanHppGenerator.cpp | 18 ++++++++++++------ vulkan/vulkan.hpp | 9 ++++++--- vulkan/vulkansc.hpp | 9 ++++++--- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index 03deb75..ac5589f 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -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 tokenize( std::string const & tokenString, std::string std::vector tokenizeAny( std::string const & tokenString, std::string const & separators ) { + size_t len = tokenString.length(); std::vector tokens; if ( !tokenString.empty() ) { @@ -13757,7 +13763,7 @@ std::vector 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 ) ) ); } diff --git a/vulkan/vulkan.hpp b/vulkan/vulkan.hpp index 09160b7..2b7c801 100644 --- a/vulkan/vulkan.hpp +++ b/vulkan/vulkan.hpp @@ -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 diff --git a/vulkan/vulkansc.hpp b/vulkan/vulkansc.hpp index 926dd30..d6e0d7d 100644 --- a/vulkan/vulkansc.hpp +++ b/vulkan/vulkansc.hpp @@ -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