|
|
@@ -70,6 +70,8 @@ constexpr struct {
|
|
|
*/
|
|
|
struct DependentKeyword : std::string_view {};
|
|
|
|
|
|
+enum class KeywordType : char { None, Keyword, KeywordMap };
|
|
|
+
|
|
|
/**
|
|
|
* @brief This type represents a union of several different "parsing handler"
|
|
|
* states, aligned to a specific starting version:
|
|
|
@@ -95,25 +97,26 @@ struct DependentKeyword : std::string_view {};
|
|
|
template <Adapter A> struct Metadata {
|
|
|
using pConstraint = std::unique_ptr<constraint::Constraint>;
|
|
|
|
|
|
- Metadata(decltype(Removed)) {}
|
|
|
+ Metadata(decltype(Removed)) : valid(false) {}
|
|
|
Metadata(decltype(Literal)) {}
|
|
|
- Metadata(decltype(KeywordMap)) : is_keyword(true), is_keyword_map(true) {}
|
|
|
- Metadata(DependentKeyword dep) : is_keyword(true) {}
|
|
|
+ Metadata(decltype(KeywordMap)) : type(KeywordType::KeywordMap) {}
|
|
|
+ Metadata(DependentKeyword dep) : type(KeywordType::Keyword) {}
|
|
|
|
|
|
template <typename F> Metadata(F make) : make(make) {}
|
|
|
- template <typename F> Metadata(F make, decltype(Keyword)) : make(make), is_keyword(true) {}
|
|
|
template <typename F>
|
|
|
- Metadata(F make, decltype(KeywordMap)) : make(make), is_keyword(true), is_keyword_map(true) {}
|
|
|
+ Metadata(F make, decltype(Keyword)) : make(make), type(KeywordType::Keyword) {}
|
|
|
+ template <typename F>
|
|
|
+ Metadata(F make, decltype(KeywordMap)) : make(make), type(KeywordType::KeywordMap) {}
|
|
|
template <typename F>
|
|
|
Metadata(F make, decltype(PostConstraint))
|
|
|
- : make(make), is_keyword(true), is_post_constraint(true) {}
|
|
|
+ : make(make), type(KeywordType::Keyword), is_post_constraint(true) {}
|
|
|
|
|
|
- explicit operator bool() const { return make || is_keyword; }
|
|
|
+ explicit operator bool() const { return valid; }
|
|
|
operator std::function<pConstraint(detail::ParserContext<A> const &)>() const { return make; }
|
|
|
|
|
|
std::function<pConstraint(detail::ParserContext<A> const &)> make = nullptr;
|
|
|
- bool is_keyword = false;
|
|
|
- bool is_keyword_map = false;
|
|
|
+ bool valid = true;
|
|
|
+ KeywordType type = KeywordType::None;
|
|
|
bool is_post_constraint = false;
|
|
|
};
|
|
|
}
|