Index: lib/Format/FormatToken.h =================================================================== --- lib/Format/FormatToken.h +++ lib/Format/FormatToken.h @@ -26,67 +26,15 @@ namespace format { enum TokenType { - TT_ArrayInitializerLSquare, - TT_ArraySubscriptLSquare, - TT_AttributeParen, - TT_BinaryOperator, - TT_BitFieldColon, - TT_BlockComment, - TT_CastRParen, - TT_ConditionalExpr, - TT_ConflictAlternative, - TT_ConflictEnd, - TT_ConflictStart, - TT_CtorInitializerColon, - TT_CtorInitializerComma, - TT_DesignatedInitializerPeriod, - TT_DictLiteral, - TT_ForEachMacro, - TT_FunctionAnnotationRParen, - TT_FunctionDeclarationName, - TT_FunctionLBrace, - TT_FunctionTypeLParen, - TT_ImplicitStringLiteral, - TT_InheritanceColon, - TT_InlineASMBrace, - TT_InlineASMColon, - TT_JavaAnnotation, - TT_JsComputedPropertyName, - TT_JsFatArrow, - TT_JsTypeColon, - TT_JsTypeOptionalQuestion, - TT_LambdaArrow, - TT_LambdaLSquare, - TT_LeadingJavaAnnotation, - TT_LineComment, - TT_MacroBlockBegin, - TT_MacroBlockEnd, - TT_ObjCBlockLBrace, - TT_ObjCBlockLParen, - TT_ObjCDecl, - TT_ObjCForIn, - TT_ObjCMethodExpr, - TT_ObjCMethodSpecifier, - TT_ObjCProperty, - TT_ObjCStringLiteral, - TT_OverloadedOperator, - TT_OverloadedOperatorLParen, - TT_PointerOrReference, - TT_PureVirtualSpecifier, - TT_RangeBasedForLoopColon, - TT_RegexLiteral, - TT_SelectorName, - TT_StartOfName, - TT_TemplateCloser, - TT_TemplateOpener, - TT_TemplateString, - TT_TrailingAnnotation, - TT_TrailingReturnArrow, - TT_TrailingUnaryOperator, - TT_UnaryOperator, - TT_Unknown +#define TYPE(X) TT_##X, +#include "TokenTypes.def" +#undef TYPE + NUM_TOKEN_TYPES }; +/// \brief Determines the name of a token type. +const char *getTokenTypeName(TokenType Type); + // Represents what type of block a set of braces open. enum BraceBlockKind { BK_Unknown, BK_Block, BK_BracedInit }; Index: lib/Format/FormatToken.cpp =================================================================== --- lib/Format/FormatToken.cpp +++ lib/Format/FormatToken.cpp @@ -23,6 +23,20 @@ namespace clang { namespace format { +const char *getTokenTypeName(TokenType Type) { + static const char *const TokNames[] = { +#define TYPE(X) #X, +#include "TokenTypes.def" +#undef TYPE + nullptr + }; + + if (Type < NUM_TOKEN_TYPES) + return TokNames[Type]; + llvm_unreachable("unknown TokenKind"); + return nullptr; +} + // FIXME: This is copy&pasted from Sema. Put it in a common place and remove // duplication. bool FormatToken::isSimpleTypeSpecifier() const { Index: lib/Format/TokenAnnotator.cpp =================================================================== --- lib/Format/TokenAnnotator.cpp +++ lib/Format/TokenAnnotator.cpp @@ -2274,7 +2274,8 @@ const FormatToken *Tok = Line.First; while (Tok) { llvm::errs() << " M=" << Tok->MustBreakBefore - << " C=" << Tok->CanBreakBefore << " T=" << Tok->Type + << " C=" << Tok->CanBreakBefore + << " T=" << getTokenTypeName(Tok->Type) << " S=" << Tok->SpacesRequiredBefore << " B=" << Tok->BlockParameterCount << " P=" << Tok->SplitPenalty << " Name=" << Tok->Tok.getName() Index: lib/Format/TokenTypes.def =================================================================== --- /dev/null +++ lib/Format/TokenTypes.def @@ -0,0 +1,77 @@ +//===--- TokenTypes.def - Token Type Database -------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the TokenType database. Users of this file must +// optionally #define the TYPE macro to make use of this file. +// +//===----------------------------------------------------------------------===// + +#ifndef TYPE +#define TYPE(X) +#endif + +TYPE(ArrayInitializerLSquare) +TYPE(ArraySubscriptLSquare) +TYPE(AttributeParen) +TYPE(BinaryOperator) +TYPE(BitFieldColon) +TYPE(BlockComment) +TYPE(CastRParen) +TYPE(ConditionalExpr) +TYPE(ConflictAlternative) +TYPE(ConflictEnd) +TYPE(ConflictStart) +TYPE(CtorInitializerColon) +TYPE(CtorInitializerComma) +TYPE(DesignatedInitializerPeriod) +TYPE(DictLiteral) +TYPE(ForEachMacro) +TYPE(FunctionAnnotationRParen) +TYPE(FunctionDeclarationName) +TYPE(FunctionLBrace) +TYPE(FunctionTypeLParen) +TYPE(ImplicitStringLiteral) +TYPE(InheritanceColon) +TYPE(InlineASMBrace) +TYPE(InlineASMColon) +TYPE(JavaAnnotation) +TYPE(JsComputedPropertyName) +TYPE(JsFatArrow) +TYPE(JsTypeColon) +TYPE(JsTypeOptionalQuestion) +TYPE(LambdaArrow) +TYPE(LambdaLSquare) +TYPE(LeadingJavaAnnotation) +TYPE(LineComment) +TYPE(MacroBlockBegin) +TYPE(MacroBlockEnd) +TYPE(ObjCBlockLBrace) +TYPE(ObjCBlockLParen) +TYPE(ObjCDecl) +TYPE(ObjCForIn) +TYPE(ObjCMethodExpr) +TYPE(ObjCMethodSpecifier) +TYPE(ObjCProperty) +TYPE(ObjCStringLiteral) +TYPE(OverloadedOperator) +TYPE(OverloadedOperatorLParen) +TYPE(PointerOrReference) +TYPE(PureVirtualSpecifier) +TYPE(RangeBasedForLoopColon) +TYPE(RegexLiteral) +TYPE(SelectorName) +TYPE(StartOfName) +TYPE(TemplateCloser) +TYPE(TemplateOpener) +TYPE(TemplateString) +TYPE(TrailingAnnotation) +TYPE(TrailingReturnArrow) +TYPE(TrailingUnaryOperator) +TYPE(UnaryOperator) +TYPE(Unknown)