/// Parse a '{' token.
virtual ParseResult parseLBrace() = 0;
+ /// Parse a '{' token if present
+ virtual ParseResult parseOptionalLBrace() = 0;
+
/// Parse a `}` token.
virtual ParseResult parseRBrace() = 0;
+ /// Parse a `}` token if present
+ virtual ParseResult parseOptionalRBrace() = 0;
+
/// Parse a `:` token.
virtual ParseResult parseColon() = 0;
/// Parse a `...` token if present;
virtual ParseResult parseOptionalEllipsis() = 0;
+ /// Parse a `?` token.
+ virtual ParseResult parseOptionalQuestion() = 0;
+
+ /// Parse a `*` token.
+ virtual ParseResult parseOptionalStar() = 0;
+
//===--------------------------------------------------------------------===//
// Attribute Parsing
//===--------------------------------------------------------------------===//
return parser.parseToken(Token::l_brace, "expected '{'");
}
+ /// Parse a '{' token if present
+ ParseResult parseOptionalLBrace() override {
+ return success(parser.consumeIf(Token::l_brace));
+ }
+
/// Parse a `}` token.
ParseResult parseRBrace() override {
return parser.parseToken(Token::r_brace, "expected '}'");
}
+ /// Parse a `}` token if present
+ ParseResult parseOptionalRBrace() override {
+ return success(parser.consumeIf(Token::r_brace));
+ }
+
/// Parse a `:` token.
ParseResult parseColon() override {
return parser.parseToken(Token::colon, "expected ':'");
return success(parser.consumeIf(Token::r_square));
}
+ /// Parses a '?' if present.
+ ParseResult parseOptionalQuestion() override {
+ return success(parser.consumeIf(Token::question));
+ }
+
+ /// Parses a '*' if present.
+ ParseResult parseOptionalStar() override {
+ return success(parser.consumeIf(Token::star));
+ }
+
/// Returns if the current token corresponds to a keyword.
bool isCurrentTokenAKeyword() const {
return parser.getToken().is(Token::bare_identifier) ||