зеркало из https://github.com/microsoft/clang-1.git
rename getSpelledCharacterAt to getSpellingOfSingleCharacterNumericConstant,
optimize it to use the LiteralData when possible. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63060 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
363fdc2965
Коммит
7216dc9cb4
|
@ -382,7 +382,7 @@
|
|||
35A057E10EAE2D950069249F /* SVals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SVals.cpp; path = lib/Analysis/SVals.cpp; sourceTree = "<group>"; };
|
||||
35A057E60EAE2DDD0069249F /* CacheTokens.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CacheTokens.cpp; path = Driver/CacheTokens.cpp; sourceTree = "<group>"; };
|
||||
35A2B8610CF8FFA300E6C317 /* SemaUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = SemaUtil.h; path = lib/Sema/SemaUtil.h; sourceTree = "<group>"; tabWidth = 2; };
|
||||
35A3E7000DD3874400757F74 /* CGDebugInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = CGDebugInfo.cpp; path = lib/CodeGen/CGDebugInfo.cpp; sourceTree = "<group>"; tabWidth = 2; };
|
||||
35A3E7000DD3874400757F74 /* CGDebugInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = CGDebugInfo.cpp; path = lib/CodeGen/CGDebugInfo.cpp; sourceTree = "<group>"; tabWidth = 2; wrapsLines = 1; };
|
||||
35A3E7010DD3874400757F74 /* CGDebugInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = CGDebugInfo.h; path = lib/CodeGen/CGDebugInfo.h; sourceTree = "<group>"; tabWidth = 2; };
|
||||
35A8FCF60D9B4ADD001C2F97 /* ProgramPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgramPoint.h; path = clang/Analysis/ProgramPoint.h; sourceTree = "<group>"; };
|
||||
35A8FCF70D9B4ADD001C2F97 /* PathDiagnostic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PathDiagnostic.h; path = clang/Analysis/PathDiagnostic.h; sourceTree = "<group>"; };
|
||||
|
|
|
@ -451,16 +451,26 @@ public:
|
|||
/// if an internal buffer is returned.
|
||||
unsigned getSpelling(const Token &Tok, const char *&Buffer) const;
|
||||
|
||||
/// getSpelledCharacterAt - Return a pointer to the start of the specified
|
||||
/// location in the appropriate MemoryBuffer.
|
||||
char getSpelledCharacterAt(SourceLocation SL) const {
|
||||
/// getSpellingOfSingleCharacterNumericConstant - Tok is a numeric constant
|
||||
/// with length 1, return the character.
|
||||
char getSpellingOfSingleCharacterNumericConstant(const Token &Tok) const {
|
||||
assert(Tok.is(tok::numeric_constant) &&
|
||||
Tok.getLength() == 1 && "Called on unsupported token");
|
||||
assert(!Tok.needsCleaning() && "Token can't need cleaning with length 1");
|
||||
|
||||
// If the token is carrying a literal data pointer, just use it.
|
||||
if (const char *D = Tok.getLiteralData())
|
||||
return *D;
|
||||
|
||||
if (PTH) {
|
||||
const char *Data;
|
||||
if (PTH->getSpelling(SL, Data))
|
||||
if (PTH->getSpelling(Tok.getLocation(), Data))
|
||||
return *Data;
|
||||
}
|
||||
|
||||
return *SourceMgr.getCharacterData(SL);
|
||||
// Otherwise, fall back on getCharacterData, which is slower, but always
|
||||
// works.
|
||||
return *SourceMgr.getCharacterData(Tok.getLocation());
|
||||
}
|
||||
|
||||
/// CreateString - Plop the specified string into a scratch buffer and set the
|
||||
|
|
|
@ -869,7 +869,7 @@ Action::OwningExprResult Sema::ActOnNumericConstant(const Token &Tok) {
|
|||
// Fast path for a single digit (which is quite common). A single digit
|
||||
// cannot have a trigraph, escaped newline, radix prefix, or type suffix.
|
||||
if (Tok.getLength() == 1) {
|
||||
const char Val = PP.getSpelledCharacterAt(Tok.getLocation());
|
||||
const char Val = PP.getSpellingOfSingleCharacterNumericConstant(Tok);
|
||||
unsigned IntSize = Context.Target.getIntWidth();
|
||||
return Owned(new (Context) IntegerLiteral(llvm::APInt(IntSize, Val-'0'),
|
||||
Context.IntTy, Tok.getLocation()));
|
||||
|
|
Загрузка…
Ссылка в новой задаче