Home | History | Annotate | Download | only in libclang
      1 //===- CIndex.cpp - Clang-C Source Indexing Library -----------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the main API hooks in the Clang-C Source Indexing
     11 // library.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "CIndexer.h"
     16 #include "CXCursor.h"
     17 #include "CXTranslationUnit.h"
     18 #include "CXString.h"
     19 #include "CXType.h"
     20 #include "CXSourceLocation.h"
     21 #include "CIndexDiagnostic.h"
     22 #include "CursorVisitor.h"
     23 
     24 #include "clang/Basic/Version.h"
     25 
     26 #include "clang/AST/StmtVisitor.h"
     27 #include "clang/Basic/Diagnostic.h"
     28 #include "clang/Frontend/ASTUnit.h"
     29 #include "clang/Frontend/CompilerInstance.h"
     30 #include "clang/Frontend/FrontendDiagnostic.h"
     31 #include "clang/Lex/Lexer.h"
     32 #include "clang/Lex/HeaderSearch.h"
     33 #include "clang/Lex/PreprocessingRecord.h"
     34 #include "clang/Lex/Preprocessor.h"
     35 #include "llvm/ADT/STLExtras.h"
     36 #include "llvm/ADT/Optional.h"
     37 #include "llvm/ADT/StringSwitch.h"
     38 #include "llvm/Support/SaveAndRestore.h"
     39 #include "llvm/Support/CrashRecoveryContext.h"
     40 #include "llvm/Support/PrettyStackTrace.h"
     41 #include "llvm/Support/MemoryBuffer.h"
     42 #include "llvm/Support/raw_ostream.h"
     43 #include "llvm/Support/Timer.h"
     44 #include "llvm/Support/Mutex.h"
     45 #include "llvm/Support/Program.h"
     46 #include "llvm/Support/Signals.h"
     47 #include "llvm/Support/Threading.h"
     48 #include "llvm/Support/Compiler.h"
     49 
     50 using namespace clang;
     51 using namespace clang::cxcursor;
     52 using namespace clang::cxstring;
     53 using namespace clang::cxtu;
     54 using namespace clang::cxindex;
     55 
     56 CXTranslationUnit cxtu::MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *TU) {
     57   if (!TU)
     58     return 0;
     59   CXTranslationUnit D = new CXTranslationUnitImpl();
     60   D->CIdx = CIdx;
     61   D->TUData = TU;
     62   D->StringPool = createCXStringPool();
     63   D->Diagnostics = 0;
     64   return D;
     65 }
     66 
     67 cxtu::CXTUOwner::~CXTUOwner() {
     68   if (TU)
     69     clang_disposeTranslationUnit(TU);
     70 }
     71 
     72 /// \brief Compare two source ranges to determine their relative position in
     73 /// the translation unit.
     74 static RangeComparisonResult RangeCompare(SourceManager &SM,
     75                                           SourceRange R1,
     76                                           SourceRange R2) {
     77   assert(R1.isValid() && "First range is invalid?");
     78   assert(R2.isValid() && "Second range is invalid?");
     79   if (R1.getEnd() != R2.getBegin() &&
     80       SM.isBeforeInTranslationUnit(R1.getEnd(), R2.getBegin()))
     81     return RangeBefore;
     82   if (R2.getEnd() != R1.getBegin() &&
     83       SM.isBeforeInTranslationUnit(R2.getEnd(), R1.getBegin()))
     84     return RangeAfter;
     85   return RangeOverlap;
     86 }
     87 
     88 /// \brief Determine if a source location falls within, before, or after a
     89 ///   a given source range.
     90 static RangeComparisonResult LocationCompare(SourceManager &SM,
     91                                              SourceLocation L, SourceRange R) {
     92   assert(R.isValid() && "First range is invalid?");
     93   assert(L.isValid() && "Second range is invalid?");
     94   if (L == R.getBegin() || L == R.getEnd())
     95     return RangeOverlap;
     96   if (SM.isBeforeInTranslationUnit(L, R.getBegin()))
     97     return RangeBefore;
     98   if (SM.isBeforeInTranslationUnit(R.getEnd(), L))
     99     return RangeAfter;
    100   return RangeOverlap;
    101 }
    102 
    103 /// \brief Translate a Clang source range into a CIndex source range.
    104 ///
    105 /// Clang internally represents ranges where the end location points to the
    106 /// start of the token at the end. However, for external clients it is more
    107 /// useful to have a CXSourceRange be a proper half-open interval. This routine
    108 /// does the appropriate translation.
    109 CXSourceRange cxloc::translateSourceRange(const SourceManager &SM,
    110                                           const LangOptions &LangOpts,
    111                                           const CharSourceRange &R) {
    112   // We want the last character in this location, so we will adjust the
    113   // location accordingly.
    114   SourceLocation EndLoc = R.getEnd();
    115   if (EndLoc.isValid() && EndLoc.isMacroID() && !SM.isMacroArgExpansion(EndLoc))
    116     EndLoc = SM.getExpansionRange(EndLoc).second;
    117   if (R.isTokenRange() && !EndLoc.isInvalid()) {
    118     unsigned Length = Lexer::MeasureTokenLength(SM.getSpellingLoc(EndLoc),
    119                                                 SM, LangOpts);
    120     EndLoc = EndLoc.getLocWithOffset(Length);
    121   }
    122 
    123   CXSourceRange Result = { { (void *)&SM, (void *)&LangOpts },
    124                            R.getBegin().getRawEncoding(),
    125                            EndLoc.getRawEncoding() };
    126   return Result;
    127 }
    128 
    129 //===----------------------------------------------------------------------===//
    130 // Cursor visitor.
    131 //===----------------------------------------------------------------------===//
    132 
    133 static SourceRange getRawCursorExtent(CXCursor C);
    134 static SourceRange getFullCursorExtent(CXCursor C, SourceManager &SrcMgr);
    135 
    136 
    137 RangeComparisonResult CursorVisitor::CompareRegionOfInterest(SourceRange R) {
    138   return RangeCompare(AU->getSourceManager(), R, RegionOfInterest);
    139 }
    140 
    141 /// \brief Visit the given cursor and, if requested by the visitor,
    142 /// its children.
    143 ///
    144 /// \param Cursor the cursor to visit.
    145 ///
    146 /// \param CheckRegionOfInterest if true, then the caller already checked that
    147 /// this cursor is within the region of interest.
    148 ///
    149 /// \returns true if the visitation should be aborted, false if it
    150 /// should continue.
    151 bool CursorVisitor::Visit(CXCursor Cursor, bool CheckedRegionOfInterest) {
    152   if (clang_isInvalid(Cursor.kind))
    153     return false;
    154 
    155   if (clang_isDeclaration(Cursor.kind)) {
    156     Decl *D = getCursorDecl(Cursor);
    157     if (!D) {
    158       assert(0 && "Invalid declaration cursor");
    159       return true; // abort.
    160     }
    161 
    162     // Ignore implicit declarations, unless it's an objc method because
    163     // currently we should report implicit methods for properties when indexing.
    164     if (D->isImplicit() && !isa<ObjCMethodDecl>(D))
    165       return false;
    166   }
    167 
    168   // If we have a range of interest, and this cursor doesn't intersect with it,
    169   // we're done.
    170   if (RegionOfInterest.isValid() && !CheckedRegionOfInterest) {
    171     SourceRange Range = getRawCursorExtent(Cursor);
    172     if (Range.isInvalid() || CompareRegionOfInterest(Range))
    173       return false;
    174   }
    175 
    176   switch (Visitor(Cursor, Parent, ClientData)) {
    177   case CXChildVisit_Break:
    178     return true;
    179 
    180   case CXChildVisit_Continue:
    181     return false;
    182 
    183   case CXChildVisit_Recurse:
    184     return VisitChildren(Cursor);
    185   }
    186 
    187   llvm_unreachable("Invalid CXChildVisitResult!");
    188 }
    189 
    190 static bool visitPreprocessedEntitiesInRange(SourceRange R,
    191                                              PreprocessingRecord &PPRec,
    192                                              CursorVisitor &Visitor) {
    193   SourceManager &SM = Visitor.getASTUnit()->getSourceManager();
    194   FileID FID;
    195 
    196   if (!Visitor.shouldVisitIncludedEntities()) {
    197     // If the begin/end of the range lie in the same FileID, do the optimization
    198     // where we skip preprocessed entities that do not come from the same FileID.
    199     FID = SM.getFileID(SM.getFileLoc(R.getBegin()));
    200     if (FID != SM.getFileID(SM.getFileLoc(R.getEnd())))
    201       FID = FileID();
    202   }
    203 
    204   std::pair<PreprocessingRecord::iterator, PreprocessingRecord::iterator>
    205     Entities = PPRec.getPreprocessedEntitiesInRange(R);
    206   return Visitor.visitPreprocessedEntities(Entities.first, Entities.second,
    207                                            PPRec, FID);
    208 }
    209 
    210 void CursorVisitor::visitFileRegion() {
    211   if (RegionOfInterest.isInvalid())
    212     return;
    213 
    214   ASTUnit *Unit = static_cast<ASTUnit *>(TU->TUData);
    215   SourceManager &SM = Unit->getSourceManager();
    216 
    217   std::pair<FileID, unsigned>
    218     Begin = SM.getDecomposedLoc(SM.getFileLoc(RegionOfInterest.getBegin())),
    219     End = SM.getDecomposedLoc(SM.getFileLoc(RegionOfInterest.getEnd()));
    220 
    221   if (End.first != Begin.first) {
    222     // If the end does not reside in the same file, try to recover by
    223     // picking the end of the file of begin location.
    224     End.first = Begin.first;
    225     End.second = SM.getFileIDSize(Begin.first);
    226   }
    227 
    228   assert(Begin.first == End.first);
    229   if (Begin.second > End.second)
    230     return;
    231 
    232   FileID File = Begin.first;
    233   unsigned Offset = Begin.second;
    234   unsigned Length = End.second - Begin.second;
    235 
    236   if (!VisitDeclsOnly && !VisitPreprocessorLast)
    237     if (visitPreprocessedEntitiesInRegion())
    238       return; // visitation break.
    239 
    240   visitDeclsFromFileRegion(File, Offset, Length);
    241 
    242   if (!VisitDeclsOnly && VisitPreprocessorLast)
    243     visitPreprocessedEntitiesInRegion();
    244 }
    245 
    246 static bool isInLexicalContext(Decl *D, DeclContext *DC) {
    247   if (!DC)
    248     return false;
    249 
    250   for (DeclContext *DeclDC = D->getLexicalDeclContext();
    251          DeclDC; DeclDC = DeclDC->getLexicalParent()) {
    252     if (DeclDC == DC)
    253       return true;
    254   }
    255   return false;
    256 }
    257 
    258 void CursorVisitor::visitDeclsFromFileRegion(FileID File,
    259                                              unsigned Offset, unsigned Length) {
    260   ASTUnit *Unit = static_cast<ASTUnit *>(TU->TUData);
    261   SourceManager &SM = Unit->getSourceManager();
    262   SourceRange Range = RegionOfInterest;
    263 
    264   SmallVector<Decl *, 16> Decls;
    265   Unit->findFileRegionDecls(File, Offset, Length, Decls);
    266 
    267   // If we didn't find any file level decls for the file, try looking at the
    268   // file that it was included from.
    269   while (Decls.empty() || Decls.front()->isTopLevelDeclInObjCContainer()) {
    270     bool Invalid = false;
    271     const SrcMgr::SLocEntry &SLEntry = SM.getSLocEntry(File, &Invalid);
    272     if (Invalid)
    273       return;
    274 
    275     SourceLocation Outer;
    276     if (SLEntry.isFile())
    277       Outer = SLEntry.getFile().getIncludeLoc();
    278     else
    279       Outer = SLEntry.getExpansion().getExpansionLocStart();
    280     if (Outer.isInvalid())
    281       return;
    282 
    283     llvm::tie(File, Offset) = SM.getDecomposedExpansionLoc(Outer);
    284     Length = 0;
    285     Unit->findFileRegionDecls(File, Offset, Length, Decls);
    286   }
    287 
    288   assert(!Decls.empty());
    289 
    290   bool VisitedAtLeastOnce = false;
    291   DeclContext *CurDC = 0;
    292   SmallVector<Decl *, 16>::iterator DIt = Decls.begin();
    293   for (SmallVector<Decl *, 16>::iterator DE = Decls.end(); DIt != DE; ++DIt) {
    294     Decl *D = *DIt;
    295     if (D->getSourceRange().isInvalid())
    296       continue;
    297 
    298     if (isInLexicalContext(D, CurDC))
    299       continue;
    300 
    301     CurDC = dyn_cast<DeclContext>(D);
    302 
    303     if (TagDecl *TD = dyn_cast<TagDecl>(D))
    304       if (!TD->isFreeStanding())
    305         continue;
    306 
    307     RangeComparisonResult CompRes = RangeCompare(SM, D->getSourceRange(),Range);
    308     if (CompRes == RangeBefore)
    309       continue;
    310     if (CompRes == RangeAfter)
    311       break;
    312 
    313     assert(CompRes == RangeOverlap);
    314     VisitedAtLeastOnce = true;
    315 
    316     if (isa<ObjCContainerDecl>(D)) {
    317       FileDI_current = &DIt;
    318       FileDE_current = DE;
    319     } else {
    320       FileDI_current = 0;
    321     }
    322 
    323     if (Visit(MakeCXCursor(D, TU, Range), /*CheckedRegionOfInterest=*/true))
    324       break;
    325   }
    326 
    327   if (VisitedAtLeastOnce)
    328     return;
    329 
    330   // No Decls overlapped with the range. Move up the lexical context until there
    331   // is a context that contains the range or we reach the translation unit
    332   // level.
    333   DeclContext *DC = DIt == Decls.begin() ? (*DIt)->getLexicalDeclContext()
    334                                          : (*(DIt-1))->getLexicalDeclContext();
    335 
    336   while (DC && !DC->isTranslationUnit()) {
    337     Decl *D = cast<Decl>(DC);
    338     SourceRange CurDeclRange = D->getSourceRange();
    339     if (CurDeclRange.isInvalid())
    340       break;
    341 
    342     if (RangeCompare(SM, CurDeclRange, Range) == RangeOverlap) {
    343       Visit(MakeCXCursor(D, TU, Range), /*CheckedRegionOfInterest=*/true);
    344       break;
    345     }
    346 
    347     DC = D->getLexicalDeclContext();
    348   }
    349 }
    350 
    351 bool CursorVisitor::visitPreprocessedEntitiesInRegion() {
    352   if (!AU->getPreprocessor().getPreprocessingRecord())
    353     return false;
    354 
    355   PreprocessingRecord &PPRec
    356     = *AU->getPreprocessor().getPreprocessingRecord();
    357   SourceManager &SM = AU->getSourceManager();
    358 
    359   if (RegionOfInterest.isValid()) {
    360     SourceRange MappedRange = AU->mapRangeToPreamble(RegionOfInterest);
    361     SourceLocation B = MappedRange.getBegin();
    362     SourceLocation E = MappedRange.getEnd();
    363 
    364     if (AU->isInPreambleFileID(B)) {
    365       if (SM.isLoadedSourceLocation(E))
    366         return visitPreprocessedEntitiesInRange(SourceRange(B, E),
    367                                                  PPRec, *this);
    368 
    369       // Beginning of range lies in the preamble but it also extends beyond
    370       // it into the main file. Split the range into 2 parts, one covering
    371       // the preamble and another covering the main file. This allows subsequent
    372       // calls to visitPreprocessedEntitiesInRange to accept a source range that
    373       // lies in the same FileID, allowing it to skip preprocessed entities that
    374       // do not come from the same FileID.
    375       bool breaked =
    376         visitPreprocessedEntitiesInRange(
    377                                    SourceRange(B, AU->getEndOfPreambleFileID()),
    378                                           PPRec, *this);
    379       if (breaked) return true;
    380       return visitPreprocessedEntitiesInRange(
    381                                     SourceRange(AU->getStartOfMainFileID(), E),
    382                                         PPRec, *this);
    383     }
    384 
    385     return visitPreprocessedEntitiesInRange(SourceRange(B, E), PPRec, *this);
    386   }
    387 
    388   bool OnlyLocalDecls
    389     = !AU->isMainFileAST() && AU->getOnlyLocalDecls();
    390 
    391   if (OnlyLocalDecls)
    392     return visitPreprocessedEntities(PPRec.local_begin(), PPRec.local_end(),
    393                                      PPRec);
    394 
    395   return visitPreprocessedEntities(PPRec.begin(), PPRec.end(), PPRec);
    396 }
    397 
    398 template<typename InputIterator>
    399 bool CursorVisitor::visitPreprocessedEntities(InputIterator First,
    400                                               InputIterator Last,
    401                                               PreprocessingRecord &PPRec,
    402                                               FileID FID) {
    403   for (; First != Last; ++First) {
    404     if (!FID.isInvalid() && !PPRec.isEntityInFileID(First, FID))
    405       continue;
    406 
    407     PreprocessedEntity *PPE = *First;
    408     if (MacroExpansion *ME = dyn_cast<MacroExpansion>(PPE)) {
    409       if (Visit(MakeMacroExpansionCursor(ME, TU)))
    410         return true;
    411 
    412       continue;
    413     }
    414 
    415     if (MacroDefinition *MD = dyn_cast<MacroDefinition>(PPE)) {
    416       if (Visit(MakeMacroDefinitionCursor(MD, TU)))
    417         return true;
    418 
    419       continue;
    420     }
    421 
    422     if (InclusionDirective *ID = dyn_cast<InclusionDirective>(PPE)) {
    423       if (Visit(MakeInclusionDirectiveCursor(ID, TU)))
    424         return true;
    425 
    426       continue;
    427     }
    428   }
    429 
    430   return false;
    431 }
    432 
    433 /// \brief Visit the children of the given cursor.
    434 ///
    435 /// \returns true if the visitation should be aborted, false if it
    436 /// should continue.
    437 bool CursorVisitor::VisitChildren(CXCursor Cursor) {
    438   if (clang_isReference(Cursor.kind) &&
    439       Cursor.kind != CXCursor_CXXBaseSpecifier) {
    440     // By definition, references have no children.
    441     return false;
    442   }
    443 
    444   // Set the Parent field to Cursor, then back to its old value once we're
    445   // done.
    446   SetParentRAII SetParent(Parent, StmtParent, Cursor);
    447 
    448   if (clang_isDeclaration(Cursor.kind)) {
    449     Decl *D = getCursorDecl(Cursor);
    450     if (!D)
    451       return false;
    452 
    453     return VisitAttributes(D) || Visit(D);
    454   }
    455 
    456   if (clang_isStatement(Cursor.kind)) {
    457     if (Stmt *S = getCursorStmt(Cursor))
    458       return Visit(S);
    459 
    460     return false;
    461   }
    462 
    463   if (clang_isExpression(Cursor.kind)) {
    464     if (Expr *E = getCursorExpr(Cursor))
    465       return Visit(E);
    466 
    467     return false;
    468   }
    469 
    470   if (clang_isTranslationUnit(Cursor.kind)) {
    471     CXTranslationUnit tu = getCursorTU(Cursor);
    472     ASTUnit *CXXUnit = static_cast<ASTUnit*>(tu->TUData);
    473 
    474     int VisitOrder[2] = { VisitPreprocessorLast, !VisitPreprocessorLast };
    475     for (unsigned I = 0; I != 2; ++I) {
    476       if (VisitOrder[I]) {
    477         if (!CXXUnit->isMainFileAST() && CXXUnit->getOnlyLocalDecls() &&
    478             RegionOfInterest.isInvalid()) {
    479           for (ASTUnit::top_level_iterator TL = CXXUnit->top_level_begin(),
    480                                         TLEnd = CXXUnit->top_level_end();
    481                TL != TLEnd; ++TL) {
    482             if (Visit(MakeCXCursor(*TL, tu, RegionOfInterest), true))
    483               return true;
    484           }
    485         } else if (VisitDeclContext(
    486                                 CXXUnit->getASTContext().getTranslationUnitDecl()))
    487           return true;
    488         continue;
    489       }
    490 
    491       // Walk the preprocessing record.
    492       if (CXXUnit->getPreprocessor().getPreprocessingRecord())
    493         visitPreprocessedEntitiesInRegion();
    494     }
    495 
    496     return false;
    497   }
    498 
    499   if (Cursor.kind == CXCursor_CXXBaseSpecifier) {
    500     if (CXXBaseSpecifier *Base = getCursorCXXBaseSpecifier(Cursor)) {
    501       if (TypeSourceInfo *BaseTSInfo = Base->getTypeSourceInfo()) {
    502         return Visit(BaseTSInfo->getTypeLoc());
    503       }
    504     }
    505   }
    506 
    507   if (Cursor.kind == CXCursor_IBOutletCollectionAttr) {
    508     IBOutletCollectionAttr *A =
    509       cast<IBOutletCollectionAttr>(cxcursor::getCursorAttr(Cursor));
    510     if (const ObjCInterfaceType *InterT = A->getInterface()->getAs<ObjCInterfaceType>())
    511       return Visit(cxcursor::MakeCursorObjCClassRef(InterT->getInterface(),
    512                                                     A->getInterfaceLoc(), TU));
    513   }
    514 
    515   // Nothing to visit at the moment.
    516   return false;
    517 }
    518 
    519 bool CursorVisitor::VisitBlockDecl(BlockDecl *B) {
    520   if (TypeSourceInfo *TSInfo = B->getSignatureAsWritten())
    521     if (Visit(TSInfo->getTypeLoc()))
    522         return true;
    523 
    524   if (Stmt *Body = B->getBody())
    525     return Visit(MakeCXCursor(Body, StmtParent, TU, RegionOfInterest));
    526 
    527   return false;
    528 }
    529 
    530 llvm::Optional<bool> CursorVisitor::shouldVisitCursor(CXCursor Cursor) {
    531   if (RegionOfInterest.isValid()) {
    532     SourceRange Range = getFullCursorExtent(Cursor, AU->getSourceManager());
    533     if (Range.isInvalid())
    534       return llvm::Optional<bool>();
    535 
    536     switch (CompareRegionOfInterest(Range)) {
    537     case RangeBefore:
    538       // This declaration comes before the region of interest; skip it.
    539       return llvm::Optional<bool>();
    540 
    541     case RangeAfter:
    542       // This declaration comes after the region of interest; we're done.
    543       return false;
    544 
    545     case RangeOverlap:
    546       // This declaration overlaps the region of interest; visit it.
    547       break;
    548     }
    549   }
    550   return true;
    551 }
    552 
    553 bool CursorVisitor::VisitDeclContext(DeclContext *DC) {
    554   DeclContext::decl_iterator I = DC->decls_begin(), E = DC->decls_end();
    555 
    556   // FIXME: Eventually remove.  This part of a hack to support proper
    557   // iteration over all Decls contained lexically within an ObjC container.
    558   SaveAndRestore<DeclContext::decl_iterator*> DI_saved(DI_current, &I);
    559   SaveAndRestore<DeclContext::decl_iterator> DE_saved(DE_current, E);
    560 
    561   for ( ; I != E; ++I) {
    562     Decl *D = *I;
    563     if (D->getLexicalDeclContext() != DC)
    564       continue;
    565     CXCursor Cursor = MakeCXCursor(D, TU, RegionOfInterest);
    566 
    567     // FIXME: ObjCClassRef/ObjCProtocolRef for forward class/protocol
    568     // declarations is a mismatch with the compiler semantics.
    569     if (Cursor.kind == CXCursor_ObjCInterfaceDecl) {
    570       ObjCInterfaceDecl *ID = cast<ObjCInterfaceDecl>(D);
    571       if (!ID->isThisDeclarationADefinition())
    572         Cursor = MakeCursorObjCClassRef(ID, ID->getLocation(), TU);
    573 
    574     } else if (Cursor.kind == CXCursor_ObjCProtocolDecl) {
    575       ObjCProtocolDecl *PD = cast<ObjCProtocolDecl>(D);
    576       if (!PD->isThisDeclarationADefinition())
    577         Cursor = MakeCursorObjCProtocolRef(PD, PD->getLocation(), TU);
    578     }
    579 
    580     const llvm::Optional<bool> &V = shouldVisitCursor(Cursor);
    581     if (!V.hasValue())
    582       continue;
    583     if (!V.getValue())
    584       return false;
    585     if (Visit(Cursor, true))
    586       return true;
    587   }
    588   return false;
    589 }
    590 
    591 bool CursorVisitor::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
    592   llvm_unreachable("Translation units are visited directly by Visit()");
    593 }
    594 
    595 bool CursorVisitor::VisitTypeAliasDecl(TypeAliasDecl *D) {
    596   if (TypeSourceInfo *TSInfo = D->getTypeSourceInfo())
    597     return Visit(TSInfo->getTypeLoc());
    598 
    599   return false;
    600 }
    601 
    602 bool CursorVisitor::VisitTypedefDecl(TypedefDecl *D) {
    603   if (TypeSourceInfo *TSInfo = D->getTypeSourceInfo())
    604     return Visit(TSInfo->getTypeLoc());
    605 
    606   return false;
    607 }
    608 
    609 bool CursorVisitor::VisitTagDecl(TagDecl *D) {
    610   return VisitDeclContext(D);
    611 }
    612 
    613 bool CursorVisitor::VisitClassTemplateSpecializationDecl(
    614                                           ClassTemplateSpecializationDecl *D) {
    615   bool ShouldVisitBody = false;
    616   switch (D->getSpecializationKind()) {
    617   case TSK_Undeclared:
    618   case TSK_ImplicitInstantiation:
    619     // Nothing to visit
    620     return false;
    621 
    622   case TSK_ExplicitInstantiationDeclaration:
    623   case TSK_ExplicitInstantiationDefinition:
    624     break;
    625 
    626   case TSK_ExplicitSpecialization:
    627     ShouldVisitBody = true;
    628     break;
    629   }
    630 
    631   // Visit the template arguments used in the specialization.
    632   if (TypeSourceInfo *SpecType = D->getTypeAsWritten()) {
    633     TypeLoc TL = SpecType->getTypeLoc();
    634     if (TemplateSpecializationTypeLoc *TSTLoc
    635           = dyn_cast<TemplateSpecializationTypeLoc>(&TL)) {
    636       for (unsigned I = 0, N = TSTLoc->getNumArgs(); I != N; ++I)
    637         if (VisitTemplateArgumentLoc(TSTLoc->getArgLoc(I)))
    638           return true;
    639     }
    640   }
    641 
    642   if (ShouldVisitBody && VisitCXXRecordDecl(D))
    643     return true;
    644 
    645   return false;
    646 }
    647 
    648 bool CursorVisitor::VisitClassTemplatePartialSpecializationDecl(
    649                                    ClassTemplatePartialSpecializationDecl *D) {
    650   // FIXME: Visit the "outer" template parameter lists on the TagDecl
    651   // before visiting these template parameters.
    652   if (VisitTemplateParameters(D->getTemplateParameters()))
    653     return true;
    654 
    655   // Visit the partial specialization arguments.
    656   const TemplateArgumentLoc *TemplateArgs = D->getTemplateArgsAsWritten();
    657   for (unsigned I = 0, N = D->getNumTemplateArgsAsWritten(); I != N; ++I)
    658     if (VisitTemplateArgumentLoc(TemplateArgs[I]))
    659       return true;
    660 
    661   return VisitCXXRecordDecl(D);
    662 }
    663 
    664 bool CursorVisitor::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
    665   // Visit the default argument.
    666   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
    667     if (TypeSourceInfo *DefArg = D->getDefaultArgumentInfo())
    668       if (Visit(DefArg->getTypeLoc()))
    669         return true;
    670 
    671   return false;
    672 }
    673 
    674 bool CursorVisitor::VisitEnumConstantDecl(EnumConstantDecl *D) {
    675   if (Expr *Init = D->getInitExpr())
    676     return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
    677   return false;
    678 }
    679 
    680 bool CursorVisitor::VisitDeclaratorDecl(DeclaratorDecl *DD) {
    681   if (TypeSourceInfo *TSInfo = DD->getTypeSourceInfo())
    682     if (Visit(TSInfo->getTypeLoc()))
    683       return true;
    684 
    685   // Visit the nested-name-specifier, if present.
    686   if (NestedNameSpecifierLoc QualifierLoc = DD->getQualifierLoc())
    687     if (VisitNestedNameSpecifierLoc(QualifierLoc))
    688       return true;
    689 
    690   return false;
    691 }
    692 
    693 /// \brief Compare two base or member initializers based on their source order.
    694 static int CompareCXXCtorInitializers(const void* Xp, const void *Yp) {
    695   CXXCtorInitializer const * const *X
    696     = static_cast<CXXCtorInitializer const * const *>(Xp);
    697   CXXCtorInitializer const * const *Y
    698     = static_cast<CXXCtorInitializer const * const *>(Yp);
    699 
    700   if ((*X)->getSourceOrder() < (*Y)->getSourceOrder())
    701     return -1;
    702   else if ((*X)->getSourceOrder() > (*Y)->getSourceOrder())
    703     return 1;
    704   else
    705     return 0;
    706 }
    707 
    708 bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
    709   if (TypeSourceInfo *TSInfo = ND->getTypeSourceInfo()) {
    710     // Visit the function declaration's syntactic components in the order
    711     // written. This requires a bit of work.
    712     TypeLoc TL = TSInfo->getTypeLoc().IgnoreParens();
    713     FunctionTypeLoc *FTL = dyn_cast<FunctionTypeLoc>(&TL);
    714 
    715     // If we have a function declared directly (without the use of a typedef),
    716     // visit just the return type. Otherwise, just visit the function's type
    717     // now.
    718     if ((FTL && !isa<CXXConversionDecl>(ND) && Visit(FTL->getResultLoc())) ||
    719         (!FTL && Visit(TL)))
    720       return true;
    721 
    722     // Visit the nested-name-specifier, if present.
    723     if (NestedNameSpecifierLoc QualifierLoc = ND->getQualifierLoc())
    724       if (VisitNestedNameSpecifierLoc(QualifierLoc))
    725         return true;
    726 
    727     // Visit the declaration name.
    728     if (VisitDeclarationNameInfo(ND->getNameInfo()))
    729       return true;
    730 
    731     // FIXME: Visit explicitly-specified template arguments!
    732 
    733     // Visit the function parameters, if we have a function type.
    734     if (FTL && VisitFunctionTypeLoc(*FTL, true))
    735       return true;
    736 
    737     // FIXME: Attributes?
    738   }
    739 
    740   if (ND->doesThisDeclarationHaveABody() && !ND->isLateTemplateParsed()) {
    741     if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(ND)) {
    742       // Find the initializers that were written in the source.
    743       SmallVector<CXXCtorInitializer *, 4> WrittenInits;
    744       for (CXXConstructorDecl::init_iterator I = Constructor->init_begin(),
    745                                           IEnd = Constructor->init_end();
    746            I != IEnd; ++I) {
    747         if (!(*I)->isWritten())
    748           continue;
    749 
    750         WrittenInits.push_back(*I);
    751       }
    752 
    753       // Sort the initializers in source order
    754       llvm::array_pod_sort(WrittenInits.begin(), WrittenInits.end(),
    755                            &CompareCXXCtorInitializers);
    756 
    757       // Visit the initializers in source order
    758       for (unsigned I = 0, N = WrittenInits.size(); I != N; ++I) {
    759         CXXCtorInitializer *Init = WrittenInits[I];
    760         if (Init->isAnyMemberInitializer()) {
    761           if (Visit(MakeCursorMemberRef(Init->getAnyMember(),
    762                                         Init->getMemberLocation(), TU)))
    763             return true;
    764         } else if (TypeSourceInfo *TInfo = Init->getTypeSourceInfo()) {
    765           if (Visit(TInfo->getTypeLoc()))
    766             return true;
    767         }
    768 
    769         // Visit the initializer value.
    770         if (Expr *Initializer = Init->getInit())
    771           if (Visit(MakeCXCursor(Initializer, ND, TU, RegionOfInterest)))
    772             return true;
    773       }
    774     }
    775 
    776     if (Visit(MakeCXCursor(ND->getBody(), StmtParent, TU, RegionOfInterest)))
    777       return true;
    778   }
    779 
    780   return false;
    781 }
    782 
    783 bool CursorVisitor::VisitFieldDecl(FieldDecl *D) {
    784   if (VisitDeclaratorDecl(D))
    785     return true;
    786 
    787   if (Expr *BitWidth = D->getBitWidth())
    788     return Visit(MakeCXCursor(BitWidth, StmtParent, TU, RegionOfInterest));
    789 
    790   return false;
    791 }
    792 
    793 bool CursorVisitor::VisitVarDecl(VarDecl *D) {
    794   if (VisitDeclaratorDecl(D))
    795     return true;
    796 
    797   if (Expr *Init = D->getInit())
    798     return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
    799 
    800   return false;
    801 }
    802 
    803 bool CursorVisitor::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
    804   if (VisitDeclaratorDecl(D))
    805     return true;
    806 
    807   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
    808     if (Expr *DefArg = D->getDefaultArgument())
    809       return Visit(MakeCXCursor(DefArg, StmtParent, TU, RegionOfInterest));
    810 
    811   return false;
    812 }
    813 
    814 bool CursorVisitor::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
    815   // FIXME: Visit the "outer" template parameter lists on the FunctionDecl
    816   // before visiting these template parameters.
    817   if (VisitTemplateParameters(D->getTemplateParameters()))
    818     return true;
    819 
    820   return VisitFunctionDecl(D->getTemplatedDecl());
    821 }
    822 
    823 bool CursorVisitor::VisitClassTemplateDecl(ClassTemplateDecl *D) {
    824   // FIXME: Visit the "outer" template parameter lists on the TagDecl
    825   // before visiting these template parameters.
    826   if (VisitTemplateParameters(D->getTemplateParameters()))
    827     return true;
    828 
    829   return VisitCXXRecordDecl(D->getTemplatedDecl());
    830 }
    831 
    832 bool CursorVisitor::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
    833   if (VisitTemplateParameters(D->getTemplateParameters()))
    834     return true;
    835 
    836   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited() &&
    837       VisitTemplateArgumentLoc(D->getDefaultArgument()))
    838     return true;
    839 
    840   return false;
    841 }
    842 
    843 bool CursorVisitor::VisitObjCMethodDecl(ObjCMethodDecl *ND) {
    844   if (TypeSourceInfo *TSInfo = ND->getResultTypeSourceInfo())
    845     if (Visit(TSInfo->getTypeLoc()))
    846       return true;
    847 
    848   for (ObjCMethodDecl::param_iterator P = ND->param_begin(),
    849        PEnd = ND->param_end();
    850        P != PEnd; ++P) {
    851     if (Visit(MakeCXCursor(*P, TU, RegionOfInterest)))
    852       return true;
    853   }
    854 
    855   if (ND->isThisDeclarationADefinition() &&
    856       Visit(MakeCXCursor(ND->getBody(), StmtParent, TU, RegionOfInterest)))
    857     return true;
    858 
    859   return false;
    860 }
    861 
    862 template <typename DeclIt>
    863 static void addRangedDeclsInContainer(DeclIt *DI_current, DeclIt DE_current,
    864                                       SourceManager &SM, SourceLocation EndLoc,
    865                                       SmallVectorImpl<Decl *> &Decls) {
    866   DeclIt next = *DI_current;
    867   while (++next != DE_current) {
    868     Decl *D_next = *next;
    869     if (!D_next)
    870       break;
    871     SourceLocation L = D_next->getLocStart();
    872     if (!L.isValid())
    873       break;
    874     if (SM.isBeforeInTranslationUnit(L, EndLoc)) {
    875       *DI_current = next;
    876       Decls.push_back(D_next);
    877       continue;
    878     }
    879     break;
    880   }
    881 }
    882 
    883 namespace {
    884   struct ContainerDeclsSort {
    885     SourceManager &SM;
    886     ContainerDeclsSort(SourceManager &sm) : SM(sm) {}
    887     bool operator()(Decl *A, Decl *B) {
    888       SourceLocation L_A = A->getLocStart();
    889       SourceLocation L_B = B->getLocStart();
    890       assert(L_A.isValid() && L_B.isValid());
    891       return SM.isBeforeInTranslationUnit(L_A, L_B);
    892     }
    893   };
    894 }
    895 
    896 bool CursorVisitor::VisitObjCContainerDecl(ObjCContainerDecl *D) {
    897   // FIXME: Eventually convert back to just 'VisitDeclContext()'.  Essentially
    898   // an @implementation can lexically contain Decls that are not properly
    899   // nested in the AST.  When we identify such cases, we need to retrofit
    900   // this nesting here.
    901   if (!DI_current && !FileDI_current)
    902     return VisitDeclContext(D);
    903 
    904   // Scan the Decls that immediately come after the container
    905   // in the current DeclContext.  If any fall within the
    906   // container's lexical region, stash them into a vector
    907   // for later processing.
    908   SmallVector<Decl *, 24> DeclsInContainer;
    909   SourceLocation EndLoc = D->getSourceRange().getEnd();
    910   SourceManager &SM = AU->getSourceManager();
    911   if (EndLoc.isValid()) {
    912     if (DI_current) {
    913       addRangedDeclsInContainer(DI_current, DE_current, SM, EndLoc,
    914                                 DeclsInContainer);
    915     } else {
    916       addRangedDeclsInContainer(FileDI_current, FileDE_current, SM, EndLoc,
    917                                 DeclsInContainer);
    918     }
    919   }
    920 
    921   // The common case.
    922   if (DeclsInContainer.empty())
    923     return VisitDeclContext(D);
    924 
    925   // Get all the Decls in the DeclContext, and sort them with the
    926   // additional ones we've collected.  Then visit them.
    927   for (DeclContext::decl_iterator I = D->decls_begin(), E = D->decls_end();
    928        I!=E; ++I) {
    929     Decl *subDecl = *I;
    930     if (!subDecl || subDecl->getLexicalDeclContext() != D ||
    931         subDecl->getLocStart().isInvalid())
    932       continue;
    933     DeclsInContainer.push_back(subDecl);
    934   }
    935 
    936   // Now sort the Decls so that they appear in lexical order.
    937   std::sort(DeclsInContainer.begin(), DeclsInContainer.end(),
    938             ContainerDeclsSort(SM));
    939 
    940   // Now visit the decls.
    941   for (SmallVectorImpl<Decl*>::iterator I = DeclsInContainer.begin(),
    942          E = DeclsInContainer.end(); I != E; ++I) {
    943     CXCursor Cursor = MakeCXCursor(*I, TU, RegionOfInterest);
    944     const llvm::Optional<bool> &V = shouldVisitCursor(Cursor);
    945     if (!V.hasValue())
    946       continue;
    947     if (!V.getValue())
    948       return false;
    949     if (Visit(Cursor, true))
    950       return true;
    951   }
    952   return false;
    953 }
    954 
    955 bool CursorVisitor::VisitObjCCategoryDecl(ObjCCategoryDecl *ND) {
    956   if (Visit(MakeCursorObjCClassRef(ND->getClassInterface(), ND->getLocation(),
    957                                    TU)))
    958     return true;
    959 
    960   ObjCCategoryDecl::protocol_loc_iterator PL = ND->protocol_loc_begin();
    961   for (ObjCCategoryDecl::protocol_iterator I = ND->protocol_begin(),
    962          E = ND->protocol_end(); I != E; ++I, ++PL)
    963     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
    964       return true;
    965 
    966   return VisitObjCContainerDecl(ND);
    967 }
    968 
    969 bool CursorVisitor::VisitObjCProtocolDecl(ObjCProtocolDecl *PID) {
    970   if (!PID->isThisDeclarationADefinition())
    971     return Visit(MakeCursorObjCProtocolRef(PID, PID->getLocation(), TU));
    972 
    973   ObjCProtocolDecl::protocol_loc_iterator PL = PID->protocol_loc_begin();
    974   for (ObjCProtocolDecl::protocol_iterator I = PID->protocol_begin(),
    975        E = PID->protocol_end(); I != E; ++I, ++PL)
    976     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
    977       return true;
    978 
    979   return VisitObjCContainerDecl(PID);
    980 }
    981 
    982 bool CursorVisitor::VisitObjCPropertyDecl(ObjCPropertyDecl *PD) {
    983   if (PD->getTypeSourceInfo() && Visit(PD->getTypeSourceInfo()->getTypeLoc()))
    984     return true;
    985 
    986   // FIXME: This implements a workaround with @property declarations also being
    987   // installed in the DeclContext for the @interface.  Eventually this code
    988   // should be removed.
    989   ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(PD->getDeclContext());
    990   if (!CDecl || !CDecl->IsClassExtension())
    991     return false;
    992 
    993   ObjCInterfaceDecl *ID = CDecl->getClassInterface();
    994   if (!ID)
    995     return false;
    996 
    997   IdentifierInfo *PropertyId = PD->getIdentifier();
    998   ObjCPropertyDecl *prevDecl =
    999     ObjCPropertyDecl::findPropertyDecl(cast<DeclContext>(ID), PropertyId);
   1000 
   1001   if (!prevDecl)
   1002     return false;
   1003 
   1004   // Visit synthesized methods since they will be skipped when visiting
   1005   // the @interface.
   1006   if (ObjCMethodDecl *MD = prevDecl->getGetterMethodDecl())
   1007     if (MD->isSynthesized() && MD->getLexicalDeclContext() == CDecl)
   1008       if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
   1009         return true;
   1010 
   1011   if (ObjCMethodDecl *MD = prevDecl->getSetterMethodDecl())
   1012     if (MD->isSynthesized() && MD->getLexicalDeclContext() == CDecl)
   1013       if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
   1014         return true;
   1015 
   1016   return false;
   1017 }
   1018 
   1019 bool CursorVisitor::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) {
   1020   if (!D->isThisDeclarationADefinition()) {
   1021     // Forward declaration is treated like a reference.
   1022     return Visit(MakeCursorObjCClassRef(D, D->getLocation(), TU));
   1023   }
   1024 
   1025   // Issue callbacks for super class.
   1026   if (D->getSuperClass() &&
   1027       Visit(MakeCursorObjCSuperClassRef(D->getSuperClass(),
   1028                                         D->getSuperClassLoc(),
   1029                                         TU)))
   1030     return true;
   1031 
   1032   ObjCInterfaceDecl::protocol_loc_iterator PL = D->protocol_loc_begin();
   1033   for (ObjCInterfaceDecl::protocol_iterator I = D->protocol_begin(),
   1034          E = D->protocol_end(); I != E; ++I, ++PL)
   1035     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
   1036       return true;
   1037 
   1038   return VisitObjCContainerDecl(D);
   1039 }
   1040 
   1041 bool CursorVisitor::VisitObjCImplDecl(ObjCImplDecl *D) {
   1042   return VisitObjCContainerDecl(D);
   1043 }
   1044 
   1045 bool CursorVisitor::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) {
   1046   // 'ID' could be null when dealing with invalid code.
   1047   if (ObjCInterfaceDecl *ID = D->getClassInterface())
   1048     if (Visit(MakeCursorObjCClassRef(ID, D->getLocation(), TU)))
   1049       return true;
   1050 
   1051   return VisitObjCImplDecl(D);
   1052 }
   1053 
   1054 bool CursorVisitor::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
   1055 #if 0
   1056   // Issue callbacks for super class.
   1057   // FIXME: No source location information!
   1058   if (D->getSuperClass() &&
   1059       Visit(MakeCursorObjCSuperClassRef(D->getSuperClass(),
   1060                                         D->getSuperClassLoc(),
   1061                                         TU)))
   1062     return true;
   1063 #endif
   1064 
   1065   return VisitObjCImplDecl(D);
   1066 }
   1067 
   1068 bool CursorVisitor::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *PD) {
   1069   if (ObjCIvarDecl *Ivar = PD->getPropertyIvarDecl())
   1070     return Visit(MakeCursorMemberRef(Ivar, PD->getPropertyIvarDeclLoc(), TU));
   1071 
   1072   return false;
   1073 }
   1074 
   1075 bool CursorVisitor::VisitNamespaceDecl(NamespaceDecl *D) {
   1076   return VisitDeclContext(D);
   1077 }
   1078 
   1079 bool CursorVisitor::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
   1080   // Visit nested-name-specifier.
   1081   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1082     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1083       return true;
   1084 
   1085   return Visit(MakeCursorNamespaceRef(D->getAliasedNamespace(),
   1086                                       D->getTargetNameLoc(), TU));
   1087 }
   1088 
   1089 bool CursorVisitor::VisitUsingDecl(UsingDecl *D) {
   1090   // Visit nested-name-specifier.
   1091   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc()) {
   1092     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1093       return true;
   1094   }
   1095 
   1096   if (Visit(MakeCursorOverloadedDeclRef(D, D->getLocation(), TU)))
   1097     return true;
   1098 
   1099   return VisitDeclarationNameInfo(D->getNameInfo());
   1100 }
   1101 
   1102 bool CursorVisitor::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
   1103   // Visit nested-name-specifier.
   1104   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1105     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1106       return true;
   1107 
   1108   return Visit(MakeCursorNamespaceRef(D->getNominatedNamespaceAsWritten(),
   1109                                       D->getIdentLocation(), TU));
   1110 }
   1111 
   1112 bool CursorVisitor::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) {
   1113   // Visit nested-name-specifier.
   1114   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc()) {
   1115     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1116       return true;
   1117   }
   1118 
   1119   return VisitDeclarationNameInfo(D->getNameInfo());
   1120 }
   1121 
   1122 bool CursorVisitor::VisitUnresolvedUsingTypenameDecl(
   1123                                                UnresolvedUsingTypenameDecl *D) {
   1124   // Visit nested-name-specifier.
   1125   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1126     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1127       return true;
   1128 
   1129   return false;
   1130 }
   1131 
   1132 bool CursorVisitor::VisitDeclarationNameInfo(DeclarationNameInfo Name) {
   1133   switch (Name.getName().getNameKind()) {
   1134   case clang::DeclarationName::Identifier:
   1135   case clang::DeclarationName::CXXLiteralOperatorName:
   1136   case clang::DeclarationName::CXXOperatorName:
   1137   case clang::DeclarationName::CXXUsingDirective:
   1138     return false;
   1139 
   1140   case clang::DeclarationName::CXXConstructorName:
   1141   case clang::DeclarationName::CXXDestructorName:
   1142   case clang::DeclarationName::CXXConversionFunctionName:
   1143     if (TypeSourceInfo *TSInfo = Name.getNamedTypeInfo())
   1144       return Visit(TSInfo->getTypeLoc());
   1145     return false;
   1146 
   1147   case clang::DeclarationName::ObjCZeroArgSelector:
   1148   case clang::DeclarationName::ObjCOneArgSelector:
   1149   case clang::DeclarationName::ObjCMultiArgSelector:
   1150     // FIXME: Per-identifier location info?
   1151     return false;
   1152   }
   1153 
   1154   llvm_unreachable("Invalid DeclarationName::Kind!");
   1155 }
   1156 
   1157 bool CursorVisitor::VisitNestedNameSpecifier(NestedNameSpecifier *NNS,
   1158                                              SourceRange Range) {
   1159   // FIXME: This whole routine is a hack to work around the lack of proper
   1160   // source information in nested-name-specifiers (PR5791). Since we do have
   1161   // a beginning source location, we can visit the first component of the
   1162   // nested-name-specifier, if it's a single-token component.
   1163   if (!NNS)
   1164     return false;
   1165 
   1166   // Get the first component in the nested-name-specifier.
   1167   while (NestedNameSpecifier *Prefix = NNS->getPrefix())
   1168     NNS = Prefix;
   1169 
   1170   switch (NNS->getKind()) {
   1171   case NestedNameSpecifier::Namespace:
   1172     return Visit(MakeCursorNamespaceRef(NNS->getAsNamespace(), Range.getBegin(),
   1173                                         TU));
   1174 
   1175   case NestedNameSpecifier::NamespaceAlias:
   1176     return Visit(MakeCursorNamespaceRef(NNS->getAsNamespaceAlias(),
   1177                                         Range.getBegin(), TU));
   1178 
   1179   case NestedNameSpecifier::TypeSpec: {
   1180     // If the type has a form where we know that the beginning of the source
   1181     // range matches up with a reference cursor. Visit the appropriate reference
   1182     // cursor.
   1183     const Type *T = NNS->getAsType();
   1184     if (const TypedefType *Typedef = dyn_cast<TypedefType>(T))
   1185       return Visit(MakeCursorTypeRef(Typedef->getDecl(), Range.getBegin(), TU));
   1186     if (const TagType *Tag = dyn_cast<TagType>(T))
   1187       return Visit(MakeCursorTypeRef(Tag->getDecl(), Range.getBegin(), TU));
   1188     if (const TemplateSpecializationType *TST
   1189                                       = dyn_cast<TemplateSpecializationType>(T))
   1190       return VisitTemplateName(TST->getTemplateName(), Range.getBegin());
   1191     break;
   1192   }
   1193 
   1194   case NestedNameSpecifier::TypeSpecWithTemplate:
   1195   case NestedNameSpecifier::Global:
   1196   case NestedNameSpecifier::Identifier:
   1197     break;
   1198   }
   1199 
   1200   return false;
   1201 }
   1202 
   1203 bool
   1204 CursorVisitor::VisitNestedNameSpecifierLoc(NestedNameSpecifierLoc Qualifier) {
   1205   SmallVector<NestedNameSpecifierLoc, 4> Qualifiers;
   1206   for (; Qualifier; Qualifier = Qualifier.getPrefix())
   1207     Qualifiers.push_back(Qualifier);
   1208 
   1209   while (!Qualifiers.empty()) {
   1210     NestedNameSpecifierLoc Q = Qualifiers.pop_back_val();
   1211     NestedNameSpecifier *NNS = Q.getNestedNameSpecifier();
   1212     switch (NNS->getKind()) {
   1213     case NestedNameSpecifier::Namespace:
   1214       if (Visit(MakeCursorNamespaceRef(NNS->getAsNamespace(),
   1215                                        Q.getLocalBeginLoc(),
   1216                                        TU)))
   1217         return true;
   1218 
   1219       break;
   1220 
   1221     case NestedNameSpecifier::NamespaceAlias:
   1222       if (Visit(MakeCursorNamespaceRef(NNS->getAsNamespaceAlias(),
   1223                                        Q.getLocalBeginLoc(),
   1224                                        TU)))
   1225         return true;
   1226 
   1227       break;
   1228 
   1229     case NestedNameSpecifier::TypeSpec:
   1230     case NestedNameSpecifier::TypeSpecWithTemplate:
   1231       if (Visit(Q.getTypeLoc()))
   1232         return true;
   1233 
   1234       break;
   1235 
   1236     case NestedNameSpecifier::Global:
   1237     case NestedNameSpecifier::Identifier:
   1238       break;
   1239     }
   1240   }
   1241 
   1242   return false;
   1243 }
   1244 
   1245 bool CursorVisitor::VisitTemplateParameters(
   1246                                           const TemplateParameterList *Params) {
   1247   if (!Params)
   1248     return false;
   1249 
   1250   for (TemplateParameterList::const_iterator P = Params->begin(),
   1251                                           PEnd = Params->end();
   1252        P != PEnd; ++P) {
   1253     if (Visit(MakeCXCursor(*P, TU, RegionOfInterest)))
   1254       return true;
   1255   }
   1256 
   1257   return false;
   1258 }
   1259 
   1260 bool CursorVisitor::VisitTemplateName(TemplateName Name, SourceLocation Loc) {
   1261   switch (Name.getKind()) {
   1262   case TemplateName::Template:
   1263     return Visit(MakeCursorTemplateRef(Name.getAsTemplateDecl(), Loc, TU));
   1264 
   1265   case TemplateName::OverloadedTemplate:
   1266     // Visit the overloaded template set.
   1267     if (Visit(MakeCursorOverloadedDeclRef(Name, Loc, TU)))
   1268       return true;
   1269 
   1270     return false;
   1271 
   1272   case TemplateName::DependentTemplate:
   1273     // FIXME: Visit nested-name-specifier.
   1274     return false;
   1275 
   1276   case TemplateName::QualifiedTemplate:
   1277     // FIXME: Visit nested-name-specifier.
   1278     return Visit(MakeCursorTemplateRef(
   1279                                   Name.getAsQualifiedTemplateName()->getDecl(),
   1280                                        Loc, TU));
   1281 
   1282   case TemplateName::SubstTemplateTemplateParm:
   1283     return Visit(MakeCursorTemplateRef(
   1284                          Name.getAsSubstTemplateTemplateParm()->getParameter(),
   1285                                        Loc, TU));
   1286 
   1287   case TemplateName::SubstTemplateTemplateParmPack:
   1288     return Visit(MakeCursorTemplateRef(
   1289                   Name.getAsSubstTemplateTemplateParmPack()->getParameterPack(),
   1290                                        Loc, TU));
   1291   }
   1292 
   1293   llvm_unreachable("Invalid TemplateName::Kind!");
   1294 }
   1295 
   1296 bool CursorVisitor::VisitTemplateArgumentLoc(const TemplateArgumentLoc &TAL) {
   1297   switch (TAL.getArgument().getKind()) {
   1298   case TemplateArgument::Null:
   1299   case TemplateArgument::Integral:
   1300   case TemplateArgument::Pack:
   1301     return false;
   1302 
   1303   case TemplateArgument::Type:
   1304     if (TypeSourceInfo *TSInfo = TAL.getTypeSourceInfo())
   1305       return Visit(TSInfo->getTypeLoc());
   1306     return false;
   1307 
   1308   case TemplateArgument::Declaration:
   1309     if (Expr *E = TAL.getSourceDeclExpression())
   1310       return Visit(MakeCXCursor(E, StmtParent, TU, RegionOfInterest));
   1311     return false;
   1312 
   1313   case TemplateArgument::Expression:
   1314     if (Expr *E = TAL.getSourceExpression())
   1315       return Visit(MakeCXCursor(E, StmtParent, TU, RegionOfInterest));
   1316     return false;
   1317 
   1318   case TemplateArgument::Template:
   1319   case TemplateArgument::TemplateExpansion:
   1320     if (VisitNestedNameSpecifierLoc(TAL.getTemplateQualifierLoc()))
   1321       return true;
   1322 
   1323     return VisitTemplateName(TAL.getArgument().getAsTemplateOrTemplatePattern(),
   1324                              TAL.getTemplateNameLoc());
   1325   }
   1326 
   1327   llvm_unreachable("Invalid TemplateArgument::Kind!");
   1328 }
   1329 
   1330 bool CursorVisitor::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
   1331   return VisitDeclContext(D);
   1332 }
   1333 
   1334 bool CursorVisitor::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
   1335   return Visit(TL.getUnqualifiedLoc());
   1336 }
   1337 
   1338 bool CursorVisitor::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
   1339   ASTContext &Context = AU->getASTContext();
   1340 
   1341   // Some builtin types (such as Objective-C's "id", "sel", and
   1342   // "Class") have associated declarations. Create cursors for those.
   1343   QualType VisitType;
   1344   switch (TL.getTypePtr()->getKind()) {
   1345 
   1346   case BuiltinType::Void:
   1347   case BuiltinType::NullPtr:
   1348   case BuiltinType::Dependent:
   1349 #define BUILTIN_TYPE(Id, SingletonId)
   1350 #define SIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:
   1351 #define UNSIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:
   1352 #define FLOATING_TYPE(Id, SingletonId) case BuiltinType::Id:
   1353 #define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id:
   1354 #include "clang/AST/BuiltinTypes.def"
   1355     break;
   1356 
   1357   case BuiltinType::ObjCId:
   1358     VisitType = Context.getObjCIdType();
   1359     break;
   1360 
   1361   case BuiltinType::ObjCClass:
   1362     VisitType = Context.getObjCClassType();
   1363     break;
   1364 
   1365   case BuiltinType::ObjCSel:
   1366     VisitType = Context.getObjCSelType();
   1367     break;
   1368   }
   1369 
   1370   if (!VisitType.isNull()) {
   1371     if (const TypedefType *Typedef = VisitType->getAs<TypedefType>())
   1372       return Visit(MakeCursorTypeRef(Typedef->getDecl(), TL.getBuiltinLoc(),
   1373                                      TU));
   1374   }
   1375 
   1376   return false;
   1377 }
   1378 
   1379 bool CursorVisitor::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
   1380   return Visit(MakeCursorTypeRef(TL.getTypedefNameDecl(), TL.getNameLoc(), TU));
   1381 }
   1382 
   1383 bool CursorVisitor::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
   1384   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1385 }
   1386 
   1387 bool CursorVisitor::VisitTagTypeLoc(TagTypeLoc TL) {
   1388   if (TL.isDefinition())
   1389     return Visit(MakeCXCursor(TL.getDecl(), TU, RegionOfInterest));
   1390 
   1391   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1392 }
   1393 
   1394 bool CursorVisitor::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
   1395   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1396 }
   1397 
   1398 bool CursorVisitor::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
   1399   if (Visit(MakeCursorObjCClassRef(TL.getIFaceDecl(), TL.getNameLoc(), TU)))
   1400     return true;
   1401 
   1402   return false;
   1403 }
   1404 
   1405 bool CursorVisitor::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
   1406   if (TL.hasBaseTypeAsWritten() && Visit(TL.getBaseLoc()))
   1407     return true;
   1408 
   1409   for (unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
   1410     if (Visit(MakeCursorObjCProtocolRef(TL.getProtocol(I), TL.getProtocolLoc(I),
   1411                                         TU)))
   1412       return true;
   1413   }
   1414 
   1415   return false;
   1416 }
   1417 
   1418 bool CursorVisitor::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
   1419   return Visit(TL.getPointeeLoc());
   1420 }
   1421 
   1422 bool CursorVisitor::VisitParenTypeLoc(ParenTypeLoc TL) {
   1423   return Visit(TL.getInnerLoc());
   1424 }
   1425 
   1426 bool CursorVisitor::VisitPointerTypeLoc(PointerTypeLoc TL) {
   1427   return Visit(TL.getPointeeLoc());
   1428 }
   1429 
   1430 bool CursorVisitor::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
   1431   return Visit(TL.getPointeeLoc());
   1432 }
   1433 
   1434 bool CursorVisitor::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
   1435   return Visit(TL.getPointeeLoc());
   1436 }
   1437 
   1438 bool CursorVisitor::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
   1439   return Visit(TL.getPointeeLoc());
   1440 }
   1441 
   1442 bool CursorVisitor::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
   1443   return Visit(TL.getPointeeLoc());
   1444 }
   1445 
   1446 bool CursorVisitor::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
   1447   return Visit(TL.getModifiedLoc());
   1448 }
   1449 
   1450 bool CursorVisitor::VisitFunctionTypeLoc(FunctionTypeLoc TL,
   1451                                          bool SkipResultType) {
   1452   if (!SkipResultType && Visit(TL.getResultLoc()))
   1453     return true;
   1454 
   1455   for (unsigned I = 0, N = TL.getNumArgs(); I != N; ++I)
   1456     if (Decl *D = TL.getArg(I))
   1457       if (Visit(MakeCXCursor(D, TU, RegionOfInterest)))
   1458         return true;
   1459 
   1460   return false;
   1461 }
   1462 
   1463 bool CursorVisitor::VisitArrayTypeLoc(ArrayTypeLoc TL) {
   1464   if (Visit(TL.getElementLoc()))
   1465     return true;
   1466 
   1467   if (Expr *Size = TL.getSizeExpr())
   1468     return Visit(MakeCXCursor(Size, StmtParent, TU, RegionOfInterest));
   1469 
   1470   return false;
   1471 }
   1472 
   1473 bool CursorVisitor::VisitTemplateSpecializationTypeLoc(
   1474                                              TemplateSpecializationTypeLoc TL) {
   1475   // Visit the template name.
   1476   if (VisitTemplateName(TL.getTypePtr()->getTemplateName(),
   1477                         TL.getTemplateNameLoc()))
   1478     return true;
   1479 
   1480   // Visit the template arguments.
   1481   for (unsigned I = 0, N = TL.getNumArgs(); I != N; ++I)
   1482     if (VisitTemplateArgumentLoc(TL.getArgLoc(I)))
   1483       return true;
   1484 
   1485   return false;
   1486 }
   1487 
   1488 bool CursorVisitor::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
   1489   return Visit(MakeCXCursor(TL.getUnderlyingExpr(), StmtParent, TU));
   1490 }
   1491 
   1492 bool CursorVisitor::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
   1493   if (TypeSourceInfo *TSInfo = TL.getUnderlyingTInfo())
   1494     return Visit(TSInfo->getTypeLoc());
   1495 
   1496   return false;
   1497 }
   1498 
   1499 bool CursorVisitor::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
   1500   if (TypeSourceInfo *TSInfo = TL.getUnderlyingTInfo())
   1501     return Visit(TSInfo->getTypeLoc());
   1502 
   1503   return false;
   1504 }
   1505 
   1506 bool CursorVisitor::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
   1507   if (VisitNestedNameSpecifierLoc(TL.getQualifierLoc()))
   1508     return true;
   1509 
   1510   return false;
   1511 }
   1512 
   1513 bool CursorVisitor::VisitDependentTemplateSpecializationTypeLoc(
   1514                                     DependentTemplateSpecializationTypeLoc TL) {
   1515   // Visit the nested-name-specifier, if there is one.
   1516   if (TL.getQualifierLoc() &&
   1517       VisitNestedNameSpecifierLoc(TL.getQualifierLoc()))
   1518     return true;
   1519 
   1520   // Visit the template arguments.
   1521   for (unsigned I = 0, N = TL.getNumArgs(); I != N; ++I)
   1522     if (VisitTemplateArgumentLoc(TL.getArgLoc(I)))
   1523       return true;
   1524 
   1525   return false;
   1526 }
   1527 
   1528 bool CursorVisitor::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
   1529   if (VisitNestedNameSpecifierLoc(TL.getQualifierLoc()))
   1530     return true;
   1531 
   1532   return Visit(TL.getNamedTypeLoc());
   1533 }
   1534 
   1535 bool CursorVisitor::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
   1536   return Visit(TL.getPatternLoc());
   1537 }
   1538 
   1539 bool CursorVisitor::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
   1540   if (Expr *E = TL.getUnderlyingExpr())
   1541     return Visit(MakeCXCursor(E, StmtParent, TU));
   1542 
   1543   return false;
   1544 }
   1545 
   1546 bool CursorVisitor::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
   1547   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1548 }
   1549 
   1550 bool CursorVisitor::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
   1551   return Visit(TL.getValueLoc());
   1552 }
   1553 
   1554 #define DEFAULT_TYPELOC_IMPL(CLASS, PARENT) \
   1555 bool CursorVisitor::Visit##CLASS##TypeLoc(CLASS##TypeLoc TL) { \
   1556   return Visit##PARENT##Loc(TL); \
   1557 }
   1558 
   1559 DEFAULT_TYPELOC_IMPL(Complex, Type)
   1560 DEFAULT_TYPELOC_IMPL(ConstantArray, ArrayType)
   1561 DEFAULT_TYPELOC_IMPL(IncompleteArray, ArrayType)
   1562 DEFAULT_TYPELOC_IMPL(VariableArray, ArrayType)
   1563 DEFAULT_TYPELOC_IMPL(DependentSizedArray, ArrayType)
   1564 DEFAULT_TYPELOC_IMPL(DependentSizedExtVector, Type)
   1565 DEFAULT_TYPELOC_IMPL(Vector, Type)
   1566 DEFAULT_TYPELOC_IMPL(ExtVector, VectorType)
   1567 DEFAULT_TYPELOC_IMPL(FunctionProto, FunctionType)
   1568 DEFAULT_TYPELOC_IMPL(FunctionNoProto, FunctionType)
   1569 DEFAULT_TYPELOC_IMPL(Record, TagType)
   1570 DEFAULT_TYPELOC_IMPL(Enum, TagType)
   1571 DEFAULT_TYPELOC_IMPL(SubstTemplateTypeParm, Type)
   1572 DEFAULT_TYPELOC_IMPL(SubstTemplateTypeParmPack, Type)
   1573 DEFAULT_TYPELOC_IMPL(Auto, Type)
   1574 
   1575 bool CursorVisitor::VisitCXXRecordDecl(CXXRecordDecl *D) {
   1576   // Visit the nested-name-specifier, if present.
   1577   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1578     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1579       return true;
   1580 
   1581   if (D->isCompleteDefinition()) {
   1582     for (CXXRecordDecl::base_class_iterator I = D->bases_begin(),
   1583          E = D->bases_end(); I != E; ++I) {
   1584       if (Visit(cxcursor::MakeCursorCXXBaseSpecifier(I, TU)))
   1585         return true;
   1586     }
   1587   }
   1588 
   1589   return VisitTagDecl(D);
   1590 }
   1591 
   1592 bool CursorVisitor::VisitAttributes(Decl *D) {
   1593   for (AttrVec::const_iterator i = D->attr_begin(), e = D->attr_end();
   1594        i != e; ++i)
   1595     if (Visit(MakeCXCursor(*i, D, TU)))
   1596         return true;
   1597 
   1598   return false;
   1599 }
   1600 
   1601 //===----------------------------------------------------------------------===//
   1602 // Data-recursive visitor methods.
   1603 //===----------------------------------------------------------------------===//
   1604 
   1605 namespace {
   1606 #define DEF_JOB(NAME, DATA, KIND)\
   1607 class NAME : public VisitorJob {\
   1608 public:\
   1609   NAME(DATA *d, CXCursor parent) : VisitorJob(parent, VisitorJob::KIND, d) {} \
   1610   static bool classof(const VisitorJob *VJ) { return VJ->getKind() == KIND; }\
   1611   DATA *get() const { return static_cast<DATA*>(data[0]); }\
   1612 };
   1613 
   1614 DEF_JOB(StmtVisit, Stmt, StmtVisitKind)
   1615 DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind)
   1616 DEF_JOB(DeclRefExprParts, DeclRefExpr, DeclRefExprPartsKind)
   1617 DEF_JOB(OverloadExprParts, OverloadExpr, OverloadExprPartsKind)
   1618 DEF_JOB(ExplicitTemplateArgsVisit, ASTTemplateArgumentListInfo,
   1619         ExplicitTemplateArgsVisitKind)
   1620 DEF_JOB(SizeOfPackExprParts, SizeOfPackExpr, SizeOfPackExprPartsKind)
   1621 DEF_JOB(LambdaExprParts, LambdaExpr, LambdaExprPartsKind)
   1622 #undef DEF_JOB
   1623 
   1624 class DeclVisit : public VisitorJob {
   1625 public:
   1626   DeclVisit(Decl *d, CXCursor parent, bool isFirst) :
   1627     VisitorJob(parent, VisitorJob::DeclVisitKind,
   1628                d, isFirst ? (void*) 1 : (void*) 0) {}
   1629   static bool classof(const VisitorJob *VJ) {
   1630     return VJ->getKind() == DeclVisitKind;
   1631   }
   1632   Decl *get() const { return static_cast<Decl*>(data[0]); }
   1633   bool isFirst() const { return data[1] ? true : false; }
   1634 };
   1635 class TypeLocVisit : public VisitorJob {
   1636 public:
   1637   TypeLocVisit(TypeLoc tl, CXCursor parent) :
   1638     VisitorJob(parent, VisitorJob::TypeLocVisitKind,
   1639                tl.getType().getAsOpaquePtr(), tl.getOpaqueData()) {}
   1640 
   1641   static bool classof(const VisitorJob *VJ) {
   1642     return VJ->getKind() == TypeLocVisitKind;
   1643   }
   1644 
   1645   TypeLoc get() const {
   1646     QualType T = QualType::getFromOpaquePtr(data[0]);
   1647     return TypeLoc(T, data[1]);
   1648   }
   1649 };
   1650 
   1651 class LabelRefVisit : public VisitorJob {
   1652 public:
   1653   LabelRefVisit(LabelDecl *LD, SourceLocation labelLoc, CXCursor parent)
   1654     : VisitorJob(parent, VisitorJob::LabelRefVisitKind, LD,
   1655                  labelLoc.getPtrEncoding()) {}
   1656 
   1657   static bool classof(const VisitorJob *VJ) {
   1658     return VJ->getKind() == VisitorJob::LabelRefVisitKind;
   1659   }
   1660   LabelDecl *get() const { return static_cast<LabelDecl*>(data[0]); }
   1661   SourceLocation getLoc() const {
   1662     return SourceLocation::getFromPtrEncoding(data[1]); }
   1663 };
   1664 
   1665 class NestedNameSpecifierLocVisit : public VisitorJob {
   1666 public:
   1667   NestedNameSpecifierLocVisit(NestedNameSpecifierLoc Qualifier, CXCursor parent)
   1668     : VisitorJob(parent, VisitorJob::NestedNameSpecifierLocVisitKind,
   1669                  Qualifier.getNestedNameSpecifier(),
   1670                  Qualifier.getOpaqueData()) { }
   1671 
   1672   static bool classof(const VisitorJob *VJ) {
   1673     return VJ->getKind() == VisitorJob::NestedNameSpecifierLocVisitKind;
   1674   }
   1675 
   1676   NestedNameSpecifierLoc get() const {
   1677     return NestedNameSpecifierLoc(static_cast<NestedNameSpecifier*>(data[0]),
   1678                                   data[1]);
   1679   }
   1680 };
   1681 
   1682 class DeclarationNameInfoVisit : public VisitorJob {
   1683 public:
   1684   DeclarationNameInfoVisit(Stmt *S, CXCursor parent)
   1685     : VisitorJob(parent, VisitorJob::DeclarationNameInfoVisitKind, S) {}
   1686   static bool classof(const VisitorJob *VJ) {
   1687     return VJ->getKind() == VisitorJob::DeclarationNameInfoVisitKind;
   1688   }
   1689   DeclarationNameInfo get() const {
   1690     Stmt *S = static_cast<Stmt*>(data[0]);
   1691     switch (S->getStmtClass()) {
   1692     default:
   1693       llvm_unreachable("Unhandled Stmt");
   1694     case clang::Stmt::MSDependentExistsStmtClass:
   1695       return cast<MSDependentExistsStmt>(S)->getNameInfo();
   1696     case Stmt::CXXDependentScopeMemberExprClass:
   1697       return cast<CXXDependentScopeMemberExpr>(S)->getMemberNameInfo();
   1698     case Stmt::DependentScopeDeclRefExprClass:
   1699       return cast<DependentScopeDeclRefExpr>(S)->getNameInfo();
   1700     }
   1701   }
   1702 };
   1703 class MemberRefVisit : public VisitorJob {
   1704 public:
   1705   MemberRefVisit(FieldDecl *D, SourceLocation L, CXCursor parent)
   1706     : VisitorJob(parent, VisitorJob::MemberRefVisitKind, D,
   1707                  L.getPtrEncoding()) {}
   1708   static bool classof(const VisitorJob *VJ) {
   1709     return VJ->getKind() == VisitorJob::MemberRefVisitKind;
   1710   }
   1711   FieldDecl *get() const {
   1712     return static_cast<FieldDecl*>(data[0]);
   1713   }
   1714   SourceLocation getLoc() const {
   1715     return SourceLocation::getFromRawEncoding((unsigned)(uintptr_t) data[1]);
   1716   }
   1717 };
   1718 class EnqueueVisitor : public StmtVisitor<EnqueueVisitor, void> {
   1719   VisitorWorkList &WL;
   1720   CXCursor Parent;
   1721 public:
   1722   EnqueueVisitor(VisitorWorkList &wl, CXCursor parent)
   1723     : WL(wl), Parent(parent) {}
   1724 
   1725   void VisitAddrLabelExpr(AddrLabelExpr *E);
   1726   void VisitBlockExpr(BlockExpr *B);
   1727   void VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
   1728   void VisitCompoundStmt(CompoundStmt *S);
   1729   void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { /* Do nothing. */ }
   1730   void VisitMSDependentExistsStmt(MSDependentExistsStmt *S);
   1731   void VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E);
   1732   void VisitCXXNewExpr(CXXNewExpr *E);
   1733   void VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E);
   1734   void VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E);
   1735   void VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E);
   1736   void VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E);
   1737   void VisitCXXTypeidExpr(CXXTypeidExpr *E);
   1738   void VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E);
   1739   void VisitCXXUuidofExpr(CXXUuidofExpr *E);
   1740   void VisitCXXCatchStmt(CXXCatchStmt *S);
   1741   void VisitDeclRefExpr(DeclRefExpr *D);
   1742   void VisitDeclStmt(DeclStmt *S);
   1743   void VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E);
   1744   void VisitDesignatedInitExpr(DesignatedInitExpr *E);
   1745   void VisitExplicitCastExpr(ExplicitCastExpr *E);
   1746   void VisitForStmt(ForStmt *FS);
   1747   void VisitGotoStmt(GotoStmt *GS);
   1748   void VisitIfStmt(IfStmt *If);
   1749   void VisitInitListExpr(InitListExpr *IE);
   1750   void VisitMemberExpr(MemberExpr *M);
   1751   void VisitOffsetOfExpr(OffsetOfExpr *E);
   1752   void VisitObjCEncodeExpr(ObjCEncodeExpr *E);
   1753   void VisitObjCMessageExpr(ObjCMessageExpr *M);
   1754   void VisitOverloadExpr(OverloadExpr *E);
   1755   void VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E);
   1756   void VisitStmt(Stmt *S);
   1757   void VisitSwitchStmt(SwitchStmt *S);
   1758   void VisitWhileStmt(WhileStmt *W);
   1759   void VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E);
   1760   void VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E);
   1761   void VisitTypeTraitExpr(TypeTraitExpr *E);
   1762   void VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E);
   1763   void VisitExpressionTraitExpr(ExpressionTraitExpr *E);
   1764   void VisitUnresolvedMemberExpr(UnresolvedMemberExpr *U);
   1765   void VisitVAArgExpr(VAArgExpr *E);
   1766   void VisitSizeOfPackExpr(SizeOfPackExpr *E);
   1767   void VisitPseudoObjectExpr(PseudoObjectExpr *E);
   1768   void VisitOpaqueValueExpr(OpaqueValueExpr *E);
   1769   void VisitLambdaExpr(LambdaExpr *E);
   1770 
   1771 private:
   1772   void AddDeclarationNameInfo(Stmt *S);
   1773   void AddNestedNameSpecifierLoc(NestedNameSpecifierLoc Qualifier);
   1774   void AddExplicitTemplateArgs(const ASTTemplateArgumentListInfo *A);
   1775   void AddMemberRef(FieldDecl *D, SourceLocation L);
   1776   void AddStmt(Stmt *S);
   1777   void AddDecl(Decl *D, bool isFirst = true);
   1778   void AddTypeLoc(TypeSourceInfo *TI);
   1779   void EnqueueChildren(Stmt *S);
   1780 };
   1781 } // end anonyous namespace
   1782 
   1783 void EnqueueVisitor::AddDeclarationNameInfo(Stmt *S) {
   1784   // 'S' should always be non-null, since it comes from the
   1785   // statement we are visiting.
   1786   WL.push_back(DeclarationNameInfoVisit(S, Parent));
   1787 }
   1788 
   1789 void
   1790 EnqueueVisitor::AddNestedNameSpecifierLoc(NestedNameSpecifierLoc Qualifier) {
   1791   if (Qualifier)
   1792     WL.push_back(NestedNameSpecifierLocVisit(Qualifier, Parent));
   1793 }
   1794 
   1795 void EnqueueVisitor::AddStmt(Stmt *S) {
   1796   if (S)
   1797     WL.push_back(StmtVisit(S, Parent));
   1798 }
   1799 void EnqueueVisitor::AddDecl(Decl *D, bool isFirst) {
   1800   if (D)
   1801     WL.push_back(DeclVisit(D, Parent, isFirst));
   1802 }
   1803 void EnqueueVisitor::
   1804   AddExplicitTemplateArgs(const ASTTemplateArgumentListInfo *A) {
   1805   if (A)
   1806     WL.push_back(ExplicitTemplateArgsVisit(
   1807                         const_cast<ASTTemplateArgumentListInfo*>(A), Parent));
   1808 }
   1809 void EnqueueVisitor::AddMemberRef(FieldDecl *D, SourceLocation L) {
   1810   if (D)
   1811     WL.push_back(MemberRefVisit(D, L, Parent));
   1812 }
   1813 void EnqueueVisitor::AddTypeLoc(TypeSourceInfo *TI) {
   1814   if (TI)
   1815     WL.push_back(TypeLocVisit(TI->getTypeLoc(), Parent));
   1816  }
   1817 void EnqueueVisitor::EnqueueChildren(Stmt *S) {
   1818   unsigned size = WL.size();
   1819   for (Stmt::child_range Child = S->children(); Child; ++Child) {
   1820     AddStmt(*Child);
   1821   }
   1822   if (size == WL.size())
   1823     return;
   1824   // Now reverse the entries we just added.  This will match the DFS
   1825   // ordering performed by the worklist.
   1826   VisitorWorkList::iterator I = WL.begin() + size, E = WL.end();
   1827   std::reverse(I, E);
   1828 }
   1829 void EnqueueVisitor::VisitAddrLabelExpr(AddrLabelExpr *E) {
   1830   WL.push_back(LabelRefVisit(E->getLabel(), E->getLabelLoc(), Parent));
   1831 }
   1832 void EnqueueVisitor::VisitBlockExpr(BlockExpr *B) {
   1833   AddDecl(B->getBlockDecl());
   1834 }
   1835 void EnqueueVisitor::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
   1836   EnqueueChildren(E);
   1837   AddTypeLoc(E->getTypeSourceInfo());
   1838 }
   1839 void EnqueueVisitor::VisitCompoundStmt(CompoundStmt *S) {
   1840   for (CompoundStmt::reverse_body_iterator I = S->body_rbegin(),
   1841         E = S->body_rend(); I != E; ++I) {
   1842     AddStmt(*I);
   1843   }
   1844 }
   1845 void EnqueueVisitor::
   1846 VisitMSDependentExistsStmt(MSDependentExistsStmt *S) {
   1847   AddStmt(S->getSubStmt());
   1848   AddDeclarationNameInfo(S);
   1849   if (NestedNameSpecifierLoc QualifierLoc = S->getQualifierLoc())
   1850     AddNestedNameSpecifierLoc(QualifierLoc);
   1851 }
   1852 
   1853 void EnqueueVisitor::
   1854 VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E) {
   1855   AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs());
   1856   AddDeclarationNameInfo(E);
   1857   if (NestedNameSpecifierLoc QualifierLoc = E->getQualifierLoc())
   1858     AddNestedNameSpecifierLoc(QualifierLoc);
   1859   if (!E->isImplicitAccess())
   1860     AddStmt(E->getBase());
   1861 }
   1862 void EnqueueVisitor::VisitCXXNewExpr(CXXNewExpr *E) {
   1863   // Enqueue the initializer , if any.
   1864   AddStmt(E->getInitializer());
   1865   // Enqueue the array size, if any.
   1866   AddStmt(E->getArraySize());
   1867   // Enqueue the allocated type.
   1868   AddTypeLoc(E->getAllocatedTypeSourceInfo());
   1869   // Enqueue the placement arguments.
   1870   for (unsigned I = E->getNumPlacementArgs(); I > 0; --I)
   1871     AddStmt(E->getPlacementArg(I-1));
   1872 }
   1873 void EnqueueVisitor::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *CE) {
   1874   for (unsigned I = CE->getNumArgs(); I > 1 /* Yes, this is 1 */; --I)
   1875     AddStmt(CE->getArg(I-1));
   1876   AddStmt(CE->getCallee());
   1877   AddStmt(CE->getArg(0));
   1878 }
   1879 void EnqueueVisitor::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) {
   1880   // Visit the name of the type being destroyed.
   1881   AddTypeLoc(E->getDestroyedTypeInfo());
   1882   // Visit the scope type that looks disturbingly like the nested-name-specifier
   1883   // but isn't.
   1884   AddTypeLoc(E->getScopeTypeInfo());
   1885   // Visit the nested-name-specifier.
   1886   if (NestedNameSpecifierLoc QualifierLoc = E->getQualifierLoc())
   1887     AddNestedNameSpecifierLoc(QualifierLoc);
   1888   // Visit base expression.
   1889   AddStmt(E->getBase());
   1890 }
   1891 void EnqueueVisitor::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) {
   1892   AddTypeLoc(E->getTypeSourceInfo());
   1893 }
   1894 void EnqueueVisitor::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) {
   1895   EnqueueChildren(E);
   1896   AddTypeLoc(E->getTypeSourceInfo());
   1897 }
   1898 void EnqueueVisitor::VisitCXXTypeidExpr(CXXTypeidExpr *E) {
   1899   EnqueueChildren(E);
   1900   if (E->isTypeOperand())
   1901     AddTypeLoc(E->getTypeOperandSourceInfo());
   1902 }
   1903 
   1904 void EnqueueVisitor::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr
   1905                                                      *E) {
   1906   EnqueueChildren(E);
   1907   AddTypeLoc(E->getTypeSourceInfo());
   1908 }
   1909 void EnqueueVisitor::VisitCXXUuidofExpr(CXXUuidofExpr *E) {
   1910   EnqueueChildren(E);
   1911   if (E->isTypeOperand())
   1912     AddTypeLoc(E->getTypeOperandSourceInfo());
   1913 }
   1914 
   1915 void EnqueueVisitor::VisitCXXCatchStmt(CXXCatchStmt *S) {
   1916   EnqueueChildren(S);
   1917   AddDecl(S->getExceptionDecl());
   1918 }
   1919 
   1920 void EnqueueVisitor::VisitDeclRefExpr(DeclRefExpr *DR) {
   1921   if (DR->hasExplicitTemplateArgs()) {
   1922     AddExplicitTemplateArgs(&DR->getExplicitTemplateArgs());
   1923   }
   1924   WL.push_back(DeclRefExprParts(DR, Parent));
   1925 }
   1926 void EnqueueVisitor::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
   1927   AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs());
   1928   AddDeclarationNameInfo(E);
   1929   AddNestedNameSpecifierLoc(E->getQualifierLoc());
   1930 }
   1931 void EnqueueVisitor::VisitDeclStmt(DeclStmt *S) {
   1932   unsigned size = WL.size();
   1933   bool isFirst = true;
   1934   for (DeclStmt::decl_iterator D = S->decl_begin(), DEnd = S->decl_end();
   1935        D != DEnd; ++D) {
   1936     AddDecl(*D, isFirst);
   1937     isFirst = false;
   1938   }
   1939   if (size == WL.size())
   1940     return;
   1941   // Now reverse the entries we just added.  This will match the DFS
   1942   // ordering performed by the worklist.
   1943   VisitorWorkList::iterator I = WL.begin() + size, E = WL.end();
   1944   std::reverse(I, E);
   1945 }
   1946 void EnqueueVisitor::VisitDesignatedInitExpr(DesignatedInitExpr *E) {
   1947   AddStmt(E->getInit());
   1948   typedef DesignatedInitExpr::Designator Designator;
   1949   for (DesignatedInitExpr::reverse_designators_iterator
   1950          D = E->designators_rbegin(), DEnd = E->designators_rend();
   1951          D != DEnd; ++D) {
   1952     if (D->isFieldDesignator()) {
   1953       if (FieldDecl *Field = D->getField())
   1954         AddMemberRef(Field, D->getFieldLoc());
   1955       continue;
   1956     }
   1957     if (D->isArrayDesignator()) {
   1958       AddStmt(E->getArrayIndex(*D));
   1959       continue;
   1960     }
   1961     assert(D->isArrayRangeDesignator() && "Unknown designator kind");
   1962     AddStmt(E->getArrayRangeEnd(*D));
   1963     AddStmt(E->getArrayRangeStart(*D));
   1964   }
   1965 }
   1966 void EnqueueVisitor::VisitExplicitCastExpr(ExplicitCastExpr *E) {
   1967   EnqueueChildren(E);
   1968   AddTypeLoc(E->getTypeInfoAsWritten());
   1969 }
   1970 void EnqueueVisitor::VisitForStmt(ForStmt *FS) {
   1971   AddStmt(FS->getBody());
   1972   AddStmt(FS->getInc());
   1973   AddStmt(FS->getCond());
   1974   AddDecl(FS->getConditionVariable());
   1975   AddStmt(FS->getInit());
   1976 }
   1977 void EnqueueVisitor::VisitGotoStmt(GotoStmt *GS) {
   1978   WL.push_back(LabelRefVisit(GS->getLabel(), GS->getLabelLoc(), Parent));
   1979 }
   1980 void EnqueueVisitor::VisitIfStmt(IfStmt *If) {
   1981   AddStmt(If->getElse());
   1982   AddStmt(If->getThen());
   1983   AddStmt(If->getCond());
   1984   AddDecl(If->getConditionVariable());
   1985 }
   1986 void EnqueueVisitor::VisitInitListExpr(InitListExpr *IE) {
   1987   // We care about the syntactic form of the initializer list, only.
   1988   if (InitListExpr *Syntactic = IE->getSyntacticForm())
   1989     IE = Syntactic;
   1990   EnqueueChildren(IE);
   1991 }
   1992 void EnqueueVisitor::VisitMemberExpr(MemberExpr *M) {
   1993   WL.push_back(MemberExprParts(M, Parent));
   1994 
   1995   // If the base of the member access expression is an implicit 'this', don't
   1996   // visit it.
   1997   // FIXME: If we ever want to show these implicit accesses, this will be
   1998   // unfortunate. However, clang_getCursor() relies on this behavior.
   1999   if (!M->isImplicitAccess())
   2000     AddStmt(M->getBase());
   2001 }
   2002 void EnqueueVisitor::VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
   2003   AddTypeLoc(E->getEncodedTypeSourceInfo());
   2004 }
   2005 void EnqueueVisitor::VisitObjCMessageExpr(ObjCMessageExpr *M) {
   2006   EnqueueChildren(M);
   2007   AddTypeLoc(M->getClassReceiverTypeInfo());
   2008 }
   2009 void EnqueueVisitor::VisitOffsetOfExpr(OffsetOfExpr *E) {
   2010   // Visit the components of the offsetof expression.
   2011   for (unsigned N = E->getNumComponents(), I = N; I > 0; --I) {
   2012     typedef OffsetOfExpr::OffsetOfNode OffsetOfNode;
   2013     const OffsetOfNode &Node = E->getComponent(I-1);
   2014     switch (Node.getKind()) {
   2015     case OffsetOfNode::Array:
   2016       AddStmt(E->getIndexExpr(Node.getArrayExprIndex()));
   2017       break;
   2018     case OffsetOfNode::Field:
   2019       AddMemberRef(Node.getField(), Node.getSourceRange().getEnd());
   2020       break;
   2021     case OffsetOfNode::Identifier:
   2022     case OffsetOfNode::Base:
   2023       continue;
   2024     }
   2025   }
   2026   // Visit the type into which we're computing the offset.
   2027   AddTypeLoc(E->getTypeSourceInfo());
   2028 }
   2029 void EnqueueVisitor::VisitOverloadExpr(OverloadExpr *E) {
   2030   AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs());
   2031   WL.push_back(OverloadExprParts(E, Parent));
   2032 }
   2033 void EnqueueVisitor::VisitUnaryExprOrTypeTraitExpr(
   2034                                               UnaryExprOrTypeTraitExpr *E) {
   2035   EnqueueChildren(E);
   2036   if (E->isArgumentType())
   2037     AddTypeLoc(E->getArgumentTypeInfo());
   2038 }
   2039 void EnqueueVisitor::VisitStmt(Stmt *S) {
   2040   EnqueueChildren(S);
   2041 }
   2042 void EnqueueVisitor::VisitSwitchStmt(SwitchStmt *S) {
   2043   AddStmt(S->getBody());
   2044   AddStmt(S->getCond());
   2045   AddDecl(S->getConditionVariable());
   2046 }
   2047 
   2048 void EnqueueVisitor::VisitWhileStmt(WhileStmt *W) {
   2049   AddStmt(W->getBody());
   2050   AddStmt(W->getCond());
   2051   AddDecl(W->getConditionVariable());
   2052 }
   2053 
   2054 void EnqueueVisitor::VisitUnaryTypeTraitExpr(UnaryTypeTraitExpr *E) {
   2055   AddTypeLoc(E->getQueriedTypeSourceInfo());
   2056 }
   2057 
   2058 void EnqueueVisitor::VisitBinaryTypeTraitExpr(BinaryTypeTraitExpr *E) {
   2059   AddTypeLoc(E->getRhsTypeSourceInfo());
   2060   AddTypeLoc(E->getLhsTypeSourceInfo());
   2061 }
   2062 
   2063 void EnqueueVisitor::VisitTypeTraitExpr(TypeTraitExpr *E) {
   2064   for (unsigned I = E->getNumArgs(); I > 0; --I)
   2065     AddTypeLoc(E->getArg(I-1));
   2066 }
   2067 
   2068 void EnqueueVisitor::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) {
   2069   AddTypeLoc(E->getQueriedTypeSourceInfo());
   2070 }
   2071 
   2072 void EnqueueVisitor::VisitExpressionTraitExpr(ExpressionTraitExpr *E) {
   2073   EnqueueChildren(E);
   2074 }
   2075 
   2076 void EnqueueVisitor::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *U) {
   2077   VisitOverloadExpr(U);
   2078   if (!U->isImplicitAccess())
   2079     AddStmt(U->getBase());
   2080 }
   2081 void EnqueueVisitor::VisitVAArgExpr(VAArgExpr *E) {
   2082   AddStmt(E->getSubExpr());
   2083   AddTypeLoc(E->getWrittenTypeInfo());
   2084 }
   2085 void EnqueueVisitor::VisitSizeOfPackExpr(SizeOfPackExpr *E) {
   2086   WL.push_back(SizeOfPackExprParts(E, Parent));
   2087 }
   2088 void EnqueueVisitor::VisitOpaqueValueExpr(OpaqueValueExpr *E) {
   2089   // If the opaque value has a source expression, just transparently
   2090   // visit that.  This is useful for (e.g.) pseudo-object expressions.
   2091   if (Expr *SourceExpr = E->getSourceExpr())
   2092     return Visit(SourceExpr);
   2093 }
   2094 void EnqueueVisitor::VisitLambdaExpr(LambdaExpr *E) {
   2095   AddStmt(E->getBody());
   2096   WL.push_back(LambdaExprParts(E, Parent));
   2097 }
   2098 void EnqueueVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *E) {
   2099   // Treat the expression like its syntactic form.
   2100   Visit(E->getSyntacticForm());
   2101 }
   2102 
   2103 void CursorVisitor::EnqueueWorkList(VisitorWorkList &WL, Stmt *S) {
   2104   EnqueueVisitor(WL, MakeCXCursor(S, StmtParent, TU,RegionOfInterest)).Visit(S);
   2105 }
   2106 
   2107 bool CursorVisitor::IsInRegionOfInterest(CXCursor C) {
   2108   if (RegionOfInterest.isValid()) {
   2109     SourceRange Range = getRawCursorExtent(C);
   2110     if (Range.isInvalid() || CompareRegionOfInterest(Range))
   2111       return false;
   2112   }
   2113   return true;
   2114 }
   2115 
   2116 bool CursorVisitor::RunVisitorWorkList(VisitorWorkList &WL) {
   2117   while (!WL.empty()) {
   2118     // Dequeue the worklist item.
   2119     VisitorJob LI = WL.back();
   2120     WL.pop_back();
   2121 
   2122     // Set the Parent field, then back to its old value once we're done.
   2123     SetParentRAII SetParent(Parent, StmtParent, LI.getParent());
   2124 
   2125     switch (LI.getKind()) {
   2126       case VisitorJob::DeclVisitKind: {
   2127         Decl *D = cast<DeclVisit>(&LI)->get();
   2128         if (!D)
   2129           continue;
   2130 
   2131         // For now, perform default visitation for Decls.
   2132         if (Visit(MakeCXCursor(D, TU, RegionOfInterest,
   2133                                cast<DeclVisit>(&LI)->isFirst())))
   2134             return true;
   2135 
   2136         continue;
   2137       }
   2138       case VisitorJob::ExplicitTemplateArgsVisitKind: {
   2139         const ASTTemplateArgumentListInfo *ArgList =
   2140           cast<ExplicitTemplateArgsVisit>(&LI)->get();
   2141         for (const TemplateArgumentLoc *Arg = ArgList->getTemplateArgs(),
   2142                *ArgEnd = Arg + ArgList->NumTemplateArgs;
   2143                Arg != ArgEnd; ++Arg) {
   2144           if (VisitTemplateArgumentLoc(*Arg))
   2145             return true;
   2146         }
   2147         continue;
   2148       }
   2149       case VisitorJob::TypeLocVisitKind: {
   2150         // Perform default visitation for TypeLocs.
   2151         if (Visit(cast<TypeLocVisit>(&LI)->get()))
   2152           return true;
   2153         continue;
   2154       }
   2155       case VisitorJob::LabelRefVisitKind: {
   2156         LabelDecl *LS = cast<LabelRefVisit>(&LI)->get();
   2157         if (LabelStmt *stmt = LS->getStmt()) {
   2158           if (Visit(MakeCursorLabelRef(stmt, cast<LabelRefVisit>(&LI)->getLoc(),
   2159                                        TU))) {
   2160             return true;
   2161           }
   2162         }
   2163         continue;
   2164       }
   2165 
   2166       case VisitorJob::NestedNameSpecifierLocVisitKind: {
   2167         NestedNameSpecifierLocVisit *V = cast<NestedNameSpecifierLocVisit>(&LI);
   2168         if (VisitNestedNameSpecifierLoc(V->get()))
   2169           return true;
   2170         continue;
   2171       }
   2172 
   2173       case VisitorJob::DeclarationNameInfoVisitKind: {
   2174         if (VisitDeclarationNameInfo(cast<DeclarationNameInfoVisit>(&LI)
   2175                                      ->get()))
   2176           return true;
   2177         continue;
   2178       }
   2179       case VisitorJob::MemberRefVisitKind: {
   2180         MemberRefVisit *V = cast<MemberRefVisit>(&LI);
   2181         if (Visit(MakeCursorMemberRef(V->get(), V->getLoc(), TU)))
   2182           return true;
   2183         continue;
   2184       }
   2185       case VisitorJob::StmtVisitKind: {
   2186         Stmt *S = cast<StmtVisit>(&LI)->get();
   2187         if (!S)
   2188           continue;
   2189 
   2190         // Update the current cursor.
   2191         CXCursor Cursor = MakeCXCursor(S, StmtParent, TU, RegionOfInterest);
   2192         if (!IsInRegionOfInterest(Cursor))
   2193           continue;
   2194         switch (Visitor(Cursor, Parent, ClientData)) {
   2195           case CXChildVisit_Break: return true;
   2196           case CXChildVisit_Continue: break;
   2197           case CXChildVisit_Recurse:
   2198             EnqueueWorkList(WL, S);
   2199             break;
   2200         }
   2201         continue;
   2202       }
   2203       case VisitorJob::MemberExprPartsKind: {
   2204         // Handle the other pieces in the MemberExpr besides the base.
   2205         MemberExpr *M = cast<MemberExprParts>(&LI)->get();
   2206 
   2207         // Visit the nested-name-specifier
   2208         if (NestedNameSpecifierLoc QualifierLoc = M->getQualifierLoc())
   2209           if (VisitNestedNameSpecifierLoc(QualifierLoc))
   2210             return true;
   2211 
   2212         // Visit the declaration name.
   2213         if (VisitDeclarationNameInfo(M->getMemberNameInfo()))
   2214           return true;
   2215 
   2216         // Visit the explicitly-specified template arguments, if any.
   2217         if (M->hasExplicitTemplateArgs()) {
   2218           for (const TemplateArgumentLoc *Arg = M->getTemplateArgs(),
   2219                *ArgEnd = Arg + M->getNumTemplateArgs();
   2220                Arg != ArgEnd; ++Arg) {
   2221             if (VisitTemplateArgumentLoc(*Arg))
   2222               return true;
   2223           }
   2224         }
   2225         continue;
   2226       }
   2227       case VisitorJob::DeclRefExprPartsKind: {
   2228         DeclRefExpr *DR = cast<DeclRefExprParts>(&LI)->get();
   2229         // Visit nested-name-specifier, if present.
   2230         if (NestedNameSpecifierLoc QualifierLoc = DR->getQualifierLoc())
   2231           if (VisitNestedNameSpecifierLoc(QualifierLoc))
   2232             return true;
   2233         // Visit declaration name.
   2234         if (VisitDeclarationNameInfo(DR->getNameInfo()))
   2235           return true;
   2236         continue;
   2237       }
   2238       case VisitorJob::OverloadExprPartsKind: {
   2239         OverloadExpr *O = cast<OverloadExprParts>(&LI)->get();
   2240         // Visit the nested-name-specifier.
   2241         if (NestedNameSpecifierLoc QualifierLoc = O->getQualifierLoc())
   2242           if (VisitNestedNameSpecifierLoc(QualifierLoc))
   2243             return true;
   2244         // Visit the declaration name.
   2245         if (VisitDeclarationNameInfo(O->getNameInfo()))
   2246           return true;
   2247         // Visit the overloaded declaration reference.
   2248         if (Visit(MakeCursorOverloadedDeclRef(O, TU)))
   2249           return true;
   2250         continue;
   2251       }
   2252       case VisitorJob::SizeOfPackExprPartsKind: {
   2253         SizeOfPackExpr *E = cast<SizeOfPackExprParts>(&LI)->get();
   2254         NamedDecl *Pack = E->getPack();
   2255         if (isa<TemplateTypeParmDecl>(Pack)) {
   2256           if (Visit(MakeCursorTypeRef(cast<TemplateTypeParmDecl>(Pack),
   2257                                       E->getPackLoc(), TU)))
   2258             return true;
   2259 
   2260           continue;
   2261         }
   2262 
   2263         if (isa<TemplateTemplateParmDecl>(Pack)) {
   2264           if (Visit(MakeCursorTemplateRef(cast<TemplateTemplateParmDecl>(Pack),
   2265                                           E->getPackLoc(), TU)))
   2266             return true;
   2267 
   2268           continue;
   2269         }
   2270 
   2271         // Non-type template parameter packs and function parameter packs are
   2272         // treated like DeclRefExpr cursors.
   2273         continue;
   2274       }
   2275 
   2276       case VisitorJob::LambdaExprPartsKind: {
   2277         // Visit captures.
   2278         LambdaExpr *E = cast<LambdaExprParts>(&LI)->get();
   2279         for (LambdaExpr::capture_iterator C = E->explicit_capture_begin(),
   2280                                        CEnd = E->explicit_capture_end();
   2281              C != CEnd; ++C) {
   2282           if (C->capturesThis())
   2283             continue;
   2284 
   2285           if (Visit(MakeCursorVariableRef(C->getCapturedVar(),
   2286                                           C->getLocation(),
   2287                                           TU)))
   2288             return true;
   2289         }
   2290 
   2291         // Visit parameters and return type, if present.
   2292         if (E->hasExplicitParameters() || E->hasExplicitResultType()) {
   2293           TypeLoc TL = E->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
   2294           if (E->hasExplicitParameters() && E->hasExplicitResultType()) {
   2295             // Visit the whole type.
   2296             if (Visit(TL))
   2297               return true;
   2298           } else if (isa<FunctionProtoTypeLoc>(TL)) {
   2299             FunctionProtoTypeLoc Proto = cast<FunctionProtoTypeLoc>(TL);
   2300             if (E->hasExplicitParameters()) {
   2301               // Visit parameters.
   2302               for (unsigned I = 0, N = Proto.getNumArgs(); I != N; ++I)
   2303                 if (Visit(MakeCXCursor(Proto.getArg(I), TU)))
   2304                   return true;
   2305             } else {
   2306               // Visit result type.
   2307               if (Visit(Proto.getResultLoc()))
   2308                 return true;
   2309             }
   2310           }
   2311         }
   2312         break;
   2313       }
   2314     }
   2315   }
   2316   return false;
   2317 }
   2318 
   2319 bool CursorVisitor::Visit(Stmt *S) {
   2320   VisitorWorkList *WL = 0;
   2321   if (!WorkListFreeList.empty()) {
   2322     WL = WorkListFreeList.back();
   2323     WL->clear();
   2324     WorkListFreeList.pop_back();
   2325   }
   2326   else {
   2327     WL = new VisitorWorkList();
   2328     WorkListCache.push_back(WL);
   2329   }
   2330   EnqueueWorkList(*WL, S);
   2331   bool result = RunVisitorWorkList(*WL);
   2332   WorkListFreeList.push_back(WL);
   2333   return result;
   2334 }
   2335 
   2336 namespace {
   2337 typedef llvm::SmallVector<SourceRange, 4> RefNamePieces;
   2338 RefNamePieces buildPieces(unsigned NameFlags, bool IsMemberRefExpr,
   2339                           const DeclarationNameInfo &NI,
   2340                           const SourceRange &QLoc,
   2341                           const ASTTemplateArgumentListInfo *TemplateArgs = 0){
   2342   const bool WantQualifier = NameFlags & CXNameRange_WantQualifier;
   2343   const bool WantTemplateArgs = NameFlags & CXNameRange_WantTemplateArgs;
   2344   const bool WantSinglePiece = NameFlags & CXNameRange_WantSinglePiece;
   2345 
   2346   const DeclarationName::NameKind Kind = NI.getName().getNameKind();
   2347 
   2348   RefNamePieces Pieces;
   2349 
   2350   if (WantQualifier && QLoc.isValid())
   2351     Pieces.push_back(QLoc);
   2352 
   2353   if (Kind != DeclarationName::CXXOperatorName || IsMemberRefExpr)
   2354     Pieces.push_back(NI.getLoc());
   2355 
   2356   if (WantTemplateArgs && TemplateArgs)
   2357     Pieces.push_back(SourceRange(TemplateArgs->LAngleLoc,
   2358                                  TemplateArgs->RAngleLoc));
   2359 
   2360   if (Kind == DeclarationName::CXXOperatorName) {
   2361     Pieces.push_back(SourceLocation::getFromRawEncoding(
   2362                        NI.getInfo().CXXOperatorName.BeginOpNameLoc));
   2363     Pieces.push_back(SourceLocation::getFromRawEncoding(
   2364                        NI.getInfo().CXXOperatorName.EndOpNameLoc));
   2365   }
   2366 
   2367   if (WantSinglePiece) {
   2368     SourceRange R(Pieces.front().getBegin(), Pieces.back().getEnd());
   2369     Pieces.clear();
   2370     Pieces.push_back(R);
   2371   }
   2372 
   2373   return Pieces;
   2374 }
   2375 }
   2376 
   2377 //===----------------------------------------------------------------------===//
   2378 // Misc. API hooks.
   2379 //===----------------------------------------------------------------------===//
   2380 
   2381 static llvm::sys::Mutex EnableMultithreadingMutex;
   2382 static bool EnabledMultithreading;
   2383 
   2384 static void fatal_error_handler(void *user_data, const std::string& reason) {
   2385   // Write the result out to stderr avoiding errs() because raw_ostreams can
   2386   // call report_fatal_error.
   2387   fprintf(stderr, "LIBCLANG FATAL ERROR: %s\n", reason.c_str());
   2388   ::abort();
   2389 }
   2390 
   2391 extern "C" {
   2392 CXIndex clang_createIndex(int excludeDeclarationsFromPCH,
   2393                           int displayDiagnostics) {
   2394   // Disable pretty stack trace functionality, which will otherwise be a very
   2395   // poor citizen of the world and set up all sorts of signal handlers.
   2396   llvm::DisablePrettyStackTrace = true;
   2397 
   2398   // We use crash recovery to make some of our APIs more reliable, implicitly
   2399   // enable it.
   2400   llvm::CrashRecoveryContext::Enable();
   2401 
   2402   // Enable support for multithreading in LLVM.
   2403   {
   2404     llvm::sys::ScopedLock L(EnableMultithreadingMutex);
   2405     if (!EnabledMultithreading) {
   2406       llvm::install_fatal_error_handler(fatal_error_handler, 0);
   2407       llvm::llvm_start_multithreaded();
   2408       EnabledMultithreading = true;
   2409     }
   2410   }
   2411 
   2412   CIndexer *CIdxr = new CIndexer();
   2413   if (excludeDeclarationsFromPCH)
   2414     CIdxr->setOnlyLocalDecls();
   2415   if (displayDiagnostics)
   2416     CIdxr->setDisplayDiagnostics();
   2417 
   2418   if (getenv("LIBCLANG_BGPRIO_INDEX"))
   2419     CIdxr->setCXGlobalOptFlags(CIdxr->getCXGlobalOptFlags() |
   2420                                CXGlobalOpt_ThreadBackgroundPriorityForIndexing);
   2421   if (getenv("LIBCLANG_BGPRIO_EDIT"))
   2422     CIdxr->setCXGlobalOptFlags(CIdxr->getCXGlobalOptFlags() |
   2423                                CXGlobalOpt_ThreadBackgroundPriorityForEditing);
   2424 
   2425   return CIdxr;
   2426 }
   2427 
   2428 void clang_disposeIndex(CXIndex CIdx) {
   2429   if (CIdx)
   2430     delete static_cast<CIndexer *>(CIdx);
   2431 }
   2432 
   2433 void clang_CXIndex_setGlobalOptions(CXIndex CIdx, unsigned options) {
   2434   if (CIdx)
   2435     static_cast<CIndexer *>(CIdx)->setCXGlobalOptFlags(options);
   2436 }
   2437 
   2438 unsigned clang_CXIndex_getGlobalOptions(CXIndex CIdx) {
   2439   if (CIdx)
   2440     return static_cast<CIndexer *>(CIdx)->getCXGlobalOptFlags();
   2441   return 0;
   2442 }
   2443 
   2444 void clang_toggleCrashRecovery(unsigned isEnabled) {
   2445   if (isEnabled)
   2446     llvm::CrashRecoveryContext::Enable();
   2447   else
   2448     llvm::CrashRecoveryContext::Disable();
   2449 }
   2450 
   2451 CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx,
   2452                                               const char *ast_filename) {
   2453   if (!CIdx)
   2454     return 0;
   2455 
   2456   CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
   2457   FileSystemOptions FileSystemOpts;
   2458   FileSystemOpts.WorkingDir = CXXIdx->getWorkingDirectory();
   2459 
   2460   IntrusiveRefCntPtr<DiagnosticsEngine> Diags;
   2461   ASTUnit *TU = ASTUnit::LoadFromASTFile(ast_filename, Diags, FileSystemOpts,
   2462                                   CXXIdx->getOnlyLocalDecls(),
   2463                                   0, 0,
   2464                                   /*CaptureDiagnostics=*/true,
   2465                                   /*AllowPCHWithCompilerErrors=*/true);
   2466   return MakeCXTranslationUnit(CXXIdx, TU);
   2467 }
   2468 
   2469 unsigned clang_defaultEditingTranslationUnitOptions() {
   2470   return CXTranslationUnit_PrecompiledPreamble |
   2471          CXTranslationUnit_CacheCompletionResults;
   2472 }
   2473 
   2474 CXTranslationUnit
   2475 clang_createTranslationUnitFromSourceFile(CXIndex CIdx,
   2476                                           const char *source_filename,
   2477                                           int num_command_line_args,
   2478                                           const char * const *command_line_args,
   2479                                           unsigned num_unsaved_files,
   2480                                           struct CXUnsavedFile *unsaved_files) {
   2481   unsigned Options = CXTranslationUnit_DetailedPreprocessingRecord;
   2482   return clang_parseTranslationUnit(CIdx, source_filename,
   2483                                     command_line_args, num_command_line_args,
   2484                                     unsaved_files, num_unsaved_files,
   2485                                     Options);
   2486 }
   2487 
   2488 struct ParseTranslationUnitInfo {
   2489   CXIndex CIdx;
   2490   const char *source_filename;
   2491   const char *const *command_line_args;
   2492   int num_command_line_args;
   2493   struct CXUnsavedFile *unsaved_files;
   2494   unsigned num_unsaved_files;
   2495   unsigned options;
   2496   CXTranslationUnit result;
   2497 };
   2498 static void clang_parseTranslationUnit_Impl(void *UserData) {
   2499   ParseTranslationUnitInfo *PTUI =
   2500     static_cast<ParseTranslationUnitInfo*>(UserData);
   2501   CXIndex CIdx = PTUI->CIdx;
   2502   const char *source_filename = PTUI->source_filename;
   2503   const char * const *command_line_args = PTUI->command_line_args;
   2504   int num_command_line_args = PTUI->num_command_line_args;
   2505   struct CXUnsavedFile *unsaved_files = PTUI->unsaved_files;
   2506   unsigned num_unsaved_files = PTUI->num_unsaved_files;
   2507   unsigned options = PTUI->options;
   2508   PTUI->result = 0;
   2509 
   2510   if (!CIdx)
   2511     return;
   2512 
   2513   CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
   2514 
   2515   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing))
   2516     setThreadBackgroundPriority();
   2517 
   2518   bool PrecompilePreamble = options & CXTranslationUnit_PrecompiledPreamble;
   2519   // FIXME: Add a flag for modules.
   2520   TranslationUnitKind TUKind
   2521     = (options & CXTranslationUnit_Incomplete)? TU_Prefix : TU_Complete;
   2522   bool CacheCodeCompetionResults
   2523     = options & CXTranslationUnit_CacheCompletionResults;
   2524   bool SkipFunctionBodies = options & CXTranslationUnit_SkipFunctionBodies;
   2525 
   2526   // Configure the diagnostics.
   2527   DiagnosticOptions DiagOpts;
   2528   IntrusiveRefCntPtr<DiagnosticsEngine>
   2529     Diags(CompilerInstance::createDiagnostics(DiagOpts, num_command_line_args,
   2530                                                 command_line_args));
   2531 
   2532   // Recover resources if we crash before exiting this function.
   2533   llvm::CrashRecoveryContextCleanupRegistrar<DiagnosticsEngine,
   2534     llvm::CrashRecoveryContextReleaseRefCleanup<DiagnosticsEngine> >
   2535     DiagCleanup(Diags.getPtr());
   2536 
   2537   OwningPtr<std::vector<ASTUnit::RemappedFile> >
   2538     RemappedFiles(new std::vector<ASTUnit::RemappedFile>());
   2539 
   2540   // Recover resources if we crash before exiting this function.
   2541   llvm::CrashRecoveryContextCleanupRegistrar<
   2542     std::vector<ASTUnit::RemappedFile> > RemappedCleanup(RemappedFiles.get());
   2543 
   2544   for (unsigned I = 0; I != num_unsaved_files; ++I) {
   2545     StringRef Data(unsaved_files[I].Contents, unsaved_files[I].Length);
   2546     const llvm::MemoryBuffer *Buffer
   2547       = llvm::MemoryBuffer::getMemBufferCopy(Data, unsaved_files[I].Filename);
   2548     RemappedFiles->push_back(std::make_pair(unsaved_files[I].Filename,
   2549                                             Buffer));
   2550   }
   2551 
   2552   OwningPtr<std::vector<const char *> >
   2553     Args(new std::vector<const char*>());
   2554 
   2555   // Recover resources if we crash before exiting this method.
   2556   llvm::CrashRecoveryContextCleanupRegistrar<std::vector<const char*> >
   2557     ArgsCleanup(Args.get());
   2558 
   2559   // Since the Clang C library is primarily used by batch tools dealing with
   2560   // (often very broken) source code, where spell-checking can have a
   2561   // significant negative impact on performance (particularly when
   2562   // precompiled headers are involved), we disable it by default.
   2563   // Only do this if we haven't found a spell-checking-related argument.
   2564   bool FoundSpellCheckingArgument = false;
   2565   for (int I = 0; I != num_command_line_args; ++I) {
   2566     if (strcmp(command_line_args[I], "-fno-spell-checking") == 0 ||
   2567         strcmp(command_line_args[I], "-fspell-checking") == 0) {
   2568       FoundSpellCheckingArgument = true;
   2569       break;
   2570     }
   2571   }
   2572   if (!FoundSpellCheckingArgument)
   2573     Args->push_back("-fno-spell-checking");
   2574 
   2575   Args->insert(Args->end(), command_line_args,
   2576                command_line_args + num_command_line_args);
   2577 
   2578   // The 'source_filename' argument is optional.  If the caller does not
   2579   // specify it then it is assumed that the source file is specified
   2580   // in the actual argument list.
   2581   // Put the source file after command_line_args otherwise if '-x' flag is
   2582   // present it will be unused.
   2583   if (source_filename)
   2584     Args->push_back(source_filename);
   2585 
   2586   // Do we need the detailed preprocessing record?
   2587   if (options & CXTranslationUnit_DetailedPreprocessingRecord) {
   2588     Args->push_back("-Xclang");
   2589     Args->push_back("-detailed-preprocessing-record");
   2590   }
   2591 
   2592   unsigned NumErrors = Diags->getClient()->getNumErrors();
   2593   OwningPtr<ASTUnit> ErrUnit;
   2594   OwningPtr<ASTUnit> Unit(
   2595     ASTUnit::LoadFromCommandLine(Args->size() ? &(*Args)[0] : 0
   2596                                  /* vector::data() not portable */,
   2597                                  Args->size() ? (&(*Args)[0] + Args->size()) :0,
   2598                                  Diags,
   2599                                  CXXIdx->getClangResourcesPath(),
   2600                                  CXXIdx->getOnlyLocalDecls(),
   2601                                  /*CaptureDiagnostics=*/true,
   2602                                  RemappedFiles->size() ? &(*RemappedFiles)[0]:0,
   2603                                  RemappedFiles->size(),
   2604                                  /*RemappedFilesKeepOriginalName=*/true,
   2605                                  PrecompilePreamble,
   2606                                  TUKind,
   2607                                  CacheCodeCompetionResults,
   2608                                  /*AllowPCHWithCompilerErrors=*/true,
   2609                                  SkipFunctionBodies,
   2610                                  &ErrUnit));
   2611 
   2612   if (NumErrors != Diags->getClient()->getNumErrors()) {
   2613     // Make sure to check that 'Unit' is non-NULL.
   2614     if (CXXIdx->getDisplayDiagnostics())
   2615       printDiagsToStderr(Unit ? Unit.get() : ErrUnit.get());
   2616   }
   2617 
   2618   PTUI->result = MakeCXTranslationUnit(CXXIdx, Unit.take());
   2619 }
   2620 CXTranslationUnit clang_parseTranslationUnit(CXIndex CIdx,
   2621                                              const char *source_filename,
   2622                                          const char * const *command_line_args,
   2623                                              int num_command_line_args,
   2624                                             struct CXUnsavedFile *unsaved_files,
   2625                                              unsigned num_unsaved_files,
   2626                                              unsigned options) {
   2627   ParseTranslationUnitInfo PTUI = { CIdx, source_filename, command_line_args,
   2628                                     num_command_line_args, unsaved_files,
   2629                                     num_unsaved_files, options, 0 };
   2630   llvm::CrashRecoveryContext CRC;
   2631 
   2632   if (!RunSafely(CRC, clang_parseTranslationUnit_Impl, &PTUI)) {
   2633     fprintf(stderr, "libclang: crash detected during parsing: {\n");
   2634     fprintf(stderr, "  'source_filename' : '%s'\n", source_filename);
   2635     fprintf(stderr, "  'command_line_args' : [");
   2636     for (int i = 0; i != num_command_line_args; ++i) {
   2637       if (i)
   2638         fprintf(stderr, ", ");
   2639       fprintf(stderr, "'%s'", command_line_args[i]);
   2640     }
   2641     fprintf(stderr, "],\n");
   2642     fprintf(stderr, "  'unsaved_files' : [");
   2643     for (unsigned i = 0; i != num_unsaved_files; ++i) {
   2644       if (i)
   2645         fprintf(stderr, ", ");
   2646       fprintf(stderr, "('%s', '...', %ld)", unsaved_files[i].Filename,
   2647               unsaved_files[i].Length);
   2648     }
   2649     fprintf(stderr, "],\n");
   2650     fprintf(stderr, "  'options' : %d,\n", options);
   2651     fprintf(stderr, "}\n");
   2652 
   2653     return 0;
   2654   } else if (getenv("LIBCLANG_RESOURCE_USAGE")) {
   2655     PrintLibclangResourceUsage(PTUI.result);
   2656   }
   2657 
   2658   return PTUI.result;
   2659 }
   2660 
   2661 unsigned clang_defaultSaveOptions(CXTranslationUnit TU) {
   2662   return CXSaveTranslationUnit_None;
   2663 }
   2664 
   2665 namespace {
   2666 
   2667 struct SaveTranslationUnitInfo {
   2668   CXTranslationUnit TU;
   2669   const char *FileName;
   2670   unsigned options;
   2671   CXSaveError result;
   2672 };
   2673 
   2674 }
   2675 
   2676 static void clang_saveTranslationUnit_Impl(void *UserData) {
   2677   SaveTranslationUnitInfo *STUI =
   2678     static_cast<SaveTranslationUnitInfo*>(UserData);
   2679 
   2680   CIndexer *CXXIdx = (CIndexer*)STUI->TU->CIdx;
   2681   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing))
   2682     setThreadBackgroundPriority();
   2683 
   2684   STUI->result = static_cast<ASTUnit *>(STUI->TU->TUData)->Save(STUI->FileName);
   2685 }
   2686 
   2687 int clang_saveTranslationUnit(CXTranslationUnit TU, const char *FileName,
   2688                               unsigned options) {
   2689   if (!TU)
   2690     return CXSaveError_InvalidTU;
   2691 
   2692   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   2693   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   2694 
   2695   SaveTranslationUnitInfo STUI = { TU, FileName, options, CXSaveError_None };
   2696 
   2697   if (!CXXUnit->getDiagnostics().hasUnrecoverableErrorOccurred() ||
   2698       getenv("LIBCLANG_NOTHREADS")) {
   2699     clang_saveTranslationUnit_Impl(&STUI);
   2700 
   2701     if (getenv("LIBCLANG_RESOURCE_USAGE"))
   2702       PrintLibclangResourceUsage(TU);
   2703 
   2704     return STUI.result;
   2705   }
   2706 
   2707   // We have an AST that has invalid nodes due to compiler errors.
   2708   // Use a crash recovery thread for protection.
   2709 
   2710   llvm::CrashRecoveryContext CRC;
   2711 
   2712   if (!RunSafely(CRC, clang_saveTranslationUnit_Impl, &STUI)) {
   2713     fprintf(stderr, "libclang: crash detected during AST saving: {\n");
   2714     fprintf(stderr, "  'filename' : '%s'\n", FileName);
   2715     fprintf(stderr, "  'options' : %d,\n", options);
   2716     fprintf(stderr, "}\n");
   2717 
   2718     return CXSaveError_Unknown;
   2719 
   2720   } else if (getenv("LIBCLANG_RESOURCE_USAGE")) {
   2721     PrintLibclangResourceUsage(TU);
   2722   }
   2723 
   2724   return STUI.result;
   2725 }
   2726 
   2727 void clang_disposeTranslationUnit(CXTranslationUnit CTUnit) {
   2728   if (CTUnit) {
   2729     // If the translation unit has been marked as unsafe to free, just discard
   2730     // it.
   2731     if (static_cast<ASTUnit *>(CTUnit->TUData)->isUnsafeToFree())
   2732       return;
   2733 
   2734     delete static_cast<ASTUnit *>(CTUnit->TUData);
   2735     disposeCXStringPool(CTUnit->StringPool);
   2736     delete static_cast<CXDiagnosticSetImpl *>(CTUnit->Diagnostics);
   2737     delete CTUnit;
   2738   }
   2739 }
   2740 
   2741 unsigned clang_defaultReparseOptions(CXTranslationUnit TU) {
   2742   return CXReparse_None;
   2743 }
   2744 
   2745 struct ReparseTranslationUnitInfo {
   2746   CXTranslationUnit TU;
   2747   unsigned num_unsaved_files;
   2748   struct CXUnsavedFile *unsaved_files;
   2749   unsigned options;
   2750   int result;
   2751 };
   2752 
   2753 static void clang_reparseTranslationUnit_Impl(void *UserData) {
   2754   ReparseTranslationUnitInfo *RTUI =
   2755     static_cast<ReparseTranslationUnitInfo*>(UserData);
   2756   CXTranslationUnit TU = RTUI->TU;
   2757 
   2758   // Reset the associated diagnostics.
   2759   delete static_cast<CXDiagnosticSetImpl*>(TU->Diagnostics);
   2760   TU->Diagnostics = 0;
   2761 
   2762   unsigned num_unsaved_files = RTUI->num_unsaved_files;
   2763   struct CXUnsavedFile *unsaved_files = RTUI->unsaved_files;
   2764   unsigned options = RTUI->options;
   2765   (void) options;
   2766   RTUI->result = 1;
   2767 
   2768   if (!TU)
   2769     return;
   2770 
   2771   CIndexer *CXXIdx = (CIndexer*)TU->CIdx;
   2772   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForEditing))
   2773     setThreadBackgroundPriority();
   2774 
   2775   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   2776   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   2777 
   2778   OwningPtr<std::vector<ASTUnit::RemappedFile> >
   2779     RemappedFiles(new std::vector<ASTUnit::RemappedFile>());
   2780 
   2781   // Recover resources if we crash before exiting this function.
   2782   llvm::CrashRecoveryContextCleanupRegistrar<
   2783     std::vector<ASTUnit::RemappedFile> > RemappedCleanup(RemappedFiles.get());
   2784 
   2785   for (unsigned I = 0; I != num_unsaved_files; ++I) {
   2786     StringRef Data(unsaved_files[I].Contents, unsaved_files[I].Length);
   2787     const llvm::MemoryBuffer *Buffer
   2788       = llvm::MemoryBuffer::getMemBufferCopy(Data, unsaved_files[I].Filename);
   2789     RemappedFiles->push_back(std::make_pair(unsaved_files[I].Filename,
   2790                                             Buffer));
   2791   }
   2792 
   2793   if (!CXXUnit->Reparse(RemappedFiles->size() ? &(*RemappedFiles)[0] : 0,
   2794                         RemappedFiles->size()))
   2795     RTUI->result = 0;
   2796 }
   2797 
   2798 int clang_reparseTranslationUnit(CXTranslationUnit TU,
   2799                                  unsigned num_unsaved_files,
   2800                                  struct CXUnsavedFile *unsaved_files,
   2801                                  unsigned options) {
   2802   ReparseTranslationUnitInfo RTUI = { TU, num_unsaved_files, unsaved_files,
   2803                                       options, 0 };
   2804 
   2805   if (getenv("LIBCLANG_NOTHREADS")) {
   2806     clang_reparseTranslationUnit_Impl(&RTUI);
   2807     return RTUI.result;
   2808   }
   2809 
   2810   llvm::CrashRecoveryContext CRC;
   2811 
   2812   if (!RunSafely(CRC, clang_reparseTranslationUnit_Impl, &RTUI)) {
   2813     fprintf(stderr, "libclang: crash detected during reparsing\n");
   2814     static_cast<ASTUnit *>(TU->TUData)->setUnsafeToFree(true);
   2815     return 1;
   2816   } else if (getenv("LIBCLANG_RESOURCE_USAGE"))
   2817     PrintLibclangResourceUsage(TU);
   2818 
   2819   return RTUI.result;
   2820 }
   2821 
   2822 
   2823 CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) {
   2824   if (!CTUnit)
   2825     return createCXString("");
   2826 
   2827   ASTUnit *CXXUnit = static_cast<ASTUnit *>(CTUnit->TUData);
   2828   return createCXString(CXXUnit->getOriginalSourceFileName(), true);
   2829 }
   2830 
   2831 CXCursor clang_getTranslationUnitCursor(CXTranslationUnit TU) {
   2832   CXCursor Result = { CXCursor_TranslationUnit, 0, { 0, 0, TU } };
   2833   return Result;
   2834 }
   2835 
   2836 } // end: extern "C"
   2837 
   2838 //===----------------------------------------------------------------------===//
   2839 // CXFile Operations.
   2840 //===----------------------------------------------------------------------===//
   2841 
   2842 extern "C" {
   2843 CXString clang_getFileName(CXFile SFile) {
   2844   if (!SFile)
   2845     return createCXString((const char*)NULL);
   2846 
   2847   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   2848   return createCXString(FEnt->getName());
   2849 }
   2850 
   2851 time_t clang_getFileTime(CXFile SFile) {
   2852   if (!SFile)
   2853     return 0;
   2854 
   2855   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   2856   return FEnt->getModificationTime();
   2857 }
   2858 
   2859 CXFile clang_getFile(CXTranslationUnit tu, const char *file_name) {
   2860   if (!tu)
   2861     return 0;
   2862 
   2863   ASTUnit *CXXUnit = static_cast<ASTUnit *>(tu->TUData);
   2864 
   2865   FileManager &FMgr = CXXUnit->getFileManager();
   2866   return const_cast<FileEntry *>(FMgr.getFile(file_name));
   2867 }
   2868 
   2869 unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file) {
   2870   if (!tu || !file)
   2871     return 0;
   2872 
   2873   ASTUnit *CXXUnit = static_cast<ASTUnit *>(tu->TUData);
   2874   FileEntry *FEnt = static_cast<FileEntry *>(file);
   2875   return CXXUnit->getPreprocessor().getHeaderSearchInfo()
   2876                                           .isFileMultipleIncludeGuarded(FEnt);
   2877 }
   2878 
   2879 } // end: extern "C"
   2880 
   2881 //===----------------------------------------------------------------------===//
   2882 // CXCursor Operations.
   2883 //===----------------------------------------------------------------------===//
   2884 
   2885 static Decl *getDeclFromExpr(Stmt *E) {
   2886   if (ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E))
   2887     return getDeclFromExpr(CE->getSubExpr());
   2888 
   2889   if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(E))
   2890     return RefExpr->getDecl();
   2891   if (MemberExpr *ME = dyn_cast<MemberExpr>(E))
   2892     return ME->getMemberDecl();
   2893   if (ObjCIvarRefExpr *RE = dyn_cast<ObjCIvarRefExpr>(E))
   2894     return RE->getDecl();
   2895   if (ObjCPropertyRefExpr *PRE = dyn_cast<ObjCPropertyRefExpr>(E)) {
   2896     if (PRE->isExplicitProperty())
   2897       return PRE->getExplicitProperty();
   2898     // It could be messaging both getter and setter as in:
   2899     // ++myobj.myprop;
   2900     // in which case prefer to associate the setter since it is less obvious
   2901     // from inspecting the source that the setter is going to get called.
   2902     if (PRE->isMessagingSetter())
   2903       return PRE->getImplicitPropertySetter();
   2904     return PRE->getImplicitPropertyGetter();
   2905   }
   2906   if (PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E))
   2907     return getDeclFromExpr(POE->getSyntacticForm());
   2908   if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E))
   2909     if (Expr *Src = OVE->getSourceExpr())
   2910       return getDeclFromExpr(Src);
   2911 
   2912   if (CallExpr *CE = dyn_cast<CallExpr>(E))
   2913     return getDeclFromExpr(CE->getCallee());
   2914   if (CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E))
   2915     if (!CE->isElidable())
   2916     return CE->getConstructor();
   2917   if (ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(E))
   2918     return OME->getMethodDecl();
   2919 
   2920   if (ObjCProtocolExpr *PE = dyn_cast<ObjCProtocolExpr>(E))
   2921     return PE->getProtocol();
   2922   if (SubstNonTypeTemplateParmPackExpr *NTTP
   2923                               = dyn_cast<SubstNonTypeTemplateParmPackExpr>(E))
   2924     return NTTP->getParameterPack();
   2925   if (SizeOfPackExpr *SizeOfPack = dyn_cast<SizeOfPackExpr>(E))
   2926     if (isa<NonTypeTemplateParmDecl>(SizeOfPack->getPack()) ||
   2927         isa<ParmVarDecl>(SizeOfPack->getPack()))
   2928       return SizeOfPack->getPack();
   2929 
   2930   return 0;
   2931 }
   2932 
   2933 static SourceLocation getLocationFromExpr(Expr *E) {
   2934   if (ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E))
   2935     return getLocationFromExpr(CE->getSubExpr());
   2936 
   2937   if (ObjCMessageExpr *Msg = dyn_cast<ObjCMessageExpr>(E))
   2938     return /*FIXME:*/Msg->getLeftLoc();
   2939   if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
   2940     return DRE->getLocation();
   2941   if (MemberExpr *Member = dyn_cast<MemberExpr>(E))
   2942     return Member->getMemberLoc();
   2943   if (ObjCIvarRefExpr *Ivar = dyn_cast<ObjCIvarRefExpr>(E))
   2944     return Ivar->getLocation();
   2945   if (SizeOfPackExpr *SizeOfPack = dyn_cast<SizeOfPackExpr>(E))
   2946     return SizeOfPack->getPackLoc();
   2947   if (ObjCPropertyRefExpr *PropRef = dyn_cast<ObjCPropertyRefExpr>(E))
   2948     return PropRef->getLocation();
   2949 
   2950   return E->getLocStart();
   2951 }
   2952 
   2953 extern "C" {
   2954 
   2955 unsigned clang_visitChildren(CXCursor parent,
   2956                              CXCursorVisitor visitor,
   2957                              CXClientData client_data) {
   2958   CursorVisitor CursorVis(getCursorTU(parent), visitor, client_data,
   2959                           /*VisitPreprocessorLast=*/false);
   2960   return CursorVis.VisitChildren(parent);
   2961 }
   2962 
   2963 #ifndef __has_feature
   2964 #define __has_feature(x) 0
   2965 #endif
   2966 #if __has_feature(blocks)
   2967 typedef enum CXChildVisitResult
   2968      (^CXCursorVisitorBlock)(CXCursor cursor, CXCursor parent);
   2969 
   2970 static enum CXChildVisitResult visitWithBlock(CXCursor cursor, CXCursor parent,
   2971     CXClientData client_data) {
   2972   CXCursorVisitorBlock block = (CXCursorVisitorBlock)client_data;
   2973   return block(cursor, parent);
   2974 }
   2975 #else
   2976 // If we are compiled with a compiler that doesn't have native blocks support,
   2977 // define and call the block manually, so the
   2978 typedef struct _CXChildVisitResult
   2979 {
   2980 	void *isa;
   2981 	int flags;
   2982 	int reserved;
   2983 	enum CXChildVisitResult(*invoke)(struct _CXChildVisitResult*, CXCursor,
   2984                                          CXCursor);
   2985 } *CXCursorVisitorBlock;
   2986 
   2987 static enum CXChildVisitResult visitWithBlock(CXCursor cursor, CXCursor parent,
   2988     CXClientData client_data) {
   2989   CXCursorVisitorBlock block = (CXCursorVisitorBlock)client_data;
   2990   return block->invoke(block, cursor, parent);
   2991 }
   2992 #endif
   2993 
   2994 
   2995 unsigned clang_visitChildrenWithBlock(CXCursor parent,
   2996                                       CXCursorVisitorBlock block) {
   2997   return clang_visitChildren(parent, visitWithBlock, block);
   2998 }
   2999 
   3000 static CXString getDeclSpelling(Decl *D) {
   3001   if (!D)
   3002     return createCXString("");
   3003 
   3004   NamedDecl *ND = dyn_cast<NamedDecl>(D);
   3005   if (!ND) {
   3006     if (ObjCPropertyImplDecl *PropImpl =dyn_cast<ObjCPropertyImplDecl>(D))
   3007       if (ObjCPropertyDecl *Property = PropImpl->getPropertyDecl())
   3008         return createCXString(Property->getIdentifier()->getName());
   3009 
   3010     return createCXString("");
   3011   }
   3012 
   3013   if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
   3014     return createCXString(OMD->getSelector().getAsString());
   3015 
   3016   if (ObjCCategoryImplDecl *CIMP = dyn_cast<ObjCCategoryImplDecl>(ND))
   3017     // No, this isn't the same as the code below. getIdentifier() is non-virtual
   3018     // and returns different names. NamedDecl returns the class name and
   3019     // ObjCCategoryImplDecl returns the category name.
   3020     return createCXString(CIMP->getIdentifier()->getNameStart());
   3021 
   3022   if (isa<UsingDirectiveDecl>(D))
   3023     return createCXString("");
   3024 
   3025   SmallString<1024> S;
   3026   llvm::raw_svector_ostream os(S);
   3027   ND->printName(os);
   3028 
   3029   return createCXString(os.str());
   3030 }
   3031 
   3032 CXString clang_getCursorSpelling(CXCursor C) {
   3033   if (clang_isTranslationUnit(C.kind))
   3034     return clang_getTranslationUnitSpelling(
   3035                             static_cast<CXTranslationUnit>(C.data[2]));
   3036 
   3037   if (clang_isReference(C.kind)) {
   3038     switch (C.kind) {
   3039     case CXCursor_ObjCSuperClassRef: {
   3040       ObjCInterfaceDecl *Super = getCursorObjCSuperClassRef(C).first;
   3041       return createCXString(Super->getIdentifier()->getNameStart());
   3042     }
   3043     case CXCursor_ObjCClassRef: {
   3044       ObjCInterfaceDecl *Class = getCursorObjCClassRef(C).first;
   3045       return createCXString(Class->getIdentifier()->getNameStart());
   3046     }
   3047     case CXCursor_ObjCProtocolRef: {
   3048       ObjCProtocolDecl *OID = getCursorObjCProtocolRef(C).first;
   3049       assert(OID && "getCursorSpelling(): Missing protocol decl");
   3050       return createCXString(OID->getIdentifier()->getNameStart());
   3051     }
   3052     case CXCursor_CXXBaseSpecifier: {
   3053       CXXBaseSpecifier *B = getCursorCXXBaseSpecifier(C);
   3054       return createCXString(B->getType().getAsString());
   3055     }
   3056     case CXCursor_TypeRef: {
   3057       TypeDecl *Type = getCursorTypeRef(C).first;
   3058       assert(Type && "Missing type decl");
   3059 
   3060       return createCXString(getCursorContext(C).getTypeDeclType(Type).
   3061                               getAsString());
   3062     }
   3063     case CXCursor_TemplateRef: {
   3064       TemplateDecl *Template = getCursorTemplateRef(C).first;
   3065       assert(Template && "Missing template decl");
   3066 
   3067       return createCXString(Template->getNameAsString());
   3068     }
   3069 
   3070     case CXCursor_NamespaceRef: {
   3071       NamedDecl *NS = getCursorNamespaceRef(C).first;
   3072       assert(NS && "Missing namespace decl");
   3073 
   3074       return createCXString(NS->getNameAsString());
   3075     }
   3076 
   3077     case CXCursor_MemberRef: {
   3078       FieldDecl *Field = getCursorMemberRef(C).first;
   3079       assert(Field && "Missing member decl");
   3080 
   3081       return createCXString(Field->getNameAsString());
   3082     }
   3083 
   3084     case CXCursor_LabelRef: {
   3085       LabelStmt *Label = getCursorLabelRef(C).first;
   3086       assert(Label && "Missing label");
   3087 
   3088       return createCXString(Label->getName());
   3089     }
   3090 
   3091     case CXCursor_OverloadedDeclRef: {
   3092       OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(C).first;
   3093       if (Decl *D = Storage.dyn_cast<Decl *>()) {
   3094         if (NamedDecl *ND = dyn_cast<NamedDecl>(D))
   3095           return createCXString(ND->getNameAsString());
   3096         return createCXString("");
   3097       }
   3098       if (OverloadExpr *E = Storage.dyn_cast<OverloadExpr *>())
   3099         return createCXString(E->getName().getAsString());
   3100       OverloadedTemplateStorage *Ovl
   3101         = Storage.get<OverloadedTemplateStorage*>();
   3102       if (Ovl->size() == 0)
   3103         return createCXString("");
   3104       return createCXString((*Ovl->begin())->getNameAsString());
   3105     }
   3106 
   3107     case CXCursor_VariableRef: {
   3108       VarDecl *Var = getCursorVariableRef(C).first;
   3109       assert(Var && "Missing variable decl");
   3110 
   3111       return createCXString(Var->getNameAsString());
   3112     }
   3113 
   3114     default:
   3115       return createCXString("<not implemented>");
   3116     }
   3117   }
   3118 
   3119   if (clang_isExpression(C.kind)) {
   3120     Decl *D = getDeclFromExpr(getCursorExpr(C));
   3121     if (D)
   3122       return getDeclSpelling(D);
   3123     return createCXString("");
   3124   }
   3125 
   3126   if (clang_isStatement(C.kind)) {
   3127     Stmt *S = getCursorStmt(C);
   3128     if (LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S))
   3129       return createCXString(Label->getName());
   3130 
   3131     return createCXString("");
   3132   }
   3133 
   3134   if (C.kind == CXCursor_MacroExpansion)
   3135     return createCXString(getCursorMacroExpansion(C)->getName()
   3136                                                            ->getNameStart());
   3137 
   3138   if (C.kind == CXCursor_MacroDefinition)
   3139     return createCXString(getCursorMacroDefinition(C)->getName()
   3140                                                            ->getNameStart());
   3141 
   3142   if (C.kind == CXCursor_InclusionDirective)
   3143     return createCXString(getCursorInclusionDirective(C)->getFileName());
   3144 
   3145   if (clang_isDeclaration(C.kind))
   3146     return getDeclSpelling(getCursorDecl(C));
   3147 
   3148   if (C.kind == CXCursor_AnnotateAttr) {
   3149     AnnotateAttr *AA = cast<AnnotateAttr>(cxcursor::getCursorAttr(C));
   3150     return createCXString(AA->getAnnotation());
   3151   }
   3152 
   3153   if (C.kind == CXCursor_AsmLabelAttr) {
   3154     AsmLabelAttr *AA = cast<AsmLabelAttr>(cxcursor::getCursorAttr(C));
   3155     return createCXString(AA->getLabel());
   3156   }
   3157 
   3158   return createCXString("");
   3159 }
   3160 
   3161 CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor C,
   3162                                                 unsigned pieceIndex,
   3163                                                 unsigned options) {
   3164   if (clang_Cursor_isNull(C))
   3165     return clang_getNullRange();
   3166 
   3167   ASTContext &Ctx = getCursorContext(C);
   3168 
   3169   if (clang_isStatement(C.kind)) {
   3170     Stmt *S = getCursorStmt(C);
   3171     if (LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S)) {
   3172       if (pieceIndex > 0)
   3173         return clang_getNullRange();
   3174       return cxloc::translateSourceRange(Ctx, Label->getIdentLoc());
   3175     }
   3176 
   3177     return clang_getNullRange();
   3178   }
   3179 
   3180   if (C.kind == CXCursor_ObjCMessageExpr) {
   3181     if (ObjCMessageExpr *
   3182           ME = dyn_cast_or_null<ObjCMessageExpr>(getCursorExpr(C))) {
   3183       if (pieceIndex >= ME->getNumSelectorLocs())
   3184         return clang_getNullRange();
   3185       return cxloc::translateSourceRange(Ctx, ME->getSelectorLoc(pieceIndex));
   3186     }
   3187   }
   3188 
   3189   if (C.kind == CXCursor_ObjCInstanceMethodDecl ||
   3190       C.kind == CXCursor_ObjCClassMethodDecl) {
   3191     if (ObjCMethodDecl *
   3192           MD = dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(C))) {
   3193       if (pieceIndex >= MD->getNumSelectorLocs())
   3194         return clang_getNullRange();
   3195       return cxloc::translateSourceRange(Ctx, MD->getSelectorLoc(pieceIndex));
   3196     }
   3197   }
   3198 
   3199   if (C.kind == CXCursor_ObjCCategoryDecl ||
   3200       C.kind == CXCursor_ObjCCategoryImplDecl) {
   3201     if (pieceIndex > 0)
   3202       return clang_getNullRange();
   3203     if (ObjCCategoryDecl *
   3204           CD = dyn_cast_or_null<ObjCCategoryDecl>(getCursorDecl(C)))
   3205       return cxloc::translateSourceRange(Ctx, CD->getCategoryNameLoc());
   3206     if (ObjCCategoryImplDecl *
   3207           CID = dyn_cast_or_null<ObjCCategoryImplDecl>(getCursorDecl(C)))
   3208       return cxloc::translateSourceRange(Ctx, CID->getCategoryNameLoc());
   3209   }
   3210 
   3211   // FIXME: A CXCursor_InclusionDirective should give the location of the
   3212   // filename, but we don't keep track of this.
   3213 
   3214   // FIXME: A CXCursor_AnnotateAttr should give the location of the annotation
   3215   // but we don't keep track of this.
   3216 
   3217   // FIXME: A CXCursor_AsmLabelAttr should give the location of the label
   3218   // but we don't keep track of this.
   3219 
   3220   // Default handling, give the location of the cursor.
   3221 
   3222   if (pieceIndex > 0)
   3223     return clang_getNullRange();
   3224 
   3225   CXSourceLocation CXLoc = clang_getCursorLocation(C);
   3226   SourceLocation Loc = cxloc::translateSourceLocation(CXLoc);
   3227   return cxloc::translateSourceRange(Ctx, Loc);
   3228 }
   3229 
   3230 CXString clang_getCursorDisplayName(CXCursor C) {
   3231   if (!clang_isDeclaration(C.kind))
   3232     return clang_getCursorSpelling(C);
   3233 
   3234   Decl *D = getCursorDecl(C);
   3235   if (!D)
   3236     return createCXString("");
   3237 
   3238   PrintingPolicy Policy = getCursorContext(C).getPrintingPolicy();
   3239   if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
   3240     D = FunTmpl->getTemplatedDecl();
   3241 
   3242   if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
   3243     SmallString<64> Str;
   3244     llvm::raw_svector_ostream OS(Str);
   3245     OS << *Function;
   3246     if (Function->getPrimaryTemplate())
   3247       OS << "<>";
   3248     OS << "(";
   3249     for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I) {
   3250       if (I)
   3251         OS << ", ";
   3252       OS << Function->getParamDecl(I)->getType().getAsString(Policy);
   3253     }
   3254 
   3255     if (Function->isVariadic()) {
   3256       if (Function->getNumParams())
   3257         OS << ", ";
   3258       OS << "...";
   3259     }
   3260     OS << ")";
   3261     return createCXString(OS.str());
   3262   }
   3263 
   3264   if (ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(D)) {
   3265     SmallString<64> Str;
   3266     llvm::raw_svector_ostream OS(Str);
   3267     OS << *ClassTemplate;
   3268     OS << "<";
   3269     TemplateParameterList *Params = ClassTemplate->getTemplateParameters();
   3270     for (unsigned I = 0, N = Params->size(); I != N; ++I) {
   3271       if (I)
   3272         OS << ", ";
   3273 
   3274       NamedDecl *Param = Params->getParam(I);
   3275       if (Param->getIdentifier()) {
   3276         OS << Param->getIdentifier()->getName();
   3277         continue;
   3278       }
   3279 
   3280       // There is no parameter name, which makes this tricky. Try to come up
   3281       // with something useful that isn't too long.
   3282       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
   3283         OS << (TTP->wasDeclaredWithTypename()? "typename" : "class");
   3284       else if (NonTypeTemplateParmDecl *NTTP
   3285                                     = dyn_cast<NonTypeTemplateParmDecl>(Param))
   3286         OS << NTTP->getType().getAsString(Policy);
   3287       else
   3288         OS << "template<...> class";
   3289     }
   3290 
   3291     OS << ">";
   3292     return createCXString(OS.str());
   3293   }
   3294 
   3295   if (ClassTemplateSpecializationDecl *ClassSpec
   3296                               = dyn_cast<ClassTemplateSpecializationDecl>(D)) {
   3297     // If the type was explicitly written, use that.
   3298     if (TypeSourceInfo *TSInfo = ClassSpec->getTypeAsWritten())
   3299       return createCXString(TSInfo->getType().getAsString(Policy));
   3300 
   3301     SmallString<64> Str;
   3302     llvm::raw_svector_ostream OS(Str);
   3303     OS << *ClassSpec;
   3304     OS << TemplateSpecializationType::PrintTemplateArgumentList(
   3305                                       ClassSpec->getTemplateArgs().data(),
   3306                                       ClassSpec->getTemplateArgs().size(),
   3307                                                                 Policy);
   3308     return createCXString(OS.str());
   3309   }
   3310 
   3311   return clang_getCursorSpelling(C);
   3312 }
   3313 
   3314 CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
   3315   switch (Kind) {
   3316   case CXCursor_FunctionDecl:
   3317       return createCXString("FunctionDecl");
   3318   case CXCursor_TypedefDecl:
   3319       return createCXString("TypedefDecl");
   3320   case CXCursor_EnumDecl:
   3321       return createCXString("EnumDecl");
   3322   case CXCursor_EnumConstantDecl:
   3323       return createCXString("EnumConstantDecl");
   3324   case CXCursor_StructDecl:
   3325       return createCXString("StructDecl");
   3326   case CXCursor_UnionDecl:
   3327       return createCXString("UnionDecl");
   3328   case CXCursor_ClassDecl:
   3329       return createCXString("ClassDecl");
   3330   case CXCursor_FieldDecl:
   3331       return createCXString("FieldDecl");
   3332   case CXCursor_VarDecl:
   3333       return createCXString("VarDecl");
   3334   case CXCursor_ParmDecl:
   3335       return createCXString("ParmDecl");
   3336   case CXCursor_ObjCInterfaceDecl:
   3337       return createCXString("ObjCInterfaceDecl");
   3338   case CXCursor_ObjCCategoryDecl:
   3339       return createCXString("ObjCCategoryDecl");
   3340   case CXCursor_ObjCProtocolDecl:
   3341       return createCXString("ObjCProtocolDecl");
   3342   case CXCursor_ObjCPropertyDecl:
   3343       return createCXString("ObjCPropertyDecl");
   3344   case CXCursor_ObjCIvarDecl:
   3345       return createCXString("ObjCIvarDecl");
   3346   case CXCursor_ObjCInstanceMethodDecl:
   3347       return createCXString("ObjCInstanceMethodDecl");
   3348   case CXCursor_ObjCClassMethodDecl:
   3349       return createCXString("ObjCClassMethodDecl");
   3350   case CXCursor_ObjCImplementationDecl:
   3351       return createCXString("ObjCImplementationDecl");
   3352   case CXCursor_ObjCCategoryImplDecl:
   3353       return createCXString("ObjCCategoryImplDecl");
   3354   case CXCursor_CXXMethod:
   3355       return createCXString("CXXMethod");
   3356   case CXCursor_UnexposedDecl:
   3357       return createCXString("UnexposedDecl");
   3358   case CXCursor_ObjCSuperClassRef:
   3359       return createCXString("ObjCSuperClassRef");
   3360   case CXCursor_ObjCProtocolRef:
   3361       return createCXString("ObjCProtocolRef");
   3362   case CXCursor_ObjCClassRef:
   3363       return createCXString("ObjCClassRef");
   3364   case CXCursor_TypeRef:
   3365       return createCXString("TypeRef");
   3366   case CXCursor_TemplateRef:
   3367       return createCXString("TemplateRef");
   3368   case CXCursor_NamespaceRef:
   3369     return createCXString("NamespaceRef");
   3370   case CXCursor_MemberRef:
   3371     return createCXString("MemberRef");
   3372   case CXCursor_LabelRef:
   3373     return createCXString("LabelRef");
   3374   case CXCursor_OverloadedDeclRef:
   3375     return createCXString("OverloadedDeclRef");
   3376   case CXCursor_VariableRef:
   3377     return createCXString("VariableRef");
   3378   case CXCursor_IntegerLiteral:
   3379       return createCXString("IntegerLiteral");
   3380   case CXCursor_FloatingLiteral:
   3381       return createCXString("FloatingLiteral");
   3382   case CXCursor_ImaginaryLiteral:
   3383       return createCXString("ImaginaryLiteral");
   3384   case CXCursor_StringLiteral:
   3385       return createCXString("StringLiteral");
   3386   case CXCursor_CharacterLiteral:
   3387       return createCXString("CharacterLiteral");
   3388   case CXCursor_ParenExpr:
   3389       return createCXString("ParenExpr");
   3390   case CXCursor_UnaryOperator:
   3391       return createCXString("UnaryOperator");
   3392   case CXCursor_ArraySubscriptExpr:
   3393       return createCXString("ArraySubscriptExpr");
   3394   case CXCursor_BinaryOperator:
   3395       return createCXString("BinaryOperator");
   3396   case CXCursor_CompoundAssignOperator:
   3397       return createCXString("CompoundAssignOperator");
   3398   case CXCursor_ConditionalOperator:
   3399       return createCXString("ConditionalOperator");
   3400   case CXCursor_CStyleCastExpr:
   3401       return createCXString("CStyleCastExpr");
   3402   case CXCursor_CompoundLiteralExpr:
   3403       return createCXString("CompoundLiteralExpr");
   3404   case CXCursor_InitListExpr:
   3405       return createCXString("InitListExpr");
   3406   case CXCursor_AddrLabelExpr:
   3407       return createCXString("AddrLabelExpr");
   3408   case CXCursor_StmtExpr:
   3409       return createCXString("StmtExpr");
   3410   case CXCursor_GenericSelectionExpr:
   3411       return createCXString("GenericSelectionExpr");
   3412   case CXCursor_GNUNullExpr:
   3413       return createCXString("GNUNullExpr");
   3414   case CXCursor_CXXStaticCastExpr:
   3415       return createCXString("CXXStaticCastExpr");
   3416   case CXCursor_CXXDynamicCastExpr:
   3417       return createCXString("CXXDynamicCastExpr");
   3418   case CXCursor_CXXReinterpretCastExpr:
   3419       return createCXString("CXXReinterpretCastExpr");
   3420   case CXCursor_CXXConstCastExpr:
   3421       return createCXString("CXXConstCastExpr");
   3422   case CXCursor_CXXFunctionalCastExpr:
   3423       return createCXString("CXXFunctionalCastExpr");
   3424   case CXCursor_CXXTypeidExpr:
   3425       return createCXString("CXXTypeidExpr");
   3426   case CXCursor_CXXBoolLiteralExpr:
   3427       return createCXString("CXXBoolLiteralExpr");
   3428   case CXCursor_CXXNullPtrLiteralExpr:
   3429       return createCXString("CXXNullPtrLiteralExpr");
   3430   case CXCursor_CXXThisExpr:
   3431       return createCXString("CXXThisExpr");
   3432   case CXCursor_CXXThrowExpr:
   3433       return createCXString("CXXThrowExpr");
   3434   case CXCursor_CXXNewExpr:
   3435       return createCXString("CXXNewExpr");
   3436   case CXCursor_CXXDeleteExpr:
   3437       return createCXString("CXXDeleteExpr");
   3438   case CXCursor_UnaryExpr:
   3439       return createCXString("UnaryExpr");
   3440   case CXCursor_ObjCStringLiteral:
   3441       return createCXString("ObjCStringLiteral");
   3442   case CXCursor_ObjCBoolLiteralExpr:
   3443       return createCXString("ObjCBoolLiteralExpr");
   3444   case CXCursor_ObjCEncodeExpr:
   3445       return createCXString("ObjCEncodeExpr");
   3446   case CXCursor_ObjCSelectorExpr:
   3447       return createCXString("ObjCSelectorExpr");
   3448   case CXCursor_ObjCProtocolExpr:
   3449       return createCXString("ObjCProtocolExpr");
   3450   case CXCursor_ObjCBridgedCastExpr:
   3451       return createCXString("ObjCBridgedCastExpr");
   3452   case CXCursor_BlockExpr:
   3453       return createCXString("BlockExpr");
   3454   case CXCursor_PackExpansionExpr:
   3455       return createCXString("PackExpansionExpr");
   3456   case CXCursor_SizeOfPackExpr:
   3457       return createCXString("SizeOfPackExpr");
   3458   case CXCursor_LambdaExpr:
   3459     return createCXString("LambdaExpr");
   3460   case CXCursor_UnexposedExpr:
   3461       return createCXString("UnexposedExpr");
   3462   case CXCursor_DeclRefExpr:
   3463       return createCXString("DeclRefExpr");
   3464   case CXCursor_MemberRefExpr:
   3465       return createCXString("MemberRefExpr");
   3466   case CXCursor_CallExpr:
   3467       return createCXString("CallExpr");
   3468   case CXCursor_ObjCMessageExpr:
   3469       return createCXString("ObjCMessageExpr");
   3470   case CXCursor_UnexposedStmt:
   3471       return createCXString("UnexposedStmt");
   3472   case CXCursor_DeclStmt:
   3473       return createCXString("DeclStmt");
   3474   case CXCursor_LabelStmt:
   3475       return createCXString("LabelStmt");
   3476   case CXCursor_CompoundStmt:
   3477       return createCXString("CompoundStmt");
   3478   case CXCursor_CaseStmt:
   3479       return createCXString("CaseStmt");
   3480   case CXCursor_DefaultStmt:
   3481       return createCXString("DefaultStmt");
   3482   case CXCursor_IfStmt:
   3483       return createCXString("IfStmt");
   3484   case CXCursor_SwitchStmt:
   3485       return createCXString("SwitchStmt");
   3486   case CXCursor_WhileStmt:
   3487       return createCXString("WhileStmt");
   3488   case CXCursor_DoStmt:
   3489       return createCXString("DoStmt");
   3490   case CXCursor_ForStmt:
   3491       return createCXString("ForStmt");
   3492   case CXCursor_GotoStmt:
   3493       return createCXString("GotoStmt");
   3494   case CXCursor_IndirectGotoStmt:
   3495       return createCXString("IndirectGotoStmt");
   3496   case CXCursor_ContinueStmt:
   3497       return createCXString("ContinueStmt");
   3498   case CXCursor_BreakStmt:
   3499       return createCXString("BreakStmt");
   3500   case CXCursor_ReturnStmt:
   3501       return createCXString("ReturnStmt");
   3502   case CXCursor_AsmStmt:
   3503       return createCXString("AsmStmt");
   3504   case CXCursor_ObjCAtTryStmt:
   3505       return createCXString("ObjCAtTryStmt");
   3506   case CXCursor_ObjCAtCatchStmt:
   3507       return createCXString("ObjCAtCatchStmt");
   3508   case CXCursor_ObjCAtFinallyStmt:
   3509       return createCXString("ObjCAtFinallyStmt");
   3510   case CXCursor_ObjCAtThrowStmt:
   3511       return createCXString("ObjCAtThrowStmt");
   3512   case CXCursor_ObjCAtSynchronizedStmt:
   3513       return createCXString("ObjCAtSynchronizedStmt");
   3514   case CXCursor_ObjCAutoreleasePoolStmt:
   3515       return createCXString("ObjCAutoreleasePoolStmt");
   3516   case CXCursor_ObjCForCollectionStmt:
   3517       return createCXString("ObjCForCollectionStmt");
   3518   case CXCursor_CXXCatchStmt:
   3519       return createCXString("CXXCatchStmt");
   3520   case CXCursor_CXXTryStmt:
   3521       return createCXString("CXXTryStmt");
   3522   case CXCursor_CXXForRangeStmt:
   3523       return createCXString("CXXForRangeStmt");
   3524   case CXCursor_SEHTryStmt:
   3525       return createCXString("SEHTryStmt");
   3526   case CXCursor_SEHExceptStmt:
   3527       return createCXString("SEHExceptStmt");
   3528   case CXCursor_SEHFinallyStmt:
   3529       return createCXString("SEHFinallyStmt");
   3530   case CXCursor_NullStmt:
   3531       return createCXString("NullStmt");
   3532   case CXCursor_InvalidFile:
   3533       return createCXString("InvalidFile");
   3534   case CXCursor_InvalidCode:
   3535     return createCXString("InvalidCode");
   3536   case CXCursor_NoDeclFound:
   3537       return createCXString("NoDeclFound");
   3538   case CXCursor_NotImplemented:
   3539       return createCXString("NotImplemented");
   3540   case CXCursor_TranslationUnit:
   3541       return createCXString("TranslationUnit");
   3542   case CXCursor_UnexposedAttr:
   3543       return createCXString("UnexposedAttr");
   3544   case CXCursor_IBActionAttr:
   3545       return createCXString("attribute(ibaction)");
   3546   case CXCursor_IBOutletAttr:
   3547      return createCXString("attribute(iboutlet)");
   3548   case CXCursor_IBOutletCollectionAttr:
   3549       return createCXString("attribute(iboutletcollection)");
   3550   case CXCursor_CXXFinalAttr:
   3551       return createCXString("attribute(final)");
   3552   case CXCursor_CXXOverrideAttr:
   3553       return createCXString("attribute(override)");
   3554   case CXCursor_AnnotateAttr:
   3555     return createCXString("attribute(annotate)");
   3556   case CXCursor_AsmLabelAttr:
   3557     return createCXString("asm label");
   3558   case CXCursor_PreprocessingDirective:
   3559     return createCXString("preprocessing directive");
   3560   case CXCursor_MacroDefinition:
   3561     return createCXString("macro definition");
   3562   case CXCursor_MacroExpansion:
   3563     return createCXString("macro expansion");
   3564   case CXCursor_InclusionDirective:
   3565     return createCXString("inclusion directive");
   3566   case CXCursor_Namespace:
   3567     return createCXString("Namespace");
   3568   case CXCursor_LinkageSpec:
   3569     return createCXString("LinkageSpec");
   3570   case CXCursor_CXXBaseSpecifier:
   3571     return createCXString("C++ base class specifier");
   3572   case CXCursor_Constructor:
   3573     return createCXString("CXXConstructor");
   3574   case CXCursor_Destructor:
   3575     return createCXString("CXXDestructor");
   3576   case CXCursor_ConversionFunction:
   3577     return createCXString("CXXConversion");
   3578   case CXCursor_TemplateTypeParameter:
   3579     return createCXString("TemplateTypeParameter");
   3580   case CXCursor_NonTypeTemplateParameter:
   3581     return createCXString("NonTypeTemplateParameter");
   3582   case CXCursor_TemplateTemplateParameter:
   3583     return createCXString("TemplateTemplateParameter");
   3584   case CXCursor_FunctionTemplate:
   3585     return createCXString("FunctionTemplate");
   3586   case CXCursor_ClassTemplate:
   3587     return createCXString("ClassTemplate");
   3588   case CXCursor_ClassTemplatePartialSpecialization:
   3589     return createCXString("ClassTemplatePartialSpecialization");
   3590   case CXCursor_NamespaceAlias:
   3591     return createCXString("NamespaceAlias");
   3592   case CXCursor_UsingDirective:
   3593     return createCXString("UsingDirective");
   3594   case CXCursor_UsingDeclaration:
   3595     return createCXString("UsingDeclaration");
   3596   case CXCursor_TypeAliasDecl:
   3597     return createCXString("TypeAliasDecl");
   3598   case CXCursor_ObjCSynthesizeDecl:
   3599     return createCXString("ObjCSynthesizeDecl");
   3600   case CXCursor_ObjCDynamicDecl:
   3601     return createCXString("ObjCDynamicDecl");
   3602   case CXCursor_CXXAccessSpecifier:
   3603     return createCXString("CXXAccessSpecifier");
   3604   }
   3605 
   3606   llvm_unreachable("Unhandled CXCursorKind");
   3607 }
   3608 
   3609 struct GetCursorData {
   3610   SourceLocation TokenBeginLoc;
   3611   bool PointsAtMacroArgExpansion;
   3612   CXCursor &BestCursor;
   3613 
   3614   GetCursorData(SourceManager &SM,
   3615                 SourceLocation tokenBegin, CXCursor &outputCursor)
   3616     : TokenBeginLoc(tokenBegin), BestCursor(outputCursor) {
   3617     PointsAtMacroArgExpansion = SM.isMacroArgExpansion(tokenBegin);
   3618   }
   3619 };
   3620 
   3621 static enum CXChildVisitResult GetCursorVisitor(CXCursor cursor,
   3622                                                 CXCursor parent,
   3623                                                 CXClientData client_data) {
   3624   GetCursorData *Data = static_cast<GetCursorData *>(client_data);
   3625   CXCursor *BestCursor = &Data->BestCursor;
   3626 
   3627   // If we point inside a macro argument we should provide info of what the
   3628   // token is so use the actual cursor, don't replace it with a macro expansion
   3629   // cursor.
   3630   if (cursor.kind == CXCursor_MacroExpansion && Data->PointsAtMacroArgExpansion)
   3631     return CXChildVisit_Recurse;
   3632 
   3633   if (clang_isDeclaration(cursor.kind)) {
   3634     // Avoid having the implicit methods override the property decls.
   3635     if (ObjCMethodDecl *MD
   3636           = dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(cursor))) {
   3637       if (MD->isImplicit())
   3638         return CXChildVisit_Break;
   3639 
   3640     } else if (ObjCInterfaceDecl *ID
   3641                  = dyn_cast_or_null<ObjCInterfaceDecl>(getCursorDecl(cursor))) {
   3642       // Check that when we have multiple @class references in the same line,
   3643       // that later ones do not override the previous ones.
   3644       // If we have:
   3645       // @class Foo, Bar;
   3646       // source ranges for both start at '@', so 'Bar' will end up overriding
   3647       // 'Foo' even though the cursor location was at 'Foo'.
   3648       if (BestCursor->kind == CXCursor_ObjCInterfaceDecl ||
   3649           BestCursor->kind == CXCursor_ObjCClassRef)
   3650         if (ObjCInterfaceDecl *PrevID
   3651              = dyn_cast_or_null<ObjCInterfaceDecl>(getCursorDecl(*BestCursor))){
   3652          if (PrevID != ID &&
   3653              !PrevID->isThisDeclarationADefinition() &&
   3654              !ID->isThisDeclarationADefinition())
   3655            return CXChildVisit_Break;
   3656         }
   3657     }
   3658   }
   3659 
   3660   if (clang_isExpression(cursor.kind) &&
   3661       clang_isDeclaration(BestCursor->kind)) {
   3662     if (Decl *D = getCursorDecl(*BestCursor)) {
   3663       // Avoid having the cursor of an expression replace the declaration cursor
   3664       // when the expression source range overlaps the declaration range.
   3665       // This can happen for C++ constructor expressions whose range generally
   3666       // include the variable declaration, e.g.:
   3667       //  MyCXXClass foo; // Make sure pointing at 'foo' returns a VarDecl cursor.
   3668       if (D->getLocation().isValid() && Data->TokenBeginLoc.isValid() &&
   3669           D->getLocation() == Data->TokenBeginLoc)
   3670         return CXChildVisit_Break;
   3671     }
   3672   }
   3673 
   3674   // If our current best cursor is the construction of a temporary object,
   3675   // don't replace that cursor with a type reference, because we want
   3676   // clang_getCursor() to point at the constructor.
   3677   if (clang_isExpression(BestCursor->kind) &&
   3678       isa<CXXTemporaryObjectExpr>(getCursorExpr(*BestCursor)) &&
   3679       cursor.kind == CXCursor_TypeRef) {
   3680     // Keep the cursor pointing at CXXTemporaryObjectExpr but also mark it
   3681     // as having the actual point on the type reference.
   3682     *BestCursor = getTypeRefedCallExprCursor(*BestCursor);
   3683     return CXChildVisit_Recurse;
   3684   }
   3685 
   3686   *BestCursor = cursor;
   3687   return CXChildVisit_Recurse;
   3688 }
   3689 
   3690 CXCursor clang_getCursor(CXTranslationUnit TU, CXSourceLocation Loc) {
   3691   if (!TU)
   3692     return clang_getNullCursor();
   3693 
   3694   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   3695   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   3696 
   3697   SourceLocation SLoc = cxloc::translateSourceLocation(Loc);
   3698   CXCursor Result = cxcursor::getCursor(TU, SLoc);
   3699 
   3700   bool Logging = getenv("LIBCLANG_LOGGING");
   3701   if (Logging) {
   3702     CXFile SearchFile;
   3703     unsigned SearchLine, SearchColumn;
   3704     CXFile ResultFile;
   3705     unsigned ResultLine, ResultColumn;
   3706     CXString SearchFileName, ResultFileName, KindSpelling, USR;
   3707     const char *IsDef = clang_isCursorDefinition(Result)? " (Definition)" : "";
   3708     CXSourceLocation ResultLoc = clang_getCursorLocation(Result);
   3709 
   3710     clang_getExpansionLocation(Loc, &SearchFile, &SearchLine, &SearchColumn, 0);
   3711     clang_getExpansionLocation(ResultLoc, &ResultFile, &ResultLine,
   3712                                &ResultColumn, 0);
   3713     SearchFileName = clang_getFileName(SearchFile);
   3714     ResultFileName = clang_getFileName(ResultFile);
   3715     KindSpelling = clang_getCursorKindSpelling(Result.kind);
   3716     USR = clang_getCursorUSR(Result);
   3717     fprintf(stderr, "clang_getCursor(%s:%d:%d) = %s(%s:%d:%d):%s%s\n",
   3718             clang_getCString(SearchFileName), SearchLine, SearchColumn,
   3719             clang_getCString(KindSpelling),
   3720             clang_getCString(ResultFileName), ResultLine, ResultColumn,
   3721             clang_getCString(USR), IsDef);
   3722     clang_disposeString(SearchFileName);
   3723     clang_disposeString(ResultFileName);
   3724     clang_disposeString(KindSpelling);
   3725     clang_disposeString(USR);
   3726 
   3727     CXCursor Definition = clang_getCursorDefinition(Result);
   3728     if (!clang_equalCursors(Definition, clang_getNullCursor())) {
   3729       CXSourceLocation DefinitionLoc = clang_getCursorLocation(Definition);
   3730       CXString DefinitionKindSpelling
   3731                                 = clang_getCursorKindSpelling(Definition.kind);
   3732       CXFile DefinitionFile;
   3733       unsigned DefinitionLine, DefinitionColumn;
   3734       clang_getExpansionLocation(DefinitionLoc, &DefinitionFile,
   3735                                  &DefinitionLine, &DefinitionColumn, 0);
   3736       CXString DefinitionFileName = clang_getFileName(DefinitionFile);
   3737       fprintf(stderr, "  -> %s(%s:%d:%d)\n",
   3738               clang_getCString(DefinitionKindSpelling),
   3739               clang_getCString(DefinitionFileName),
   3740               DefinitionLine, DefinitionColumn);
   3741       clang_disposeString(DefinitionFileName);
   3742       clang_disposeString(DefinitionKindSpelling);
   3743     }
   3744   }
   3745 
   3746   return Result;
   3747 }
   3748 
   3749 CXCursor clang_getNullCursor(void) {
   3750   return MakeCXCursorInvalid(CXCursor_InvalidFile);
   3751 }
   3752 
   3753 unsigned clang_equalCursors(CXCursor X, CXCursor Y) {
   3754   return X == Y;
   3755 }
   3756 
   3757 unsigned clang_hashCursor(CXCursor C) {
   3758   unsigned Index = 0;
   3759   if (clang_isExpression(C.kind) || clang_isStatement(C.kind))
   3760     Index = 1;
   3761 
   3762   return llvm::DenseMapInfo<std::pair<unsigned, void*> >::getHashValue(
   3763                                         std::make_pair(C.kind, C.data[Index]));
   3764 }
   3765 
   3766 unsigned clang_isInvalid(enum CXCursorKind K) {
   3767   return K >= CXCursor_FirstInvalid && K <= CXCursor_LastInvalid;
   3768 }
   3769 
   3770 unsigned clang_isDeclaration(enum CXCursorKind K) {
   3771   return K >= CXCursor_FirstDecl && K <= CXCursor_LastDecl;
   3772 }
   3773 
   3774 unsigned clang_isReference(enum CXCursorKind K) {
   3775   return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
   3776 }
   3777 
   3778 unsigned clang_isExpression(enum CXCursorKind K) {
   3779   return K >= CXCursor_FirstExpr && K <= CXCursor_LastExpr;
   3780 }
   3781 
   3782 unsigned clang_isStatement(enum CXCursorKind K) {
   3783   return K >= CXCursor_FirstStmt && K <= CXCursor_LastStmt;
   3784 }
   3785 
   3786 unsigned clang_isAttribute(enum CXCursorKind K) {
   3787     return K >= CXCursor_FirstAttr && K <= CXCursor_LastAttr;
   3788 }
   3789 
   3790 unsigned clang_isTranslationUnit(enum CXCursorKind K) {
   3791   return K == CXCursor_TranslationUnit;
   3792 }
   3793 
   3794 unsigned clang_isPreprocessing(enum CXCursorKind K) {
   3795   return K >= CXCursor_FirstPreprocessing && K <= CXCursor_LastPreprocessing;
   3796 }
   3797 
   3798 unsigned clang_isUnexposed(enum CXCursorKind K) {
   3799   switch (K) {
   3800     case CXCursor_UnexposedDecl:
   3801     case CXCursor_UnexposedExpr:
   3802     case CXCursor_UnexposedStmt:
   3803     case CXCursor_UnexposedAttr:
   3804       return true;
   3805     default:
   3806       return false;
   3807   }
   3808 }
   3809 
   3810 CXCursorKind clang_getCursorKind(CXCursor C) {
   3811   return C.kind;
   3812 }
   3813 
   3814 CXSourceLocation clang_getCursorLocation(CXCursor C) {
   3815   if (clang_isReference(C.kind)) {
   3816     switch (C.kind) {
   3817     case CXCursor_ObjCSuperClassRef: {
   3818       std::pair<ObjCInterfaceDecl *, SourceLocation> P
   3819         = getCursorObjCSuperClassRef(C);
   3820       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3821     }
   3822 
   3823     case CXCursor_ObjCProtocolRef: {
   3824       std::pair<ObjCProtocolDecl *, SourceLocation> P
   3825         = getCursorObjCProtocolRef(C);
   3826       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3827     }
   3828 
   3829     case CXCursor_ObjCClassRef: {
   3830       std::pair<ObjCInterfaceDecl *, SourceLocation> P
   3831         = getCursorObjCClassRef(C);
   3832       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3833     }
   3834 
   3835     case CXCursor_TypeRef: {
   3836       std::pair<TypeDecl *, SourceLocation> P = getCursorTypeRef(C);
   3837       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3838     }
   3839 
   3840     case CXCursor_TemplateRef: {
   3841       std::pair<TemplateDecl *, SourceLocation> P = getCursorTemplateRef(C);
   3842       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3843     }
   3844 
   3845     case CXCursor_NamespaceRef: {
   3846       std::pair<NamedDecl *, SourceLocation> P = getCursorNamespaceRef(C);
   3847       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3848     }
   3849 
   3850     case CXCursor_MemberRef: {
   3851       std::pair<FieldDecl *, SourceLocation> P = getCursorMemberRef(C);
   3852       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3853     }
   3854 
   3855     case CXCursor_VariableRef: {
   3856       std::pair<VarDecl *, SourceLocation> P = getCursorVariableRef(C);
   3857       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   3858     }
   3859 
   3860     case CXCursor_CXXBaseSpecifier: {
   3861       CXXBaseSpecifier *BaseSpec = getCursorCXXBaseSpecifier(C);
   3862       if (!BaseSpec)
   3863         return clang_getNullLocation();
   3864 
   3865       if (TypeSourceInfo *TSInfo = BaseSpec->getTypeSourceInfo())
   3866         return cxloc::translateSourceLocation(getCursorContext(C),
   3867                                             TSInfo->getTypeLoc().getBeginLoc());
   3868 
   3869       return cxloc::translateSourceLocation(getCursorContext(C),
   3870                                         BaseSpec->getLocStart());
   3871     }
   3872 
   3873     case CXCursor_LabelRef: {
   3874       std::pair<LabelStmt *, SourceLocation> P = getCursorLabelRef(C);
   3875       return cxloc::translateSourceLocation(getCursorContext(C), P.second);
   3876     }
   3877 
   3878     case CXCursor_OverloadedDeclRef:
   3879       return cxloc::translateSourceLocation(getCursorContext(C),
   3880                                           getCursorOverloadedDeclRef(C).second);
   3881 
   3882     default:
   3883       // FIXME: Need a way to enumerate all non-reference cases.
   3884       llvm_unreachable("Missed a reference kind");
   3885     }
   3886   }
   3887 
   3888   if (clang_isExpression(C.kind))
   3889     return cxloc::translateSourceLocation(getCursorContext(C),
   3890                                    getLocationFromExpr(getCursorExpr(C)));
   3891 
   3892   if (clang_isStatement(C.kind))
   3893     return cxloc::translateSourceLocation(getCursorContext(C),
   3894                                           getCursorStmt(C)->getLocStart());
   3895 
   3896   if (C.kind == CXCursor_PreprocessingDirective) {
   3897     SourceLocation L = cxcursor::getCursorPreprocessingDirective(C).getBegin();
   3898     return cxloc::translateSourceLocation(getCursorContext(C), L);
   3899   }
   3900 
   3901   if (C.kind == CXCursor_MacroExpansion) {
   3902     SourceLocation L
   3903       = cxcursor::getCursorMacroExpansion(C)->getSourceRange().getBegin();
   3904     return cxloc::translateSourceLocation(getCursorContext(C), L);
   3905   }
   3906 
   3907   if (C.kind == CXCursor_MacroDefinition) {
   3908     SourceLocation L = cxcursor::getCursorMacroDefinition(C)->getLocation();
   3909     return cxloc::translateSourceLocation(getCursorContext(C), L);
   3910   }
   3911 
   3912   if (C.kind == CXCursor_InclusionDirective) {
   3913     SourceLocation L
   3914       = cxcursor::getCursorInclusionDirective(C)->getSourceRange().getBegin();
   3915     return cxloc::translateSourceLocation(getCursorContext(C), L);
   3916   }
   3917 
   3918   if (C.kind < CXCursor_FirstDecl || C.kind > CXCursor_LastDecl)
   3919     return clang_getNullLocation();
   3920 
   3921   Decl *D = getCursorDecl(C);
   3922   if (!D)
   3923     return clang_getNullLocation();
   3924 
   3925   SourceLocation Loc = D->getLocation();
   3926   // FIXME: Multiple variables declared in a single declaration
   3927   // currently lack the information needed to correctly determine their
   3928   // ranges when accounting for the type-specifier.  We use context
   3929   // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   3930   // and if so, whether it is the first decl.
   3931   if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
   3932     if (!cxcursor::isFirstInDeclGroup(C))
   3933       Loc = VD->getLocation();
   3934   }
   3935 
   3936   // For ObjC methods, give the start location of the method name.
   3937   if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
   3938     Loc = MD->getSelectorStartLoc();
   3939 
   3940   return cxloc::translateSourceLocation(getCursorContext(C), Loc);
   3941 }
   3942 
   3943 } // end extern "C"
   3944 
   3945 CXCursor cxcursor::getCursor(CXTranslationUnit TU, SourceLocation SLoc) {
   3946   assert(TU);
   3947 
   3948   // Guard against an invalid SourceLocation, or we may assert in one
   3949   // of the following calls.
   3950   if (SLoc.isInvalid())
   3951     return clang_getNullCursor();
   3952 
   3953   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   3954 
   3955   // Translate the given source location to make it point at the beginning of
   3956   // the token under the cursor.
   3957   SLoc = Lexer::GetBeginningOfToken(SLoc, CXXUnit->getSourceManager(),
   3958                                     CXXUnit->getASTContext().getLangOpts());
   3959 
   3960   CXCursor Result = MakeCXCursorInvalid(CXCursor_NoDeclFound);
   3961   if (SLoc.isValid()) {
   3962     GetCursorData ResultData(CXXUnit->getSourceManager(), SLoc, Result);
   3963     CursorVisitor CursorVis(TU, GetCursorVisitor, &ResultData,
   3964                             /*VisitPreprocessorLast=*/true,
   3965                             /*VisitIncludedEntities=*/false,
   3966                             SourceLocation(SLoc));
   3967     CursorVis.visitFileRegion();
   3968   }
   3969 
   3970   return Result;
   3971 }
   3972 
   3973 static SourceRange getRawCursorExtent(CXCursor C) {
   3974   if (clang_isReference(C.kind)) {
   3975     switch (C.kind) {
   3976     case CXCursor_ObjCSuperClassRef:
   3977       return  getCursorObjCSuperClassRef(C).second;
   3978 
   3979     case CXCursor_ObjCProtocolRef:
   3980       return getCursorObjCProtocolRef(C).second;
   3981 
   3982     case CXCursor_ObjCClassRef:
   3983       return getCursorObjCClassRef(C).second;
   3984 
   3985     case CXCursor_TypeRef:
   3986       return getCursorTypeRef(C).second;
   3987 
   3988     case CXCursor_TemplateRef:
   3989       return getCursorTemplateRef(C).second;
   3990 
   3991     case CXCursor_NamespaceRef:
   3992       return getCursorNamespaceRef(C).second;
   3993 
   3994     case CXCursor_MemberRef:
   3995       return getCursorMemberRef(C).second;
   3996 
   3997     case CXCursor_CXXBaseSpecifier:
   3998       return getCursorCXXBaseSpecifier(C)->getSourceRange();
   3999 
   4000     case CXCursor_LabelRef:
   4001       return getCursorLabelRef(C).second;
   4002 
   4003     case CXCursor_OverloadedDeclRef:
   4004       return getCursorOverloadedDeclRef(C).second;
   4005 
   4006     case CXCursor_VariableRef:
   4007       return getCursorVariableRef(C).second;
   4008 
   4009     default:
   4010       // FIXME: Need a way to enumerate all non-reference cases.
   4011       llvm_unreachable("Missed a reference kind");
   4012     }
   4013   }
   4014 
   4015   if (clang_isExpression(C.kind))
   4016     return getCursorExpr(C)->getSourceRange();
   4017 
   4018   if (clang_isStatement(C.kind))
   4019     return getCursorStmt(C)->getSourceRange();
   4020 
   4021   if (clang_isAttribute(C.kind))
   4022     return getCursorAttr(C)->getRange();
   4023 
   4024   if (C.kind == CXCursor_PreprocessingDirective)
   4025     return cxcursor::getCursorPreprocessingDirective(C);
   4026 
   4027   if (C.kind == CXCursor_MacroExpansion) {
   4028     ASTUnit *TU = getCursorASTUnit(C);
   4029     SourceRange Range = cxcursor::getCursorMacroExpansion(C)->getSourceRange();
   4030     return TU->mapRangeFromPreamble(Range);
   4031   }
   4032 
   4033   if (C.kind == CXCursor_MacroDefinition) {
   4034     ASTUnit *TU = getCursorASTUnit(C);
   4035     SourceRange Range = cxcursor::getCursorMacroDefinition(C)->getSourceRange();
   4036     return TU->mapRangeFromPreamble(Range);
   4037   }
   4038 
   4039   if (C.kind == CXCursor_InclusionDirective) {
   4040     ASTUnit *TU = getCursorASTUnit(C);
   4041     SourceRange Range = cxcursor::getCursorInclusionDirective(C)->getSourceRange();
   4042     return TU->mapRangeFromPreamble(Range);
   4043   }
   4044 
   4045   if (C.kind == CXCursor_TranslationUnit) {
   4046     ASTUnit *TU = getCursorASTUnit(C);
   4047     FileID MainID = TU->getSourceManager().getMainFileID();
   4048     SourceLocation Start = TU->getSourceManager().getLocForStartOfFile(MainID);
   4049     SourceLocation End = TU->getSourceManager().getLocForEndOfFile(MainID);
   4050     return SourceRange(Start, End);
   4051   }
   4052 
   4053   if (C.kind >= CXCursor_FirstDecl && C.kind <= CXCursor_LastDecl) {
   4054     Decl *D = cxcursor::getCursorDecl(C);
   4055     if (!D)
   4056       return SourceRange();
   4057 
   4058     SourceRange R = D->getSourceRange();
   4059     // FIXME: Multiple variables declared in a single declaration
   4060     // currently lack the information needed to correctly determine their
   4061     // ranges when accounting for the type-specifier.  We use context
   4062     // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   4063     // and if so, whether it is the first decl.
   4064     if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
   4065       if (!cxcursor::isFirstInDeclGroup(C))
   4066         R.setBegin(VD->getLocation());
   4067     }
   4068     return R;
   4069   }
   4070   return SourceRange();
   4071 }
   4072 
   4073 /// \brief Retrieves the "raw" cursor extent, which is then extended to include
   4074 /// the decl-specifier-seq for declarations.
   4075 static SourceRange getFullCursorExtent(CXCursor C, SourceManager &SrcMgr) {
   4076   if (C.kind >= CXCursor_FirstDecl && C.kind <= CXCursor_LastDecl) {
   4077     Decl *D = cxcursor::getCursorDecl(C);
   4078     if (!D)
   4079       return SourceRange();
   4080 
   4081     SourceRange R = D->getSourceRange();
   4082 
   4083     // Adjust the start of the location for declarations preceded by
   4084     // declaration specifiers.
   4085     SourceLocation StartLoc;
   4086     if (const DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) {
   4087       if (TypeSourceInfo *TI = DD->getTypeSourceInfo())
   4088         StartLoc = TI->getTypeLoc().getLocStart();
   4089     } else if (TypedefDecl *Typedef = dyn_cast<TypedefDecl>(D)) {
   4090       if (TypeSourceInfo *TI = Typedef->getTypeSourceInfo())
   4091         StartLoc = TI->getTypeLoc().getLocStart();
   4092     }
   4093 
   4094     if (StartLoc.isValid() && R.getBegin().isValid() &&
   4095         SrcMgr.isBeforeInTranslationUnit(StartLoc, R.getBegin()))
   4096       R.setBegin(StartLoc);
   4097 
   4098     // FIXME: Multiple variables declared in a single declaration
   4099     // currently lack the information needed to correctly determine their
   4100     // ranges when accounting for the type-specifier.  We use context
   4101     // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   4102     // and if so, whether it is the first decl.
   4103     if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
   4104       if (!cxcursor::isFirstInDeclGroup(C))
   4105         R.setBegin(VD->getLocation());
   4106     }
   4107 
   4108     return R;
   4109   }
   4110 
   4111   return getRawCursorExtent(C);
   4112 }
   4113 
   4114 extern "C" {
   4115 
   4116 CXSourceRange clang_getCursorExtent(CXCursor C) {
   4117   SourceRange R = getRawCursorExtent(C);
   4118   if (R.isInvalid())
   4119     return clang_getNullRange();
   4120 
   4121   return cxloc::translateSourceRange(getCursorContext(C), R);
   4122 }
   4123 
   4124 CXCursor clang_getCursorReferenced(CXCursor C) {
   4125   if (clang_isInvalid(C.kind))
   4126     return clang_getNullCursor();
   4127 
   4128   CXTranslationUnit tu = getCursorTU(C);
   4129   if (clang_isDeclaration(C.kind)) {
   4130     Decl *D = getCursorDecl(C);
   4131     if (!D)
   4132       return clang_getNullCursor();
   4133     if (UsingDecl *Using = dyn_cast<UsingDecl>(D))
   4134       return MakeCursorOverloadedDeclRef(Using, D->getLocation(), tu);
   4135     if (ObjCPropertyImplDecl *PropImpl =dyn_cast<ObjCPropertyImplDecl>(D))
   4136       if (ObjCPropertyDecl *Property = PropImpl->getPropertyDecl())
   4137         return MakeCXCursor(Property, tu);
   4138 
   4139     return C;
   4140   }
   4141 
   4142   if (clang_isExpression(C.kind)) {
   4143     Expr *E = getCursorExpr(C);
   4144     Decl *D = getDeclFromExpr(E);
   4145     if (D) {
   4146       CXCursor declCursor = MakeCXCursor(D, tu);
   4147       declCursor = getSelectorIdentifierCursor(getSelectorIdentifierIndex(C),
   4148                                                declCursor);
   4149       return declCursor;
   4150     }
   4151 
   4152     if (OverloadExpr *Ovl = dyn_cast_or_null<OverloadExpr>(E))
   4153       return MakeCursorOverloadedDeclRef(Ovl, tu);
   4154 
   4155     return clang_getNullCursor();
   4156   }
   4157 
   4158   if (clang_isStatement(C.kind)) {
   4159     Stmt *S = getCursorStmt(C);
   4160     if (GotoStmt *Goto = dyn_cast_or_null<GotoStmt>(S))
   4161       if (LabelDecl *label = Goto->getLabel())
   4162         if (LabelStmt *labelS = label->getStmt())
   4163         return MakeCXCursor(labelS, getCursorDecl(C), tu);
   4164 
   4165     return clang_getNullCursor();
   4166   }
   4167 
   4168   if (C.kind == CXCursor_MacroExpansion) {
   4169     if (MacroDefinition *Def = getCursorMacroExpansion(C)->getDefinition())
   4170       return MakeMacroDefinitionCursor(Def, tu);
   4171   }
   4172 
   4173   if (!clang_isReference(C.kind))
   4174     return clang_getNullCursor();
   4175 
   4176   switch (C.kind) {
   4177     case CXCursor_ObjCSuperClassRef:
   4178       return MakeCXCursor(getCursorObjCSuperClassRef(C).first, tu);
   4179 
   4180     case CXCursor_ObjCProtocolRef: {
   4181       ObjCProtocolDecl *Prot = getCursorObjCProtocolRef(C).first;
   4182       if (ObjCProtocolDecl *Def = Prot->getDefinition())
   4183         return MakeCXCursor(Def, tu);
   4184 
   4185       return MakeCXCursor(Prot, tu);
   4186     }
   4187 
   4188     case CXCursor_ObjCClassRef: {
   4189       ObjCInterfaceDecl *Class = getCursorObjCClassRef(C).first;
   4190       if (ObjCInterfaceDecl *Def = Class->getDefinition())
   4191         return MakeCXCursor(Def, tu);
   4192 
   4193       return MakeCXCursor(Class, tu);
   4194     }
   4195 
   4196     case CXCursor_TypeRef:
   4197       return MakeCXCursor(getCursorTypeRef(C).first, tu );
   4198 
   4199     case CXCursor_TemplateRef:
   4200       return MakeCXCursor(getCursorTemplateRef(C).first, tu );
   4201 
   4202     case CXCursor_NamespaceRef:
   4203       return MakeCXCursor(getCursorNamespaceRef(C).first, tu );
   4204 
   4205     case CXCursor_MemberRef:
   4206       return MakeCXCursor(getCursorMemberRef(C).first, tu );
   4207 
   4208     case CXCursor_CXXBaseSpecifier: {
   4209       CXXBaseSpecifier *B = cxcursor::getCursorCXXBaseSpecifier(C);
   4210       return clang_getTypeDeclaration(cxtype::MakeCXType(B->getType(),
   4211                                                          tu ));
   4212     }
   4213 
   4214     case CXCursor_LabelRef:
   4215       // FIXME: We end up faking the "parent" declaration here because we
   4216       // don't want to make CXCursor larger.
   4217       return MakeCXCursor(getCursorLabelRef(C).first,
   4218                static_cast<ASTUnit*>(tu->TUData)->getASTContext()
   4219                           .getTranslationUnitDecl(),
   4220                           tu);
   4221 
   4222     case CXCursor_OverloadedDeclRef:
   4223       return C;
   4224 
   4225     case CXCursor_VariableRef:
   4226       return MakeCXCursor(getCursorVariableRef(C).first, tu);
   4227 
   4228     default:
   4229       // We would prefer to enumerate all non-reference cursor kinds here.
   4230       llvm_unreachable("Unhandled reference cursor kind");
   4231   }
   4232 }
   4233 
   4234 CXCursor clang_getCursorDefinition(CXCursor C) {
   4235   if (clang_isInvalid(C.kind))
   4236     return clang_getNullCursor();
   4237 
   4238   CXTranslationUnit TU = getCursorTU(C);
   4239 
   4240   bool WasReference = false;
   4241   if (clang_isReference(C.kind) || clang_isExpression(C.kind)) {
   4242     C = clang_getCursorReferenced(C);
   4243     WasReference = true;
   4244   }
   4245 
   4246   if (C.kind == CXCursor_MacroExpansion)
   4247     return clang_getCursorReferenced(C);
   4248 
   4249   if (!clang_isDeclaration(C.kind))
   4250     return clang_getNullCursor();
   4251 
   4252   Decl *D = getCursorDecl(C);
   4253   if (!D)
   4254     return clang_getNullCursor();
   4255 
   4256   switch (D->getKind()) {
   4257   // Declaration kinds that don't really separate the notions of
   4258   // declaration and definition.
   4259   case Decl::Namespace:
   4260   case Decl::Typedef:
   4261   case Decl::TypeAlias:
   4262   case Decl::TypeAliasTemplate:
   4263   case Decl::TemplateTypeParm:
   4264   case Decl::EnumConstant:
   4265   case Decl::Field:
   4266   case Decl::IndirectField:
   4267   case Decl::ObjCIvar:
   4268   case Decl::ObjCAtDefsField:
   4269   case Decl::ImplicitParam:
   4270   case Decl::ParmVar:
   4271   case Decl::NonTypeTemplateParm:
   4272   case Decl::TemplateTemplateParm:
   4273   case Decl::ObjCCategoryImpl:
   4274   case Decl::ObjCImplementation:
   4275   case Decl::AccessSpec:
   4276   case Decl::LinkageSpec:
   4277   case Decl::ObjCPropertyImpl:
   4278   case Decl::FileScopeAsm:
   4279   case Decl::StaticAssert:
   4280   case Decl::Block:
   4281   case Decl::Label:  // FIXME: Is this right??
   4282   case Decl::ClassScopeFunctionSpecialization:
   4283   case Decl::Import:
   4284     return C;
   4285 
   4286   // Declaration kinds that don't make any sense here, but are
   4287   // nonetheless harmless.
   4288   case Decl::TranslationUnit:
   4289     break;
   4290 
   4291   // Declaration kinds for which the definition is not resolvable.
   4292   case Decl::UnresolvedUsingTypename:
   4293   case Decl::UnresolvedUsingValue:
   4294     break;
   4295 
   4296   case Decl::UsingDirective:
   4297     return MakeCXCursor(cast<UsingDirectiveDecl>(D)->getNominatedNamespace(),
   4298                         TU);
   4299 
   4300   case Decl::NamespaceAlias:
   4301     return MakeCXCursor(cast<NamespaceAliasDecl>(D)->getNamespace(), TU);
   4302 
   4303   case Decl::Enum:
   4304   case Decl::Record:
   4305   case Decl::CXXRecord:
   4306   case Decl::ClassTemplateSpecialization:
   4307   case Decl::ClassTemplatePartialSpecialization:
   4308     if (TagDecl *Def = cast<TagDecl>(D)->getDefinition())
   4309       return MakeCXCursor(Def, TU);
   4310     return clang_getNullCursor();
   4311 
   4312   case Decl::Function:
   4313   case Decl::CXXMethod:
   4314   case Decl::CXXConstructor:
   4315   case Decl::CXXDestructor:
   4316   case Decl::CXXConversion: {
   4317     const FunctionDecl *Def = 0;
   4318     if (cast<FunctionDecl>(D)->getBody(Def))
   4319       return MakeCXCursor(const_cast<FunctionDecl *>(Def), TU);
   4320     return clang_getNullCursor();
   4321   }
   4322 
   4323   case Decl::Var: {
   4324     // Ask the variable if it has a definition.
   4325     if (VarDecl *Def = cast<VarDecl>(D)->getDefinition())
   4326       return MakeCXCursor(Def, TU);
   4327     return clang_getNullCursor();
   4328   }
   4329 
   4330   case Decl::FunctionTemplate: {
   4331     const FunctionDecl *Def = 0;
   4332     if (cast<FunctionTemplateDecl>(D)->getTemplatedDecl()->getBody(Def))
   4333       return MakeCXCursor(Def->getDescribedFunctionTemplate(), TU);
   4334     return clang_getNullCursor();
   4335   }
   4336 
   4337   case Decl::ClassTemplate: {
   4338     if (RecordDecl *Def = cast<ClassTemplateDecl>(D)->getTemplatedDecl()
   4339                                                             ->getDefinition())
   4340       return MakeCXCursor(cast<CXXRecordDecl>(Def)->getDescribedClassTemplate(),
   4341                           TU);
   4342     return clang_getNullCursor();
   4343   }
   4344 
   4345   case Decl::Using:
   4346     return MakeCursorOverloadedDeclRef(cast<UsingDecl>(D),
   4347                                        D->getLocation(), TU);
   4348 
   4349   case Decl::UsingShadow:
   4350     return clang_getCursorDefinition(
   4351                        MakeCXCursor(cast<UsingShadowDecl>(D)->getTargetDecl(),
   4352                                     TU));
   4353 
   4354   case Decl::ObjCMethod: {
   4355     ObjCMethodDecl *Method = cast<ObjCMethodDecl>(D);
   4356     if (Method->isThisDeclarationADefinition())
   4357       return C;
   4358 
   4359     // Dig out the method definition in the associated
   4360     // @implementation, if we have it.
   4361     // FIXME: The ASTs should make finding the definition easier.
   4362     if (ObjCInterfaceDecl *Class
   4363                        = dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext()))
   4364       if (ObjCImplementationDecl *ClassImpl = Class->getImplementation())
   4365         if (ObjCMethodDecl *Def = ClassImpl->getMethod(Method->getSelector(),
   4366                                                   Method->isInstanceMethod()))
   4367           if (Def->isThisDeclarationADefinition())
   4368             return MakeCXCursor(Def, TU);
   4369 
   4370     return clang_getNullCursor();
   4371   }
   4372 
   4373   case Decl::ObjCCategory:
   4374     if (ObjCCategoryImplDecl *Impl
   4375                                = cast<ObjCCategoryDecl>(D)->getImplementation())
   4376       return MakeCXCursor(Impl, TU);
   4377     return clang_getNullCursor();
   4378 
   4379   case Decl::ObjCProtocol:
   4380     if (ObjCProtocolDecl *Def = cast<ObjCProtocolDecl>(D)->getDefinition())
   4381       return MakeCXCursor(Def, TU);
   4382     return clang_getNullCursor();
   4383 
   4384   case Decl::ObjCInterface: {
   4385     // There are two notions of a "definition" for an Objective-C
   4386     // class: the interface and its implementation. When we resolved a
   4387     // reference to an Objective-C class, produce the @interface as
   4388     // the definition; when we were provided with the interface,
   4389     // produce the @implementation as the definition.
   4390     ObjCInterfaceDecl *IFace = cast<ObjCInterfaceDecl>(D);
   4391     if (WasReference) {
   4392       if (ObjCInterfaceDecl *Def = IFace->getDefinition())
   4393         return MakeCXCursor(Def, TU);
   4394     } else if (ObjCImplementationDecl *Impl = IFace->getImplementation())
   4395       return MakeCXCursor(Impl, TU);
   4396     return clang_getNullCursor();
   4397   }
   4398 
   4399   case Decl::ObjCProperty:
   4400     // FIXME: We don't really know where to find the
   4401     // ObjCPropertyImplDecls that implement this property.
   4402     return clang_getNullCursor();
   4403 
   4404   case Decl::ObjCCompatibleAlias:
   4405     if (ObjCInterfaceDecl *Class
   4406           = cast<ObjCCompatibleAliasDecl>(D)->getClassInterface())
   4407       if (ObjCInterfaceDecl *Def = Class->getDefinition())
   4408         return MakeCXCursor(Def, TU);
   4409 
   4410     return clang_getNullCursor();
   4411 
   4412   case Decl::Friend:
   4413     if (NamedDecl *Friend = cast<FriendDecl>(D)->getFriendDecl())
   4414       return clang_getCursorDefinition(MakeCXCursor(Friend, TU));
   4415     return clang_getNullCursor();
   4416 
   4417   case Decl::FriendTemplate:
   4418     if (NamedDecl *Friend = cast<FriendTemplateDecl>(D)->getFriendDecl())
   4419       return clang_getCursorDefinition(MakeCXCursor(Friend, TU));
   4420     return clang_getNullCursor();
   4421   }
   4422 
   4423   return clang_getNullCursor();
   4424 }
   4425 
   4426 unsigned clang_isCursorDefinition(CXCursor C) {
   4427   if (!clang_isDeclaration(C.kind))
   4428     return 0;
   4429 
   4430   return clang_getCursorDefinition(C) == C;
   4431 }
   4432 
   4433 CXCursor clang_getCanonicalCursor(CXCursor C) {
   4434   if (!clang_isDeclaration(C.kind))
   4435     return C;
   4436 
   4437   if (Decl *D = getCursorDecl(C)) {
   4438     if (ObjCCategoryImplDecl *CatImplD = dyn_cast<ObjCCategoryImplDecl>(D))
   4439       if (ObjCCategoryDecl *CatD = CatImplD->getCategoryDecl())
   4440         return MakeCXCursor(CatD, getCursorTU(C));
   4441 
   4442     if (ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
   4443       if (ObjCInterfaceDecl *IFD = ImplD->getClassInterface())
   4444         return MakeCXCursor(IFD, getCursorTU(C));
   4445 
   4446     return MakeCXCursor(D->getCanonicalDecl(), getCursorTU(C));
   4447   }
   4448 
   4449   return C;
   4450 }
   4451 
   4452 int clang_Cursor_getObjCSelectorIndex(CXCursor cursor) {
   4453   return cxcursor::getSelectorIdentifierIndexAndLoc(cursor).first;
   4454 }
   4455 
   4456 unsigned clang_getNumOverloadedDecls(CXCursor C) {
   4457   if (C.kind != CXCursor_OverloadedDeclRef)
   4458     return 0;
   4459 
   4460   OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(C).first;
   4461   if (OverloadExpr *E = Storage.dyn_cast<OverloadExpr *>())
   4462     return E->getNumDecls();
   4463 
   4464   if (OverloadedTemplateStorage *S
   4465                               = Storage.dyn_cast<OverloadedTemplateStorage*>())
   4466     return S->size();
   4467 
   4468   Decl *D = Storage.get<Decl*>();
   4469   if (UsingDecl *Using = dyn_cast<UsingDecl>(D))
   4470     return Using->shadow_size();
   4471 
   4472   return 0;
   4473 }
   4474 
   4475 CXCursor clang_getOverloadedDecl(CXCursor cursor, unsigned index) {
   4476   if (cursor.kind != CXCursor_OverloadedDeclRef)
   4477     return clang_getNullCursor();
   4478 
   4479   if (index >= clang_getNumOverloadedDecls(cursor))
   4480     return clang_getNullCursor();
   4481 
   4482   CXTranslationUnit TU = getCursorTU(cursor);
   4483   OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(cursor).first;
   4484   if (OverloadExpr *E = Storage.dyn_cast<OverloadExpr *>())
   4485     return MakeCXCursor(E->decls_begin()[index], TU);
   4486 
   4487   if (OverloadedTemplateStorage *S
   4488                               = Storage.dyn_cast<OverloadedTemplateStorage*>())
   4489     return MakeCXCursor(S->begin()[index], TU);
   4490 
   4491   Decl *D = Storage.get<Decl*>();
   4492   if (UsingDecl *Using = dyn_cast<UsingDecl>(D)) {
   4493     // FIXME: This is, unfortunately, linear time.
   4494     UsingDecl::shadow_iterator Pos = Using->shadow_begin();
   4495     std::advance(Pos, index);
   4496     return MakeCXCursor(cast<UsingShadowDecl>(*Pos)->getTargetDecl(), TU);
   4497   }
   4498 
   4499   return clang_getNullCursor();
   4500 }
   4501 
   4502 void clang_getDefinitionSpellingAndExtent(CXCursor C,
   4503                                           const char **startBuf,
   4504                                           const char **endBuf,
   4505                                           unsigned *startLine,
   4506                                           unsigned *startColumn,
   4507                                           unsigned *endLine,
   4508                                           unsigned *endColumn) {
   4509   assert(getCursorDecl(C) && "CXCursor has null decl");
   4510   NamedDecl *ND = static_cast<NamedDecl *>(getCursorDecl(C));
   4511   FunctionDecl *FD = dyn_cast<FunctionDecl>(ND);
   4512   CompoundStmt *Body = dyn_cast<CompoundStmt>(FD->getBody());
   4513 
   4514   SourceManager &SM = FD->getASTContext().getSourceManager();
   4515   *startBuf = SM.getCharacterData(Body->getLBracLoc());
   4516   *endBuf = SM.getCharacterData(Body->getRBracLoc());
   4517   *startLine = SM.getSpellingLineNumber(Body->getLBracLoc());
   4518   *startColumn = SM.getSpellingColumnNumber(Body->getLBracLoc());
   4519   *endLine = SM.getSpellingLineNumber(Body->getRBracLoc());
   4520   *endColumn = SM.getSpellingColumnNumber(Body->getRBracLoc());
   4521 }
   4522 
   4523 
   4524 CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, unsigned NameFlags,
   4525                                                 unsigned PieceIndex) {
   4526   RefNamePieces Pieces;
   4527 
   4528   switch (C.kind) {
   4529   case CXCursor_MemberRefExpr:
   4530     if (MemberExpr *E = dyn_cast<MemberExpr>(getCursorExpr(C)))
   4531       Pieces = buildPieces(NameFlags, true, E->getMemberNameInfo(),
   4532                            E->getQualifierLoc().getSourceRange());
   4533     break;
   4534 
   4535   case CXCursor_DeclRefExpr:
   4536     if (DeclRefExpr *E = dyn_cast<DeclRefExpr>(getCursorExpr(C)))
   4537       Pieces = buildPieces(NameFlags, false, E->getNameInfo(),
   4538                            E->getQualifierLoc().getSourceRange(),
   4539                            E->getOptionalExplicitTemplateArgs());
   4540     break;
   4541 
   4542   case CXCursor_CallExpr:
   4543     if (CXXOperatorCallExpr *OCE =
   4544         dyn_cast<CXXOperatorCallExpr>(getCursorExpr(C))) {
   4545       Expr *Callee = OCE->getCallee();
   4546       if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Callee))
   4547         Callee = ICE->getSubExpr();
   4548 
   4549       if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Callee))
   4550         Pieces = buildPieces(NameFlags, false, DRE->getNameInfo(),
   4551                              DRE->getQualifierLoc().getSourceRange());
   4552     }
   4553     break;
   4554 
   4555   default:
   4556     break;
   4557   }
   4558 
   4559   if (Pieces.empty()) {
   4560     if (PieceIndex == 0)
   4561       return clang_getCursorExtent(C);
   4562   } else if (PieceIndex < Pieces.size()) {
   4563       SourceRange R = Pieces[PieceIndex];
   4564       if (R.isValid())
   4565         return cxloc::translateSourceRange(getCursorContext(C), R);
   4566   }
   4567 
   4568   return clang_getNullRange();
   4569 }
   4570 
   4571 void clang_enableStackTraces(void) {
   4572   llvm::sys::PrintStackTraceOnErrorSignal();
   4573 }
   4574 
   4575 void clang_executeOnThread(void (*fn)(void*), void *user_data,
   4576                            unsigned stack_size) {
   4577   llvm::llvm_execute_on_thread(fn, user_data, stack_size);
   4578 }
   4579 
   4580 } // end: extern "C"
   4581 
   4582 //===----------------------------------------------------------------------===//
   4583 // Token-based Operations.
   4584 //===----------------------------------------------------------------------===//
   4585 
   4586 /* CXToken layout:
   4587  *   int_data[0]: a CXTokenKind
   4588  *   int_data[1]: starting token location
   4589  *   int_data[2]: token length
   4590  *   int_data[3]: reserved
   4591  *   ptr_data: for identifiers and keywords, an IdentifierInfo*.
   4592  *   otherwise unused.
   4593  */
   4594 extern "C" {
   4595 
   4596 CXTokenKind clang_getTokenKind(CXToken CXTok) {
   4597   return static_cast<CXTokenKind>(CXTok.int_data[0]);
   4598 }
   4599 
   4600 CXString clang_getTokenSpelling(CXTranslationUnit TU, CXToken CXTok) {
   4601   switch (clang_getTokenKind(CXTok)) {
   4602   case CXToken_Identifier:
   4603   case CXToken_Keyword:
   4604     // We know we have an IdentifierInfo*, so use that.
   4605     return createCXString(static_cast<IdentifierInfo *>(CXTok.ptr_data)
   4606                             ->getNameStart());
   4607 
   4608   case CXToken_Literal: {
   4609     // We have stashed the starting pointer in the ptr_data field. Use it.
   4610     const char *Text = static_cast<const char *>(CXTok.ptr_data);
   4611     return createCXString(StringRef(Text, CXTok.int_data[2]));
   4612   }
   4613 
   4614   case CXToken_Punctuation:
   4615   case CXToken_Comment:
   4616     break;
   4617   }
   4618 
   4619   // We have to find the starting buffer pointer the hard way, by
   4620   // deconstructing the source location.
   4621   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   4622   if (!CXXUnit)
   4623     return createCXString("");
   4624 
   4625   SourceLocation Loc = SourceLocation::getFromRawEncoding(CXTok.int_data[1]);
   4626   std::pair<FileID, unsigned> LocInfo
   4627     = CXXUnit->getSourceManager().getDecomposedSpellingLoc(Loc);
   4628   bool Invalid = false;
   4629   StringRef Buffer
   4630     = CXXUnit->getSourceManager().getBufferData(LocInfo.first, &Invalid);
   4631   if (Invalid)
   4632     return createCXString("");
   4633 
   4634   return createCXString(Buffer.substr(LocInfo.second, CXTok.int_data[2]));
   4635 }
   4636 
   4637 CXSourceLocation clang_getTokenLocation(CXTranslationUnit TU, CXToken CXTok) {
   4638   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   4639   if (!CXXUnit)
   4640     return clang_getNullLocation();
   4641 
   4642   return cxloc::translateSourceLocation(CXXUnit->getASTContext(),
   4643                         SourceLocation::getFromRawEncoding(CXTok.int_data[1]));
   4644 }
   4645 
   4646 CXSourceRange clang_getTokenExtent(CXTranslationUnit TU, CXToken CXTok) {
   4647   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   4648   if (!CXXUnit)
   4649     return clang_getNullRange();
   4650 
   4651   return cxloc::translateSourceRange(CXXUnit->getASTContext(),
   4652                         SourceLocation::getFromRawEncoding(CXTok.int_data[1]));
   4653 }
   4654 
   4655 static void getTokens(ASTUnit *CXXUnit, SourceRange Range,
   4656                       SmallVectorImpl<CXToken> &CXTokens) {
   4657   SourceManager &SourceMgr = CXXUnit->getSourceManager();
   4658   std::pair<FileID, unsigned> BeginLocInfo
   4659     = SourceMgr.getDecomposedLoc(Range.getBegin());
   4660   std::pair<FileID, unsigned> EndLocInfo
   4661     = SourceMgr.getDecomposedLoc(Range.getEnd());
   4662 
   4663   // Cannot tokenize across files.
   4664   if (BeginLocInfo.first != EndLocInfo.first)
   4665     return;
   4666 
   4667   // Create a lexer
   4668   bool Invalid = false;
   4669   StringRef Buffer
   4670     = SourceMgr.getBufferData(BeginLocInfo.first, &Invalid);
   4671   if (Invalid)
   4672     return;
   4673 
   4674   Lexer Lex(SourceMgr.getLocForStartOfFile(BeginLocInfo.first),
   4675             CXXUnit->getASTContext().getLangOpts(),
   4676             Buffer.begin(), Buffer.data() + BeginLocInfo.second, Buffer.end());
   4677   Lex.SetCommentRetentionState(true);
   4678 
   4679   // Lex tokens until we hit the end of the range.
   4680   const char *EffectiveBufferEnd = Buffer.data() + EndLocInfo.second;
   4681   Token Tok;
   4682   bool previousWasAt = false;
   4683   do {
   4684     // Lex the next token
   4685     Lex.LexFromRawLexer(Tok);
   4686     if (Tok.is(tok::eof))
   4687       break;
   4688 
   4689     // Initialize the CXToken.
   4690     CXToken CXTok;
   4691 
   4692     //   - Common fields
   4693     CXTok.int_data[1] = Tok.getLocation().getRawEncoding();
   4694     CXTok.int_data[2] = Tok.getLength();
   4695     CXTok.int_data[3] = 0;
   4696 
   4697     //   - Kind-specific fields
   4698     if (Tok.isLiteral()) {
   4699       CXTok.int_data[0] = CXToken_Literal;
   4700       CXTok.ptr_data = (void *)Tok.getLiteralData();
   4701     } else if (Tok.is(tok::raw_identifier)) {
   4702       // Lookup the identifier to determine whether we have a keyword.
   4703       IdentifierInfo *II
   4704         = CXXUnit->getPreprocessor().LookUpIdentifierInfo(Tok);
   4705 
   4706       if ((II->getObjCKeywordID() != tok::objc_not_keyword) && previousWasAt) {
   4707         CXTok.int_data[0] = CXToken_Keyword;
   4708       }
   4709       else {
   4710         CXTok.int_data[0] = Tok.is(tok::identifier)
   4711           ? CXToken_Identifier
   4712           : CXToken_Keyword;
   4713       }
   4714       CXTok.ptr_data = II;
   4715     } else if (Tok.is(tok::comment)) {
   4716       CXTok.int_data[0] = CXToken_Comment;
   4717       CXTok.ptr_data = 0;
   4718     } else {
   4719       CXTok.int_data[0] = CXToken_Punctuation;
   4720       CXTok.ptr_data = 0;
   4721     }
   4722     CXTokens.push_back(CXTok);
   4723     previousWasAt = Tok.is(tok::at);
   4724   } while (Lex.getBufferLocation() <= EffectiveBufferEnd);
   4725 }
   4726 
   4727 void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range,
   4728                     CXToken **Tokens, unsigned *NumTokens) {
   4729   if (Tokens)
   4730     *Tokens = 0;
   4731   if (NumTokens)
   4732     *NumTokens = 0;
   4733 
   4734   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   4735   if (!CXXUnit || !Tokens || !NumTokens)
   4736     return;
   4737 
   4738   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   4739 
   4740   SourceRange R = cxloc::translateCXSourceRange(Range);
   4741   if (R.isInvalid())
   4742     return;
   4743 
   4744   SmallVector<CXToken, 32> CXTokens;
   4745   getTokens(CXXUnit, R, CXTokens);
   4746 
   4747   if (CXTokens.empty())
   4748     return;
   4749 
   4750   *Tokens = (CXToken *)malloc(sizeof(CXToken) * CXTokens.size());
   4751   memmove(*Tokens, CXTokens.data(), sizeof(CXToken) * CXTokens.size());
   4752   *NumTokens = CXTokens.size();
   4753 }
   4754 
   4755 void clang_disposeTokens(CXTranslationUnit TU,
   4756                          CXToken *Tokens, unsigned NumTokens) {
   4757   free(Tokens);
   4758 }
   4759 
   4760 } // end: extern "C"
   4761 
   4762 //===----------------------------------------------------------------------===//
   4763 // Token annotation APIs.
   4764 //===----------------------------------------------------------------------===//
   4765 
   4766 typedef llvm::DenseMap<unsigned, CXCursor> AnnotateTokensData;
   4767 static enum CXChildVisitResult AnnotateTokensVisitor(CXCursor cursor,
   4768                                                      CXCursor parent,
   4769                                                      CXClientData client_data);
   4770 namespace {
   4771 class AnnotateTokensWorker {
   4772   AnnotateTokensData &Annotated;
   4773   CXToken *Tokens;
   4774   CXCursor *Cursors;
   4775   unsigned NumTokens;
   4776   unsigned TokIdx;
   4777   unsigned PreprocessingTokIdx;
   4778   CursorVisitor AnnotateVis;
   4779   SourceManager &SrcMgr;
   4780   bool HasContextSensitiveKeywords;
   4781 
   4782   bool MoreTokens() const { return TokIdx < NumTokens; }
   4783   unsigned NextToken() const { return TokIdx; }
   4784   void AdvanceToken() { ++TokIdx; }
   4785   SourceLocation GetTokenLoc(unsigned tokI) {
   4786     return SourceLocation::getFromRawEncoding(Tokens[tokI].int_data[1]);
   4787   }
   4788   bool isFunctionMacroToken(unsigned tokI) const {
   4789     return Tokens[tokI].int_data[3] != 0;
   4790   }
   4791   SourceLocation getFunctionMacroTokenLoc(unsigned tokI) const {
   4792     return SourceLocation::getFromRawEncoding(Tokens[tokI].int_data[3]);
   4793   }
   4794 
   4795   void annotateAndAdvanceTokens(CXCursor, RangeComparisonResult, SourceRange);
   4796   void annotateAndAdvanceFunctionMacroTokens(CXCursor, RangeComparisonResult,
   4797                                              SourceRange);
   4798 
   4799 public:
   4800   AnnotateTokensWorker(AnnotateTokensData &annotated,
   4801                        CXToken *tokens, CXCursor *cursors, unsigned numTokens,
   4802                        CXTranslationUnit tu, SourceRange RegionOfInterest)
   4803     : Annotated(annotated), Tokens(tokens), Cursors(cursors),
   4804       NumTokens(numTokens), TokIdx(0), PreprocessingTokIdx(0),
   4805       AnnotateVis(tu,
   4806                   AnnotateTokensVisitor, this,
   4807                   /*VisitPreprocessorLast=*/true,
   4808                   /*VisitIncludedEntities=*/false,
   4809                   RegionOfInterest),
   4810       SrcMgr(static_cast<ASTUnit*>(tu->TUData)->getSourceManager()),
   4811       HasContextSensitiveKeywords(false) { }
   4812 
   4813   void VisitChildren(CXCursor C) { AnnotateVis.VisitChildren(C); }
   4814   enum CXChildVisitResult Visit(CXCursor cursor, CXCursor parent);
   4815   void AnnotateTokens();
   4816 
   4817   /// \brief Determine whether the annotator saw any cursors that have
   4818   /// context-sensitive keywords.
   4819   bool hasContextSensitiveKeywords() const {
   4820     return HasContextSensitiveKeywords;
   4821   }
   4822 };
   4823 }
   4824 
   4825 void AnnotateTokensWorker::AnnotateTokens() {
   4826   // Walk the AST within the region of interest, annotating tokens
   4827   // along the way.
   4828   AnnotateVis.visitFileRegion();
   4829 
   4830   for (unsigned I = 0 ; I < TokIdx ; ++I) {
   4831     AnnotateTokensData::iterator Pos = Annotated.find(Tokens[I].int_data[1]);
   4832     if (Pos != Annotated.end() &&
   4833         (clang_isInvalid(Cursors[I].kind) ||
   4834          Pos->second.kind != CXCursor_PreprocessingDirective))
   4835       Cursors[I] = Pos->second;
   4836   }
   4837 
   4838   // Finish up annotating any tokens left.
   4839   if (!MoreTokens())
   4840     return;
   4841 
   4842   const CXCursor &C = clang_getNullCursor();
   4843   for (unsigned I = TokIdx ; I < NumTokens ; ++I) {
   4844     if (I < PreprocessingTokIdx && clang_isPreprocessing(Cursors[I].kind))
   4845       continue;
   4846 
   4847     AnnotateTokensData::iterator Pos = Annotated.find(Tokens[I].int_data[1]);
   4848     Cursors[I] = (Pos == Annotated.end()) ? C : Pos->second;
   4849   }
   4850 }
   4851 
   4852 /// \brief It annotates and advances tokens with a cursor until the comparison
   4853 //// between the cursor location and the source range is the same as
   4854 /// \arg compResult.
   4855 ///
   4856 /// Pass RangeBefore to annotate tokens with a cursor until a range is reached.
   4857 /// Pass RangeOverlap to annotate tokens inside a range.
   4858 void AnnotateTokensWorker::annotateAndAdvanceTokens(CXCursor updateC,
   4859                                                RangeComparisonResult compResult,
   4860                                                SourceRange range) {
   4861   while (MoreTokens()) {
   4862     const unsigned I = NextToken();
   4863     if (isFunctionMacroToken(I))
   4864       return annotateAndAdvanceFunctionMacroTokens(updateC, compResult, range);
   4865 
   4866     SourceLocation TokLoc = GetTokenLoc(I);
   4867     if (LocationCompare(SrcMgr, TokLoc, range) == compResult) {
   4868       Cursors[I] = updateC;
   4869       AdvanceToken();
   4870       continue;
   4871     }
   4872     break;
   4873   }
   4874 }
   4875 
   4876 /// \brief Special annotation handling for macro argument tokens.
   4877 void AnnotateTokensWorker::annotateAndAdvanceFunctionMacroTokens(
   4878                                                CXCursor updateC,
   4879                                                RangeComparisonResult compResult,
   4880                                                SourceRange range) {
   4881   assert(MoreTokens());
   4882   assert(isFunctionMacroToken(NextToken()) &&
   4883          "Should be called only for macro arg tokens");
   4884 
   4885   // This works differently than annotateAndAdvanceTokens; because expanded
   4886   // macro arguments can have arbitrary translation-unit source order, we do not
   4887   // advance the token index one by one until a token fails the range test.
   4888   // We only advance once past all of the macro arg tokens if all of them
   4889   // pass the range test. If one of them fails we keep the token index pointing
   4890   // at the start of the macro arg tokens so that the failing token will be
   4891   // annotated by a subsequent annotation try.
   4892 
   4893   bool atLeastOneCompFail = false;
   4894 
   4895   unsigned I = NextToken();
   4896   for (; I < NumTokens && isFunctionMacroToken(I); ++I) {
   4897     SourceLocation TokLoc = getFunctionMacroTokenLoc(I);
   4898     if (TokLoc.isFileID())
   4899       continue; // not macro arg token, it's parens or comma.
   4900     if (LocationCompare(SrcMgr, TokLoc, range) == compResult) {
   4901       if (clang_isInvalid(clang_getCursorKind(Cursors[I])))
   4902         Cursors[I] = updateC;
   4903     } else
   4904       atLeastOneCompFail = true;
   4905   }
   4906 
   4907   if (!atLeastOneCompFail)
   4908     TokIdx = I; // All of the tokens were handled, advance beyond all of them.
   4909 }
   4910 
   4911 enum CXChildVisitResult
   4912 AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) {
   4913   CXSourceLocation Loc = clang_getCursorLocation(cursor);
   4914   SourceRange cursorRange = getRawCursorExtent(cursor);
   4915   if (cursorRange.isInvalid())
   4916     return CXChildVisit_Recurse;
   4917 
   4918   if (!HasContextSensitiveKeywords) {
   4919     // Objective-C properties can have context-sensitive keywords.
   4920     if (cursor.kind == CXCursor_ObjCPropertyDecl) {
   4921       if (ObjCPropertyDecl *Property
   4922                   = dyn_cast_or_null<ObjCPropertyDecl>(getCursorDecl(cursor)))
   4923         HasContextSensitiveKeywords = Property->getPropertyAttributesAsWritten() != 0;
   4924     }
   4925     // Objective-C methods can have context-sensitive keywords.
   4926     else if (cursor.kind == CXCursor_ObjCInstanceMethodDecl ||
   4927              cursor.kind == CXCursor_ObjCClassMethodDecl) {
   4928       if (ObjCMethodDecl *Method
   4929             = dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(cursor))) {
   4930         if (Method->getObjCDeclQualifier())
   4931           HasContextSensitiveKeywords = true;
   4932         else {
   4933           for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
   4934                                            PEnd = Method->param_end();
   4935                P != PEnd; ++P) {
   4936             if ((*P)->getObjCDeclQualifier()) {
   4937               HasContextSensitiveKeywords = true;
   4938               break;
   4939             }
   4940           }
   4941         }
   4942       }
   4943     }
   4944     // C++ methods can have context-sensitive keywords.
   4945     else if (cursor.kind == CXCursor_CXXMethod) {
   4946       if (CXXMethodDecl *Method
   4947                   = dyn_cast_or_null<CXXMethodDecl>(getCursorDecl(cursor))) {
   4948         if (Method->hasAttr<FinalAttr>() || Method->hasAttr<OverrideAttr>())
   4949           HasContextSensitiveKeywords = true;
   4950       }
   4951     }
   4952     // C++ classes can have context-sensitive keywords.
   4953     else if (cursor.kind == CXCursor_StructDecl ||
   4954              cursor.kind == CXCursor_ClassDecl ||
   4955              cursor.kind == CXCursor_ClassTemplate ||
   4956              cursor.kind == CXCursor_ClassTemplatePartialSpecialization) {
   4957       if (Decl *D = getCursorDecl(cursor))
   4958         if (D->hasAttr<FinalAttr>())
   4959           HasContextSensitiveKeywords = true;
   4960     }
   4961   }
   4962 
   4963   if (clang_isPreprocessing(cursor.kind)) {
   4964     // For macro expansions, just note where the beginning of the macro
   4965     // expansion occurs.
   4966     if (cursor.kind == CXCursor_MacroExpansion) {
   4967       Annotated[Loc.int_data] = cursor;
   4968       return CXChildVisit_Recurse;
   4969     }
   4970 
   4971     // Items in the preprocessing record are kept separate from items in
   4972     // declarations, so we keep a separate token index.
   4973     unsigned SavedTokIdx = TokIdx;
   4974     TokIdx = PreprocessingTokIdx;
   4975 
   4976     // Skip tokens up until we catch up to the beginning of the preprocessing
   4977     // entry.
   4978     while (MoreTokens()) {
   4979       const unsigned I = NextToken();
   4980       SourceLocation TokLoc = GetTokenLoc(I);
   4981       switch (LocationCompare(SrcMgr, TokLoc, cursorRange)) {
   4982       case RangeBefore:
   4983         AdvanceToken();
   4984         continue;
   4985       case RangeAfter:
   4986       case RangeOverlap:
   4987         break;
   4988       }
   4989       break;
   4990     }
   4991 
   4992     // Look at all of the tokens within this range.
   4993     while (MoreTokens()) {
   4994       const unsigned I = NextToken();
   4995       SourceLocation TokLoc = GetTokenLoc(I);
   4996       switch (LocationCompare(SrcMgr, TokLoc, cursorRange)) {
   4997       case RangeBefore:
   4998         llvm_unreachable("Infeasible");
   4999       case RangeAfter:
   5000         break;
   5001       case RangeOverlap:
   5002         Cursors[I] = cursor;
   5003         AdvanceToken();
   5004         continue;
   5005       }
   5006       break;
   5007     }
   5008 
   5009     // Save the preprocessing token index; restore the non-preprocessing
   5010     // token index.
   5011     PreprocessingTokIdx = TokIdx;
   5012     TokIdx = SavedTokIdx;
   5013     return CXChildVisit_Recurse;
   5014   }
   5015 
   5016   if (cursorRange.isInvalid())
   5017     return CXChildVisit_Continue;
   5018 
   5019   SourceLocation L = SourceLocation::getFromRawEncoding(Loc.int_data);
   5020 
   5021   // Adjust the annotated range based specific declarations.
   5022   const enum CXCursorKind cursorK = clang_getCursorKind(cursor);
   5023   if (cursorK >= CXCursor_FirstDecl && cursorK <= CXCursor_LastDecl) {
   5024     Decl *D = cxcursor::getCursorDecl(cursor);
   5025 
   5026     SourceLocation StartLoc;
   5027     if (const DeclaratorDecl *DD = dyn_cast_or_null<DeclaratorDecl>(D)) {
   5028       if (TypeSourceInfo *TI = DD->getTypeSourceInfo())
   5029         StartLoc = TI->getTypeLoc().getLocStart();
   5030     } else if (TypedefDecl *Typedef = dyn_cast_or_null<TypedefDecl>(D)) {
   5031       if (TypeSourceInfo *TI = Typedef->getTypeSourceInfo())
   5032         StartLoc = TI->getTypeLoc().getLocStart();
   5033     }
   5034 
   5035     if (StartLoc.isValid() && L.isValid() &&
   5036         SrcMgr.isBeforeInTranslationUnit(StartLoc, L))
   5037       cursorRange.setBegin(StartLoc);
   5038   }
   5039 
   5040   // If the location of the cursor occurs within a macro instantiation, record
   5041   // the spelling location of the cursor in our annotation map.  We can then
   5042   // paper over the token labelings during a post-processing step to try and
   5043   // get cursor mappings for tokens that are the *arguments* of a macro
   5044   // instantiation.
   5045   if (L.isMacroID()) {
   5046     unsigned rawEncoding = SrcMgr.getSpellingLoc(L).getRawEncoding();
   5047     // Only invalidate the old annotation if it isn't part of a preprocessing
   5048     // directive.  Here we assume that the default construction of CXCursor
   5049     // results in CXCursor.kind being an initialized value (i.e., 0).  If
   5050     // this isn't the case, we can fix by doing lookup + insertion.
   5051 
   5052     CXCursor &oldC = Annotated[rawEncoding];
   5053     if (!clang_isPreprocessing(oldC.kind))
   5054       oldC = cursor;
   5055   }
   5056 
   5057   const enum CXCursorKind K = clang_getCursorKind(parent);
   5058   const CXCursor updateC =
   5059     (clang_isInvalid(K) || K == CXCursor_TranslationUnit)
   5060      ? clang_getNullCursor() : parent;
   5061 
   5062   annotateAndAdvanceTokens(updateC, RangeBefore, cursorRange);
   5063 
   5064   // Avoid having the cursor of an expression "overwrite" the annotation of the
   5065   // variable declaration that it belongs to.
   5066   // This can happen for C++ constructor expressions whose range generally
   5067   // include the variable declaration, e.g.:
   5068   //  MyCXXClass foo; // Make sure we don't annotate 'foo' as a CallExpr cursor.
   5069   if (clang_isExpression(cursorK)) {
   5070     Expr *E = getCursorExpr(cursor);
   5071     if (Decl *D = getCursorParentDecl(cursor)) {
   5072       const unsigned I = NextToken();
   5073       if (E->getLocStart().isValid() && D->getLocation().isValid() &&
   5074           E->getLocStart() == D->getLocation() &&
   5075           E->getLocStart() == GetTokenLoc(I)) {
   5076         Cursors[I] = updateC;
   5077         AdvanceToken();
   5078       }
   5079     }
   5080   }
   5081 
   5082   // Visit children to get their cursor information.
   5083   const unsigned BeforeChildren = NextToken();
   5084   VisitChildren(cursor);
   5085   const unsigned AfterChildren = NextToken();
   5086 
   5087   // Scan the tokens that are at the end of the cursor, but are not captured
   5088   // but the child cursors.
   5089   annotateAndAdvanceTokens(cursor, RangeOverlap, cursorRange);
   5090 
   5091   // Scan the tokens that are at the beginning of the cursor, but are not
   5092   // capture by the child cursors.
   5093   for (unsigned I = BeforeChildren; I != AfterChildren; ++I) {
   5094     if (!clang_isInvalid(clang_getCursorKind(Cursors[I])))
   5095       break;
   5096 
   5097     Cursors[I] = cursor;
   5098   }
   5099 
   5100   return CXChildVisit_Continue;
   5101 }
   5102 
   5103 static enum CXChildVisitResult AnnotateTokensVisitor(CXCursor cursor,
   5104                                                      CXCursor parent,
   5105                                                      CXClientData client_data) {
   5106   return static_cast<AnnotateTokensWorker*>(client_data)->Visit(cursor, parent);
   5107 }
   5108 
   5109 namespace {
   5110 
   5111 /// \brief Uses the macro expansions in the preprocessing record to find
   5112 /// and mark tokens that are macro arguments. This info is used by the
   5113 /// AnnotateTokensWorker.
   5114 class MarkMacroArgTokensVisitor {
   5115   SourceManager &SM;
   5116   CXToken *Tokens;
   5117   unsigned NumTokens;
   5118   unsigned CurIdx;
   5119 
   5120 public:
   5121   MarkMacroArgTokensVisitor(SourceManager &SM,
   5122                             CXToken *tokens, unsigned numTokens)
   5123     : SM(SM), Tokens(tokens), NumTokens(numTokens), CurIdx(0) { }
   5124 
   5125   CXChildVisitResult visit(CXCursor cursor, CXCursor parent) {
   5126     if (cursor.kind != CXCursor_MacroExpansion)
   5127       return CXChildVisit_Continue;
   5128 
   5129     SourceRange macroRange = getCursorMacroExpansion(cursor)->getSourceRange();
   5130     if (macroRange.getBegin() == macroRange.getEnd())
   5131       return CXChildVisit_Continue; // it's not a function macro.
   5132 
   5133     for (; CurIdx < NumTokens; ++CurIdx) {
   5134       if (!SM.isBeforeInTranslationUnit(getTokenLoc(CurIdx),
   5135                                         macroRange.getBegin()))
   5136         break;
   5137     }
   5138 
   5139     if (CurIdx == NumTokens)
   5140       return CXChildVisit_Break;
   5141 
   5142     for (; CurIdx < NumTokens; ++CurIdx) {
   5143       SourceLocation tokLoc = getTokenLoc(CurIdx);
   5144       if (!SM.isBeforeInTranslationUnit(tokLoc, macroRange.getEnd()))
   5145         break;
   5146 
   5147       setFunctionMacroTokenLoc(CurIdx, SM.getMacroArgExpandedLocation(tokLoc));
   5148     }
   5149 
   5150     if (CurIdx == NumTokens)
   5151       return CXChildVisit_Break;
   5152 
   5153     return CXChildVisit_Continue;
   5154   }
   5155 
   5156 private:
   5157   SourceLocation getTokenLoc(unsigned tokI) {
   5158     return SourceLocation::getFromRawEncoding(Tokens[tokI].int_data[1]);
   5159   }
   5160 
   5161   void setFunctionMacroTokenLoc(unsigned tokI, SourceLocation loc) {
   5162     // The third field is reserved and currently not used. Use it here
   5163     // to mark macro arg expanded tokens with their expanded locations.
   5164     Tokens[tokI].int_data[3] = loc.getRawEncoding();
   5165   }
   5166 };
   5167 
   5168 } // end anonymous namespace
   5169 
   5170 static CXChildVisitResult
   5171 MarkMacroArgTokensVisitorDelegate(CXCursor cursor, CXCursor parent,
   5172                                   CXClientData client_data) {
   5173   return static_cast<MarkMacroArgTokensVisitor*>(client_data)->visit(cursor,
   5174                                                                      parent);
   5175 }
   5176 
   5177 namespace {
   5178   struct clang_annotateTokens_Data {
   5179     CXTranslationUnit TU;
   5180     ASTUnit *CXXUnit;
   5181     CXToken *Tokens;
   5182     unsigned NumTokens;
   5183     CXCursor *Cursors;
   5184   };
   5185 }
   5186 
   5187 static void annotatePreprocessorTokens(CXTranslationUnit TU,
   5188                                        SourceRange RegionOfInterest,
   5189                                        AnnotateTokensData &Annotated) {
   5190   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   5191 
   5192   SourceManager &SourceMgr = CXXUnit->getSourceManager();
   5193   std::pair<FileID, unsigned> BeginLocInfo
   5194     = SourceMgr.getDecomposedLoc(RegionOfInterest.getBegin());
   5195   std::pair<FileID, unsigned> EndLocInfo
   5196     = SourceMgr.getDecomposedLoc(RegionOfInterest.getEnd());
   5197 
   5198   if (BeginLocInfo.first != EndLocInfo.first)
   5199     return;
   5200 
   5201   StringRef Buffer;
   5202   bool Invalid = false;
   5203   Buffer = SourceMgr.getBufferData(BeginLocInfo.first, &Invalid);
   5204   if (Buffer.empty() || Invalid)
   5205     return;
   5206 
   5207   Lexer Lex(SourceMgr.getLocForStartOfFile(BeginLocInfo.first),
   5208             CXXUnit->getASTContext().getLangOpts(),
   5209             Buffer.begin(), Buffer.data() + BeginLocInfo.second,
   5210             Buffer.end());
   5211   Lex.SetCommentRetentionState(true);
   5212 
   5213   // Lex tokens in raw mode until we hit the end of the range, to avoid
   5214   // entering #includes or expanding macros.
   5215   while (true) {
   5216     Token Tok;
   5217     Lex.LexFromRawLexer(Tok);
   5218 
   5219   reprocess:
   5220     if (Tok.is(tok::hash) && Tok.isAtStartOfLine()) {
   5221       // We have found a preprocessing directive. Gobble it up so that we
   5222       // don't see it while preprocessing these tokens later, but keep track
   5223       // of all of the token locations inside this preprocessing directive so
   5224       // that we can annotate them appropriately.
   5225       //
   5226       // FIXME: Some simple tests here could identify macro definitions and
   5227       // #undefs, to provide specific cursor kinds for those.
   5228       SmallVector<SourceLocation, 32> Locations;
   5229       do {
   5230         Locations.push_back(Tok.getLocation());
   5231         Lex.LexFromRawLexer(Tok);
   5232       } while (!Tok.isAtStartOfLine() && !Tok.is(tok::eof));
   5233 
   5234       using namespace cxcursor;
   5235       CXCursor Cursor
   5236       = MakePreprocessingDirectiveCursor(SourceRange(Locations.front(),
   5237                                                      Locations.back()),
   5238                                          TU);
   5239       for (unsigned I = 0, N = Locations.size(); I != N; ++I) {
   5240         Annotated[Locations[I].getRawEncoding()] = Cursor;
   5241       }
   5242 
   5243       if (Tok.isAtStartOfLine())
   5244         goto reprocess;
   5245 
   5246       continue;
   5247     }
   5248 
   5249     if (Tok.is(tok::eof))
   5250       break;
   5251   }
   5252 }
   5253 
   5254 // This gets run a separate thread to avoid stack blowout.
   5255 static void clang_annotateTokensImpl(void *UserData) {
   5256   CXTranslationUnit TU = ((clang_annotateTokens_Data*)UserData)->TU;
   5257   ASTUnit *CXXUnit = ((clang_annotateTokens_Data*)UserData)->CXXUnit;
   5258   CXToken *Tokens = ((clang_annotateTokens_Data*)UserData)->Tokens;
   5259   const unsigned NumTokens = ((clang_annotateTokens_Data*)UserData)->NumTokens;
   5260   CXCursor *Cursors = ((clang_annotateTokens_Data*)UserData)->Cursors;
   5261 
   5262   CIndexer *CXXIdx = (CIndexer*)TU->CIdx;
   5263   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForEditing))
   5264     setThreadBackgroundPriority();
   5265 
   5266   // Determine the region of interest, which contains all of the tokens.
   5267   SourceRange RegionOfInterest;
   5268   RegionOfInterest.setBegin(
   5269     cxloc::translateSourceLocation(clang_getTokenLocation(TU, Tokens[0])));
   5270   RegionOfInterest.setEnd(
   5271     cxloc::translateSourceLocation(clang_getTokenLocation(TU,
   5272                                                          Tokens[NumTokens-1])));
   5273 
   5274   // A mapping from the source locations found when re-lexing or traversing the
   5275   // region of interest to the corresponding cursors.
   5276   AnnotateTokensData Annotated;
   5277 
   5278   // Relex the tokens within the source range to look for preprocessing
   5279   // directives.
   5280   annotatePreprocessorTokens(TU, RegionOfInterest, Annotated);
   5281 
   5282   if (CXXUnit->getPreprocessor().getPreprocessingRecord()) {
   5283     // Search and mark tokens that are macro argument expansions.
   5284     MarkMacroArgTokensVisitor Visitor(CXXUnit->getSourceManager(),
   5285                                       Tokens, NumTokens);
   5286     CursorVisitor MacroArgMarker(TU,
   5287                                  MarkMacroArgTokensVisitorDelegate, &Visitor,
   5288                                  /*VisitPreprocessorLast=*/true,
   5289                                  /*VisitIncludedEntities=*/false,
   5290                                  RegionOfInterest);
   5291     MacroArgMarker.visitPreprocessedEntitiesInRegion();
   5292   }
   5293 
   5294   // Annotate all of the source locations in the region of interest that map to
   5295   // a specific cursor.
   5296   AnnotateTokensWorker W(Annotated, Tokens, Cursors, NumTokens,
   5297                          TU, RegionOfInterest);
   5298 
   5299   // FIXME: We use a ridiculous stack size here because the data-recursion
   5300   // algorithm uses a large stack frame than the non-data recursive version,
   5301   // and AnnotationTokensWorker currently transforms the data-recursion
   5302   // algorithm back into a traditional recursion by explicitly calling
   5303   // VisitChildren().  We will need to remove this explicit recursive call.
   5304   W.AnnotateTokens();
   5305 
   5306   // If we ran into any entities that involve context-sensitive keywords,
   5307   // take another pass through the tokens to mark them as such.
   5308   if (W.hasContextSensitiveKeywords()) {
   5309     for (unsigned I = 0; I != NumTokens; ++I) {
   5310       if (clang_getTokenKind(Tokens[I]) != CXToken_Identifier)
   5311         continue;
   5312 
   5313       if (Cursors[I].kind == CXCursor_ObjCPropertyDecl) {
   5314         IdentifierInfo *II = static_cast<IdentifierInfo *>(Tokens[I].ptr_data);
   5315         if (ObjCPropertyDecl *Property
   5316             = dyn_cast_or_null<ObjCPropertyDecl>(getCursorDecl(Cursors[I]))) {
   5317           if (Property->getPropertyAttributesAsWritten() != 0 &&
   5318               llvm::StringSwitch<bool>(II->getName())
   5319               .Case("readonly", true)
   5320               .Case("assign", true)
   5321               .Case("unsafe_unretained", true)
   5322               .Case("readwrite", true)
   5323               .Case("retain", true)
   5324               .Case("copy", true)
   5325               .Case("nonatomic", true)
   5326               .Case("atomic", true)
   5327               .Case("getter", true)
   5328               .Case("setter", true)
   5329               .Case("strong", true)
   5330               .Case("weak", true)
   5331               .Default(false))
   5332             Tokens[I].int_data[0] = CXToken_Keyword;
   5333         }
   5334         continue;
   5335       }
   5336 
   5337       if (Cursors[I].kind == CXCursor_ObjCInstanceMethodDecl ||
   5338           Cursors[I].kind == CXCursor_ObjCClassMethodDecl) {
   5339         IdentifierInfo *II = static_cast<IdentifierInfo *>(Tokens[I].ptr_data);
   5340         if (llvm::StringSwitch<bool>(II->getName())
   5341             .Case("in", true)
   5342             .Case("out", true)
   5343             .Case("inout", true)
   5344             .Case("oneway", true)
   5345             .Case("bycopy", true)
   5346             .Case("byref", true)
   5347             .Default(false))
   5348           Tokens[I].int_data[0] = CXToken_Keyword;
   5349         continue;
   5350       }
   5351 
   5352       if (Cursors[I].kind == CXCursor_CXXFinalAttr ||
   5353           Cursors[I].kind == CXCursor_CXXOverrideAttr) {
   5354         Tokens[I].int_data[0] = CXToken_Keyword;
   5355         continue;
   5356       }
   5357     }
   5358   }
   5359 }
   5360 
   5361 extern "C" {
   5362 
   5363 void clang_annotateTokens(CXTranslationUnit TU,
   5364                           CXToken *Tokens, unsigned NumTokens,
   5365                           CXCursor *Cursors) {
   5366 
   5367   if (NumTokens == 0 || !Tokens || !Cursors)
   5368     return;
   5369 
   5370   // Any token we don't specifically annotate will have a NULL cursor.
   5371   CXCursor C = clang_getNullCursor();
   5372   for (unsigned I = 0; I != NumTokens; ++I)
   5373     Cursors[I] = C;
   5374 
   5375   ASTUnit *CXXUnit = static_cast<ASTUnit *>(TU->TUData);
   5376   if (!CXXUnit)
   5377     return;
   5378 
   5379   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   5380 
   5381   clang_annotateTokens_Data data = { TU, CXXUnit, Tokens, NumTokens, Cursors };
   5382   llvm::CrashRecoveryContext CRC;
   5383   if (!RunSafely(CRC, clang_annotateTokensImpl, &data,
   5384                  GetSafetyThreadStackSize() * 2)) {
   5385     fprintf(stderr, "libclang: crash detected while annotating tokens\n");
   5386   }
   5387 }
   5388 
   5389 } // end: extern "C"
   5390 
   5391 //===----------------------------------------------------------------------===//
   5392 // Operations for querying linkage of a cursor.
   5393 //===----------------------------------------------------------------------===//
   5394 
   5395 extern "C" {
   5396 CXLinkageKind clang_getCursorLinkage(CXCursor cursor) {
   5397   if (!clang_isDeclaration(cursor.kind))
   5398     return CXLinkage_Invalid;
   5399 
   5400   Decl *D = cxcursor::getCursorDecl(cursor);
   5401   if (NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D))
   5402     switch (ND->getLinkage()) {
   5403       case NoLinkage: return CXLinkage_NoLinkage;
   5404       case InternalLinkage: return CXLinkage_Internal;
   5405       case UniqueExternalLinkage: return CXLinkage_UniqueExternal;
   5406       case ExternalLinkage: return CXLinkage_External;
   5407     };
   5408 
   5409   return CXLinkage_Invalid;
   5410 }
   5411 } // end: extern "C"
   5412 
   5413 //===----------------------------------------------------------------------===//
   5414 // Operations for querying language of a cursor.
   5415 //===----------------------------------------------------------------------===//
   5416 
   5417 static CXLanguageKind getDeclLanguage(const Decl *D) {
   5418   if (!D)
   5419     return CXLanguage_C;
   5420 
   5421   switch (D->getKind()) {
   5422     default:
   5423       break;
   5424     case Decl::ImplicitParam:
   5425     case Decl::ObjCAtDefsField:
   5426     case Decl::ObjCCategory:
   5427     case Decl::ObjCCategoryImpl:
   5428     case Decl::ObjCCompatibleAlias:
   5429     case Decl::ObjCImplementation:
   5430     case Decl::ObjCInterface:
   5431     case Decl::ObjCIvar:
   5432     case Decl::ObjCMethod:
   5433     case Decl::ObjCProperty:
   5434     case Decl::ObjCPropertyImpl:
   5435     case Decl::ObjCProtocol:
   5436       return CXLanguage_ObjC;
   5437     case Decl::CXXConstructor:
   5438     case Decl::CXXConversion:
   5439     case Decl::CXXDestructor:
   5440     case Decl::CXXMethod:
   5441     case Decl::CXXRecord:
   5442     case Decl::ClassTemplate:
   5443     case Decl::ClassTemplatePartialSpecialization:
   5444     case Decl::ClassTemplateSpecialization:
   5445     case Decl::Friend:
   5446     case Decl::FriendTemplate:
   5447     case Decl::FunctionTemplate:
   5448     case Decl::LinkageSpec:
   5449     case Decl::Namespace:
   5450     case Decl::NamespaceAlias:
   5451     case Decl::NonTypeTemplateParm:
   5452     case Decl::StaticAssert:
   5453     case Decl::TemplateTemplateParm:
   5454     case Decl::TemplateTypeParm:
   5455     case Decl::UnresolvedUsingTypename:
   5456     case Decl::UnresolvedUsingValue:
   5457     case Decl::Using:
   5458     case Decl::UsingDirective:
   5459     case Decl::UsingShadow:
   5460       return CXLanguage_CPlusPlus;
   5461   }
   5462 
   5463   return CXLanguage_C;
   5464 }
   5465 
   5466 extern "C" {
   5467 
   5468 enum CXAvailabilityKind clang_getCursorAvailability(CXCursor cursor) {
   5469   if (clang_isDeclaration(cursor.kind))
   5470     if (Decl *D = cxcursor::getCursorDecl(cursor)) {
   5471       if (isa<FunctionDecl>(D) && cast<FunctionDecl>(D)->isDeleted())
   5472         return CXAvailability_Available;
   5473 
   5474       switch (D->getAvailability()) {
   5475       case AR_Available:
   5476       case AR_NotYetIntroduced:
   5477         return CXAvailability_Available;
   5478 
   5479       case AR_Deprecated:
   5480         return CXAvailability_Deprecated;
   5481 
   5482       case AR_Unavailable:
   5483         return CXAvailability_NotAvailable;
   5484       }
   5485     }
   5486 
   5487   return CXAvailability_Available;
   5488 }
   5489 
   5490 CXLanguageKind clang_getCursorLanguage(CXCursor cursor) {
   5491   if (clang_isDeclaration(cursor.kind))
   5492     return getDeclLanguage(cxcursor::getCursorDecl(cursor));
   5493 
   5494   return CXLanguage_Invalid;
   5495 }
   5496 
   5497  /// \brief If the given cursor is the "templated" declaration
   5498  /// descibing a class or function template, return the class or
   5499  /// function template.
   5500 static Decl *maybeGetTemplateCursor(Decl *D) {
   5501   if (!D)
   5502     return 0;
   5503 
   5504   if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
   5505     if (FunctionTemplateDecl *FunTmpl = FD->getDescribedFunctionTemplate())
   5506       return FunTmpl;
   5507 
   5508   if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D))
   5509     if (ClassTemplateDecl *ClassTmpl = RD->getDescribedClassTemplate())
   5510       return ClassTmpl;
   5511 
   5512   return D;
   5513 }
   5514 
   5515 CXCursor clang_getCursorSemanticParent(CXCursor cursor) {
   5516   if (clang_isDeclaration(cursor.kind)) {
   5517     if (Decl *D = getCursorDecl(cursor)) {
   5518       DeclContext *DC = D->getDeclContext();
   5519       if (!DC)
   5520         return clang_getNullCursor();
   5521 
   5522       return MakeCXCursor(maybeGetTemplateCursor(cast<Decl>(DC)),
   5523                           getCursorTU(cursor));
   5524     }
   5525   }
   5526 
   5527   if (clang_isStatement(cursor.kind) || clang_isExpression(cursor.kind)) {
   5528     if (Decl *D = getCursorDecl(cursor))
   5529       return MakeCXCursor(D, getCursorTU(cursor));
   5530   }
   5531 
   5532   return clang_getNullCursor();
   5533 }
   5534 
   5535 CXCursor clang_getCursorLexicalParent(CXCursor cursor) {
   5536   if (clang_isDeclaration(cursor.kind)) {
   5537     if (Decl *D = getCursorDecl(cursor)) {
   5538       DeclContext *DC = D->getLexicalDeclContext();
   5539       if (!DC)
   5540         return clang_getNullCursor();
   5541 
   5542       return MakeCXCursor(maybeGetTemplateCursor(cast<Decl>(DC)),
   5543                           getCursorTU(cursor));
   5544     }
   5545   }
   5546 
   5547   // FIXME: Note that we can't easily compute the lexical context of a
   5548   // statement or expression, so we return nothing.
   5549   return clang_getNullCursor();
   5550 }
   5551 
   5552 void clang_getOverriddenCursors(CXCursor cursor,
   5553                                 CXCursor **overridden,
   5554                                 unsigned *num_overridden) {
   5555   if (overridden)
   5556     *overridden = 0;
   5557   if (num_overridden)
   5558     *num_overridden = 0;
   5559   if (!overridden || !num_overridden)
   5560     return;
   5561   if (!clang_isDeclaration(cursor.kind))
   5562     return;
   5563 
   5564   SmallVector<CXCursor, 8> Overridden;
   5565   cxcursor::getOverriddenCursors(cursor, Overridden);
   5566 
   5567   // Don't allocate memory if we have no overriden cursors.
   5568   if (Overridden.size() == 0)
   5569     return;
   5570 
   5571   *num_overridden = Overridden.size();
   5572   *overridden = new CXCursor [Overridden.size()];
   5573   std::copy(Overridden.begin(), Overridden.end(), *overridden);
   5574 }
   5575 
   5576 void clang_disposeOverriddenCursors(CXCursor *overridden) {
   5577   delete [] overridden;
   5578 }
   5579 
   5580 CXFile clang_getIncludedFile(CXCursor cursor) {
   5581   if (cursor.kind != CXCursor_InclusionDirective)
   5582     return 0;
   5583 
   5584   InclusionDirective *ID = getCursorInclusionDirective(cursor);
   5585   return (void *)ID->getFile();
   5586 }
   5587 
   5588 } // end: extern "C"
   5589 
   5590 
   5591 //===----------------------------------------------------------------------===//
   5592 // C++ AST instrospection.
   5593 //===----------------------------------------------------------------------===//
   5594 
   5595 extern "C" {
   5596 unsigned clang_CXXMethod_isStatic(CXCursor C) {
   5597   if (!clang_isDeclaration(C.kind))
   5598     return 0;
   5599 
   5600   CXXMethodDecl *Method = 0;
   5601   Decl *D = cxcursor::getCursorDecl(C);
   5602   if (FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(D))
   5603     Method = dyn_cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
   5604   else
   5605     Method = dyn_cast_or_null<CXXMethodDecl>(D);
   5606   return (Method && Method->isStatic()) ? 1 : 0;
   5607 }
   5608 
   5609 unsigned clang_CXXMethod_isVirtual(CXCursor C) {
   5610   if (!clang_isDeclaration(C.kind))
   5611     return 0;
   5612 
   5613   CXXMethodDecl *Method = 0;
   5614   Decl *D = cxcursor::getCursorDecl(C);
   5615   if (FunctionTemplateDecl *FunTmpl = dyn_cast_or_null<FunctionTemplateDecl>(D))
   5616     Method = dyn_cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
   5617   else
   5618     Method = dyn_cast_or_null<CXXMethodDecl>(D);
   5619   return (Method && Method->isVirtual()) ? 1 : 0;
   5620 }
   5621 } // end: extern "C"
   5622 
   5623 //===----------------------------------------------------------------------===//
   5624 // Attribute introspection.
   5625 //===----------------------------------------------------------------------===//
   5626 
   5627 extern "C" {
   5628 CXType clang_getIBOutletCollectionType(CXCursor C) {
   5629   if (C.kind != CXCursor_IBOutletCollectionAttr)
   5630     return cxtype::MakeCXType(QualType(), cxcursor::getCursorTU(C));
   5631 
   5632   IBOutletCollectionAttr *A =
   5633     cast<IBOutletCollectionAttr>(cxcursor::getCursorAttr(C));
   5634 
   5635   return cxtype::MakeCXType(A->getInterface(), cxcursor::getCursorTU(C));
   5636 }
   5637 } // end: extern "C"
   5638 
   5639 //===----------------------------------------------------------------------===//
   5640 // Inspecting memory usage.
   5641 //===----------------------------------------------------------------------===//
   5642 
   5643 typedef std::vector<CXTUResourceUsageEntry> MemUsageEntries;
   5644 
   5645 static inline void createCXTUResourceUsageEntry(MemUsageEntries &entries,
   5646                                               enum CXTUResourceUsageKind k,
   5647                                               unsigned long amount) {
   5648   CXTUResourceUsageEntry entry = { k, amount };
   5649   entries.push_back(entry);
   5650 }
   5651 
   5652 extern "C" {
   5653 
   5654 const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) {
   5655   const char *str = "";
   5656   switch (kind) {
   5657     case CXTUResourceUsage_AST:
   5658       str = "ASTContext: expressions, declarations, and types";
   5659       break;
   5660     case CXTUResourceUsage_Identifiers:
   5661       str = "ASTContext: identifiers";
   5662       break;
   5663     case CXTUResourceUsage_Selectors:
   5664       str = "ASTContext: selectors";
   5665       break;
   5666     case CXTUResourceUsage_GlobalCompletionResults:
   5667       str = "Code completion: cached global results";
   5668       break;
   5669     case CXTUResourceUsage_SourceManagerContentCache:
   5670       str = "SourceManager: content cache allocator";
   5671       break;
   5672     case CXTUResourceUsage_AST_SideTables:
   5673       str = "ASTContext: side tables";
   5674       break;
   5675     case CXTUResourceUsage_SourceManager_Membuffer_Malloc:
   5676       str = "SourceManager: malloc'ed memory buffers";
   5677       break;
   5678     case CXTUResourceUsage_SourceManager_Membuffer_MMap:
   5679       str = "SourceManager: mmap'ed memory buffers";
   5680       break;
   5681     case CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc:
   5682       str = "ExternalASTSource: malloc'ed memory buffers";
   5683       break;
   5684     case CXTUResourceUsage_ExternalASTSource_Membuffer_MMap:
   5685       str = "ExternalASTSource: mmap'ed memory buffers";
   5686       break;
   5687     case CXTUResourceUsage_Preprocessor:
   5688       str = "Preprocessor: malloc'ed memory";
   5689       break;
   5690     case CXTUResourceUsage_PreprocessingRecord:
   5691       str = "Preprocessor: PreprocessingRecord";
   5692       break;
   5693     case CXTUResourceUsage_SourceManager_DataStructures:
   5694       str = "SourceManager: data structures and tables";
   5695       break;
   5696     case CXTUResourceUsage_Preprocessor_HeaderSearch:
   5697       str = "Preprocessor: header search tables";
   5698       break;
   5699   }
   5700   return str;
   5701 }
   5702 
   5703 CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
   5704   if (!TU) {
   5705     CXTUResourceUsage usage = { (void*) 0, 0, 0 };
   5706     return usage;
   5707   }
   5708 
   5709   ASTUnit *astUnit = static_cast<ASTUnit*>(TU->TUData);
   5710   OwningPtr<MemUsageEntries> entries(new MemUsageEntries());
   5711   ASTContext &astContext = astUnit->getASTContext();
   5712 
   5713   // How much memory is used by AST nodes and types?
   5714   createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_AST,
   5715     (unsigned long) astContext.getASTAllocatedMemory());
   5716 
   5717   // How much memory is used by identifiers?
   5718   createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Identifiers,
   5719     (unsigned long) astContext.Idents.getAllocator().getTotalMemory());
   5720 
   5721   // How much memory is used for selectors?
   5722   createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Selectors,
   5723     (unsigned long) astContext.Selectors.getTotalMemory());
   5724 
   5725   // How much memory is used by ASTContext's side tables?
   5726   createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_AST_SideTables,
   5727     (unsigned long) astContext.getSideTableAllocatedMemory());
   5728 
   5729   // How much memory is used for caching global code completion results?
   5730   unsigned long completionBytes = 0;
   5731   if (GlobalCodeCompletionAllocator *completionAllocator =
   5732       astUnit->getCachedCompletionAllocator().getPtr()) {
   5733     completionBytes = completionAllocator->getTotalMemory();
   5734   }
   5735   createCXTUResourceUsageEntry(*entries,
   5736                                CXTUResourceUsage_GlobalCompletionResults,
   5737                                completionBytes);
   5738 
   5739   // How much memory is being used by SourceManager's content cache?
   5740   createCXTUResourceUsageEntry(*entries,
   5741           CXTUResourceUsage_SourceManagerContentCache,
   5742           (unsigned long) astContext.getSourceManager().getContentCacheSize());
   5743 
   5744   // How much memory is being used by the MemoryBuffer's in SourceManager?
   5745   const SourceManager::MemoryBufferSizes &srcBufs =
   5746     astUnit->getSourceManager().getMemoryBufferSizes();
   5747 
   5748   createCXTUResourceUsageEntry(*entries,
   5749                                CXTUResourceUsage_SourceManager_Membuffer_Malloc,
   5750                                (unsigned long) srcBufs.malloc_bytes);
   5751   createCXTUResourceUsageEntry(*entries,
   5752                                CXTUResourceUsage_SourceManager_Membuffer_MMap,
   5753                                (unsigned long) srcBufs.mmap_bytes);
   5754   createCXTUResourceUsageEntry(*entries,
   5755                                CXTUResourceUsage_SourceManager_DataStructures,
   5756                                (unsigned long) astContext.getSourceManager()
   5757                                 .getDataStructureSizes());
   5758 
   5759   // How much memory is being used by the ExternalASTSource?
   5760   if (ExternalASTSource *esrc = astContext.getExternalSource()) {
   5761     const ExternalASTSource::MemoryBufferSizes &sizes =
   5762       esrc->getMemoryBufferSizes();
   5763 
   5764     createCXTUResourceUsageEntry(*entries,
   5765       CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc,
   5766                                  (unsigned long) sizes.malloc_bytes);
   5767     createCXTUResourceUsageEntry(*entries,
   5768       CXTUResourceUsage_ExternalASTSource_Membuffer_MMap,
   5769                                  (unsigned long) sizes.mmap_bytes);
   5770   }
   5771 
   5772   // How much memory is being used by the Preprocessor?
   5773   Preprocessor &pp = astUnit->getPreprocessor();
   5774   createCXTUResourceUsageEntry(*entries,
   5775                                CXTUResourceUsage_Preprocessor,
   5776                                pp.getTotalMemory());
   5777 
   5778   if (PreprocessingRecord *pRec = pp.getPreprocessingRecord()) {
   5779     createCXTUResourceUsageEntry(*entries,
   5780                                  CXTUResourceUsage_PreprocessingRecord,
   5781                                  pRec->getTotalMemory());
   5782   }
   5783 
   5784   createCXTUResourceUsageEntry(*entries,
   5785                                CXTUResourceUsage_Preprocessor_HeaderSearch,
   5786                                pp.getHeaderSearchInfo().getTotalMemory());
   5787 
   5788   CXTUResourceUsage usage = { (void*) entries.get(),
   5789                             (unsigned) entries->size(),
   5790                             entries->size() ? &(*entries)[0] : 0 };
   5791   entries.take();
   5792   return usage;
   5793 }
   5794 
   5795 void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage) {
   5796   if (usage.data)
   5797     delete (MemUsageEntries*) usage.data;
   5798 }
   5799 
   5800 } // end extern "C"
   5801 
   5802 void clang::PrintLibclangResourceUsage(CXTranslationUnit TU) {
   5803   CXTUResourceUsage Usage = clang_getCXTUResourceUsage(TU);
   5804   for (unsigned I = 0; I != Usage.numEntries; ++I)
   5805     fprintf(stderr, "  %s: %lu\n",
   5806             clang_getTUResourceUsageName(Usage.entries[I].kind),
   5807             Usage.entries[I].amount);
   5808 
   5809   clang_disposeCXTUResourceUsage(Usage);
   5810 }
   5811 
   5812 //===----------------------------------------------------------------------===//
   5813 // Misc. utility functions.
   5814 //===----------------------------------------------------------------------===//
   5815 
   5816 /// Default to using an 8 MB stack size on "safety" threads.
   5817 static unsigned SafetyStackThreadSize = 8 << 20;
   5818 
   5819 namespace clang {
   5820 
   5821 bool RunSafely(llvm::CrashRecoveryContext &CRC,
   5822                void (*Fn)(void*), void *UserData,
   5823                unsigned Size) {
   5824   if (!Size)
   5825     Size = GetSafetyThreadStackSize();
   5826   if (Size)
   5827     return CRC.RunSafelyOnThread(Fn, UserData, Size);
   5828   return CRC.RunSafely(Fn, UserData);
   5829 }
   5830 
   5831 unsigned GetSafetyThreadStackSize() {
   5832   return SafetyStackThreadSize;
   5833 }
   5834 
   5835 void SetSafetyThreadStackSize(unsigned Value) {
   5836   SafetyStackThreadSize = Value;
   5837 }
   5838 
   5839 }
   5840 
   5841 void clang::setThreadBackgroundPriority() {
   5842   // FIXME: Move to llvm/Support and make it cross-platform.
   5843 #ifdef __APPLE__
   5844   setpriority(PRIO_DARWIN_THREAD, 0, PRIO_DARWIN_BG);
   5845 #endif
   5846 }
   5847 
   5848 void cxindex::printDiagsToStderr(ASTUnit *Unit) {
   5849   if (!Unit)
   5850     return;
   5851 
   5852   for (ASTUnit::stored_diag_iterator D = Unit->stored_diag_begin(),
   5853                                   DEnd = Unit->stored_diag_end();
   5854        D != DEnd; ++D) {
   5855     CXStoredDiagnostic Diag(*D, Unit->getASTContext().getLangOpts());
   5856     CXString Msg = clang_formatDiagnostic(&Diag,
   5857                                 clang_defaultDiagnosticDisplayOptions());
   5858     fprintf(stderr, "%s\n", clang_getCString(Msg));
   5859     clang_disposeString(Msg);
   5860   }
   5861 #ifdef LLVM_ON_WIN32
   5862   // On Windows, force a flush, since there may be multiple copies of
   5863   // stderr and stdout in the file system, all with different buffers
   5864   // but writing to the same device.
   5865   fflush(stderr);
   5866 #endif
   5867 }
   5868 
   5869 extern "C" {
   5870 
   5871 CXString clang_getClangVersion() {
   5872   return createCXString(getClangFullVersion());
   5873 }
   5874 
   5875 } // end: extern "C"
   5876 
   5877