diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1914,7 +1914,7 @@ << FormatTok->Tok.getLocation().printToString( SourceManager) << " token: " << FormatTok->TokenText << " token type: " - << getTokenTypeName(FormatTok->Type) << "\n"); + << getTokenTypeName(FormatTok->getType()) << "\n"); return true; } if (guessIsObjC(SourceManager, Line->Children, Keywords)) diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h --- a/clang/lib/Format/FormatToken.h +++ b/clang/lib/Format/FormatToken.h @@ -113,6 +113,8 @@ TYPE(CSharpGenericTypeConstraintComma) \ TYPE(Unknown) +/// Determines the semantic type of a syntactic token, e.g. whether "<" is a +/// template opener or binary operator. enum TokenType { #define TYPE(X) TT_##X, LIST_TOKEN_TYPES @@ -192,7 +194,10 @@ /// Contains the kind of block if this token is a brace. BraceBlockKind BlockKind = BK_Unknown; - TokenType Type = TT_Unknown; + /// Returns the token's type, e.g. whether "<" is a template opener or + /// binary operator. + TokenType getType() const { return Type; } + void setType(TokenType T) { Type = T; } /// The number of spaces that should be inserted before this token. unsigned SpacesRequiredBefore = 0; @@ -590,6 +595,8 @@ return Previous->endsSequenceInternal(K1, Tokens...); return is(K1) && Previous && Previous->endsSequenceInternal(Tokens...); } + + TokenType Type = TT_Unknown; }; class ContinuationIndenter; diff --git a/clang/lib/Format/FormatToken.cpp b/clang/lib/Format/FormatToken.cpp --- a/clang/lib/Format/FormatToken.cpp +++ b/clang/lib/Format/FormatToken.cpp @@ -84,8 +84,8 @@ const FormatToken *LBrace = State.NextToken->Previous->getPreviousNonComment(); if (!LBrace || !LBrace->isOneOf(tok::l_brace, TT_ArrayInitializerLSquare) || - LBrace->BlockKind == BK_Block || LBrace->Type == TT_DictLiteral || - LBrace->Next->Type == TT_DesignatedInitializerPeriod) + LBrace->BlockKind == BK_Block || LBrace->getType() == TT_DictLiteral || + LBrace->Next->getType() == TT_DesignatedInitializerPeriod) return 0; // Calculate the number of code points we have to format this list. As the diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -158,7 +158,7 @@ At->TokenText = StringRef(At->TokenText.begin(), String->TokenText.end() - At->TokenText.begin()); At->ColumnWidth += String->ColumnWidth; - At->Type = TT_ObjCStringLiteral; + At->setType(TT_ObjCStringLiteral); Tokens.erase(Tokens.end() - 1); return true; } @@ -177,7 +177,7 @@ StringRef(Hash->TokenText.begin(), Identifier->TokenText.end() - Hash->TokenText.begin()); Hash->ColumnWidth += Identifier->ColumnWidth; - Hash->Type = TT_JsPrivateIdentifier; + Hash->setType(TT_JsPrivateIdentifier); Tokens.erase(Tokens.end() - 1); return true; } @@ -201,7 +201,7 @@ // would require similar work as that done for JavaScript template strings // in `handleTemplateStrings()`. auto &CSharpInterpolatedString = *(Tokens.end() - 2); - if (CSharpInterpolatedString->Type == TT_CSharpStringLiteral && + if (CSharpInterpolatedString->getType() == TT_CSharpStringLiteral && (CSharpInterpolatedString->TokenText.startswith(R"($")") || CSharpInterpolatedString->TokenText.startswith(R"($@")"))) { int UnmatchedOpeningBraceCount = 0; @@ -258,7 +258,7 @@ StringRef(Dollar->TokenText.begin(), String->TokenText.end() - Dollar->TokenText.begin()); Dollar->ColumnWidth += (At->ColumnWidth + String->ColumnWidth); - Dollar->Type = TT_CSharpStringLiteral; + Dollar->setType(TT_CSharpStringLiteral); Tokens.erase(Tokens.end() - 2); Tokens.erase(Tokens.end() - 1); return true; @@ -270,7 +270,7 @@ At->TokenText = StringRef(At->TokenText.begin(), String->TokenText.end() - At->TokenText.begin()); At->ColumnWidth += String->ColumnWidth; - At->Type = TT_CSharpStringLiteral; + At->setType(TT_CSharpStringLiteral); Tokens.erase(Tokens.end() - 1); return true; } @@ -294,7 +294,7 @@ SecondQuestion->TokenText.end() - FirstQuestion->TokenText.begin()); FirstQuestion->ColumnWidth += SecondQuestion->ColumnWidth; - FirstQuestion->Type = TT_CSharpNullCoalescing; + FirstQuestion->setType(TT_CSharpNullCoalescing); Tokens.erase(Tokens.end() - 1); return true; } @@ -315,10 +315,10 @@ if (PeriodOrLSquare->is(tok::l_square)) { Question->Tok.setKind(tok::question); // no '?[' in clang tokens. - Question->Type = TT_CSharpNullConditionalLSquare; + Question->setType(TT_CSharpNullConditionalLSquare); } else { Question->Tok.setKind(tok::question); // no '?.' in clang tokens. - Question->Type = TT_CSharpNullConditional; + Question->setType(TT_CSharpNullConditional); } Tokens.erase(Tokens.end() - 1); @@ -339,7 +339,7 @@ At->TokenText = StringRef(At->TokenText.begin(), Keyword->TokenText.end() - At->TokenText.begin()); At->ColumnWidth += Keyword->ColumnWidth; - At->Type = Keyword->Type; + At->setType(Keyword->getType()); Tokens.erase(Tokens.end() - 1); return true; } @@ -354,7 +354,7 @@ if (Identifier->TokenText != "foreach") return false; - Identifier->Type = TT_ForEachMacro; + Identifier->setType(TT_ForEachMacro); Identifier->Tok.setKind(tok::kw_for); return true; } @@ -405,7 +405,7 @@ First[0]->TokenText = StringRef(First[0]->TokenText.data(), First[0]->TokenText.size() + AddLength); First[0]->ColumnWidth += AddLength; - First[0]->Type = NewType; + First[0]->setType(NewType); return true; } @@ -494,7 +494,7 @@ } } - RegexToken->Type = TT_RegexLiteral; + RegexToken->setType(TT_RegexLiteral); // Treat regex literals like other string_literals. RegexToken->Tok.setKind(tok::string_literal); RegexToken->TokenText = StringRef(RegexBegin, Offset - RegexBegin); @@ -506,7 +506,7 @@ void FormatTokenLexer::handleCSharpVerbatimAndInterpolatedStrings() { FormatToken *CSharpStringLiteral = Tokens.back(); - if (CSharpStringLiteral->Type != TT_CSharpStringLiteral) + if (CSharpStringLiteral->getType() != TT_CSharpStringLiteral) return; // Deal with multiline strings. @@ -606,7 +606,7 @@ } StringRef LiteralText(TmplBegin, Offset - TmplBegin + 1); - BacktickToken->Type = TT_TemplateString; + BacktickToken->setType(TT_TemplateString); BacktickToken->Tok.setKind(tok::string_literal); BacktickToken->TokenText = LiteralText; @@ -644,7 +644,7 @@ if (To == StringRef::npos) To = Lex->getBuffer().size(); size_t Len = To - From; - HashToken->Type = TT_LineComment; + HashToken->setType(TT_LineComment); HashToken->Tok.setKind(tok::comment); HashToken->TokenText = Lex->getBuffer().substr(From, Len); SourceLocation Loc = To < Lex->getBuffer().size() @@ -742,7 +742,7 @@ // We do not need to build a complete token here, as we will skip it // during parsing anyway (as we must not touch whitespace around conflict // markers). - Tokens.back()->Type = Type; + Tokens.back()->setType(Type); Tokens.back()->Tok.setKind(tok::kw___unknown_anytype); Tokens.push_back(Next); @@ -829,13 +829,13 @@ break; case '\\': if (i + 1 == e || (Text[i + 1] != '\r' && Text[i + 1] != '\n')) - FormatTok->Type = TT_ImplicitStringLiteral; + FormatTok->setType(TT_ImplicitStringLiteral); break; default: - FormatTok->Type = TT_ImplicitStringLiteral; + FormatTok->setType(TT_ImplicitStringLiteral); break; } - if (FormatTok->Type == TT_ImplicitStringLiteral) + if (FormatTok->getType() == TT_ImplicitStringLiteral) break; } @@ -963,12 +963,12 @@ Tokens.back()->Tok.getIdentifierInfo()->getPPKeywordID() == tok::pp_define) && it != Macros.end()) { - FormatTok->Type = it->second; + FormatTok->setType(it->second); } else if (FormatTok->is(tok::identifier)) { if (MacroBlockBeginRegex.match(Text)) { - FormatTok->Type = TT_MacroBlockBegin; + FormatTok->setType(TT_MacroBlockBegin); } else if (MacroBlockEndRegex.match(Text)) { - FormatTok->Type = TT_MacroBlockEnd; + FormatTok->setType(TT_MacroBlockEnd); } } } diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -118,9 +118,9 @@ if (Style.Language == FormatStyle::LK_TextProto || (Style.Language == FormatStyle::LK_Proto && Left->Previous && Left->Previous->isOneOf(TT_SelectorName, TT_DictLiteral))) - CurrentToken->Type = TT_DictLiteral; + CurrentToken->setType(TT_DictLiteral); else - CurrentToken->Type = TT_TemplateCloser; + CurrentToken->setType(TT_TemplateCloser); next(); return true; } @@ -151,7 +151,7 @@ if (CurrentToken->is(tok::colon) || (CurrentToken->isOneOf(tok::l_brace, tok::less) && Previous->isNot(tok::colon))) - Previous->Type = TT_SelectorName; + Previous->setType(TT_SelectorName); } } if (!consumeToken()) @@ -217,7 +217,7 @@ // This is the parameter list of an ObjC block. Contexts.back().IsExpression = false; } else if (Left->Previous && Left->Previous->is(tok::kw___attribute)) { - Left->Type = TT_AttributeParen; + Left->setType(TT_AttributeParen); } else if (Left->Previous && Left->Previous->is(TT_ForEachMacro)) { // The first argument to a foreach macro is a declaration. Contexts.back().IsForEachMacro = true; @@ -233,7 +233,7 @@ if (StartsObjCMethodExpr) { Contexts.back().ColonIsObjCMethodExpr = true; - Left->Type = TT_ObjCMethodExpr; + Left->setType(TT_ObjCMethodExpr); } // MightBeFunctionType and ProbablyFunctionType are used for @@ -264,7 +264,7 @@ if (PrevPrev && PrevPrev->is(tok::identifier) && Prev->isOneOf(tok::star, tok::amp, tok::ampamp) && CurrentToken->is(tok::identifier) && Next->isNot(tok::equal)) { - Prev->Type = TT_BinaryOperator; + Prev->setType(TT_BinaryOperator); LookForDecls = false; } } @@ -282,8 +282,8 @@ if (MightBeFunctionType && ProbablyFunctionType && CurrentToken->Next && (CurrentToken->Next->is(tok::l_paren) || (CurrentToken->Next->is(tok::l_square) && Line.MustBeDeclaration))) - Left->Type = Left->Next->is(tok::caret) ? TT_ObjCBlockLParen - : TT_FunctionTypeLParen; + Left->setType(Left->Next->is(tok::caret) ? TT_ObjCBlockLParen + : TT_FunctionTypeLParen); Left->MatchingParen = CurrentToken; CurrentToken->MatchingParen = Left; @@ -295,12 +295,12 @@ for (FormatToken *Tok = Left; Tok != CurrentToken; Tok = Tok->Next) { if (Tok->is(TT_BinaryOperator) && Tok->isOneOf(tok::star, tok::amp, tok::ampamp)) - Tok->Type = TT_PointerOrReference; + Tok->setType(TT_PointerOrReference); } } if (StartsObjCMethodExpr) { - CurrentToken->Type = TT_ObjCMethodExpr; + CurrentToken->setType(TT_ObjCMethodExpr); if (Contexts.back().FirstObjCSelectorName) { Contexts.back().FirstObjCSelectorName->LongestObjCSelectorName = Contexts.back().LongestObjCSelectorName; @@ -308,13 +308,13 @@ } if (Left->is(TT_AttributeParen)) - CurrentToken->Type = TT_AttributeParen; + CurrentToken->setType(TT_AttributeParen); if (Left->Previous && Left->Previous->is(TT_JavaAnnotation)) - CurrentToken->Type = TT_JavaAnnotation; + CurrentToken->setType(TT_JavaAnnotation); if (Left->Previous && Left->Previous->is(TT_LeadingJavaAnnotation)) - CurrentToken->Type = TT_LeadingJavaAnnotation; + CurrentToken->setType(TT_LeadingJavaAnnotation); if (Left->Previous && Left->Previous->is(TT_AttributeSquare)) - CurrentToken->Type = TT_AttributeSquare; + CurrentToken->setType(TT_AttributeSquare); if (!HasMultipleLines) Left->PackingKind = PPK_Inconclusive; @@ -330,7 +330,7 @@ return false; if (CurrentToken->is(tok::l_brace)) - Left->Type = TT_Unknown; // Not TT_ObjCBlockLParen + Left->setType(TT_Unknown); // Not TT_ObjCBlockLParen if (CurrentToken->is(tok::comma) && CurrentToken->Next && !CurrentToken->Next->HasUnescapedNewline && !CurrentToken->Next->isTrailingComment()) @@ -342,13 +342,13 @@ if (CurrentToken->isOneOf(tok::semi, tok::colon)) { MightBeObjCForRangeLoop = false; if (PossibleObjCForInToken) { - PossibleObjCForInToken->Type = TT_Unknown; + PossibleObjCForInToken->setType(TT_Unknown); PossibleObjCForInToken = nullptr; } } if (MightBeObjCForRangeLoop && CurrentToken->is(Keywords.kw_in)) { PossibleObjCForInToken = CurrentToken; - PossibleObjCForInToken->Type = TT_ObjCForIn; + PossibleObjCForInToken->setType(TT_ObjCForIn); } // When we discover a 'new', we set CanBeExpression to 'false' in order to // parse the type correctly. Reset that after a comma. @@ -495,26 +495,26 @@ unsigned BindingIncrease = 1; if (IsCppStructuredBinding) { - Left->Type = TT_StructuredBindingLSquare; + Left->setType(TT_StructuredBindingLSquare); } else if (Left->is(TT_Unknown)) { if (StartsObjCMethodExpr) { - Left->Type = TT_ObjCMethodExpr; + Left->setType(TT_ObjCMethodExpr); } else if (InsideInlineASM) { - Left->Type = TT_InlineASMSymbolicNameLSquare; + Left->setType(TT_InlineASMSymbolicNameLSquare); } else if (IsCpp11AttributeSpecifier) { - Left->Type = TT_AttributeSquare; + Left->setType(TT_AttributeSquare); } else if (Style.Language == FormatStyle::LK_JavaScript && Parent && Contexts.back().ContextKind == tok::l_brace && Parent->isOneOf(tok::l_brace, tok::comma)) { - Left->Type = TT_JsComputedPropertyName; + Left->setType(TT_JsComputedPropertyName); } else if (Style.isCpp() && Contexts.back().ContextKind == tok::l_brace && Parent && Parent->isOneOf(tok::l_brace, tok::comma)) { - Left->Type = TT_DesignatedInitializerLSquare; + Left->setType(TT_DesignatedInitializerLSquare); } else if (IsCSharpAttributeSpecifier) { - Left->Type = TT_AttributeSquare; + Left->setType(TT_AttributeSquare); } else if (CurrentToken->is(tok::r_square) && Parent && Parent->is(TT_TemplateCloser)) { - Left->Type = TT_ArraySubscriptLSquare; + Left->setType(TT_ArraySubscriptLSquare); } else if (Style.Language == FormatStyle::LK_Proto || Style.Language == FormatStyle::LK_TextProto) { // Square braces in LK_Proto can either be message field attributes: @@ -543,13 +543,13 @@ // // In the first and the third case we want to spread the contents inside // the square braces; in the second we want to keep them inline. - Left->Type = TT_ArrayInitializerLSquare; + Left->setType(TT_ArrayInitializerLSquare); if (!Left->endsSequence(tok::l_square, tok::numeric_constant, tok::equal) && !Left->endsSequence(tok::l_square, tok::numeric_constant, tok::identifier) && !Left->endsSequence(tok::l_square, tok::colon, TT_SelectorName)) { - Left->Type = TT_ProtoExtensionLSquare; + Left->setType(TT_ProtoExtensionLSquare); BindingIncrease = 10; } } else if (!CppArrayTemplates && Parent && @@ -558,10 +558,10 @@ tok::question, tok::colon, tok::kw_return, // Should only be relevant to JavaScript: tok::kw_default)) { - Left->Type = TT_ArrayInitializerLSquare; + Left->setType(TT_ArrayInitializerLSquare); } else { BindingIncrease = 10; - Left->Type = TT_ArraySubscriptLSquare; + Left->setType(TT_ArraySubscriptLSquare); } } @@ -578,9 +578,9 @@ while (CurrentToken) { if (CurrentToken->is(tok::r_square)) { if (IsCpp11AttributeSpecifier) - CurrentToken->Type = TT_AttributeSquare; + CurrentToken->setType(TT_AttributeSquare); if (IsCSharpAttributeSpecifier) - CurrentToken->Type = TT_AttributeSquare; + CurrentToken->setType(TT_AttributeSquare); else if (((CurrentToken->Next && CurrentToken->Next->is(tok::l_paren)) || (CurrentToken->Previous && @@ -591,26 +591,26 @@ // will be expanded to more tokens. // FIXME: Do we incorrectly label ":" with this? StartsObjCMethodExpr = false; - Left->Type = TT_Unknown; + Left->setType(TT_Unknown); } if (StartsObjCMethodExpr && CurrentToken->Previous != Left) { - CurrentToken->Type = TT_ObjCMethodExpr; + CurrentToken->setType(TT_ObjCMethodExpr); // If we haven't seen a colon yet, make sure the last identifier // before the r_square is tagged as a selector name component. if (!ColonFound && CurrentToken->Previous && CurrentToken->Previous->is(TT_Unknown) && canBeObjCSelectorComponent(*CurrentToken->Previous)) - CurrentToken->Previous->Type = TT_SelectorName; + CurrentToken->Previous->setType(TT_SelectorName); // determineStarAmpUsage() thinks that '*' '[' is allocating an // array of pointers, but if '[' starts a selector then '*' is a // binary operator. if (Parent && Parent->is(TT_PointerOrReference)) - Parent->Type = TT_BinaryOperator; + Parent->setType(TT_BinaryOperator); } // An arrow after an ObjC method expression is not a lambda arrow. - if (CurrentToken->Type == TT_ObjCMethodExpr && CurrentToken->Next && - CurrentToken->Next->is(TT_LambdaArrow)) - CurrentToken->Next->Type = TT_Unknown; + if (CurrentToken->getType() == TT_ObjCMethodExpr && + CurrentToken->Next && CurrentToken->Next->is(TT_LambdaArrow)) + CurrentToken->Next->setType(TT_Unknown); Left->MatchingParen = CurrentToken; CurrentToken->MatchingParen = Left; // FirstObjCSelectorName is set when a colon is found. This does @@ -644,21 +644,21 @@ tok::kw_using)) { // Remember that this is a [[using ns: foo]] C++ attribute, so we // don't add a space before the colon (unlike other colons). - CurrentToken->Type = TT_AttributeColon; + CurrentToken->setType(TT_AttributeColon); } else if (Left->isOneOf(TT_ArraySubscriptLSquare, TT_DesignatedInitializerLSquare)) { - Left->Type = TT_ObjCMethodExpr; + Left->setType(TT_ObjCMethodExpr); StartsObjCMethodExpr = true; Contexts.back().ColonIsObjCMethodExpr = true; if (Parent && Parent->is(tok::r_paren)) // FIXME(bug 36976): ObjC return types shouldn't use TT_CastRParen. - Parent->Type = TT_CastRParen; + Parent->setType(TT_CastRParen); } ColonFound = true; } if (CurrentToken->is(tok::comma) && Left->is(TT_ObjCMethodExpr) && !ColonFound) - Left->Type = TT_ArrayInitializerLSquare; + Left->setType(TT_ArrayInitializerLSquare); FormatToken *Tok = CurrentToken; if (!consumeToken()) return false; @@ -673,7 +673,7 @@ Left->ParentBracket = Contexts.back().ContextKind; if (Contexts.back().CaretFound) - Left->Type = TT_ObjCBlockLBrace; + Left->setType(TT_ObjCBlockLBrace); Contexts.back().CaretFound = false; ScopedContextCreator ContextCreator(*this, tok::l_brace, 1); @@ -702,18 +702,18 @@ (!Contexts.back().ColonIsDictLiteral || !Style.isCpp())) || Style.Language == FormatStyle::LK_Proto || Style.Language == FormatStyle::LK_TextProto) { - Left->Type = TT_DictLiteral; + Left->setType(TT_DictLiteral); if (Previous->Tok.getIdentifierInfo() || Previous->is(tok::string_literal)) - Previous->Type = TT_SelectorName; + Previous->setType(TT_SelectorName); } if (CurrentToken->is(tok::colon) || Style.Language == FormatStyle::LK_JavaScript) - Left->Type = TT_DictLiteral; + Left->setType(TT_DictLiteral); } if (CurrentToken->is(tok::comma) && Style.Language == FormatStyle::LK_JavaScript) - Left->Type = TT_DictLiteral; + Left->setType(TT_DictLiteral); if (!consumeToken()) return false; } @@ -740,7 +740,7 @@ bool parseConditional() { while (CurrentToken) { if (CurrentToken->is(tok::colon)) { - CurrentToken->Type = TT_ConditionalExpr; + CurrentToken->setType(TT_ConditionalExpr); next(); return true; } @@ -752,7 +752,7 @@ bool parseTemplateDeclaration() { if (CurrentToken && CurrentToken->is(tok::less)) { - CurrentToken->Type = TT_TemplateOpener; + CurrentToken->setType(TT_TemplateOpener); next(); if (!parseAngle()) return false; @@ -770,7 +770,7 @@ case tok::plus: case tok::minus: if (!Tok->Previous && Line.MustBeDeclaration) - Tok->Type = TT_ObjCMethodSpecifier; + Tok->setType(TT_ObjCMethodSpecifier); break; case tok::colon: if (!Tok->Previous) @@ -787,30 +787,30 @@ (Contexts.size() == 1 && Line.MustBeDeclaration)) { // method/property declaration Contexts.back().IsExpression = false; - Tok->Type = TT_JsTypeColon; + Tok->setType(TT_JsTypeColon); break; } } else if (Style.isCSharp()) { if (Contexts.back().InCSharpAttributeSpecifier) { - Tok->Type = TT_AttributeColon; + Tok->setType(TT_AttributeColon); break; } if (Contexts.back().ContextKind == tok::l_paren) { - Tok->Type = TT_CSharpNamedArgumentColon; + Tok->setType(TT_CSharpNamedArgumentColon); break; } } if (Contexts.back().ColonIsDictLiteral || Style.Language == FormatStyle::LK_Proto || Style.Language == FormatStyle::LK_TextProto) { - Tok->Type = TT_DictLiteral; + Tok->setType(TT_DictLiteral); if (Style.Language == FormatStyle::LK_TextProto) { if (FormatToken *Previous = Tok->getPreviousNonComment()) - Previous->Type = TT_SelectorName; + Previous->setType(TT_SelectorName); } } else if (Contexts.back().ColonIsObjCMethodExpr || Line.startsWith(TT_ObjCMethodSpecifier)) { - Tok->Type = TT_ObjCMethodExpr; + Tok->setType(TT_ObjCMethodExpr); const FormatToken *BeforePrevious = Tok->Previous->Previous; // Ensure we tag all identifiers in method declarations as // TT_SelectorName. @@ -825,7 +825,7 @@ BeforePrevious->is(tok::r_square) || Contexts.back().LongestObjCSelectorName == 0 || UnknownIdentifierInMethodDeclaration) { - Tok->Previous->Type = TT_SelectorName; + Tok->Previous->setType(TT_SelectorName); if (!Contexts.back().FirstObjCSelectorName) Contexts.back().FirstObjCSelectorName = Tok->Previous; else if (Tok->Previous->ColumnWidth > @@ -837,30 +837,30 @@ ++Contexts.back().FirstObjCSelectorName->ObjCSelectorNameParts; } } else if (Contexts.back().ColonIsForRangeExpr) { - Tok->Type = TT_RangeBasedForLoopColon; + Tok->setType(TT_RangeBasedForLoopColon); } else if (CurrentToken && CurrentToken->is(tok::numeric_constant)) { - Tok->Type = TT_BitFieldColon; + Tok->setType(TT_BitFieldColon); } else if (Contexts.size() == 1 && !Line.First->isOneOf(tok::kw_enum, tok::kw_case)) { FormatToken *Prev = Tok->getPreviousNonComment(); if (Prev->isOneOf(tok::r_paren, tok::kw_noexcept)) - Tok->Type = TT_CtorInitializerColon; + Tok->setType(TT_CtorInitializerColon); else if (Prev->is(tok::kw_try)) { // Member initializer list within function try block. FormatToken *PrevPrev = Prev->getPreviousNonComment(); if (PrevPrev && PrevPrev->isOneOf(tok::r_paren, tok::kw_noexcept)) - Tok->Type = TT_CtorInitializerColon; + Tok->setType(TT_CtorInitializerColon); } else - Tok->Type = TT_InheritanceColon; + Tok->setType(TT_InheritanceColon); } else if (canBeObjCSelectorComponent(*Tok->Previous) && Tok->Next && (Tok->Next->isOneOf(tok::r_paren, tok::comma) || (canBeObjCSelectorComponent(*Tok->Next) && Tok->Next->Next && Tok->Next->Next->is(tok::colon)))) { // This handles a special macro in ObjC code where selectors including // the colon are passed as macro arguments. - Tok->Type = TT_ObjCMethodExpr; + Tok->setType(TT_ObjCMethodExpr); } else if (Contexts.back().ContextKind == tok::l_paren) { - Tok->Type = TT_InlineASMColon; + Tok->setType(TT_InlineASMColon); } break; case tok::pipe: @@ -869,7 +869,7 @@ // intersection types, respectively. if (Style.Language == FormatStyle::LK_JavaScript && !Contexts.back().IsExpression) - Tok->Type = TT_JsTypeOperator; + Tok->setType(TT_JsTypeOperator); break; case tok::kw_if: case tok::kw_while: @@ -905,9 +905,9 @@ if (Tok->Previous && Tok->Previous->is(tok::r_paren) && Tok->Previous->MatchingParen && Tok->Previous->MatchingParen->is(TT_OverloadedOperatorLParen)) { - Tok->Previous->Type = TT_OverloadedOperator; - Tok->Previous->MatchingParen->Type = TT_OverloadedOperator; - Tok->Type = TT_OverloadedOperatorLParen; + Tok->Previous->setType(TT_OverloadedOperator); + Tok->Previous->MatchingParen->setType(TT_OverloadedOperator); + Tok->setType(TT_OverloadedOperatorLParen); } if (!parseParens()) @@ -926,15 +926,15 @@ case tok::l_brace: if (Style.Language == FormatStyle::LK_TextProto) { FormatToken *Previous = Tok->getPreviousNonComment(); - if (Previous && Previous->Type != TT_DictLiteral) - Previous->Type = TT_SelectorName; + if (Previous && Previous->getType() != TT_DictLiteral) + Previous->setType(TT_SelectorName); } if (!parseBrace()) return false; break; case tok::less: if (parseAngle()) { - Tok->Type = TT_TemplateOpener; + Tok->setType(TT_TemplateOpener); // In TT_Proto, we must distignuish between: // map // msg < item: data > @@ -943,13 +943,13 @@ if (Style.Language == FormatStyle::LK_TextProto || (Style.Language == FormatStyle::LK_Proto && Tok->Previous && Tok->Previous->isOneOf(TT_SelectorName, TT_DictLiteral))) { - Tok->Type = TT_DictLiteral; + Tok->setType(TT_DictLiteral); FormatToken *Previous = Tok->getPreviousNonComment(); - if (Previous && Previous->Type != TT_DictLiteral) - Previous->Type = TT_SelectorName; + if (Previous && Previous->getType() != TT_DictLiteral) + Previous->setType(TT_SelectorName); } } else { - Tok->Type = TT_BinaryOperator; + Tok->setType(TT_BinaryOperator); NonTemplateLess.insert(Tok); CurrentToken = Tok; next(); @@ -965,7 +965,7 @@ break; case tok::greater: if (Style.Language != FormatStyle::LK_TextProto) - Tok->Type = TT_BinaryOperator; + Tok->setType(TT_BinaryOperator); if (Tok->Previous && Tok->Previous->is(TT_TemplateCloser)) Tok->SpacesRequiredBefore = 1; break; @@ -976,17 +976,17 @@ while (CurrentToken && !CurrentToken->isOneOf(tok::l_paren, tok::semi, tok::r_paren)) { if (CurrentToken->isOneOf(tok::star, tok::amp)) - CurrentToken->Type = TT_PointerOrReference; + CurrentToken->setType(TT_PointerOrReference); consumeToken(); if (CurrentToken && CurrentToken->Previous->isOneOf( TT_BinaryOperator, TT_UnaryOperator, tok::comma, tok::star, tok::arrow, tok::amp, tok::ampamp)) - CurrentToken->Previous->Type = TT_OverloadedOperator; + CurrentToken->Previous->setType(TT_OverloadedOperator); } if (CurrentToken) { - CurrentToken->Type = TT_OverloadedOperatorLParen; + CurrentToken->setType(TT_OverloadedOperatorLParen); if (CurrentToken->Previous->is(TT_BinaryOperator)) - CurrentToken->Previous->Type = TT_OverloadedOperator; + CurrentToken->Previous->setType(TT_OverloadedOperator); } break; case tok::question: @@ -1004,7 +1004,7 @@ // types (fields, parameters), e.g. // function(x?: string, y?) {...} // class X { y?; } - Tok->Type = TT_JsTypeOptionalQuestion; + Tok->setType(TT_JsTypeOptionalQuestion); break; } // Declarations cannot be conditional expressions, this can only be part @@ -1020,7 +1020,7 @@ (Tok->Next && Tok->Next->isOneOf(tok::r_paren, tok::greater)) || (Tok->Next && Tok->Next->is(tok::identifier) && Tok->Next->Next && Tok->Next->Next->is(tok::equal))) { - Tok->Type = TT_CSharpNullable; + Tok->setType(TT_CSharpNullable); break; } } @@ -1031,9 +1031,9 @@ break; case tok::comma: if (Contexts.back().InCtorInitializer) - Tok->Type = TT_CtorInitializerComma; + Tok->setType(TT_CtorInitializerComma); else if (Contexts.back().InInheritanceList) - Tok->Type = TT_InheritanceComma; + Tok->setType(TT_InheritanceComma); else if (Contexts.back().FirstStartOfName && (Contexts.size() == 1 || Line.startsWith(tok::kw_for))) { Contexts.back().FirstStartOfName->PartOfMultiVariableDeclStmt = true; @@ -1049,7 +1049,7 @@ } if (Style.isCSharp() && Tok->is(Keywords.kw_where) && Tok->Next && Tok->Next->isNot(tok::l_paren)) { - Tok->Type = TT_CSharpGenericTypeConstraint; + Tok->setType(TT_CSharpGenericTypeConstraint); parseCSharpGenericTypeConstraint(); } break; @@ -1064,23 +1064,23 @@ while (CurrentToken) { if (CurrentToken->is(tok::less)) { // parseAngle is too greedy and will consume the whole line. - CurrentToken->Type = TT_TemplateOpener; + CurrentToken->setType(TT_TemplateOpener); ++OpenAngleBracketsCount; next(); } else if (CurrentToken->is(tok::greater)) { - CurrentToken->Type = TT_TemplateCloser; + CurrentToken->setType(TT_TemplateCloser); --OpenAngleBracketsCount; next(); } else if (CurrentToken->is(tok::comma) && OpenAngleBracketsCount == 0) { // We allow line breaks after GenericTypeConstraintComma's // so do not flag commas in Generics as GenericTypeConstraintComma's. - CurrentToken->Type = TT_CSharpGenericTypeConstraintComma; + CurrentToken->setType(TT_CSharpGenericTypeConstraintComma); next(); } else if (CurrentToken->is(Keywords.kw_where)) { - CurrentToken->Type = TT_CSharpGenericTypeConstraint; + CurrentToken->setType(TT_CSharpGenericTypeConstraint); next(); } else if (CurrentToken->is(tok::colon)) { - CurrentToken->Type = TT_CSharpGenericTypeConstraintColon; + CurrentToken->setType(TT_CSharpGenericTypeConstraintColon); next(); } else { next(); @@ -1096,7 +1096,7 @@ // literals. if (CurrentToken->isNot(tok::comment) && !CurrentToken->TokenText.startswith("//")) - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } } @@ -1108,7 +1108,7 @@ // warning or error. next(); while (CurrentToken) { - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } } @@ -1122,7 +1122,7 @@ next(); // Consume first token (so we fix leading whitespace). while (CurrentToken) { if (IsMark || CurrentToken->Previous->is(TT_BinaryOperator)) - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } } @@ -1149,7 +1149,7 @@ // Treat these like C++ #include directives. while (CurrentToken) { // Tokens cannot be comments here. - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } return LT_ImportStatement; @@ -1310,7 +1310,7 @@ TT_InlineASMBrace, TT_JsFatArrow, TT_LambdaArrow, TT_NamespaceMacro, TT_OverloadedOperator, TT_RegexLiteral, TT_TemplateString, TT_ObjCStringLiteral)) - CurrentToken->Type = TT_Unknown; + CurrentToken->setType(TT_Unknown); CurrentToken->Role.reset(); CurrentToken->MatchingParen = nullptr; CurrentToken->FakeLParens.clear(); @@ -1398,7 +1398,7 @@ if (Previous->isOneOf(TT_BinaryOperator, TT_UnaryOperator) && Previous->isOneOf(tok::star, tok::amp, tok::ampamp) && Previous->Previous && Previous->Previous->isNot(tok::equal)) - Previous->Type = TT_PointerOrReference; + Previous->setType(TT_PointerOrReference); } } } else if (Current.is(tok::lessless) && @@ -1420,7 +1420,7 @@ for (FormatToken *Previous = Current.Previous; Previous && Previous->isOneOf(tok::star, tok::amp); Previous = Previous->Previous) - Previous->Type = TT_PointerOrReference; + Previous->setType(TT_PointerOrReference); if (Line.MustBeDeclaration && !Contexts.front().InCtorInitializer) Contexts.back().IsExpression = false; } else if (Current.is(tok::kw_new)) { @@ -1506,15 +1506,15 @@ if (Style.isCSharp() && CurrentToken->is(tok::question)) { if (CurrentToken->TokenText == "??") { - Current.Type = TT_CSharpNullCoalescing; + Current.setType(TT_CSharpNullCoalescing); return; } if (CurrentToken->TokenText == "?.") { - Current.Type = TT_CSharpNullConditional; + Current.setType(TT_CSharpNullConditional); return; } if (CurrentToken->TokenText == "?[") { - Current.Type = TT_CSharpNullConditionalLSquare; + Current.setType(TT_CSharpNullConditionalLSquare); return; } } @@ -1528,12 +1528,12 @@ tok::kw_namespace, tok::r_paren, tok::r_square, tok::r_brace, Keywords.kw_type, Keywords.kw_get, Keywords.kw_set) || Current.Previous->Tok.isLiteral())) { - Current.Type = TT_JsNonNullAssertion; + Current.setType(TT_JsNonNullAssertion); return; } if (Current.Next && Current.Next->isOneOf(TT_BinaryOperator, Keywords.kw_as)) { - Current.Type = TT_JsNonNullAssertion; + Current.setType(TT_JsNonNullAssertion); return; } } @@ -1543,11 +1543,11 @@ // function declaration have been found. In this case, 'Current' is a // trailing token of this declaration and thus cannot be a name. if (Current.is(Keywords.kw_instanceof)) { - Current.Type = TT_BinaryOperator; + Current.setType(TT_BinaryOperator); } else if (isStartOfName(Current) && (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) { Contexts.back().FirstStartOfName = &Current; - Current.Type = TT_StartOfName; + Current.setType(TT_StartOfName); } else if (Current.is(tok::semi)) { // Reset FirstStartOfName after finding a semicolon so that a for loop // with multiple increment statements is not confused with a for loop @@ -1557,57 +1557,57 @@ AutoFound = true; } else if (Current.is(tok::arrow) && Style.Language == FormatStyle::LK_Java) { - Current.Type = TT_LambdaArrow; + Current.setType(TT_LambdaArrow); } else if (Current.is(tok::arrow) && AutoFound && Line.MustBeDeclaration && Current.NestingLevel == 0 && !Current.Previous->is(tok::kw_operator)) { // not auto operator->() -> xxx; - Current.Type = TT_TrailingReturnArrow; + Current.setType(TT_TrailingReturnArrow); } else if (isDeductionGuide(Current)) { // Deduction guides trailing arrow " A(...) -> A;". - Current.Type = TT_TrailingReturnArrow; + Current.setType(TT_TrailingReturnArrow); } else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp)) { - Current.Type = determineStarAmpUsage(Current, - Contexts.back().CanBeExpression && - Contexts.back().IsExpression, - Contexts.back().InTemplateArgument); + Current.setType(determineStarAmpUsage( + Current, + Contexts.back().CanBeExpression && Contexts.back().IsExpression, + Contexts.back().InTemplateArgument)); } else if (Current.isOneOf(tok::minus, tok::plus, tok::caret)) { - Current.Type = determinePlusMinusCaretUsage(Current); + Current.setType(determinePlusMinusCaretUsage(Current)); if (Current.is(TT_UnaryOperator) && Current.is(tok::caret)) Contexts.back().CaretFound = true; } else if (Current.isOneOf(tok::minusminus, tok::plusplus)) { - Current.Type = determineIncrementUsage(Current); + Current.setType(determineIncrementUsage(Current)); } else if (Current.isOneOf(tok::exclaim, tok::tilde)) { - Current.Type = TT_UnaryOperator; + Current.setType(TT_UnaryOperator); } else if (Current.is(tok::question)) { if (Style.Language == FormatStyle::LK_JavaScript && Line.MustBeDeclaration && !Contexts.back().IsExpression) { // In JavaScript, `interface X { foo?(): bar; }` is an optional method // on the interface, not a ternary expression. - Current.Type = TT_JsTypeOptionalQuestion; + Current.setType(TT_JsTypeOptionalQuestion); } else { - Current.Type = TT_ConditionalExpr; + Current.setType(TT_ConditionalExpr); } } else if (Current.isBinaryOperator() && (!Current.Previous || Current.Previous->isNot(tok::l_square)) && (!Current.is(tok::greater) && Style.Language != FormatStyle::LK_TextProto)) { - Current.Type = TT_BinaryOperator; + Current.setType(TT_BinaryOperator); } else if (Current.is(tok::comment)) { if (Current.TokenText.startswith("/*")) { if (Current.TokenText.endswith("*/")) - Current.Type = TT_BlockComment; + Current.setType(TT_BlockComment); else // The lexer has for some reason determined a comment here. But we // cannot really handle it, if it isn't properly terminated. Current.Tok.setKind(tok::unknown); } else { - Current.Type = TT_LineComment; + Current.setType(TT_LineComment); } } else if (Current.is(tok::r_paren)) { if (rParenEndsCast(Current)) - Current.Type = TT_CastRParen; + Current.setType(TT_CastRParen); if (Current.MatchingParen && Current.Next && !Current.Next->isBinaryOperator() && !Current.Next->isOneOf(tok::semi, tok::colon, tok::l_brace, @@ -1622,7 +1622,7 @@ BeforeParen->TokenText == BeforeParen->TokenText.upper() && (!BeforeParen->Previous || BeforeParen->Previous->ClosesTemplateDeclaration)) - Current.Type = TT_FunctionAnnotationRParen; + Current.setType(TT_FunctionAnnotationRParen); } } } else if (Current.is(tok::at) && Current.Next && @@ -1634,10 +1634,10 @@ case tok::objc_interface: case tok::objc_implementation: case tok::objc_protocol: - Current.Type = TT_ObjCDecl; + Current.setType(TT_ObjCDecl); break; case tok::objc_property: - Current.Type = TT_ObjCProperty; + Current.setType(TT_ObjCProperty); break; default: break; @@ -1646,11 +1646,11 @@ FormatToken *PreviousNoComment = Current.getPreviousNonComment(); if (PreviousNoComment && PreviousNoComment->isOneOf(tok::comma, tok::l_brace)) - Current.Type = TT_DesignatedInitializerPeriod; + Current.setType(TT_DesignatedInitializerPeriod); else if (Style.Language == FormatStyle::LK_Java && Current.Previous && Current.Previous->isOneOf(TT_JavaAnnotation, TT_LeadingJavaAnnotation)) { - Current.Type = Current.Previous->Type; + Current.setType(Current.Previous->getType()); } } else if (canBeObjCSelectorComponent(Current) && // FIXME(bug 36976): ObjC return types shouldn't use @@ -1663,7 +1663,7 @@ // This is the first part of an Objective-C selector name. (If there's no // colon after this, this is the only place which annotates the identifier // as a selector.) - Current.Type = TT_SelectorName; + Current.setType(TT_SelectorName); } else if (Current.isOneOf(tok::identifier, tok::kw_const, tok::kw_noexcept) && Current.Previous && @@ -1671,7 +1671,7 @@ Line.MightBeFunctionDecl && Contexts.size() == 1) { // Line.MightBeFunctionDecl can only be true after the parentheses of a // function declaration have been found. - Current.Type = TT_TrailingAnnotation; + Current.setType(TT_TrailingAnnotation); } else if ((Style.Language == FormatStyle::LK_Java || Style.Language == FormatStyle::LK_JavaScript) && Current.Previous) { @@ -1680,13 +1680,13 @@ const FormatToken &AtToken = *Current.Previous; const FormatToken *Previous = AtToken.getPreviousNonComment(); if (!Previous || Previous->is(TT_LeadingJavaAnnotation)) - Current.Type = TT_LeadingJavaAnnotation; + Current.setType(TT_LeadingJavaAnnotation); else - Current.Type = TT_JavaAnnotation; + Current.setType(TT_JavaAnnotation); } else if (Current.Previous->is(tok::period) && Current.Previous->isOneOf(TT_JavaAnnotation, TT_LeadingJavaAnnotation)) { - Current.Type = Current.Previous->Type; + Current.setType(Current.Previous->getType()); } } } @@ -2390,7 +2390,7 @@ bool InFunctionDecl = Line.MightBeFunctionDecl; while (Current) { if (isFunctionDeclarationName(*Current, Line)) - Current->Type = TT_FunctionDeclarationName; + Current->setType(TT_FunctionDeclarationName); if (Current->is(TT_LineComment)) { if (Current->Previous->BlockKind == BK_BracedInit && Current->Previous->opensScope()) @@ -2952,7 +2952,7 @@ Right.MatchingParen->endsSequence(TT_DictLiteral, tok::at)) // Objective-C dictionary literal -> no space before closing brace. return false; - if (Right.Type == TT_TrailingAnnotation && + if (Right.getType() == TT_TrailingAnnotation && Right.isOneOf(tok::amp, tok::ampamp) && Left.isOneOf(tok::kw_const, tok::kw_volatile) && (!Right.Next || Right.Next->is(tok::semi))) @@ -3960,7 +3960,7 @@ while (Tok) { llvm::errs() << " M=" << Tok->MustBreakBefore << " C=" << Tok->CanBreakBefore - << " T=" << getTokenTypeName(Tok->Type) + << " T=" << getTokenTypeName(Tok->getType()) << " S=" << Tok->SpacesRequiredBefore << " B=" << Tok->BlockParameterCount << " BK=" << Tok->BlockKind << " P=" << Tok->SplitPenalty diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -369,9 +369,9 @@ bool SwitchLabelEncountered = false; do { tok::TokenKind kind = FormatTok->Tok.getKind(); - if (FormatTok->Type == TT_MacroBlockBegin) { + if (FormatTok->getType() == TT_MacroBlockBegin) { kind = tok::l_brace; - } else if (FormatTok->Type == TT_MacroBlockEnd) { + } else if (FormatTok->getType() == TT_MacroBlockEnd) { kind = tok::r_brace; } @@ -1033,11 +1033,11 @@ case tok::kw_asm: nextToken(); if (FormatTok->is(tok::l_brace)) { - FormatTok->Type = TT_InlineASMBrace; + FormatTok->setType(TT_InlineASMBrace); nextToken(); while (FormatTok && FormatTok->isNot(tok::eof)) { if (FormatTok->is(tok::r_brace)) { - FormatTok->Type = TT_InlineASMBrace; + FormatTok->setType(TT_InlineASMBrace); nextToken(); addUnwrappedLine(); break; @@ -1342,7 +1342,7 @@ // for them (the one we know is missing are lambdas). if (Style.BraceWrapping.AfterFunction) addUnwrappedLine(); - FormatTok->Type = TT_FunctionLBrace; + FormatTok->setType(TT_FunctionLBrace); parseBlock(/*MustBeDeclaration=*/false); addUnwrappedLine(); return; @@ -1658,7 +1658,7 @@ // This might or might not actually be a lambda arrow (this could be an // ObjC method invocation followed by a dereferencing arrow). We might // reset this back to TT_Unknown in TokenAnnotator. - FormatTok->Type = TT_LambdaArrow; + FormatTok->setType(TT_LambdaArrow); SeenArrow = true; nextToken(); break; @@ -1666,8 +1666,8 @@ return true; } } - FormatTok->Type = TT_LambdaLBrace; - LSquare.Type = TT_LambdaLSquare; + FormatTok->setType(TT_LambdaLBrace); + LSquare.setType(TT_LambdaLSquare); parseChildBlock(); return true; } @@ -1700,7 +1700,7 @@ // Consume * (generator function). Treat it like C++'s overloaded operators. if (FormatTok->is(tok::star)) { - FormatTok->Type = TT_OverloadedOperator; + FormatTok->setType(TT_OverloadedOperator); nextToken(); } @@ -2684,8 +2684,8 @@ E = Line.Tokens.end(); I != E; ++I) { llvm::dbgs() << I->Tok->Tok.getName() << "[" - << "T=" << I->Tok->Type << ", OC=" << I->Tok->OriginalColumn - << "] "; + << "T=" << I->Tok->getType() + << ", OC=" << I->Tok->OriginalColumn << "] "; } for (std::list::const_iterator I = Line.Tokens.begin(), E = Line.Tokens.end(); @@ -2956,14 +2956,14 @@ flushComments(isOnNewLine(*FormatTok)); parsePPDirective(); } - while (FormatTok->Type == TT_ConflictStart || - FormatTok->Type == TT_ConflictEnd || - FormatTok->Type == TT_ConflictAlternative) { - if (FormatTok->Type == TT_ConflictStart) { + while (FormatTok->getType() == TT_ConflictStart || + FormatTok->getType() == TT_ConflictEnd || + FormatTok->getType() == TT_ConflictAlternative) { + if (FormatTok->getType() == TT_ConflictStart) { conditionalCompilationStart(/*Unreachable=*/false); - } else if (FormatTok->Type == TT_ConflictAlternative) { + } else if (FormatTok->getType() == TT_ConflictAlternative) { conditionalCompilationAlternative(); - } else if (FormatTok->Type == TT_ConflictEnd) { + } else if (FormatTok->getType() == TT_ConflictEnd) { conditionalCompilationEnd(); } FormatTok = Tokens->getNextToken();