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 @@ -1730,7 +1730,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 @@ -182,7 +182,14 @@ /// 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; @@ -577,6 +584,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 @@ -137,7 +137,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; } @@ -156,7 +156,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; } @@ -184,7 +184,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; @@ -196,7 +196,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; } @@ -213,7 +213,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; } @@ -232,7 +232,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; } @@ -300,7 +300,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; } @@ -389,7 +389,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); @@ -439,7 +439,7 @@ } StringRef LiteralText(TmplBegin, Offset - TmplBegin + 1); - BacktickToken->Type = TT_TemplateString; + BacktickToken->setType(TT_TemplateString); BacktickToken->Tok.setKind(tok::string_literal); BacktickToken->TokenText = LiteralText; @@ -477,7 +477,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() @@ -575,7 +575,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); @@ -661,13 +661,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; } @@ -795,12 +795,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 @@ -102,9 +102,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; } @@ -135,7 +135,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()) @@ -203,7 +203,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; @@ -219,7 +219,7 @@ if (StartsObjCMethodExpr) { Contexts.back().ColonIsObjCMethodExpr = true; - Left->Type = TT_ObjCMethodExpr; + Left->setType(TT_ObjCMethodExpr); } // MightBeFunctionType and ProbablyFunctionType are used for @@ -250,7 +250,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; } } @@ -268,8 +268,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; @@ -281,12 +281,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; @@ -294,13 +294,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; @@ -316,7 +316,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()) @@ -328,13 +328,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. @@ -463,22 +463,22 @@ 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 (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 (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: @@ -507,13 +507,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 && @@ -522,12 +522,12 @@ 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 if (IsCSharp11AttributeSpecifier) { - Left->Type = TT_AttributeSquare; + Left->setType(TT_AttributeSquare); } else { BindingIncrease = 10; - Left->Type = TT_ArraySubscriptLSquare; + Left->setType(TT_ArraySubscriptLSquare); } } @@ -544,9 +544,9 @@ while (CurrentToken) { if (CurrentToken->is(tok::r_square)) { if (IsCpp11AttributeSpecifier) - CurrentToken->Type = TT_AttributeSquare; + CurrentToken->setType(TT_AttributeSquare); if (IsCSharp11AttributeSpecifier) - CurrentToken->Type = TT_AttributeSquare; + CurrentToken->setType(TT_AttributeSquare); else if (((CurrentToken->Next && CurrentToken->Next->is(tok::l_paren)) || (CurrentToken->Previous && @@ -557,26 +557,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 && + if (CurrentToken->getType() == TT_ObjCMethodExpr && CurrentToken->Next && CurrentToken->Next->is(TT_LambdaArrow)) - CurrentToken->Next->Type = TT_Unknown; + CurrentToken->Next->setType(TT_Unknown); Left->MatchingParen = CurrentToken; CurrentToken->MatchingParen = Left; // FirstObjCSelectorName is set when a colon is found. This does @@ -610,21 +610,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; @@ -639,7 +639,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); @@ -668,18 +668,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; } @@ -706,7 +706,7 @@ bool parseConditional() { while (CurrentToken) { if (CurrentToken->is(tok::colon)) { - CurrentToken->Type = TT_ConditionalExpr; + CurrentToken->setType(TT_ConditionalExpr); next(); return true; } @@ -718,7 +718,7 @@ bool parseTemplateDeclaration() { if (CurrentToken && CurrentToken->is(tok::less)) { - CurrentToken->Type = TT_TemplateOpener; + CurrentToken->setType(TT_TemplateOpener); next(); if (!parseAngle()) return false; @@ -736,7 +736,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) @@ -753,21 +753,21 @@ (Contexts.size() == 1 && Line.MustBeDeclaration)) { // method/property declaration Contexts.back().IsExpression = false; - Tok->Type = TT_JsTypeColon; + Tok->setType(TT_JsTypeColon); 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. @@ -782,7 +782,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 > @@ -794,25 +794,25 @@ ++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)) { if (Tok->getPreviousNonComment()->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: @@ -821,7 +821,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: @@ -858,9 +858,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()) @@ -879,15 +879,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 > @@ -896,13 +896,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(); @@ -918,7 +918,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; @@ -929,17 +929,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)) - 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: @@ -950,7 +950,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 @@ -965,9 +965,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; @@ -996,7 +996,7 @@ // literals. if (CurrentToken->isNot(tok::comment) && !CurrentToken->TokenText.startswith("//")) - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } } @@ -1008,7 +1008,7 @@ // warning or error. next(); while (CurrentToken) { - CurrentToken->Type = TT_ImplicitStringLiteral; + CurrentToken->setType(TT_ImplicitStringLiteral); next(); } } @@ -1022,7 +1022,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(); } } @@ -1049,7 +1049,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; @@ -1210,7 +1210,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(); @@ -1298,7 +1298,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) && @@ -1320,7 +1320,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)) { @@ -1343,12 +1343,12 @@ tok::r_paren, tok::r_square, tok::r_brace) || 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; } } @@ -1358,11 +1358,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 @@ -1372,51 +1372,51 @@ 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.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, @@ -1431,7 +1431,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 && @@ -1443,10 +1443,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; @@ -1455,11 +1455,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 @@ -1472,14 +1472,14 @@ // 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) && Current.Previous && !Current.Previous->isOneOf(tok::equal, tok::at) && 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) { @@ -1488,13 +1488,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()); } } } @@ -2162,7 +2162,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()) @@ -3478,7 +3478,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 @@ -327,9 +327,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; } @@ -984,11 +984,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; @@ -1279,7 +1279,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; @@ -1483,7 +1483,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; @@ -1491,8 +1491,8 @@ return true; } } - FormatTok->Type = TT_LambdaLBrace; - LSquare.Type = TT_LambdaLSquare; + FormatTok->setType(TT_LambdaLBrace); + LSquare.setType(TT_LambdaLSquare); parseChildBlock(); return true; } @@ -1525,7 +1525,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(); } @@ -2440,8 +2440,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(); @@ -2711,14 +2711,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();