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