/// Preprocessor::getSpelling().
const char *getPunctuatorSpelling(enum TokenKind Kind) LLVM_READNONE;
+/// \brief Determines the spelling of simple keyword and contextual keyword
+/// tokens like 'int' and 'dynamic_cast'. Returns NULL for other token kinds.
+const char *getKeywordSpelling(enum TokenKind Kind) LLVM_READNONE;
+
/// \brief Return true if this is a raw identifier or an identifier kind.
inline bool isAnyIdentifier(TokenKind K) {
return (K == tok::identifier) || (K == tok::raw_identifier);
}
}
-/// \brief Returns the friendly name for a token kind that will / appear
-// without quotes in diagnostic messages.
-static const char *getTokenNameForDiagnostic(tok::TokenKind Kind) {
+/// \brief Returns the friendly description for a token kind that will appear
+/// without quotes in diagnostic messages. These strings may be translatable in
+/// future.
+static const char *getTokenDescForDiagnostic(tok::TokenKind Kind) {
switch (Kind) {
case tok::identifier:
return "identifier";
+ case tok::annot_template_id:
+ return "template name";
default:
return 0;
}
assert(ModifierLen == 0 && "No modifiers for token kinds yet");
llvm::raw_svector_ostream Out(OutStr);
- if (const char *S = getTokenNameForDiagnostic(Kind))
+ if (const char *S = tok::getPunctuatorSpelling(Kind))
+ // Quoted token spelling for punctuators.
+ Out << '\'' << S << '\'';
+ else if (const char *S = tok::getKeywordSpelling(Kind))
+ // Unquoted token spelling for keywords.
+ Out << S;
+ else if (const char *S = getTokenDescForDiagnostic(Kind))
// Unquoted translatable token name.
Out << S;
- else if (const char *S = tok::getPunctuatorSpelling(Kind))
- // Quoted token spelling, currently only covers punctuators.
- Out << '\'' << S << '\'';
else if (const char *S = tok::getTokenName(Kind))
// Debug name, shouldn't appear in user-facing diagnostics.
Out << '<' << S << '>';
#include "clang/Basic/TokenKinds.def"
default: break;
}
+ return 0;
+}
+const char *tok::getKeywordSpelling(enum TokenKind Kind) {
+ switch (Kind) {
+#define KEYWORD(X,Y) case kw_ ## X: return #X;
+#include "clang/Basic/TokenKinds.def"
+ default: break;
+ }
return 0;
}