summaryrefslogtreecommitdiff
path: root/vndk/tools/header-checker/src/repr/symbol/version_script_parser.h
diff options
context:
space:
mode:
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.h24
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_;