Add an API call to retrieve the spelling data of a token from its SourceLocation.

llvm-svn: 127216
This commit is contained in:
John McCall 2011-03-08 04:06:57 +00:00
parent 8f0daa28d4
commit cff9bcfbd3
2 changed files with 16 additions and 1 deletions

View File

@ -644,13 +644,18 @@ public:
return Diags->Report(Tok.getLocation(), DiagID);
}
/// getSpelling() - Return the 'spelling' of the token at the given location.
///
/// \param invalid If non-null, will be set \c true if an error occurs.
llvm::StringRef getSpelling(SourceLocation loc, bool *invalid = 0) const;
/// getSpelling() - Return the 'spelling' of the Tok token. The spelling of a
/// token is the characters used to represent the token in the source file
/// after trigraph expansion and escaped-newline folding. In particular, this
/// wants to get the true, uncanonicalized, spelling of things like digraphs
/// UCNs, etc.
///
/// \param Invalid If non-NULL, will be set \c true if an error occurs.
/// \param Invalid If non-null, will be set \c true if an error occurs.
std::string getSpelling(const Token &Tok, bool *Invalid = 0) const {
return Lexer::getSpelling(Tok, SourceMgr, Features, Invalid);
}

View File

@ -278,6 +278,16 @@ void Preprocessor::CodeCompleteNaturalLanguage() {
CodeComplete->CodeCompleteNaturalLanguage();
}
llvm::StringRef Preprocessor::getSpelling(SourceLocation loc,
bool *invalid) const {
bool invalidTemp = false;
if (!invalid) invalid = &invalidTemp;
const char *begin = SourceMgr.getCharacterData(loc, invalid);
if (*invalid) return llvm::StringRef();
unsigned length = Lexer::MeasureTokenLength(loc, SourceMgr, Features);
return llvm::StringRef(begin, length);
}
/// getSpelling - This method is used to get the spelling of a token into a
/// SmallVector. Note that the returned StringRef may not point to the