From: John McCall Date: Tue, 8 Mar 2011 04:06:57 +0000 (+0000) Subject: Add an API call to retrieve the spelling data of a token from its SourceLocation. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30900dafbe972f4802c2663262b4393edab0d1cd;p=clang Add an API call to retrieve the spelling data of a token from its SourceLocation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127216 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index ec04838af2..0b01710abf 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -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); } diff --git a/lib/Lex/Preprocessor.cpp b/lib/Lex/Preprocessor.cpp index 6fe414b664..40227dc5e6 100644 --- a/lib/Lex/Preprocessor.cpp +++ b/lib/Lex/Preprocessor.cpp @@ -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