diff options
author | Mike Stump <mrs@apple.com> | 2009-09-09 15:08:12 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-09-09 15:08:12 +0000 |
commit | 1eb4433ac451dc16f4133a88af2d002ac26c58ef (patch) | |
tree | 07065b80cb7787bb7b9ffcb985196007a57e86f7 /lib/Lex | |
parent | 79d39f92590cf2e91bf81486b02cd1156d13ca54 (diff) |
Remove tabs, and whitespace cleanups.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81346 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex')
-rw-r--r-- | lib/Lex/HeaderMap.cpp | 44 | ||||
-rw-r--r-- | lib/Lex/HeaderSearch.cpp | 112 | ||||
-rw-r--r-- | lib/Lex/Lexer.cpp | 296 | ||||
-rw-r--r-- | lib/Lex/LiteralSupport.cpp | 182 | ||||
-rw-r--r-- | lib/Lex/MacroArgs.cpp | 34 | ||||
-rw-r--r-- | lib/Lex/MacroArgs.h | 26 | ||||
-rw-r--r-- | lib/Lex/MacroInfo.cpp | 12 | ||||
-rw-r--r-- | lib/Lex/PPCaching.cpp | 2 | ||||
-rw-r--r-- | lib/Lex/PPDirectives.cpp | 350 | ||||
-rw-r--r-- | lib/Lex/PPExpressions.cpp | 96 | ||||
-rw-r--r-- | lib/Lex/PPLexerChange.cpp | 68 | ||||
-rw-r--r-- | lib/Lex/PPMacroExpansion.cpp | 160 | ||||
-rw-r--r-- | lib/Lex/PTHLexer.cpp | 218 | ||||
-rw-r--r-- | lib/Lex/Pragma.cpp | 130 | ||||
-rw-r--r-- | lib/Lex/Preprocessor.cpp | 76 | ||||
-rw-r--r-- | lib/Lex/PreprocessorLexer.cpp | 4 | ||||
-rw-r--r-- | lib/Lex/ScratchBuffer.cpp | 10 | ||||
-rw-r--r-- | lib/Lex/TokenConcatenation.cpp | 42 | ||||
-rw-r--r-- | lib/Lex/TokenLexer.cpp | 120 |
19 files changed, 991 insertions, 991 deletions
diff --git a/lib/Lex/HeaderMap.cpp b/lib/Lex/HeaderMap.cpp index 4c8b70eb78..c9a10dc027 100644 --- a/lib/Lex/HeaderMap.cpp +++ b/lib/Lex/HeaderMap.cpp @@ -28,8 +28,8 @@ using namespace clang; enum { HMAP_HeaderMagicNumber = ('h' << 24) | ('m' << 16) | ('a' << 8) | 'p', HMAP_HeaderVersion = 1, - - HMAP_EmptyBucketKey = 0 + + HMAP_EmptyBucketKey = 0 }; namespace clang { @@ -58,7 +58,7 @@ struct HMapHeader { /// linear probing based on this function. static inline unsigned HashHMapKey(const char *S, const char *End) { unsigned Result = 0; - + for (; S != End; S++) Result += tolower(*S) * 13; return Result; @@ -78,27 +78,27 @@ const HeaderMap *HeaderMap::Create(const FileEntry *FE) { // If the file is too small to be a header map, ignore it. unsigned FileSize = FE->getSize(); if (FileSize <= sizeof(HMapHeader)) return 0; - - llvm::OwningPtr<const llvm::MemoryBuffer> FileBuffer( + + llvm::OwningPtr<const llvm::MemoryBuffer> FileBuffer( llvm::MemoryBuffer::getFile(FE->getName(), 0, FE->getSize())); if (FileBuffer == 0) return 0; // Unreadable file? const char *FileStart = FileBuffer->getBufferStart(); // We know the file is at least as big as the header, check it now. const HMapHeader *Header = reinterpret_cast<const HMapHeader*>(FileStart); - + // Sniff it to see if it's a headermap by checking the magic number and // version. bool NeedsByteSwap; - if (Header->Magic == HMAP_HeaderMagicNumber && + if (Header->Magic == HMAP_HeaderMagicNumber && Header->Version == HMAP_HeaderVersion) NeedsByteSwap = false; else if (Header->Magic == llvm::ByteSwap_32(HMAP_HeaderMagicNumber) && Header->Version == llvm::ByteSwap_16(HMAP_HeaderVersion)) NeedsByteSwap = true; // Mixed endianness headermap. - else + else return 0; // Not a header map. - + if (Header->Reserved != 0) return 0; // Okay, everything looks good, create the header map. @@ -137,11 +137,11 @@ const HMapHeader &HeaderMap::getHeader() const { HMapBucket HeaderMap::getBucket(unsigned BucketNo) const { HMapBucket Result; Result.Key = HMAP_EmptyBucketKey; - - const HMapBucket *BucketArray = + + const HMapBucket *BucketArray = reinterpret_cast<const HMapBucket*>(FileBuffer->getBufferStart() + sizeof(HMapHeader)); - + const HMapBucket *BucketPtr = BucketArray+BucketNo; if ((char*)(BucketPtr+1) > FileBuffer->getBufferEnd()) { Result.Prefix = 0; @@ -161,11 +161,11 @@ HMapBucket HeaderMap::getBucket(unsigned BucketNo) const { const char *HeaderMap::getString(unsigned StrTabIdx) const { // Add the start of the string table to the idx. StrTabIdx += getEndianAdjustedWord(getHeader().StringsOffset); - + // Check for invalid index. if (StrTabIdx >= FileBuffer->getBufferSize()) return 0; - + // Otherwise, we have a valid pointer into the file. Just return it. We know // that the "string" can not overrun the end of the file, because the buffer // is nul terminated by virtue of being a MemoryBuffer. @@ -191,15 +191,15 @@ static bool StringsEqualWithoutCase(const char *S1, const char *S2, void HeaderMap::dump() const { const HMapHeader &Hdr = getHeader(); unsigned NumBuckets = getEndianAdjustedWord(Hdr.NumBuckets); - - fprintf(stderr, "Header Map %s:\n %d buckets, %d entries\n", + + fprintf(stderr, "Header Map %s:\n %d buckets, %d entries\n", getFileName(), NumBuckets, getEndianAdjustedWord(Hdr.NumEntries)); - + for (unsigned i = 0; i != NumBuckets; ++i) { HMapBucket B = getBucket(i); if (B.Key == HMAP_EmptyBucketKey) continue; - + const char *Key = getString(B.Key); const char *Prefix = getString(B.Prefix); const char *Suffix = getString(B.Suffix); @@ -219,22 +219,22 @@ const FileEntry *HeaderMap::LookupFile(const char *FilenameStart, // Don't probe infinitely. if (NumBuckets & (NumBuckets-1)) return 0; - + // Linearly probe the hash table. for (unsigned Bucket = HashHMapKey(FilenameStart, FilenameEnd);; ++Bucket) { HMapBucket B = getBucket(Bucket & (NumBuckets-1)); if (B.Key == HMAP_EmptyBucketKey) return 0; // Hash miss. - + // See if the key matches. If not, probe on. const char *Key = getString(B.Key); unsigned BucketKeyLen = strlen(Key); if (BucketKeyLen != unsigned(FilenameEnd-FilenameStart)) continue; - + // See if the actual strings equal. if (!StringsEqualWithoutCase(FilenameStart, Key, BucketKeyLen)) continue; - + // If so, we have a match in the hash table. Construct the destination // path. llvm::SmallString<1024> DestPath; diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index 9023b11022..2b9b7c977c 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -35,7 +35,7 @@ HeaderFileInfo::getControllingMacro(ExternalIdentifierLookup *External) { HeaderSearch::HeaderSearch(FileManager &FM) : FileMgr(FM), FrameworkMap(64) { SystemDirIdx = 0; NoCurDirSearch = false; - + ExternalLookup = 0; NumIncluded = 0; NumMultiIncludeFileOptzn = 0; @@ -47,7 +47,7 @@ HeaderSearch::~HeaderSearch() { for (unsigned i = 0, e = HeaderMaps.size(); i != e; ++i) delete HeaderMaps[i].second; } - + void HeaderSearch::PrintStats() { fprintf(stderr, "\n*** HeaderSearch Stats:\n"); fprintf(stderr, "%d files tracked.\n", (int)FileInfo.size()); @@ -61,11 +61,11 @@ void HeaderSearch::PrintStats() { fprintf(stderr, " %d #import/#pragma once files.\n", NumOnceOnlyFiles); fprintf(stderr, " %d included exactly once.\n", NumSingleIncludedFiles); fprintf(stderr, " %d max times a file is included.\n", MaxNumIncludes); - + fprintf(stderr, " %d #include/#include_next/#import.\n", NumIncluded); fprintf(stderr, " %d #includes skipped due to" " the multi-include optimization.\n", NumMultiIncludeFileOptzn); - + fprintf(stderr, "%d framework lookups.\n", NumFrameworkLookups); fprintf(stderr, "%d subframework lookups.\n", NumSubFrameworkLookups); } @@ -79,15 +79,15 @@ const HeaderMap *HeaderSearch::CreateHeaderMap(const FileEntry *FE) { for (unsigned i = 0, e = HeaderMaps.size(); i != e; ++i) // Pointer equality comparison of FileEntries works because they are // already uniqued by inode. - if (HeaderMaps[i].first == FE) + if (HeaderMaps[i].first == FE) return HeaderMaps[i].second; } - + if (const HeaderMap *HM = HeaderMap::Create(FE)) { HeaderMaps.push_back(std::make_pair(FE, HM)); return HM; } - + return 0; } @@ -121,10 +121,10 @@ const FileEntry *DirectoryLookup::LookupFile(const char *FilenameStart, TmpDir.append(FilenameStart, FilenameEnd); return HS.getFileMgr().getFile(TmpDir.begin(), TmpDir.end()); } - + if (isFramework()) return DoFrameworkLookup(FilenameStart, FilenameEnd, HS); - + assert(isHeaderMap() && "Unknown directory lookup"); return getHeaderMap()->LookupFile(FilenameStart, FilenameEnd,HS.getFileMgr()); } @@ -136,63 +136,63 @@ const FileEntry *DirectoryLookup::DoFrameworkLookup(const char *FilenameStart, const char *FilenameEnd, HeaderSearch &HS) const { FileManager &FileMgr = HS.getFileMgr(); - + // Framework names must have a '/' in the filename. const char *SlashPos = std::find(FilenameStart, FilenameEnd, '/'); if (SlashPos == FilenameEnd) return 0; - + // Find out if this is the home for the specified framework, by checking // HeaderSearch. Possible answer are yes/no and unknown. - const DirectoryEntry *&FrameworkDirCache = + const DirectoryEntry *&FrameworkDirCache = HS.LookupFrameworkCache(FilenameStart, SlashPos); - + // If it is known and in some other directory, fail. if (FrameworkDirCache && FrameworkDirCache != getFrameworkDir()) return 0; - + // Otherwise, construct the path to this framework dir. - + // FrameworkName = "/System/Library/Frameworks/" llvm::SmallString<1024> FrameworkName; FrameworkName += getFrameworkDir()->getName(); if (FrameworkName.empty() || FrameworkName.back() != '/') FrameworkName.push_back('/'); - + // FrameworkName = "/System/Library/Frameworks/Cocoa" FrameworkName.append(FilenameStart, SlashPos); - + // FrameworkName = "/System/Library/Frameworks/Cocoa.framework/" FrameworkName += ".framework/"; - + // If the cache entry is still unresolved, query to see if the cache entry is // still unresolved. If so, check its existence now. if (FrameworkDirCache == 0) { HS.IncrementFrameworkLookupCount(); - + // If the framework dir doesn't exist, we fail. // FIXME: It's probably more efficient to query this with FileMgr.getDir. - if (!llvm::sys::Path(std::string(FrameworkName.begin(), + if (!llvm::sys::Path(std::string(FrameworkName.begin(), FrameworkName.end())).exists()) return 0; - + // Otherwise, if it does, remember that this is the right direntry for this // framework. FrameworkDirCache = getFrameworkDir(); } - + // Check "/System/Library/Frameworks/Cocoa.framework/Headers/file.h" unsigned OrigSize = FrameworkName.size(); - + FrameworkName += "Headers/"; FrameworkName.append(SlashPos+1, FilenameEnd); if (const FileEntry *FE = FileMgr.getFile(FrameworkName.begin(), FrameworkName.end())) { return FE; } - + // Check "/System/Library/Frameworks/Cocoa.framework/PrivateHeaders/file.h" const char *Private = "Private"; - FrameworkName.insert(FrameworkName.begin()+OrigSize, Private, + FrameworkName.insert(FrameworkName.begin()+OrigSize, Private, Private+strlen(Private)); return FileMgr.getFile(FrameworkName.begin(), FrameworkName.end()); } @@ -209,7 +209,7 @@ const FileEntry *DirectoryLookup::DoFrameworkLookup(const char *FilenameStart, /// non-null, indicates where the #including file is, in case a relative search /// is needed. const FileEntry *HeaderSearch::LookupFile(const char *FilenameStart, - const char *FilenameEnd, + const char *FilenameEnd, bool isAngled, const DirectoryLookup *FromDir, const DirectoryLookup *&CurDir, @@ -220,11 +220,11 @@ const FileEntry *HeaderSearch::LookupFile(const char *FilenameStart, // If this was an #include_next "/absolute/file", fail. if (FromDir) return 0; - + // Otherwise, just return the file. return FileMgr.getFile(FilenameStart, FilenameEnd); } - + // Step #0, unless disabled, check to see if the file is in the #includer's // directory. This has to be based on CurFileEnt, not CurDir, because // CurFileEnt could be a #include of a subdirectory (#include "foo/bar.h") and @@ -249,17 +249,17 @@ const FileEntry *HeaderSearch::LookupFile(const char *FilenameStart, return FE; } } - + CurDir = 0; // If this is a system #include, ignore the user #include locs. unsigned i = isAngled ? SystemDirIdx : 0; - + // If this is a #include_next request, start searching after the directory the // file was found in. if (FromDir) i = FromDir-&SearchDirs[0]; - + // Cache all of the lookups performed by this method. Many headers are // multiply included, and the "pragma once" optimization prevents them from // being relex/pp'd, but they would still have to search through a @@ -279,23 +279,23 @@ const FileEntry *HeaderSearch::LookupFile(const char *FilenameStart, // start point value. CacheLookup.first = i+1; } - + // Check each directory in sequence to see if it contains this file. for (; i != SearchDirs.size(); ++i) { - const FileEntry *FE = + const FileEntry *FE = SearchDirs[i].LookupFile(FilenameStart, FilenameEnd, *this); if (!FE) continue; - + CurDir = &SearchDirs[i]; - + // This file is a system header or C++ unfriendly if the dir is. getFileInfo(FE).DirInfo = CurDir->getDirCharacteristic(); - + // Remember this location for the next lookup we do. CacheLookup.second = i; return FE; } - + // Otherwise, didn't find it. Remember we didn't find this. CacheLookup.second = SearchDirs.size(); return 0; @@ -311,20 +311,20 @@ LookupSubframeworkHeader(const char *FilenameStart, const char *FilenameEnd, const FileEntry *ContextFileEnt) { assert(ContextFileEnt && "No context file?"); - + // Framework names must have a '/' in the filename. Find it. const char *SlashPos = std::find(FilenameStart, FilenameEnd, '/'); if (SlashPos == FilenameEnd) return 0; - + // Look up the base framework name of the ContextFileEnt. const char *ContextName = ContextFileEnt->getName(); - + // If the context info wasn't a framework, couldn't be a subframework. const char *FrameworkPos = strstr(ContextName, ".framework/"); if (FrameworkPos == 0) return 0; - - llvm::SmallString<1024> FrameworkName(ContextName, + + llvm::SmallString<1024> FrameworkName(ContextName, FrameworkPos+strlen(".framework/")); // Append Frameworks/HIToolbox.framework/ @@ -334,28 +334,28 @@ LookupSubframeworkHeader(const char *FilenameStart, llvm::StringMapEntry<const DirectoryEntry *> &CacheLookup = FrameworkMap.GetOrCreateValue(FilenameStart, SlashPos); - + // Some other location? if (CacheLookup.getValue() && CacheLookup.getKeyLength() == FrameworkName.size() && memcmp(CacheLookup.getKeyData(), &FrameworkName[0], CacheLookup.getKeyLength()) != 0) return 0; - + // Cache subframework. if (CacheLookup.getValue() == 0) { ++NumSubFrameworkLookups; - + // If the framework dir doesn't exist, we fail. const DirectoryEntry *Dir = FileMgr.getDirectory(FrameworkName.begin(), FrameworkName.end()); if (Dir == 0) return 0; - + // Otherwise, if it does, remember that this is the right direntry for this // framework. CacheLookup.setValue(Dir); } - + const FileEntry *FE = 0; // Check ".../Frameworks/HIToolbox.framework/Headers/HIToolbox.h" @@ -364,7 +364,7 @@ LookupSubframeworkHeader(const char *FilenameStart, HeadersFilename.append(SlashPos+1, FilenameEnd); if (!(FE = FileMgr.getFile(HeadersFilename.begin(), HeadersFilename.end()))) { - + // Check ".../Frameworks/HIToolbox.framework/PrivateHeaders/HIToolbox.h" HeadersFilename = FrameworkName; HeadersFilename += "PrivateHeaders/"; @@ -372,7 +372,7 @@ LookupSubframeworkHeader(const char *FilenameStart, if (!(FE = FileMgr.getFile(HeadersFilename.begin(), HeadersFilename.end()))) return 0; } - + // This file is a system header or C++ unfriendly if the old file is. // // Note that the temporary 'DirInfo' is required here, as either call to @@ -394,7 +394,7 @@ HeaderFileInfo &HeaderSearch::getFileInfo(const FileEntry *FE) { if (FE->getUID() >= FileInfo.size()) FileInfo.resize(FE->getUID()+1); return FileInfo[FE->getUID()]; -} +} void HeaderSearch::setHeaderFileInfoForUID(HeaderFileInfo HFI, unsigned UID) { if (UID >= FileInfo.size()) @@ -410,13 +410,13 @@ bool HeaderSearch::ShouldEnterIncludeFile(const FileEntry *File, bool isImport){ // Get information about this file. HeaderFileInfo &FileInfo = getFileInfo(File); - + // If this is a #import directive, check that we have not already imported // this header. if (isImport) { // If this has already been imported, don't import it again. FileInfo.isImport = true; - + // Has this already been #import'ed or #include'd? if (FileInfo.NumIncludes) return false; } else { @@ -425,19 +425,19 @@ bool HeaderSearch::ShouldEnterIncludeFile(const FileEntry *File, bool isImport){ if (FileInfo.isImport) return false; } - + // Next, check to see if the file is wrapped with #ifndef guards. If so, and // if the macro that guards it is defined, we know the #include has no effect. - if (const IdentifierInfo *ControllingMacro + if (const IdentifierInfo *ControllingMacro = FileInfo.getControllingMacro(ExternalLookup)) if (ControllingMacro->hasMacroDefinition()) { ++NumMultiIncludeFileOptzn; return false; } - + // Increment the number of times this file has been included. ++FileInfo.NumIncludes; - + return true; } diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index 974b6900b7..23ba6e1ca7 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -39,7 +39,7 @@ static void InitCharacterInfo(); // Token Class Implementation //===----------------------------------------------------------------------===// -/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier. +/// isObjCAtKeyword - Return true if we have an ObjC keyword identifier. bool Token::isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const { if (IdentifierInfo *II = getIdentifierInfo()) return II->getObjCKeywordID() == objcKey; @@ -57,35 +57,35 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const { // Lexer Class Implementation //===----------------------------------------------------------------------===// -void Lexer::InitLexer(const char *BufStart, const char *BufPtr, +void Lexer::InitLexer(const char *BufStart, const char *BufPtr, const char *BufEnd) { InitCharacterInfo(); - + BufferStart = BufStart; BufferPtr = BufPtr; BufferEnd = BufEnd; - + assert(BufEnd[0] == 0 && "We assume that the input buffer has a null character at the end" " to simplify lexing!"); - + Is_PragmaLexer = false; // Start of the file is a start of line. IsAtStartOfLine = true; - + // We are not after parsing a #. ParsingPreprocessorDirective = false; - + // We are not after parsing #include. ParsingFilename = false; - + // We are not in raw mode. Raw mode disables diagnostics and interpretation // of tokens (e.g. identifiers, thus disabling macro expansion). It is used // to quickly lex the tokens of the buffer, e.g. when handling a "#if 0" block // or otherwise skipping over tokens. LexingRawMode = false; - + // Default to not keeping comments. ExtendedTokenMode = 0; } @@ -98,12 +98,12 @@ Lexer::Lexer(FileID FID, Preprocessor &PP) : PreprocessorLexer(&PP, FID), FileLoc(PP.getSourceManager().getLocForStartOfFile(FID)), Features(PP.getLangOptions()) { - + const llvm::MemoryBuffer *InputFile = PP.getSourceManager().getBuffer(FID); - + InitLexer(InputFile->getBufferStart(), InputFile->getBufferStart(), InputFile->getBufferEnd()); - + // Default to keeping comments if the preprocessor wants them. SetCommentRetentionState(PP.getCommentRetentionState()); } @@ -116,7 +116,7 @@ Lexer::Lexer(SourceLocation fileloc, const LangOptions &features, : FileLoc(fileloc), Features(features) { InitLexer(BufStart, BufPtr, BufEnd); - + // We *are* in raw mode. LexingRawMode = true; } @@ -128,9 +128,9 @@ Lexer::Lexer(FileID FID, const SourceManager &SM, const LangOptions &features) : FileLoc(SM.getLocForStartOfFile(FID)), Features(features) { const llvm::MemoryBuffer *FromFile = SM.getBuffer(FID); - InitLexer(FromFile->getBufferStart(), FromFile->getBufferStart(), + InitLexer(FromFile->getBufferStart(), FromFile->getBufferStart(), FromFile->getBufferEnd()); - + // We *are* in raw mode. LexingRawMode = true; } @@ -150,7 +150,7 @@ Lexer::Lexer(FileID FID, const SourceManager &SM, const LangOptions &features) /// interface that could handle this stuff. This would pull GetMappedTokenLoc /// out of the critical path of the lexer! /// -Lexer *Lexer::Create_PragmaLexer(SourceLocation SpellingLoc, +Lexer *Lexer::Create_PragmaLexer(SourceLocation SpellingLoc, SourceLocation InstantiationLocStart, SourceLocation InstantiationLocEnd, unsigned TokLen, Preprocessor &PP) { @@ -159,12 +159,12 @@ Lexer *Lexer::Create_PragmaLexer(SourceLocation SpellingLoc, // Create the lexer as if we were going to lex the file normally. FileID SpellingFID = SM.getFileID(SpellingLoc); Lexer *L = new Lexer(SpellingFID, PP); - + // Now that the lexer is created, change the start/end locations so that we // just lex the subsection of the file that we want. This is lexing from a // scratch buffer. const char *StrData = SM.getCharacterData(SpellingLoc); - + L->BufferPtr = StrData; L->BufferEnd = StrData+TokLen; assert(L->BufferEnd[0] == 0 && "Buffer is not nul terminated!"); @@ -174,11 +174,11 @@ Lexer *Lexer::Create_PragmaLexer(SourceLocation SpellingLoc, L->FileLoc = SM.createInstantiationLoc(SM.getLocForStartOfFile(SpellingFID), InstantiationLocStart, InstantiationLocEnd, TokLen); - + // Ensure that the lexer thinks it is inside a directive, so that end \n will // return an EOM token. L->ParsingPreprocessorDirective = true; - + // This lexer really is for _Pragma. L->Is_PragmaLexer = true; return L; @@ -220,7 +220,7 @@ unsigned Lexer::MeasureTokenLength(SourceLocation Loc, const LangOptions &LangOpts) { // TODO: this could be special cased for common tokens like identifiers, ')', // etc to make this faster, if it mattered. Just look at StrData[0] to handle - // all obviously single-char tokens. This could use + // all obviously single-char tokens. This could use // Lexer::isObviouslySimpleCharacter for example to handle identifiers or // something. @@ -365,7 +365,7 @@ static inline bool isWhitespace(unsigned char c) { /// isNumberBody - Return true if this is the body character of an /// preprocessing number, which is [a-zA-Z0-9_.]. static inline bool isNumberBody(unsigned char c) { - return (CharInfo[c] & (CHAR_LETTER|CHAR_NUMBER|CHAR_UNDER|CHAR_PERIOD)) ? + return (CharInfo[c] & (CHAR_LETTER|CHAR_NUMBER|CHAR_UNDER|CHAR_PERIOD)) ? true : false; } @@ -386,22 +386,22 @@ static SourceLocation GetMappedTokenLoc(Preprocessor &PP, SourceLocation FileLoc, unsigned CharNo, unsigned TokLen) { assert(FileLoc.isMacroID() && "Must be an instantiation"); - + // Otherwise, we're lexing "mapped tokens". This is used for things like // _Pragma handling. Combine the instantiation location of FileLoc with the // spelling location. SourceManager &SM = PP.getSourceManager(); - + // Create a new SLoc which is expanded from Instantiation(FileLoc) but whose // characters come from spelling(FileLoc)+Offset. SourceLocation SpellingLoc = SM.getSpellingLoc(FileLoc); SpellingLoc = SpellingLoc.getFileLocWithOffset(CharNo); - + // Figure out the expansion loc range, which is the range covered by the // original _Pragma(...) sequence. std::pair<SourceLocation,SourceLocation> II = SM.getImmediateInstantiationRange(FileLoc); - + return SM.createInstantiationLoc(SpellingLoc, II.first, II.second, TokLen); } @@ -417,7 +417,7 @@ SourceLocation Lexer::getSourceLocation(const char *Loc, unsigned CharNo = Loc-BufferStart; if (FileLoc.isFileID()) return FileLoc.getFileLocWithOffset(CharNo); - + // Otherwise, this is the _Pragma lexer case, which pretends that all of the // tokens are lexed from where the _Pragma was defined. assert(PP && "This doesn't work on raw lexers"); @@ -458,13 +458,13 @@ static char GetTrigraphCharForLetter(char Letter) { static char DecodeTrigraphChar(const char *CP, Lexer *L) { char Res = GetTrigraphCharForLetter(*CP); if (!Res || !L) return Res; - + if (!L->getFeatures().Trigraphs) { if (!L->isLexingRawMode()) L->Diag(CP-2, diag::trigraph_ignored); return 0; } - + if (!L->isLexingRawMode()) L->Diag(CP-2, diag::trigraph_converted) << std::string()+Res; return Res; @@ -472,12 +472,12 @@ static char DecodeTrigraphChar(const char *CP, Lexer *L) { /// getEscapedNewLineSize - Return the size of the specified escaped newline, /// or 0 if it is not an escaped newline. P[-1] is known to be a "\" or a -/// trigraph equivalent on entry to this function. +/// trigraph equivalent on entry to this function. unsigned Lexer::getEscapedNewLineSize(const char *Ptr) { unsigned Size = 0; while (isWhitespace(Ptr[Size])) { ++Size; - + if (Ptr[Size-1] != '\n' && Ptr[Size-1] != '\r') continue; @@ -485,10 +485,10 @@ unsigned Lexer::getEscapedNewLineSize(const char *Ptr) { if ((Ptr[Size] == '\r' || Ptr[Size] == '\n') && Ptr[Size-1] != Ptr[Size]) ++Size; - + return Size; - } - + } + // Not an escaped newline, must be a \t or something else. return 0; } @@ -509,7 +509,7 @@ const char *Lexer::SkipEscapedNewLines(const char *P) { } else { return P; } - + unsigned NewLineSize = Lexer::getEscapedNewLineSize(AfterEscape); if (NewLineSize == 0) return P; P = AfterEscape+NewLineSize; @@ -543,7 +543,7 @@ char Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, Slash: // Common case, backslash-char where the char is not whitespace. if (!isWhitespace(Ptr[0])) return '\\'; - + // See if we have optional whitespace characters between the slash and // newline. if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) { @@ -553,18 +553,18 @@ Slash: // Warn if there was whitespace between the backslash and newline. if (Ptr[0] != '\n' && Ptr[0] != '\r' && Tok && !isLexingRawMode()) Diag(Ptr, diag::backslash_newline_space); - + // Found backslash<whitespace><newline>. Parse the char after it. Size += EscapedNewLineSize; Ptr += EscapedNewLineSize; // Use slow version to accumulate a correct size field. return getCharAndSizeSlow(Ptr, Size, Tok); } - + // Otherwise, this is not an escaped newline, just return the slash. return '\\'; } - + // If this is a trigraph, process it. if (Ptr[0] == '?' && Ptr[1] == '?') { // If this is actually a legal trigraph (not something like "??x"), emit @@ -579,7 +579,7 @@ Slash: return C; } } - + // If this is neither, return a single character. ++Size; return *Ptr; @@ -601,21 +601,21 @@ char Lexer::getCharAndSizeSlowNoWarn(const char *Ptr, unsigned &Size, Slash: // Common case, backslash-char where the char is not whitespace. if (!isWhitespace(Ptr[0])) return '\\'; - + // See if we have optional whitespace characters followed by a newline. if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) { // Found backslash<whitespace><newline>. Parse the char after it. Size += EscapedNewLineSize; Ptr += EscapedNewLineSize; - + // Use slow version to accumulate a correct size field. return getCharAndSizeSlowNoWarn(Ptr, Size, Features); } - + // Otherwise, this is not an escaped newline, just return the slash. return '\\'; } - + // If this is a trigraph, process it. if (Features.Trigraphs && Ptr[0] == '?' && Ptr[1] == '?') { // If this is actually a legal trigraph (not something like "??x"), return @@ -627,7 +627,7 @@ Slash: return C; } } - + // If this is neither, return a single character. ++Size; return *Ptr; @@ -653,34 +653,34 @@ void Lexer::LexIdentifier(Token &Result, const char *CurPtr) { FinishIdentifier: const char *IdStart = BufferPtr; FormTokenWithChars(Result, CurPtr, tok::identifier); - + // If we are in raw mode, return this identifier raw. There is no need to // look up identifier information or attempt to macro expand it. if (LexingRawMode) return; - + // Fill in Result.IdentifierInfo, looking up the identifier in the // identifier table. IdentifierInfo *II = PP->LookUpIdentifierInfo(Result, IdStart); - + // Change the kind of this identifier to the appropriate token kind, e.g. // turning "for" into a keyword. Result.setKind(II->getTokenID()); - + // Finally, now that we know we have an identifier, pass this off to the // preprocessor, which may macro expand it or something. if (II->isHandleIdentifierCase()) PP->HandleIdentifier(Result); return; } - + // Otherwise, $,\,? in identifier found. Enter slower path. - + C = getCharAndSize(CurPtr, Size); while (1) { if (C == '$') { // If we hit a $ and they are not supported in identifiers, we are done. if (!Features.DollarIdents) goto FinishIdentifier; - + // Otherwise, emit a diagnostic and continue. if (!isLexingRawMode()) Diag(CurPtr, diag::ext_dollar_in_identifier); @@ -716,7 +716,7 @@ void Lexer::LexNumericConstant(Token &Result, const char *CurPtr) { PrevCh = C; C = getCharAndSize(CurPtr, Size); } - + // If we fell out, check for a sign, due to 1e+12. If we have one, continue. if ((C == '-' || C == '+') && (PrevCh == 'E' || PrevCh == 'e')) return LexNumericConstant(Result, ConsumeChar(CurPtr, Size, Result)); @@ -724,7 +724,7 @@ void Lexer::LexNumericConstant(Token &Result, const char *CurPtr) { // If we have a hex FP constant, continue. if ((C == '-' || C == '+') && (PrevCh == 'P' || PrevCh == 'p')) return LexNumericConstant(Result, ConsumeChar(CurPtr, Size, Result)); - + // Update the location of token as well as BufferPtr. const char *TokStart = BufferPtr; FormTokenWithChars(Result, CurPtr, tok::numeric_constant); @@ -735,7 +735,7 @@ void Lexer::LexNumericConstant(Token &Result, const char *CurPtr) { /// either " or L". void Lexer::LexStringLiteral(Token &Result, const char *CurPtr, bool Wide) { const char *NulCharacter = 0; // Does this string contain the \0 character? - + char C = getAndAdvanceChar(CurPtr, Result); while (C != '"') { // Skip escaped characters. @@ -753,7 +753,7 @@ void Lexer::LexStringLiteral(Token &Result, const char *CurPtr, bool Wide) { } C = getAndAdvanceChar(CurPtr, Result); } - + // If a nul character existed in the string, warn about it. |