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