diff options
Diffstat (limited to 'vndk/tools/header-checker/src/repr/symbol/version_script_parser.h')
-rw-r--r-- | vndk/tools/header-checker/src/repr/symbol/version_script_parser.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/vndk/tools/header-checker/src/repr/symbol/version_script_parser.h b/vndk/tools/header-checker/src/repr/symbol/version_script_parser.h index 74ca72f1a..0f468b55d 100644 --- a/vndk/tools/header-checker/src/repr/symbol/version_script_parser.h +++ b/vndk/tools/header-checker/src/repr/symbol/version_script_parser.h @@ -20,7 +20,7 @@ #include "utils/api_level.h" #include <functional> -#include <set> +#include <map> #include <string> @@ -30,12 +30,14 @@ namespace repr { class VersionScriptParser { private: + // This comparison function allows finding elements by string_view. + using ModeTagLevelMap = std::map<std::string, utils::ApiLevel, std::less<>>; + enum class LineScope { GLOBAL, LOCAL, }; - struct ParsedTags { public: unsigned has_arch_tags_ : 1; @@ -46,7 +48,7 @@ class VersionScriptParser { unsigned has_var_tag_ : 1; unsigned has_weak_tag_ : 1; utils::ApiLevel introduced_; - + ModeTagLevelMap mode_tags_; public: ParsedTags() @@ -84,6 +86,9 @@ class VersionScriptParser { excluded_symbol_tags_.insert(tag); } + // Returns whether the argument is valid. + bool AddModeTag(std::string_view mode_tag); + void SetErrorHandler(std::unique_ptr<ErrorHandler> error_handler) { error_handler_ = std::move(error_handler); } @@ -94,11 +99,17 @@ class VersionScriptParser { private: bool ReadLine(std::string &line); - bool ParseVersionBlock(bool ignore_symbols); + bool ParseVersionBlock(bool ignore_symbols, const ParsedTags &tags); + + bool ParseSymbolLine(const std::string &line, bool is_cpp_symbol, + const ParsedTags &version_block_tags); + + ParsedTags ParseSymbolTags(const std::string &line, + const ParsedTags &initial_value); - bool ParseSymbolLine(const std::string &line, bool is_cpp_symbol); + bool MatchModeTags(const ParsedTags &tags); - ParsedTags ParseSymbolTags(const std::string &line); + bool MatchIntroducedTags(const ParsedTags &tags); bool IsSymbolExported(const ParsedTags &tags); @@ -121,6 +132,7 @@ class VersionScriptParser { utils::StringSet excluded_symbol_versions_; utils::StringSet excluded_symbol_tags_; + ModeTagLevelMap included_mode_tags_; std::istream *stream_; int line_no_; |