r341141 - Extract parseBindID method

Roman Lebedev via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 30 23:06:11 PDT 2018


I don't think this was reviewed. The differential is not in 'accepted' state.

Roman.

On Fri, Aug 31, 2018 at 2:11 AM, Stephen Kelly via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: steveire
> Date: Thu Aug 30 16:11:01 2018
> New Revision: 341141
>
> URL: http://llvm.org/viewvc/llvm-project?rev=341141&view=rev
> Log:
> Extract parseBindID method
>
> Subscribers: cfe-commits
>
> Differential Revision: https://reviews.llvm.org/D51258
>
> Modified:
>     cfe/trunk/include/clang/ASTMatchers/Dynamic/Parser.h
>     cfe/trunk/lib/ASTMatchers/Dynamic/Parser.cpp
>
> Modified: cfe/trunk/include/clang/ASTMatchers/Dynamic/Parser.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/Dynamic/Parser.h?rev=341141&r1=341140&r2=341141&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/ASTMatchers/Dynamic/Parser.h (original)
> +++ cfe/trunk/include/clang/ASTMatchers/Dynamic/Parser.h Thu Aug 30 16:11:01 2018
> @@ -234,6 +234,7 @@ private:
>           const NamedValueMap *NamedValues,
>           Diagnostics *Error);
>
> +  bool parseBindID(std::string &BindID);
>    bool parseExpressionImpl(VariantValue *Value);
>    bool parseMatcherExpressionImpl(const TokenInfo &NameToken,
>                                    VariantValue *Value);
>
> Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Parser.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Parser.cpp?rev=341141&r1=341140&r2=341141&view=diff
> ==============================================================================
> --- cfe/trunk/lib/ASTMatchers/Dynamic/Parser.cpp (original)
> +++ cfe/trunk/lib/ASTMatchers/Dynamic/Parser.cpp Thu Aug 30 16:11:01 2018
> @@ -359,6 +359,43 @@ bool Parser::parseIdentifierPrefixImpl(V
>    return parseMatcherExpressionImpl(NameToken, Value);
>  }
>
> +bool Parser::parseBindID(std::string &BindID) {
> +  // Parse .bind("foo")
> +  assert(Tokenizer->peekNextToken().Kind == TokenInfo::TK_Period);
> +  Tokenizer->consumeNextToken(); // consume the period.
> +  const TokenInfo BindToken = Tokenizer->consumeNextToken();
> +  if (BindToken.Kind == TokenInfo::TK_CodeCompletion) {
> +    addCompletion(BindToken, MatcherCompletion("bind(\"", "bind", 1));
> +    return false;
> +  }
> +
> +  const TokenInfo OpenToken = Tokenizer->consumeNextToken();
> +  const TokenInfo IDToken = Tokenizer->consumeNextToken();
> +  const TokenInfo CloseToken = Tokenizer->consumeNextToken();
> +
> +  // TODO: We could use different error codes for each/some to be more
> +  //       explicit about the syntax error.
> +  if (BindToken.Kind != TokenInfo::TK_Ident ||
> +      BindToken.Text != TokenInfo::ID_Bind) {
> +    Error->addError(BindToken.Range, Error->ET_ParserMalformedBindExpr);
> +    return false;
> +  }
> +  if (OpenToken.Kind != TokenInfo::TK_OpenParen) {
> +    Error->addError(OpenToken.Range, Error->ET_ParserMalformedBindExpr);
> +    return false;
> +  }
> +  if (IDToken.Kind != TokenInfo::TK_Literal || !IDToken.Value.isString()) {
> +    Error->addError(IDToken.Range, Error->ET_ParserMalformedBindExpr);
> +    return false;
> +  }
> +  if (CloseToken.Kind != TokenInfo::TK_CloseParen) {
> +    Error->addError(CloseToken.Range, Error->ET_ParserMalformedBindExpr);
> +    return false;
> +  }
> +  BindID = IDToken.Value.getString();
> +  return true;
> +}
> +
>  /// Parse and validate a matcher expression.
>  /// \return \c true on success, in which case \c Value has the matcher parsed.
>  ///   If the input is malformed, or some argument has an error, it
> @@ -425,38 +462,8 @@ bool Parser::parseMatcherExpressionImpl(
>
>    std::string BindID;
>    if (Tokenizer->peekNextToken().Kind == TokenInfo::TK_Period) {
> -    // Parse .bind("foo")
> -    Tokenizer->consumeNextToken();  // consume the period.
> -    const TokenInfo BindToken = Tokenizer->consumeNextToken();
> -    if (BindToken.Kind == TokenInfo::TK_CodeCompletion) {
> -      addCompletion(BindToken, MatcherCompletion("bind(\"", "bind", 1));
> +    if (!parseBindID(BindID))
>        return false;
> -    }
> -
> -    const TokenInfo OpenToken = Tokenizer->consumeNextToken();
> -    const TokenInfo IDToken = Tokenizer->consumeNextToken();
> -    const TokenInfo CloseToken = Tokenizer->consumeNextToken();
> -
> -    // TODO: We could use different error codes for each/some to be more
> -    //       explicit about the syntax error.
> -    if (BindToken.Kind != TokenInfo::TK_Ident ||
> -        BindToken.Text != TokenInfo::ID_Bind) {
> -      Error->addError(BindToken.Range, Error->ET_ParserMalformedBindExpr);
> -      return false;
> -    }
> -    if (OpenToken.Kind != TokenInfo::TK_OpenParen) {
> -      Error->addError(OpenToken.Range, Error->ET_ParserMalformedBindExpr);
> -      return false;
> -    }
> -    if (IDToken.Kind != TokenInfo::TK_Literal || !IDToken.Value.isString()) {
> -      Error->addError(IDToken.Range, Error->ET_ParserMalformedBindExpr);
> -      return false;
> -    }
> -    if (CloseToken.Kind != TokenInfo::TK_CloseParen) {
> -      Error->addError(CloseToken.Range, Error->ET_ParserMalformedBindExpr);
> -      return false;
> -    }
> -    BindID = IDToken.Value.getString();
>    }
>
>    if (!Ctor)
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list