Home | History | Annotate | Download | only in Sema
      1 //===---------------- SemaCodeComplete.cpp - Code Completion ----*- C++ -*-===//
      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 defines the code-completion semantic actions.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 #include "clang/Sema/SemaInternal.h"
     14 #include "clang/AST/DeclObjC.h"
     15 #include "clang/AST/ExprCXX.h"
     16 #include "clang/AST/ExprObjC.h"
     17 #include "clang/Basic/CharInfo.h"
     18 #include "clang/Lex/HeaderSearch.h"
     19 #include "clang/Lex/MacroInfo.h"
     20 #include "clang/Lex/Preprocessor.h"
     21 #include "clang/Sema/CodeCompleteConsumer.h"
     22 #include "clang/Sema/ExternalSemaSource.h"
     23 #include "clang/Sema/Lookup.h"
     24 #include "clang/Sema/Overload.h"
     25 #include "clang/Sema/Scope.h"
     26 #include "clang/Sema/ScopeInfo.h"
     27 #include "llvm/ADT/DenseSet.h"
     28 #include "llvm/ADT/SmallBitVector.h"
     29 #include "llvm/ADT/SmallPtrSet.h"
     30 #include "llvm/ADT/SmallString.h"
     31 #include "llvm/ADT/StringExtras.h"
     32 #include "llvm/ADT/StringSwitch.h"
     33 #include "llvm/ADT/Twine.h"
     34 #include <list>
     35 #include <map>
     36 #include <vector>
     37 
     38 using namespace clang;
     39 using namespace sema;
     40 
     41 namespace {
     42   /// \brief A container of code-completion results.
     43   class ResultBuilder {
     44   public:
     45     /// \brief The type of a name-lookup filter, which can be provided to the
     46     /// name-lookup routines to specify which declarations should be included in
     47     /// the result set (when it returns true) and which declarations should be
     48     /// filtered out (returns false).
     49     typedef bool (ResultBuilder::*LookupFilter)(const NamedDecl *) const;
     50 
     51     typedef CodeCompletionResult Result;
     52 
     53   private:
     54     /// \brief The actual results we have found.
     55     std::vector<Result> Results;
     56 
     57     /// \brief A record of all of the declarations we have found and placed
     58     /// into the result set, used to ensure that no declaration ever gets into
     59     /// the result set twice.
     60     llvm::SmallPtrSet<const Decl*, 16> AllDeclsFound;
     61 
     62     typedef std::pair<const NamedDecl *, unsigned> DeclIndexPair;
     63 
     64     /// \brief An entry in the shadow map, which is optimized to store
     65     /// a single (declaration, index) mapping (the common case) but
     66     /// can also store a list of (declaration, index) mappings.
     67     class ShadowMapEntry {
     68       typedef SmallVector<DeclIndexPair, 4> DeclIndexPairVector;
     69 
     70       /// \brief Contains either the solitary NamedDecl * or a vector
     71       /// of (declaration, index) pairs.
     72       llvm::PointerUnion<const NamedDecl *, DeclIndexPairVector*> DeclOrVector;
     73 
     74       /// \brief When the entry contains a single declaration, this is
     75       /// the index associated with that entry.
     76       unsigned SingleDeclIndex;
     77 
     78     public:
     79       ShadowMapEntry() : DeclOrVector(), SingleDeclIndex(0) { }
     80 
     81       void Add(const NamedDecl *ND, unsigned Index) {
     82         if (DeclOrVector.isNull()) {
     83           // 0 - > 1 elements: just set the single element information.
     84           DeclOrVector = ND;
     85           SingleDeclIndex = Index;
     86           return;
     87         }
     88 
     89         if (const NamedDecl *PrevND =
     90                 DeclOrVector.dyn_cast<const NamedDecl *>()) {
     91           // 1 -> 2 elements: create the vector of results and push in the
     92           // existing declaration.
     93           DeclIndexPairVector *Vec = new DeclIndexPairVector;
     94           Vec->push_back(DeclIndexPair(PrevND, SingleDeclIndex));
     95           DeclOrVector = Vec;
     96         }
     97 
     98         // Add the new element to the end of the vector.
     99         DeclOrVector.get<DeclIndexPairVector*>()->push_back(
    100                                                     DeclIndexPair(ND, Index));
    101       }
    102 
    103       void Destroy() {
    104         if (DeclIndexPairVector *Vec
    105               = DeclOrVector.dyn_cast<DeclIndexPairVector *>()) {
    106           delete Vec;
    107           DeclOrVector = ((NamedDecl *)0);
    108         }
    109       }
    110 
    111       // Iteration.
    112       class iterator;
    113       iterator begin() const;
    114       iterator end() const;
    115     };
    116 
    117     /// \brief A mapping from declaration names to the declarations that have
    118     /// this name within a particular scope and their index within the list of
    119     /// results.
    120     typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap;
    121 
    122     /// \brief The semantic analysis object for which results are being
    123     /// produced.
    124     Sema &SemaRef;
    125 
    126     /// \brief The allocator used to allocate new code-completion strings.
    127     CodeCompletionAllocator &Allocator;
    128 
    129     CodeCompletionTUInfo &CCTUInfo;
    130 
    131     /// \brief If non-NULL, a filter function used to remove any code-completion
    132     /// results that are not desirable.
    133     LookupFilter Filter;
    134 
    135     /// \brief Whether we should allow declarations as
    136     /// nested-name-specifiers that would otherwise be filtered out.
    137     bool AllowNestedNameSpecifiers;
    138 
    139     /// \brief If set, the type that we would prefer our resulting value
    140     /// declarations to have.
    141     ///
    142     /// Closely matching the preferred type gives a boost to a result's
    143     /// priority.
    144     CanQualType PreferredType;
    145 
    146     /// \brief A list of shadow maps, which is used to model name hiding at
    147     /// different levels of, e.g., the inheritance hierarchy.
    148     std::list<ShadowMap> ShadowMaps;
    149 
    150     /// \brief If we're potentially referring to a C++ member function, the set
    151     /// of qualifiers applied to the object type.
    152     Qualifiers ObjectTypeQualifiers;
    153 
    154     /// \brief Whether the \p ObjectTypeQualifiers field is active.
    155     bool HasObjectTypeQualifiers;
    156 
    157     /// \brief The selector that we prefer.
    158     Selector PreferredSelector;
    159 
    160     /// \brief The completion context in which we are gathering results.
    161     CodeCompletionContext CompletionContext;
    162 
    163     /// \brief If we are in an instance method definition, the \@implementation
    164     /// object.
    165     ObjCImplementationDecl *ObjCImplementation;
    166 
    167     void AdjustResultPriorityForDecl(Result &R);
    168 
    169     void MaybeAddConstructorResults(Result R);
    170 
    171   public:
    172     explicit ResultBuilder(Sema &SemaRef, CodeCompletionAllocator &Allocator,
    173                            CodeCompletionTUInfo &CCTUInfo,
    174                            const CodeCompletionContext &CompletionContext,
    175                            LookupFilter Filter = 0)
    176       : SemaRef(SemaRef), Allocator(Allocator), CCTUInfo(CCTUInfo),
    177         Filter(Filter),
    178         AllowNestedNameSpecifiers(false), HasObjectTypeQualifiers(false),
    179         CompletionContext(CompletionContext),
    180         ObjCImplementation(0)
    181     {
    182       // If this is an Objective-C instance method definition, dig out the
    183       // corresponding implementation.
    184       switch (CompletionContext.getKind()) {
    185       case CodeCompletionContext::CCC_Expression:
    186       case CodeCompletionContext::CCC_ObjCMessageReceiver:
    187       case CodeCompletionContext::CCC_ParenthesizedExpression:
    188       case CodeCompletionContext::CCC_Statement:
    189       case CodeCompletionContext::CCC_Recovery:
    190         if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl())
    191           if (Method->isInstanceMethod())
    192             if (ObjCInterfaceDecl *Interface = Method->getClassInterface())
    193               ObjCImplementation = Interface->getImplementation();
    194         break;
    195 
    196       default:
    197         break;
    198       }
    199     }
    200 
    201     /// \brief Determine the priority for a reference to the given declaration.
    202     unsigned getBasePriority(const NamedDecl *D);
    203 
    204     /// \brief Whether we should include code patterns in the completion
    205     /// results.
    206     bool includeCodePatterns() const {
    207       return SemaRef.CodeCompleter &&
    208              SemaRef.CodeCompleter->includeCodePatterns();
    209     }
    210 
    211     /// \brief Set the filter used for code-completion results.
    212     void setFilter(LookupFilter Filter) {
    213       this->Filter = Filter;
    214     }
    215 
    216     Result *data() { return Results.empty()? 0 : &Results.front(); }
    217     unsigned size() const { return Results.size(); }
    218     bool empty() const { return Results.empty(); }
    219 
    220     /// \brief Specify the preferred type.
    221     void setPreferredType(QualType T) {
    222       PreferredType = SemaRef.Context.getCanonicalType(T);
    223     }
    224 
    225     /// \brief Set the cv-qualifiers on the object type, for us in filtering
    226     /// calls to member functions.
    227     ///
    228     /// When there are qualifiers in this set, they will be used to filter
    229     /// out member functions that aren't available (because there will be a
    230     /// cv-qualifier mismatch) or prefer functions with an exact qualifier
    231     /// match.
    232     void setObjectTypeQualifiers(Qualifiers Quals) {
    233       ObjectTypeQualifiers = Quals;
    234       HasObjectTypeQualifiers = true;
    235     }
    236 
    237     /// \brief Set the preferred selector.
    238     ///
    239     /// When an Objective-C method declaration result is added, and that
    240     /// method's selector matches this preferred selector, we give that method
    241     /// a slight priority boost.
    242     void setPreferredSelector(Selector Sel) {
    243       PreferredSelector = Sel;
    244     }
    245 
    246     /// \brief Retrieve the code-completion context for which results are
    247     /// being collected.
    248     const CodeCompletionContext &getCompletionContext() const {
    249       return CompletionContext;
    250     }
    251 
    252     /// \brief Specify whether nested-name-specifiers are allowed.
    253     void allowNestedNameSpecifiers(bool Allow = true) {
    254       AllowNestedNameSpecifiers = Allow;
    255     }
    256 
    257     /// \brief Return the semantic analysis object for which we are collecting
    258     /// code completion results.
    259     Sema &getSema() const { return SemaRef; }
    260 
    261     /// \brief Retrieve the allocator used to allocate code completion strings.
    262     CodeCompletionAllocator &getAllocator() const { return Allocator; }
    263 
    264     CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
    265 
    266     /// \brief Determine whether the given declaration is at all interesting
    267     /// as a code-completion result.
    268     ///
    269     /// \param ND the declaration that we are inspecting.
    270     ///
    271     /// \param AsNestedNameSpecifier will be set true if this declaration is
    272     /// only interesting when it is a nested-name-specifier.
    273     bool isInterestingDecl(const NamedDecl *ND,
    274                            bool &AsNestedNameSpecifier) const;
    275 
    276     /// \brief Check whether the result is hidden by the Hiding declaration.
    277     ///
    278     /// \returns true if the result is hidden and cannot be found, false if
    279     /// the hidden result could still be found. When false, \p R may be
    280     /// modified to describe how the result can be found (e.g., via extra
    281     /// qualification).
    282     bool CheckHiddenResult(Result &R, DeclContext *CurContext,
    283                            const NamedDecl *Hiding);
    284 
    285     /// \brief Add a new result to this result set (if it isn't already in one
    286     /// of the shadow maps), or replace an existing result (for, e.g., a
    287     /// redeclaration).
    288     ///
    289     /// \param R the result to add (if it is unique).
    290     ///
    291     /// \param CurContext the context in which this result will be named.
    292     void MaybeAddResult(Result R, DeclContext *CurContext = 0);
    293 
    294     /// \brief Add a new result to this result set, where we already know
    295     /// the hiding declation (if any).
    296     ///
    297     /// \param R the result to add (if it is unique).
    298     ///
    299     /// \param CurContext the context in which this result will be named.
    300     ///
    301     /// \param Hiding the declaration that hides the result.
    302     ///
    303     /// \param InBaseClass whether the result was found in a base
    304     /// class of the searched context.
    305     void AddResult(Result R, DeclContext *CurContext, NamedDecl *Hiding,
    306                    bool InBaseClass);
    307 
    308     /// \brief Add a new non-declaration result to this result set.
    309     void AddResult(Result R);
    310 
    311     /// \brief Enter into a new scope.
    312     void EnterNewScope();
    313 
    314     /// \brief Exit from the current scope.
    315     void ExitScope();
    316 
    317     /// \brief Ignore this declaration, if it is seen again.
    318     void Ignore(const Decl *D) { AllDeclsFound.insert(D->getCanonicalDecl()); }
    319 
    320     /// \name Name lookup predicates
    321     ///
    322     /// These predicates can be passed to the name lookup functions to filter the
    323     /// results of name lookup. All of the predicates have the same type, so that
    324     ///
    325     //@{
    326     bool IsOrdinaryName(const NamedDecl *ND) const;
    327     bool IsOrdinaryNonTypeName(const NamedDecl *ND) const;
    328     bool IsIntegralConstantValue(const NamedDecl *ND) const;
    329     bool IsOrdinaryNonValueName(const NamedDecl *ND) const;
    330     bool IsNestedNameSpecifier(const NamedDecl *ND) const;
    331     bool IsEnum(const NamedDecl *ND) const;
    332     bool IsClassOrStruct(const NamedDecl *ND) const;
    333     bool IsUnion(const NamedDecl *ND) const;
    334     bool IsNamespace(const NamedDecl *ND) const;
    335     bool IsNamespaceOrAlias(const NamedDecl *ND) const;
    336     bool IsType(const NamedDecl *ND) const;
    337     bool IsMember(const NamedDecl *ND) const;
    338     bool IsObjCIvar(const NamedDecl *ND) const;
    339     bool IsObjCMessageReceiver(const NamedDecl *ND) const;
    340     bool IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const;
    341     bool IsObjCCollection(const NamedDecl *ND) const;
    342     bool IsImpossibleToSatisfy(const NamedDecl *ND) const;
    343     //@}
    344   };
    345 }
    346 
    347 class ResultBuilder::ShadowMapEntry::iterator {
    348   llvm::PointerUnion<const NamedDecl *, const DeclIndexPair *> DeclOrIterator;
    349   unsigned SingleDeclIndex;
    350 
    351 public:
    352   typedef DeclIndexPair value_type;
    353   typedef value_type reference;
    354   typedef std::ptrdiff_t difference_type;
    355   typedef std::input_iterator_tag iterator_category;
    356 
    357   class pointer {
    358     DeclIndexPair Value;
    359 
    360   public:
    361     pointer(const DeclIndexPair &Value) : Value(Value) { }
    362 
    363     const DeclIndexPair *operator->() const {
    364       return &Value;
    365     }
    366   };
    367 
    368   iterator() : DeclOrIterator((NamedDecl *)0), SingleDeclIndex(0) { }
    369 
    370   iterator(const NamedDecl *SingleDecl, unsigned Index)
    371     : DeclOrIterator(SingleDecl), SingleDeclIndex(Index) { }
    372 
    373   iterator(const DeclIndexPair *Iterator)
    374     : DeclOrIterator(Iterator), SingleDeclIndex(0) { }
    375 
    376   iterator &operator++() {
    377     if (DeclOrIterator.is<const NamedDecl *>()) {
    378       DeclOrIterator = (NamedDecl *)0;
    379       SingleDeclIndex = 0;
    380       return *this;
    381     }
    382 
    383     const DeclIndexPair *I = DeclOrIterator.get<const DeclIndexPair*>();
    384     ++I;
    385     DeclOrIterator = I;
    386     return *this;
    387   }
    388 
    389   /*iterator operator++(int) {
    390     iterator tmp(*this);
    391     ++(*this);
    392     return tmp;
    393   }*/
    394 
    395   reference operator*() const {
    396     if (const NamedDecl *ND = DeclOrIterator.dyn_cast<const NamedDecl *>())
    397       return reference(ND, SingleDeclIndex);
    398 
    399     return *DeclOrIterator.get<const DeclIndexPair*>();
    400   }
    401 
    402   pointer operator->() const {
    403     return pointer(**this);
    404   }
    405 
    406   friend bool operator==(const iterator &X, const iterator &Y) {
    407     return X.DeclOrIterator.getOpaqueValue()
    408                                   == Y.DeclOrIterator.getOpaqueValue() &&
    409       X.SingleDeclIndex == Y.SingleDeclIndex;
    410   }
    411 
    412   friend bool operator!=(const iterator &X, const iterator &Y) {
    413     return !(X == Y);
    414   }
    415 };
    416 
    417 ResultBuilder::ShadowMapEntry::iterator
    418 ResultBuilder::ShadowMapEntry::begin() const {
    419   if (DeclOrVector.isNull())
    420     return iterator();
    421 
    422   if (const NamedDecl *ND = DeclOrVector.dyn_cast<const NamedDecl *>())
    423     return iterator(ND, SingleDeclIndex);
    424 
    425   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->begin());
    426 }
    427 
    428 ResultBuilder::ShadowMapEntry::iterator
    429 ResultBuilder::ShadowMapEntry::end() const {
    430   if (DeclOrVector.is<const NamedDecl *>() || DeclOrVector.isNull())
    431     return iterator();
    432 
    433   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->end());
    434 }
    435 
    436 /// \brief Compute the qualification required to get from the current context
    437 /// (\p CurContext) to the target context (\p TargetContext).
    438 ///
    439 /// \param Context the AST context in which the qualification will be used.
    440 ///
    441 /// \param CurContext the context where an entity is being named, which is
    442 /// typically based on the current scope.
    443 ///
    444 /// \param TargetContext the context in which the named entity actually
    445 /// resides.
    446 ///
    447 /// \returns a nested name specifier that refers into the target context, or
    448 /// NULL if no qualification is needed.
    449 static NestedNameSpecifier *
    450 getRequiredQualification(ASTContext &Context,
    451                          const DeclContext *CurContext,
    452                          const DeclContext *TargetContext) {
    453   SmallVector<const DeclContext *, 4> TargetParents;
    454 
    455   for (const DeclContext *CommonAncestor = TargetContext;
    456        CommonAncestor && !CommonAncestor->Encloses(CurContext);
    457        CommonAncestor = CommonAncestor->getLookupParent()) {
    458     if (CommonAncestor->isTransparentContext() ||
    459         CommonAncestor->isFunctionOrMethod())
    460       continue;
    461 
    462     TargetParents.push_back(CommonAncestor);
    463   }
    464 
    465   NestedNameSpecifier *Result = 0;
    466   while (!TargetParents.empty()) {
    467     const DeclContext *Parent = TargetParents.back();
    468     TargetParents.pop_back();
    469 
    470     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Parent)) {
    471       if (!Namespace->getIdentifier())
    472         continue;
    473 
    474       Result = NestedNameSpecifier::Create(Context, Result, Namespace);
    475     }
    476     else if (const TagDecl *TD = dyn_cast<TagDecl>(Parent))
    477       Result = NestedNameSpecifier::Create(Context, Result,
    478                                            false,
    479                                      Context.getTypeDeclType(TD).getTypePtr());
    480   }
    481   return Result;
    482 }
    483 
    484 bool ResultBuilder::isInterestingDecl(const NamedDecl *ND,
    485                                       bool &AsNestedNameSpecifier) const {
    486   AsNestedNameSpecifier = false;
    487 
    488   ND = ND->getUnderlyingDecl();
    489   unsigned IDNS = ND->getIdentifierNamespace();
    490 
    491   // Skip unnamed entities.
    492   if (!ND->getDeclName())
    493     return false;
    494 
    495   // Friend declarations and declarations introduced due to friends are never
    496   // added as results.
    497   if (IDNS & (Decl::IDNS_OrdinaryFriend | Decl::IDNS_TagFriend))
    498     return false;
    499 
    500   // Class template (partial) specializations are never added as results.
    501   if (isa<ClassTemplateSpecializationDecl>(ND) ||
    502       isa<ClassTemplatePartialSpecializationDecl>(ND))
    503     return false;
    504 
    505   // Using declarations themselves are never added as results.
    506   if (isa<UsingDecl>(ND))
    507     return false;
    508 
    509   // Some declarations have reserved names that we don't want to ever show.
    510   if (const IdentifierInfo *Id = ND->getIdentifier()) {
    511     // __va_list_tag is a freak of nature. Find it and skip it.
    512     if (Id->isStr("__va_list_tag") || Id->isStr("__builtin_va_list"))
    513       return false;
    514 
    515     // Filter out names reserved for the implementation (C99 7.1.3,
    516     // C++ [lib.global.names]) if they come from a system header.
    517     //
    518     // FIXME: Add predicate for this.
    519     if (Id->getLength() >= 2) {
    520       const char *Name = Id->getNameStart();
    521       if (Name[0] == '_' &&
    522           (Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')) &&
    523           (ND->getLocation().isInvalid() ||
    524            SemaRef.SourceMgr.isInSystemHeader(
    525                           SemaRef.SourceMgr.getSpellingLoc(ND->getLocation()))))
    526         return false;
    527     }
    528   }
    529 
    530   if (Filter == &ResultBuilder::IsNestedNameSpecifier ||
    531       ((isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND)) &&
    532        Filter != &ResultBuilder::IsNamespace &&
    533        Filter != &ResultBuilder::IsNamespaceOrAlias &&
    534        Filter != 0))
    535     AsNestedNameSpecifier = true;
    536 
    537   // Filter out any unwanted results.
    538   if (Filter && !(this->*Filter)(ND)) {
    539     // Check whether it is interesting as a nested-name-specifier.
    540     if (AllowNestedNameSpecifiers && SemaRef.getLangOpts().CPlusPlus &&
    541         IsNestedNameSpecifier(ND) &&
    542         (Filter != &ResultBuilder::IsMember ||
    543          (isa<CXXRecordDecl>(ND) &&
    544           cast<CXXRecordDecl>(ND)->isInjectedClassName()))) {
    545       AsNestedNameSpecifier = true;
    546       return true;
    547     }
    548 
    549     return false;
    550   }
    551   // ... then it must be interesting!
    552   return true;
    553 }
    554 
    555 bool ResultBuilder::CheckHiddenResult(Result &R, DeclContext *CurContext,
    556                                       const NamedDecl *Hiding) {
    557   // In C, there is no way to refer to a hidden name.
    558   // FIXME: This isn't true; we can find a tag name hidden by an ordinary
    559   // name if we introduce the tag type.
    560   if (!SemaRef.getLangOpts().CPlusPlus)
    561     return true;
    562 
    563   const DeclContext *HiddenCtx =
    564       R.Declaration->getDeclContext()->getRedeclContext();
    565 
    566   // There is no way to qualify a name declared in a function or method.
    567   if (HiddenCtx->isFunctionOrMethod())
    568     return true;
    569 
    570   if (HiddenCtx == Hiding->getDeclContext()->getRedeclContext())
    571     return true;
    572 
    573   // We can refer to the result with the appropriate qualification. Do it.
    574   R.Hidden = true;
    575   R.QualifierIsInformative = false;
    576 
    577   if (!R.Qualifier)
    578     R.Qualifier = getRequiredQualification(SemaRef.Context,
    579                                            CurContext,
    580                                            R.Declaration->getDeclContext());
    581   return false;
    582 }
    583 
    584 /// \brief A simplified classification of types used to determine whether two
    585 /// types are "similar enough" when adjusting priorities.
    586 SimplifiedTypeClass clang::getSimplifiedTypeClass(CanQualType T) {
    587   switch (T->getTypeClass()) {
    588   case Type::Builtin:
    589     switch (cast<BuiltinType>(T)->getKind()) {
    590       case BuiltinType::Void:
    591         return STC_Void;
    592 
    593       case BuiltinType::NullPtr:
    594         return STC_Pointer;
    595 
    596       case BuiltinType::Overload:
    597       case BuiltinType::Dependent:
    598         return STC_Other;
    599 
    600       case BuiltinType::ObjCId:
    601       case BuiltinType::ObjCClass:
    602       case BuiltinType::ObjCSel:
    603         return STC_ObjectiveC;
    604 
    605       default:
    606         return STC_Arithmetic;
    607     }
    608 
    609   case Type::Complex:
    610     return STC_Arithmetic;
    611 
    612   case Type::Pointer:
    613     return STC_Pointer;
    614 
    615   case Type::BlockPointer:
    616     return STC_Block;
    617 
    618   case Type::LValueReference:
    619   case Type::RValueReference:
    620     return getSimplifiedTypeClass(T->getAs<ReferenceType>()->getPointeeType());
    621 
    622   case Type::ConstantArray:
    623   case Type::IncompleteArray:
    624   case Type::VariableArray:
    625   case Type::DependentSizedArray:
    626     return STC_Array;
    627 
    628   case Type::DependentSizedExtVector:
    629   case Type::Vector:
    630   case Type::ExtVector:
    631     return STC_Arithmetic;
    632 
    633   case Type::FunctionProto:
    634   case Type::FunctionNoProto:
    635     return STC_Function;
    636 
    637   case Type::Record:
    638     return STC_Record;
    639 
    640   case Type::Enum:
    641     return STC_Arithmetic;
    642 
    643   case Type::ObjCObject:
    644   case Type::ObjCInterface:
    645   case Type::ObjCObjectPointer:
    646     return STC_ObjectiveC;
    647 
    648   default:
    649     return STC_Other;
    650   }
    651 }
    652 
    653 /// \brief Get the type that a given expression will have if this declaration
    654 /// is used as an expression in its "typical" code-completion form.
    655 QualType clang::getDeclUsageType(ASTContext &C, const NamedDecl *ND) {
    656   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
    657 
    658   if (const TypeDecl *Type = dyn_cast<TypeDecl>(ND))
    659     return C.getTypeDeclType(Type);
    660   if (const ObjCInterfaceDecl *Iface = dyn_cast<ObjCInterfaceDecl>(ND))
    661     return C.getObjCInterfaceType(Iface);
    662 
    663   QualType T;
    664   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(ND))
    665     T = Function->getCallResultType();
    666   else if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND))
    667     T = Method->getSendResultType();
    668   else if (const FunctionTemplateDecl *FunTmpl =
    669                dyn_cast<FunctionTemplateDecl>(ND))
    670     T = FunTmpl->getTemplatedDecl()->getCallResultType();
    671   else if (const EnumConstantDecl *Enumerator = dyn_cast<EnumConstantDecl>(ND))
    672     T = C.getTypeDeclType(cast<EnumDecl>(Enumerator->getDeclContext()));
    673   else if (const ObjCPropertyDecl *Property = dyn_cast<ObjCPropertyDecl>(ND))
    674     T = Property->getType();
    675   else if (const ValueDecl *Value = dyn_cast<ValueDecl>(ND))
    676     T = Value->getType();
    677   else
    678     return QualType();
    679 
    680   // Dig through references, function pointers, and block pointers to
    681   // get down to the likely type of an expression when the entity is
    682   // used.
    683   do {
    684     if (const ReferenceType *Ref = T->getAs<ReferenceType>()) {
    685       T = Ref->getPointeeType();
    686       continue;
    687     }
    688 
    689     if (const PointerType *Pointer = T->getAs<PointerType>()) {
    690       if (Pointer->getPointeeType()->isFunctionType()) {
    691         T = Pointer->getPointeeType();
    692         continue;
    693       }
    694 
    695       break;
    696     }
    697 
    698     if (const BlockPointerType *Block = T->getAs<BlockPointerType>()) {
    699       T = Block->getPointeeType();
    700       continue;
    701     }
    702 
    703     if (const FunctionType *Function = T->getAs<FunctionType>()) {
    704       T = Function->getResultType();
    705       continue;
    706     }
    707 
    708     break;
    709   } while (true);
    710 
    711   return T;
    712 }
    713 
    714 unsigned ResultBuilder::getBasePriority(const NamedDecl *ND) {
    715   if (!ND)
    716     return CCP_Unlikely;
    717 
    718   // Context-based decisions.
    719   const DeclContext *DC = ND->getDeclContext()->getRedeclContext();
    720   if (DC->isFunctionOrMethod() || isa<BlockDecl>(DC)) {
    721     // _cmd is relatively rare
    722     if (const ImplicitParamDecl *ImplicitParam =
    723         dyn_cast<ImplicitParamDecl>(ND))
    724       if (ImplicitParam->getIdentifier() &&
    725           ImplicitParam->getIdentifier()->isStr("_cmd"))
    726         return CCP_ObjC_cmd;
    727 
    728     return CCP_LocalDeclaration;
    729   }
    730   if (DC->isRecord() || isa<ObjCContainerDecl>(DC))
    731     return CCP_MemberDeclaration;
    732 
    733   // Content-based decisions.
    734   if (isa<EnumConstantDecl>(ND))
    735     return CCP_Constant;
    736 
    737   // Use CCP_Type for type declarations unless we're in a statement, Objective-C
    738   // message receiver, or parenthesized expression context. There, it's as
    739   // likely that the user will want to write a type as other declarations.
    740   if ((isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) &&
    741       !(CompletionContext.getKind() == CodeCompletionContext::CCC_Statement ||
    742         CompletionContext.getKind()
    743           == CodeCompletionContext::CCC_ObjCMessageReceiver ||
    744         CompletionContext.getKind()
    745           == CodeCompletionContext::CCC_ParenthesizedExpression))
    746     return CCP_Type;
    747 
    748   return CCP_Declaration;
    749 }
    750 
    751 void ResultBuilder::AdjustResultPriorityForDecl(Result &R) {
    752   // If this is an Objective-C method declaration whose selector matches our
    753   // preferred selector, give it a priority boost.
    754   if (!PreferredSelector.isNull())
    755     if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(R.Declaration))
    756       if (PreferredSelector == Method->getSelector())
    757         R.Priority += CCD_SelectorMatch;
    758 
    759   // If we have a preferred type, adjust the priority for results with exactly-
    760   // matching or nearly-matching types.
    761   if (!PreferredType.isNull()) {
    762     QualType T = getDeclUsageType(SemaRef.Context, R.Declaration);
    763     if (!T.isNull()) {
    764       CanQualType TC = SemaRef.Context.getCanonicalType(T);
    765       // Check for exactly-matching types (modulo qualifiers).
    766       if (SemaRef.Context.hasSameUnqualifiedType(PreferredType, TC))
    767         R.Priority /= CCF_ExactTypeMatch;
    768       // Check for nearly-matching types, based on classification of each.
    769       else if ((getSimplifiedTypeClass(PreferredType)
    770                                                == getSimplifiedTypeClass(TC)) &&
    771                !(PreferredType->isEnumeralType() && TC->isEnumeralType()))
    772         R.Priority /= CCF_SimilarTypeMatch;
    773     }
    774   }
    775 }
    776 
    777 void ResultBuilder::MaybeAddConstructorResults(Result R) {
    778   if (!SemaRef.getLangOpts().CPlusPlus || !R.Declaration ||
    779       !CompletionContext.wantConstructorResults())
    780     return;
    781 
    782   ASTContext &Context = SemaRef.Context;
    783   const NamedDecl *D = R.Declaration;
    784   const CXXRecordDecl *Record = 0;
    785   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(D))
    786     Record = ClassTemplate->getTemplatedDecl();
    787   else if ((Record = dyn_cast<CXXRecordDecl>(D))) {
    788     // Skip specializations and partial specializations.
    789     if (isa<ClassTemplateSpecializationDecl>(Record))
    790       return;
    791   } else {
    792     // There are no constructors here.
    793     return;
    794   }
    795 
    796   Record = Record->getDefinition();
    797   if (!Record)
    798     return;
    799 
    800 
    801   QualType RecordTy = Context.getTypeDeclType(Record);
    802   DeclarationName ConstructorName
    803     = Context.DeclarationNames.getCXXConstructorName(
    804                                            Context.getCanonicalType(RecordTy));
    805   DeclContext::lookup_const_result Ctors = Record->lookup(ConstructorName);
    806   for (DeclContext::lookup_const_iterator I = Ctors.begin(),
    807                                           E = Ctors.end();
    808        I != E; ++I) {
    809     R.Declaration = *I;
    810     R.CursorKind = getCursorKindForDecl(R.Declaration);
    811     Results.push_back(R);
    812   }
    813 }
    814 
    815 void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
    816   assert(!ShadowMaps.empty() && "Must enter into a results scope");
    817 
    818   if (R.Kind != Result::RK_Declaration) {
    819     // For non-declaration results, just add the result.
    820     Results.push_back(R);
    821     return;
    822   }
    823 
    824   // Look through using declarations.
    825   if (const UsingShadowDecl *Using =
    826           dyn_cast<UsingShadowDecl>(R.Declaration)) {
    827     MaybeAddResult(Result(Using->getTargetDecl(),
    828                           getBasePriority(Using->getTargetDecl()),
    829                           R.Qualifier),
    830                    CurContext);
    831     return;
    832   }
    833 
    834   const Decl *CanonDecl = R.Declaration->getCanonicalDecl();
    835   unsigned IDNS = CanonDecl->getIdentifierNamespace();
    836 
    837   bool AsNestedNameSpecifier = false;
    838   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
    839     return;
    840 
    841   // C++ constructors are never found by name lookup.
    842   if (isa<CXXConstructorDecl>(R.Declaration))
    843     return;
    844 
    845   ShadowMap &SMap = ShadowMaps.back();
    846   ShadowMapEntry::iterator I, IEnd;
    847   ShadowMap::iterator NamePos = SMap.find(R.Declaration->getDeclName());
    848   if (NamePos != SMap.end()) {
    849     I = NamePos->second.begin();
    850     IEnd = NamePos->second.end();
    851   }
    852 
    853   for (; I != IEnd; ++I) {
    854     const NamedDecl *ND = I->first;
    855     unsigned Index = I->second;
    856     if (ND->getCanonicalDecl() == CanonDecl) {
    857       // This is a redeclaration. Always pick the newer declaration.
    858       Results[Index].Declaration = R.Declaration;
    859 
    860       // We're done.
    861       return;
    862     }
    863   }
    864 
    865   // This is a new declaration in this scope. However, check whether this
    866   // declaration name is hidden by a similarly-named declaration in an outer
    867   // scope.
    868   std::list<ShadowMap>::iterator SM, SMEnd = ShadowMaps.end();
    869   --SMEnd;
    870   for (SM = ShadowMaps.begin(); SM != SMEnd; ++SM) {
    871     ShadowMapEntry::iterator I, IEnd;
    872     ShadowMap::iterator NamePos = SM->find(R.Declaration->getDeclName());
    873     if (NamePos != SM->end()) {
    874       I = NamePos->second.begin();
    875       IEnd = NamePos->second.end();
    876     }
    877     for (; I != IEnd; ++I) {
    878       // A tag declaration does not hide a non-tag declaration.
    879       if (I->first->hasTagIdentifierNamespace() &&
    880           (IDNS & (Decl::IDNS_Member | Decl::IDNS_Ordinary |
    881                    Decl::IDNS_ObjCProtocol)))
    882         continue;
    883 
    884       // Protocols are in distinct namespaces from everything else.
    885       if (((I->first->getIdentifierNamespace() & Decl::IDNS_ObjCProtocol)
    886            || (IDNS & Decl::IDNS_ObjCProtocol)) &&
    887           I->first->getIdentifierNamespace() != IDNS)
    888         continue;
    889 
    890       // The newly-added result is hidden by an entry in the shadow map.
    891       if (CheckHiddenResult(R, CurContext, I->first))
    892         return;
    893 
    894       break;
    895     }
    896   }
    897 
    898   // Make sure that any given declaration only shows up in the result set once.
    899   if (!AllDeclsFound.insert(CanonDecl))
    900     return;
    901 
    902   // If the filter is for nested-name-specifiers, then this result starts a
    903   // nested-name-specifier.
    904   if (AsNestedNameSpecifier) {
    905     R.StartsNestedNameSpecifier = true;
    906     R.Priority = CCP_NestedNameSpecifier;
    907   } else
    908       AdjustResultPriorityForDecl(R);
    909 
    910   // If this result is supposed to have an informative qualifier, add one.
    911   if (R.QualifierIsInformative && !R.Qualifier &&
    912       !R.StartsNestedNameSpecifier) {
    913     const DeclContext *Ctx = R.Declaration->getDeclContext();
    914     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
    915       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, Namespace);
    916     else if (const TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
    917       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, false,
    918                              SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
    919     else
    920       R.QualifierIsInformative = false;
    921   }
    922 
    923   // Insert this result into the set of results and into the current shadow
    924   // map.
    925   SMap[R.Declaration->getDeclName()].Add(R.Declaration, Results.size());
    926   Results.push_back(R);
    927 
    928   if (!AsNestedNameSpecifier)
    929     MaybeAddConstructorResults(R);
    930 }
    931 
    932 void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
    933                               NamedDecl *Hiding, bool InBaseClass = false) {
    934   if (R.Kind != Result::RK_Declaration) {
    935     // For non-declaration results, just add the result.
    936     Results.push_back(R);
    937     return;
    938   }
    939 
    940   // Look through using declarations.
    941   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(R.Declaration)) {
    942     AddResult(Result(Using->getTargetDecl(),
    943                      getBasePriority(Using->getTargetDecl()),
    944                      R.Qualifier),
    945               CurContext, Hiding);
    946     return;
    947   }
    948 
    949   bool AsNestedNameSpecifier = false;
    950   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
    951     return;
    952 
    953   // C++ constructors are never found by name lookup.
    954   if (isa<CXXConstructorDecl>(R.Declaration))
    955     return;
    956 
    957   if (Hiding && CheckHiddenResult(R, CurContext, Hiding))
    958     return;
    959 
    960   // Make sure that any given declaration only shows up in the result set once.
    961   if (!AllDeclsFound.insert(R.Declaration->getCanonicalDecl()))
    962     return;
    963 
    964   // If the filter is for nested-name-specifiers, then this result starts a
    965   // nested-name-specifier.
    966   if (AsNestedNameSpecifier) {
    967     R.StartsNestedNameSpecifier = true;
    968     R.Priority = CCP_NestedNameSpecifier;
    969   }
    970   else if (Filter == &ResultBuilder::IsMember && !R.Qualifier && InBaseClass &&
    971            isa<CXXRecordDecl>(R.Declaration->getDeclContext()
    972                                                   ->getRedeclContext()))
    973     R.QualifierIsInformative = true;
    974 
    975   // If this result is supposed to have an informative qualifier, add one.
    976   if (R.QualifierIsInformative && !R.Qualifier &&
    977       !R.StartsNestedNameSpecifier) {
    978     const DeclContext *Ctx = R.Declaration->getDeclContext();
    979     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
    980       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, Namespace);
    981     else if (const TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
    982       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, false,
    983                             SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
    984     else
    985       R.QualifierIsInformative = false;
    986   }
    987 
    988   // Adjust the priority if this result comes from a base class.
    989   if (InBaseClass)
    990     R.Priority += CCD_InBaseClass;
    991 
    992   AdjustResultPriorityForDecl(R);
    993 
    994   if (HasObjectTypeQualifiers)
    995     if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(R.Declaration))
    996       if (Method->isInstance()) {
    997         Qualifiers MethodQuals
    998                         = Qualifiers::fromCVRMask(Method->getTypeQualifiers());
    999         if (ObjectTypeQualifiers == MethodQuals)
   1000           R.Priority += CCD_ObjectQualifierMatch;
   1001         else if (ObjectTypeQualifiers - MethodQuals) {
   1002           // The method cannot be invoked, because doing so would drop
   1003           // qualifiers.
   1004           return;
   1005         }
   1006       }
   1007 
   1008   // Insert this result into the set of results.
   1009   Results.push_back(R);
   1010 
   1011   if (!AsNestedNameSpecifier)
   1012     MaybeAddConstructorResults(R);
   1013 }
   1014 
   1015 void ResultBuilder::AddResult(Result R) {
   1016   assert(R.Kind != Result::RK_Declaration &&
   1017           "Declaration results need more context");
   1018   Results.push_back(R);
   1019 }
   1020 
   1021 /// \brief Enter into a new scope.
   1022 void ResultBuilder::EnterNewScope() {
   1023   ShadowMaps.push_back(ShadowMap());
   1024 }
   1025 
   1026 /// \brief Exit from the current scope.
   1027 void ResultBuilder::ExitScope() {
   1028   for (ShadowMap::iterator E = ShadowMaps.back().begin(),
   1029                         EEnd = ShadowMaps.back().end();
   1030        E != EEnd;
   1031        ++E)
   1032     E->second.Destroy();
   1033 
   1034   ShadowMaps.pop_back();
   1035 }
   1036 
   1037 /// \brief Determines whether this given declaration will be found by
   1038 /// ordinary name lookup.
   1039 bool ResultBuilder::IsOrdinaryName(const NamedDecl *ND) const {
   1040   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
   1041 
   1042   unsigned IDNS = Decl::IDNS_Ordinary;
   1043   if (SemaRef.getLangOpts().CPlusPlus)
   1044     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
   1045   else if (SemaRef.getLangOpts().ObjC1) {
   1046     if (isa<ObjCIvarDecl>(ND))
   1047       return true;
   1048   }
   1049 
   1050   return ND->getIdentifierNamespace() & IDNS;
   1051 }
   1052 
   1053 /// \brief Determines whether this given declaration will be found by
   1054 /// ordinary name lookup but is not a type name.
   1055 bool ResultBuilder::IsOrdinaryNonTypeName(const NamedDecl *ND) const {
   1056   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
   1057   if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND))
   1058     return false;
   1059 
   1060   unsigned IDNS = Decl::IDNS_Ordinary;
   1061   if (SemaRef.getLangOpts().CPlusPlus)
   1062     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
   1063   else if (SemaRef.getLangOpts().ObjC1) {
   1064     if (isa<ObjCIvarDecl>(ND))
   1065       return true;
   1066   }
   1067 
   1068   return ND->getIdentifierNamespace() & IDNS;
   1069 }
   1070 
   1071 bool ResultBuilder::IsIntegralConstantValue(const NamedDecl *ND) const {
   1072   if (!IsOrdinaryNonTypeName(ND))
   1073     return 0;
   1074 
   1075   if (const ValueDecl *VD = dyn_cast<ValueDecl>(ND->getUnderlyingDecl()))
   1076     if (VD->getType()->isIntegralOrEnumerationType())
   1077       return true;
   1078 
   1079   return false;
   1080 }
   1081 
   1082 /// \brief Determines whether this given declaration will be found by
   1083 /// ordinary name lookup.
   1084 bool ResultBuilder::IsOrdinaryNonValueName(const NamedDecl *ND) const {
   1085   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
   1086 
   1087   unsigned IDNS = Decl::IDNS_Ordinary;
   1088   if (SemaRef.getLangOpts().CPlusPlus)
   1089     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace;
   1090 
   1091   return (ND->getIdentifierNamespace() & IDNS) &&
   1092     !isa<ValueDecl>(ND) && !isa<FunctionTemplateDecl>(ND) &&
   1093     !isa<ObjCPropertyDecl>(ND);
   1094 }
   1095 
   1096 /// \brief Determines whether the given declaration is suitable as the
   1097 /// start of a C++ nested-name-specifier, e.g., a class or namespace.
   1098 bool ResultBuilder::IsNestedNameSpecifier(const NamedDecl *ND) const {
   1099   // Allow us to find class templates, too.
   1100   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
   1101     ND = ClassTemplate->getTemplatedDecl();
   1102 
   1103   return SemaRef.isAcceptableNestedNameSpecifier(ND);
   1104 }
   1105 
   1106 /// \brief Determines whether the given declaration is an enumeration.
   1107 bool ResultBuilder::IsEnum(const NamedDecl *ND) const {
   1108   return isa<EnumDecl>(ND);
   1109 }
   1110 
   1111 /// \brief Determines whether the given declaration is a class or struct.
   1112 bool ResultBuilder::IsClassOrStruct(const NamedDecl *ND) const {
   1113   // Allow us to find class templates, too.
   1114   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
   1115     ND = ClassTemplate->getTemplatedDecl();
   1116 
   1117   // For purposes of this check, interfaces match too.
   1118   if (const RecordDecl *RD = dyn_cast<RecordDecl>(ND))
   1119     return RD->getTagKind() == TTK_Class ||
   1120     RD->getTagKind() == TTK_Struct ||
   1121     RD->getTagKind() == TTK_Interface;
   1122 
   1123   return false;
   1124 }
   1125 
   1126 /// \brief Determines whether the given declaration is a union.
   1127 bool ResultBuilder::IsUnion(const NamedDecl *ND) const {
   1128   // Allow us to find class templates, too.
   1129   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
   1130     ND = ClassTemplate->getTemplatedDecl();
   1131 
   1132   if (const RecordDecl *RD = dyn_cast<RecordDecl>(ND))
   1133     return RD->getTagKind() == TTK_Union;
   1134 
   1135   return false;
   1136 }
   1137 
   1138 /// \brief Determines whether the given declaration is a namespace.
   1139 bool ResultBuilder::IsNamespace(const NamedDecl *ND) const {
   1140   return isa<NamespaceDecl>(ND);
   1141 }
   1142 
   1143 /// \brief Determines whether the given declaration is a namespace or
   1144 /// namespace alias.
   1145 bool ResultBuilder::IsNamespaceOrAlias(const NamedDecl *ND) const {
   1146   return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
   1147 }
   1148 
   1149 /// \brief Determines whether the given declaration is a type.
   1150 bool ResultBuilder::IsType(const NamedDecl *ND) const {
   1151   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
   1152     ND = Using->getTargetDecl();
   1153 
   1154   return isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND);
   1155 }
   1156 
   1157 /// \brief Determines which members of a class should be visible via
   1158 /// "." or "->".  Only value declarations, nested name specifiers, and
   1159 /// using declarations thereof should show up.
   1160 bool ResultBuilder::IsMember(const NamedDecl *ND) const {
   1161   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
   1162     ND = Using->getTargetDecl();
   1163 
   1164   return isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||
   1165     isa<ObjCPropertyDecl>(ND);
   1166 }
   1167 
   1168 static bool isObjCReceiverType(ASTContext &C, QualType T) {
   1169   T = C.getCanonicalType(T);
   1170   switch (T->getTypeClass()) {
   1171   case Type::ObjCObject:
   1172   case Type::ObjCInterface:
   1173   case Type::ObjCObjectPointer:
   1174     return true;
   1175 
   1176   case Type::Builtin:
   1177     switch (cast<BuiltinType>(T)->getKind()) {
   1178     case BuiltinType::ObjCId:
   1179     case BuiltinType::ObjCClass:
   1180     case BuiltinType::ObjCSel:
   1181       return true;
   1182 
   1183     default:
   1184       break;
   1185     }
   1186     return false;
   1187 
   1188   default:
   1189     break;
   1190   }
   1191 
   1192   if (!C.getLangOpts().CPlusPlus)
   1193     return false;
   1194 
   1195   // FIXME: We could perform more analysis here to determine whether a
   1196   // particular class type has any conversions to Objective-C types. For now,
   1197   // just accept all class types.
   1198   return T->isDependentType() || T->isRecordType();
   1199 }
   1200 
   1201 bool ResultBuilder::IsObjCMessageReceiver(const NamedDecl *ND) const {
   1202   QualType T = getDeclUsageType(SemaRef.Context, ND);
   1203   if (T.isNull())
   1204     return false;
   1205 
   1206   T = SemaRef.Context.getBaseElementType(T);
   1207   return isObjCReceiverType(SemaRef.Context, T);
   1208 }
   1209 
   1210 bool ResultBuilder::IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const {
   1211   if (IsObjCMessageReceiver(ND))
   1212     return true;
   1213 
   1214   const VarDecl *Var = dyn_cast<VarDecl>(ND);
   1215   if (!Var)
   1216     return false;
   1217 
   1218   return Var->hasLocalStorage() && !Var->hasAttr<BlocksAttr>();
   1219 }
   1220 
   1221 bool ResultBuilder::IsObjCCollection(const NamedDecl *ND) const {
   1222   if ((SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryName(ND)) ||
   1223       (!SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryNonTypeName(ND)))
   1224     return false;
   1225 
   1226   QualType T = getDeclUsageType(SemaRef.Context, ND);
   1227   if (T.isNull())
   1228     return false;
   1229 
   1230   T = SemaRef.Context.getBaseElementType(T);
   1231   return T->isObjCObjectType() || T->isObjCObjectPointerType() ||
   1232          T->isObjCIdType() ||
   1233          (SemaRef.getLangOpts().CPlusPlus && T->isRecordType());
   1234 }
   1235 
   1236 bool ResultBuilder::IsImpossibleToSatisfy(const NamedDecl *ND) const {
   1237   return false;
   1238 }
   1239 
   1240 /// \brief Determines whether the given declaration is an Objective-C
   1241 /// instance variable.
   1242 bool ResultBuilder::IsObjCIvar(const NamedDecl *ND) const {
   1243   return isa<ObjCIvarDecl>(ND);
   1244 }
   1245 
   1246 namespace {
   1247   /// \brief Visible declaration consumer that adds a code-completion result
   1248   /// for each visible declaration.
   1249   class CodeCompletionDeclConsumer : public VisibleDeclConsumer {
   1250     ResultBuilder &Results;
   1251     DeclContext *CurContext;
   1252 
   1253   public:
   1254     CodeCompletionDeclConsumer(ResultBuilder &Results, DeclContext *CurContext)
   1255       : Results(Results), CurContext(CurContext) { }
   1256 
   1257     virtual void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx,
   1258                            bool InBaseClass) {
   1259       bool Accessible = true;
   1260       if (Ctx)
   1261         Accessible = Results.getSema().IsSimplyAccessible(ND, Ctx);
   1262 
   1263       ResultBuilder::Result Result(ND, Results.getBasePriority(ND), 0, false,
   1264                                    Accessible);
   1265       Results.AddResult(Result, CurContext, Hiding, InBaseClass);
   1266     }
   1267   };
   1268 }
   1269 
   1270 /// \brief Add type specifiers for the current language as keyword results.
   1271 static void AddTypeSpecifierResults(const LangOptions &LangOpts,
   1272                                     ResultBuilder &Results) {
   1273   typedef CodeCompletionResult Result;
   1274   Results.AddResult(Result("short", CCP_Type));
   1275   Results.AddResult(Result("long", CCP_Type));
   1276   Results.AddResult(Result("signed", CCP_Type));
   1277   Results.AddResult(Result("unsigned", CCP_Type));
   1278   Results.AddResult(Result("void", CCP_Type));
   1279   Results.AddResult(Result("char", CCP_Type));
   1280   Results.AddResult(Result("int", CCP_Type));
   1281   Results.AddResult(Result("float", CCP_Type));
   1282   Results.AddResult(Result("double", CCP_Type));
   1283   Results.AddResult(Result("enum", CCP_Type));
   1284   Results.AddResult(Result("struct", CCP_Type));
   1285   Results.AddResult(Result("union", CCP_Type));
   1286   Results.AddResult(Result("const", CCP_Type));
   1287   Results.AddResult(Result("volatile", CCP_Type));
   1288 
   1289   if (LangOpts.C99) {
   1290     // C99-specific
   1291     Results.AddResult(Result("_Complex", CCP_Type));
   1292     Results.AddResult(Result("_Imaginary", CCP_Type));
   1293     Results.AddResult(Result("_Bool", CCP_Type));
   1294     Results.AddResult(Result("restrict", CCP_Type));
   1295   }
   1296 
   1297   CodeCompletionBuilder Builder(Results.getAllocator(),
   1298                                 Results.getCodeCompletionTUInfo());
   1299   if (LangOpts.CPlusPlus) {
   1300     // C++-specific
   1301     Results.AddResult(Result("bool", CCP_Type +
   1302                              (LangOpts.ObjC1? CCD_bool_in_ObjC : 0)));
   1303     Results.AddResult(Result("class", CCP_Type));
   1304     Results.AddResult(Result("wchar_t", CCP_Type));
   1305 
   1306     // typename qualified-id
   1307     Builder.AddTypedTextChunk("typename");
   1308     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1309     Builder.AddPlaceholderChunk("qualifier");
   1310     Builder.AddTextChunk("::");
   1311     Builder.AddPlaceholderChunk("name");
   1312     Results.AddResult(Result(Builder.TakeString()));
   1313 
   1314     if (LangOpts.CPlusPlus11) {
   1315       Results.AddResult(Result("auto", CCP_Type));
   1316       Results.AddResult(Result("char16_t", CCP_Type));
   1317       Results.AddResult(Result("char32_t", CCP_Type));
   1318 
   1319       Builder.AddTypedTextChunk("decltype");
   1320       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1321       Builder.AddPlaceholderChunk("expression");
   1322       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1323       Results.AddResult(Result(Builder.TakeString()));
   1324     }
   1325   }
   1326 
   1327   // GNU extensions
   1328   if (LangOpts.GNUMode) {
   1329     // FIXME: Enable when we actually support decimal floating point.
   1330     //    Results.AddResult(Result("_Decimal32"));
   1331     //    Results.AddResult(Result("_Decimal64"));
   1332     //    Results.AddResult(Result("_Decimal128"));
   1333 
   1334     Builder.AddTypedTextChunk("typeof");
   1335     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1336     Builder.AddPlaceholderChunk("expression");
   1337     Results.AddResult(Result(Builder.TakeString()));
   1338 
   1339     Builder.AddTypedTextChunk("typeof");
   1340     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1341     Builder.AddPlaceholderChunk("type");
   1342     Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1343     Results.AddResult(Result(Builder.TakeString()));
   1344   }
   1345 }
   1346 
   1347 static void AddStorageSpecifiers(Sema::ParserCompletionContext CCC,
   1348                                  const LangOptions &LangOpts,
   1349                                  ResultBuilder &Results) {
   1350   typedef CodeCompletionResult Result;
   1351   // Note: we don't suggest either "auto" or "register", because both
   1352   // are pointless as storage specifiers. Elsewhere, we suggest "auto"
   1353   // in C++0x as a type specifier.
   1354   Results.AddResult(Result("extern"));
   1355   Results.AddResult(Result("static"));
   1356 }
   1357 
   1358 static void AddFunctionSpecifiers(Sema::ParserCompletionContext CCC,
   1359                                   const LangOptions &LangOpts,
   1360                                   ResultBuilder &Results) {
   1361   typedef CodeCompletionResult Result;
   1362   switch (CCC) {
   1363   case Sema::PCC_Class:
   1364   case Sema::PCC_MemberTemplate:
   1365     if (LangOpts.CPlusPlus) {
   1366       Results.AddResult(Result("explicit"));
   1367       Results.AddResult(Result("friend"));
   1368       Results.AddResult(Result("mutable"));
   1369       Results.AddResult(Result("virtual"));
   1370     }
   1371     // Fall through
   1372 
   1373   case Sema::PCC_ObjCInterface:
   1374   case Sema::PCC_ObjCImplementation:
   1375   case Sema::PCC_Namespace:
   1376   case Sema::PCC_Template:
   1377     if (LangOpts.CPlusPlus || LangOpts.C99)
   1378       Results.AddResult(Result("inline"));
   1379     break;
   1380 
   1381   case Sema::PCC_ObjCInstanceVariableList:
   1382   case Sema::PCC_Expression:
   1383   case Sema::PCC_Statement:
   1384   case Sema::PCC_ForInit:
   1385   case Sema::PCC_Condition:
   1386   case Sema::PCC_RecoveryInFunction:
   1387   case Sema::PCC_Type:
   1388   case Sema::PCC_ParenthesizedExpression:
   1389   case Sema::PCC_LocalDeclarationSpecifiers:
   1390     break;
   1391   }
   1392 }
   1393 
   1394 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt);
   1395 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt);
   1396 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
   1397                                      ResultBuilder &Results,
   1398                                      bool NeedAt);
   1399 static void AddObjCImplementationResults(const LangOptions &LangOpts,
   1400                                          ResultBuilder &Results,
   1401                                          bool NeedAt);
   1402 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
   1403                                     ResultBuilder &Results,
   1404                                     bool NeedAt);
   1405 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt);
   1406 
   1407 static void AddTypedefResult(ResultBuilder &Results) {
   1408   CodeCompletionBuilder Builder(Results.getAllocator(),
   1409                                 Results.getCodeCompletionTUInfo());
   1410   Builder.AddTypedTextChunk("typedef");
   1411   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1412   Builder.AddPlaceholderChunk("type");
   1413   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1414   Builder.AddPlaceholderChunk("name");
   1415   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
   1416 }
   1417 
   1418 static bool WantTypesInContext(Sema::ParserCompletionContext CCC,
   1419                                const LangOptions &LangOpts) {
   1420   switch (CCC) {
   1421   case Sema::PCC_Namespace:
   1422   case Sema::PCC_Class:
   1423   case Sema::PCC_ObjCInstanceVariableList:
   1424   case Sema::PCC_Template:
   1425   case Sema::PCC_MemberTemplate:
   1426   case Sema::PCC_Statement:
   1427   case Sema::PCC_RecoveryInFunction:
   1428   case Sema::PCC_Type:
   1429   case Sema::PCC_ParenthesizedExpression:
   1430   case Sema::PCC_LocalDeclarationSpecifiers:
   1431     return true;
   1432 
   1433   case Sema::PCC_Expression:
   1434   case Sema::PCC_Condition:
   1435     return LangOpts.CPlusPlus;
   1436 
   1437   case Sema::PCC_ObjCInterface:
   1438   case Sema::PCC_ObjCImplementation:
   1439     return false;
   1440 
   1441   case Sema::PCC_ForInit:
   1442     return LangOpts.CPlusPlus || LangOpts.ObjC1 || LangOpts.C99;
   1443   }
   1444 
   1445   llvm_unreachable("Invalid ParserCompletionContext!");
   1446 }
   1447 
   1448 static PrintingPolicy getCompletionPrintingPolicy(const ASTContext &Context,
   1449                                                   const Preprocessor &PP) {
   1450   PrintingPolicy Policy = Sema::getPrintingPolicy(Context, PP);
   1451   Policy.AnonymousTagLocations = false;
   1452   Policy.SuppressStrongLifetime = true;
   1453   Policy.SuppressUnwrittenScope = true;
   1454   return Policy;
   1455 }
   1456 
   1457 /// \brief Retrieve a printing policy suitable for code completion.
   1458 static PrintingPolicy getCompletionPrintingPolicy(Sema &S) {
   1459   return getCompletionPrintingPolicy(S.Context, S.PP);
   1460 }
   1461 
   1462 /// \brief Retrieve the string representation of the given type as a string
   1463 /// that has the appropriate lifetime for code completion.
   1464 ///
   1465 /// This routine provides a fast path where we provide constant strings for
   1466 /// common type names.
   1467 static const char *GetCompletionTypeString(QualType T,
   1468                                            ASTContext &Context,
   1469                                            const PrintingPolicy &Policy,
   1470                                            CodeCompletionAllocator &Allocator) {
   1471   if (!T.getLocalQualifiers()) {
   1472     // Built-in type names are constant strings.
   1473     if (const BuiltinType *BT = dyn_cast<BuiltinType>(T))
   1474       return BT->getNameAsCString(Policy);
   1475 
   1476     // Anonymous tag types are constant strings.
   1477     if (const TagType *TagT = dyn_cast<TagType>(T))
   1478       if (TagDecl *Tag = TagT->getDecl())
   1479         if (!Tag->hasNameForLinkage()) {
   1480           switch (Tag->getTagKind()) {
   1481           case TTK_Struct: return "struct <anonymous>";
   1482           case TTK_Interface: return "__interface <anonymous>";
   1483           case TTK_Class:  return "class <anonymous>";
   1484           case TTK_Union:  return "union <anonymous>";
   1485           case TTK_Enum:   return "enum <anonymous>";
   1486           }
   1487         }
   1488   }
   1489 
   1490   // Slow path: format the type as a string.
   1491   std::string Result;
   1492   T.getAsStringInternal(Result, Policy);
   1493   return Allocator.CopyString(Result);
   1494 }
   1495 
   1496 /// \brief Add a completion for "this", if we're in a member function.
   1497 static void addThisCompletion(Sema &S, ResultBuilder &Results) {
   1498   QualType ThisTy = S.getCurrentThisType();
   1499   if (ThisTy.isNull())
   1500     return;
   1501 
   1502   CodeCompletionAllocator &Allocator = Results.getAllocator();
   1503   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
   1504   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
   1505   Builder.AddResultTypeChunk(GetCompletionTypeString(ThisTy,
   1506                                                      S.Context,
   1507                                                      Policy,
   1508                                                      Allocator));
   1509   Builder.AddTypedTextChunk("this");
   1510   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
   1511 }
   1512 
   1513 /// \brief Add language constructs that show up for "ordinary" names.
   1514 static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC,
   1515                                    Scope *S,
   1516                                    Sema &SemaRef,
   1517                                    ResultBuilder &Results) {
   1518   CodeCompletionAllocator &Allocator = Results.getAllocator();
   1519   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
   1520   PrintingPolicy Policy = getCompletionPrintingPolicy(SemaRef);
   1521 
   1522   typedef CodeCompletionResult Result;
   1523   switch (CCC) {
   1524   case Sema::PCC_Namespace:
   1525     if (SemaRef.getLangOpts().CPlusPlus) {
   1526       if (Results.includeCodePatterns()) {
   1527         // namespace <identifier> { declarations }
   1528         Builder.AddTypedTextChunk("namespace");
   1529         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1530         Builder.AddPlaceholderChunk("identifier");
   1531         Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1532         Builder.AddPlaceholderChunk("declarations");
   1533         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1534         Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1535         Results.AddResult(Result(Builder.TakeString()));
   1536       }
   1537 
   1538       // namespace identifier = identifier ;
   1539       Builder.AddTypedTextChunk("namespace");
   1540       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1541       Builder.AddPlaceholderChunk("name");
   1542       Builder.AddChunk(CodeCompletionString::CK_Equal);
   1543       Builder.AddPlaceholderChunk("namespace");
   1544       Results.AddResult(Result(Builder.TakeString()));
   1545 
   1546       // Using directives
   1547       Builder.AddTypedTextChunk("using");
   1548       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1549       Builder.AddTextChunk("namespace");
   1550       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1551       Builder.AddPlaceholderChunk("identifier");
   1552       Results.AddResult(Result(Builder.TakeString()));
   1553 
   1554       // asm(string-literal)
   1555       Builder.AddTypedTextChunk("asm");
   1556       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1557       Builder.AddPlaceholderChunk("string-literal");
   1558       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1559       Results.AddResult(Result(Builder.TakeString()));
   1560 
   1561       if (Results.includeCodePatterns()) {
   1562         // Explicit template instantiation
   1563         Builder.AddTypedTextChunk("template");
   1564         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1565         Builder.AddPlaceholderChunk("declaration");
   1566         Results.AddResult(Result(Builder.TakeString()));
   1567       }
   1568     }
   1569 
   1570     if (SemaRef.getLangOpts().ObjC1)
   1571       AddObjCTopLevelResults(Results, true);
   1572 
   1573     AddTypedefResult(Results);
   1574     // Fall through
   1575 
   1576   case Sema::PCC_Class:
   1577     if (SemaRef.getLangOpts().CPlusPlus) {
   1578       // Using declaration
   1579       Builder.AddTypedTextChunk("using");
   1580       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1581       Builder.AddPlaceholderChunk("qualifier");
   1582       Builder.AddTextChunk("::");
   1583       Builder.AddPlaceholderChunk("name");
   1584       Results.AddResult(Result(Builder.TakeString()));
   1585 
   1586       // using typename qualifier::name (only in a dependent context)
   1587       if (SemaRef.CurContext->isDependentContext()) {
   1588         Builder.AddTypedTextChunk("using");
   1589         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1590         Builder.AddTextChunk("typename");
   1591         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1592         Builder.AddPlaceholderChunk("qualifier");
   1593         Builder.AddTextChunk("::");
   1594         Builder.AddPlaceholderChunk("name");
   1595         Results.AddResult(Result(Builder.TakeString()));
   1596       }
   1597 
   1598       if (CCC == Sema::PCC_Class) {
   1599         AddTypedefResult(Results);
   1600 
   1601         // public:
   1602         Builder.AddTypedTextChunk("public");
   1603         if (Results.includeCodePatterns())
   1604           Builder.AddChunk(CodeCompletionString::CK_Colon);
   1605         Results.AddResult(Result(Builder.TakeString()));
   1606 
   1607         // protected:
   1608         Builder.AddTypedTextChunk("protected");
   1609         if (Results.includeCodePatterns())
   1610           Builder.AddChunk(CodeCompletionString::CK_Colon);
   1611         Results.AddResult(Result(Builder.TakeString()));
   1612 
   1613         // private:
   1614         Builder.AddTypedTextChunk("private");
   1615         if (Results.includeCodePatterns())
   1616           Builder.AddChunk(CodeCompletionString::CK_Colon);
   1617         Results.AddResult(Result(Builder.TakeString()));
   1618       }
   1619     }
   1620     // Fall through
   1621 
   1622   case Sema::PCC_Template:
   1623   case Sema::PCC_MemberTemplate:
   1624     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns()) {
   1625       // template < parameters >
   1626       Builder.AddTypedTextChunk("template");
   1627       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
   1628       Builder.AddPlaceholderChunk("parameters");
   1629       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
   1630       Results.AddResult(Result(Builder.TakeString()));
   1631     }
   1632 
   1633     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1634     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1635     break;
   1636 
   1637   case Sema::PCC_ObjCInterface:
   1638     AddObjCInterfaceResults(SemaRef.getLangOpts(), Results, true);
   1639     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1640     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1641     break;
   1642 
   1643   case Sema::PCC_ObjCImplementation:
   1644     AddObjCImplementationResults(SemaRef.getLangOpts(), Results, true);
   1645     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1646     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1647     break;
   1648 
   1649   case Sema::PCC_ObjCInstanceVariableList:
   1650     AddObjCVisibilityResults(SemaRef.getLangOpts(), Results, true);
   1651     break;
   1652 
   1653   case Sema::PCC_RecoveryInFunction:
   1654   case Sema::PCC_Statement: {
   1655     AddTypedefResult(Results);
   1656 
   1657     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns() &&
   1658         SemaRef.getLangOpts().CXXExceptions) {
   1659       Builder.AddTypedTextChunk("try");
   1660       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1661       Builder.AddPlaceholderChunk("statements");
   1662       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1663       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1664       Builder.AddTextChunk("catch");
   1665       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1666       Builder.AddPlaceholderChunk("declaration");
   1667       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1668       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1669       Builder.AddPlaceholderChunk("statements");
   1670       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1671       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1672       Results.AddResult(Result(Builder.TakeString()));
   1673     }
   1674     if (SemaRef.getLangOpts().ObjC1)
   1675       AddObjCStatementResults(Results, true);
   1676 
   1677     if (Results.includeCodePatterns()) {
   1678       // if (condition) { statements }
   1679       Builder.AddTypedTextChunk("if");
   1680       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1681       if (SemaRef.getLangOpts().CPlusPlus)
   1682         Builder.AddPlaceholderChunk("condition");
   1683       else
   1684         Builder.AddPlaceholderChunk("expression");
   1685       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1686       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1687       Builder.AddPlaceholderChunk("statements");
   1688       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1689       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1690       Results.AddResult(Result(Builder.TakeString()));
   1691 
   1692       // switch (condition) { }
   1693       Builder.AddTypedTextChunk("switch");
   1694       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1695       if (SemaRef.getLangOpts().CPlusPlus)
   1696         Builder.AddPlaceholderChunk("condition");
   1697       else
   1698         Builder.AddPlaceholderChunk("expression");
   1699       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1700       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1701       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1702       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1703       Results.AddResult(Result(Builder.TakeString()));
   1704     }
   1705 
   1706     // Switch-specific statements.
   1707     if (!SemaRef.getCurFunction()->SwitchStack.empty()) {
   1708       // case expression:
   1709       Builder.AddTypedTextChunk("case");
   1710       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1711       Builder.AddPlaceholderChunk("expression");
   1712       Builder.AddChunk(CodeCompletionString::CK_Colon);
   1713       Results.AddResult(Result(Builder.TakeString()));
   1714 
   1715       // default:
   1716       Builder.AddTypedTextChunk("default");
   1717       Builder.AddChunk(CodeCompletionString::CK_Colon);
   1718       Results.AddResult(Result(Builder.TakeString()));
   1719     }
   1720 
   1721     if (Results.includeCodePatterns()) {
   1722       /// while (condition) { statements }
   1723       Builder.AddTypedTextChunk("while");
   1724       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1725       if (SemaRef.getLangOpts().CPlusPlus)
   1726         Builder.AddPlaceholderChunk("condition");
   1727       else
   1728         Builder.AddPlaceholderChunk("expression");
   1729       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1730       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1731       Builder.AddPlaceholderChunk("statements");
   1732       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1733       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1734       Results.AddResult(Result(Builder.TakeString()));
   1735 
   1736       // do { statements } while ( expression );
   1737       Builder.AddTypedTextChunk("do");
   1738       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1739       Builder.AddPlaceholderChunk("statements");
   1740       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1741       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1742       Builder.AddTextChunk("while");
   1743       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1744       Builder.AddPlaceholderChunk("expression");
   1745       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1746       Results.AddResult(Result(Builder.TakeString()));
   1747 
   1748       // for ( for-init-statement ; condition ; expression ) { statements }
   1749       Builder.AddTypedTextChunk("for");
   1750       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1751       if (SemaRef.getLangOpts().CPlusPlus || SemaRef.getLangOpts().C99)
   1752         Builder.AddPlaceholderChunk("init-statement");
   1753       else
   1754         Builder.AddPlaceholderChunk("init-expression");
   1755       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
   1756       Builder.AddPlaceholderChunk("condition");
   1757       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
   1758       Builder.AddPlaceholderChunk("inc-expression");
   1759       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1760       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
   1761       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1762       Builder.AddPlaceholderChunk("statements");
   1763       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   1764       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   1765       Results.AddResult(Result(Builder.TakeString()));
   1766     }
   1767 
   1768     if (S->getContinueParent()) {
   1769       // continue ;
   1770       Builder.AddTypedTextChunk("continue");
   1771       Results.AddResult(Result(Builder.TakeString()));
   1772     }
   1773 
   1774     if (S->getBreakParent()) {
   1775       // break ;
   1776       Builder.AddTypedTextChunk("break");
   1777       Results.AddResult(Result(Builder.TakeString()));
   1778     }
   1779 
   1780     // "return expression ;" or "return ;", depending on whether we
   1781     // know the function is void or not.
   1782     bool isVoid = false;
   1783     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(SemaRef.CurContext))
   1784       isVoid = Function->getResultType()->isVoidType();
   1785     else if (ObjCMethodDecl *Method
   1786                                  = dyn_cast<ObjCMethodDecl>(SemaRef.CurContext))
   1787       isVoid = Method->getResultType()->isVoidType();
   1788     else if (SemaRef.getCurBlock() &&
   1789              !SemaRef.getCurBlock()->ReturnType.isNull())
   1790       isVoid = SemaRef.getCurBlock()->ReturnType->isVoidType();
   1791     Builder.AddTypedTextChunk("return");
   1792     if (!isVoid) {
   1793       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1794       Builder.AddPlaceholderChunk("expression");
   1795     }
   1796     Results.AddResult(Result(Builder.TakeString()));
   1797 
   1798     // goto identifier ;
   1799     Builder.AddTypedTextChunk("goto");
   1800     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1801     Builder.AddPlaceholderChunk("label");
   1802     Results.AddResult(Result(Builder.TakeString()));
   1803 
   1804     // Using directives
   1805     Builder.AddTypedTextChunk("using");
   1806     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1807     Builder.AddTextChunk("namespace");
   1808     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1809     Builder.AddPlaceholderChunk("identifier");
   1810     Results.AddResult(Result(Builder.TakeString()));
   1811   }
   1812 
   1813   // Fall through (for statement expressions).
   1814   case Sema::PCC_ForInit:
   1815   case Sema::PCC_Condition:
   1816     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
   1817     // Fall through: conditions and statements can have expressions.
   1818 
   1819   case Sema::PCC_ParenthesizedExpression:
   1820     if (SemaRef.getLangOpts().ObjCAutoRefCount &&
   1821         CCC == Sema::PCC_ParenthesizedExpression) {
   1822       // (__bridge <type>)<expression>
   1823       Builder.AddTypedTextChunk("__bridge");
   1824       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1825       Builder.AddPlaceholderChunk("type");
   1826       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1827       Builder.AddPlaceholderChunk("expression");
   1828       Results.AddResult(Result(Builder.TakeString()));
   1829 
   1830       // (__bridge_transfer <Objective-C type>)<expression>
   1831       Builder.AddTypedTextChunk("__bridge_transfer");
   1832       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1833       Builder.AddPlaceholderChunk("Objective-C type");
   1834       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1835       Builder.AddPlaceholderChunk("expression");
   1836       Results.AddResult(Result(Builder.TakeString()));
   1837 
   1838       // (__bridge_retained <CF type>)<expression>
   1839       Builder.AddTypedTextChunk("__bridge_retained");
   1840       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1841       Builder.AddPlaceholderChunk("CF type");
   1842       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1843       Builder.AddPlaceholderChunk("expression");
   1844       Results.AddResult(Result(Builder.TakeString()));
   1845     }
   1846     // Fall through
   1847 
   1848   case Sema::PCC_Expression: {
   1849     if (SemaRef.getLangOpts().CPlusPlus) {
   1850       // 'this', if we're in a non-static member function.
   1851       addThisCompletion(SemaRef, Results);
   1852 
   1853       // true
   1854       Builder.AddResultTypeChunk("bool");
   1855       Builder.AddTypedTextChunk("true");
   1856       Results.AddResult(Result(Builder.TakeString()));
   1857 
   1858       // false
   1859       Builder.AddResultTypeChunk("bool");
   1860       Builder.AddTypedTextChunk("false");
   1861       Results.AddResult(Result(Builder.TakeString()));
   1862 
   1863       if (SemaRef.getLangOpts().RTTI) {
   1864         // dynamic_cast < type-id > ( expression )
   1865         Builder.AddTypedTextChunk("dynamic_cast");
   1866         Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
   1867         Builder.AddPlaceholderChunk("type");
   1868         Builder.AddChunk(CodeCompletionString::CK_RightAngle);
   1869         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1870         Builder.AddPlaceholderChunk("expression");
   1871         Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1872         Results.AddResult(Result(Builder.TakeString()));
   1873       }
   1874 
   1875       // static_cast < type-id > ( expression )
   1876       Builder.AddTypedTextChunk("static_cast");
   1877       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
   1878       Builder.AddPlaceholderChunk("type");
   1879       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
   1880       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1881       Builder.AddPlaceholderChunk("expression");
   1882       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1883       Results.AddResult(Result(Builder.TakeString()));
   1884 
   1885       // reinterpret_cast < type-id > ( expression )
   1886       Builder.AddTypedTextChunk("reinterpret_cast");
   1887       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
   1888       Builder.AddPlaceholderChunk("type");
   1889       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
   1890       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1891       Builder.AddPlaceholderChunk("expression");
   1892       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1893       Results.AddResult(Result(Builder.TakeString()));
   1894 
   1895       // const_cast < type-id > ( expression )
   1896       Builder.AddTypedTextChunk("const_cast");
   1897       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
   1898       Builder.AddPlaceholderChunk("type");
   1899       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
   1900       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1901       Builder.AddPlaceholderChunk("expression");
   1902       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1903       Results.AddResult(Result(Builder.TakeString()));
   1904 
   1905       if (SemaRef.getLangOpts().RTTI) {
   1906         // typeid ( expression-or-type )
   1907         Builder.AddResultTypeChunk("std::type_info");
   1908         Builder.AddTypedTextChunk("typeid");
   1909         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1910         Builder.AddPlaceholderChunk("expression-or-type");
   1911         Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1912         Results.AddResult(Result(Builder.TakeString()));
   1913       }
   1914 
   1915       // new T ( ... )
   1916       Builder.AddTypedTextChunk("new");
   1917       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1918       Builder.AddPlaceholderChunk("type");
   1919       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1920       Builder.AddPlaceholderChunk("expressions");
   1921       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1922       Results.AddResult(Result(Builder.TakeString()));
   1923 
   1924       // new T [ ] ( ... )
   1925       Builder.AddTypedTextChunk("new");
   1926       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1927       Builder.AddPlaceholderChunk("type");
   1928       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
   1929       Builder.AddPlaceholderChunk("size");
   1930       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
   1931       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1932       Builder.AddPlaceholderChunk("expressions");
   1933       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1934       Results.AddResult(Result(Builder.TakeString()));
   1935 
   1936       // delete expression
   1937       Builder.AddResultTypeChunk("void");
   1938       Builder.AddTypedTextChunk("delete");
   1939       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1940       Builder.AddPlaceholderChunk("expression");
   1941       Results.AddResult(Result(Builder.TakeString()));
   1942 
   1943       // delete [] expression
   1944       Builder.AddResultTypeChunk("void");
   1945       Builder.AddTypedTextChunk("delete");
   1946       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1947       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
   1948       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
   1949       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1950       Builder.AddPlaceholderChunk("expression");
   1951       Results.AddResult(Result(Builder.TakeString()));
   1952 
   1953       if (SemaRef.getLangOpts().CXXExceptions) {
   1954         // throw expression
   1955         Builder.AddResultTypeChunk("void");
   1956         Builder.AddTypedTextChunk("throw");
   1957         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   1958         Builder.AddPlaceholderChunk("expression");
   1959         Results.AddResult(Result(Builder.TakeString()));
   1960       }
   1961 
   1962       // FIXME: Rethrow?
   1963 
   1964       if (SemaRef.getLangOpts().CPlusPlus11) {
   1965         // nullptr
   1966         Builder.AddResultTypeChunk("std::nullptr_t");
   1967         Builder.AddTypedTextChunk("nullptr");
   1968         Results.AddResult(Result(Builder.TakeString()));
   1969 
   1970         // alignof
   1971         Builder.AddResultTypeChunk("size_t");
   1972         Builder.AddTypedTextChunk("alignof");
   1973         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1974         Builder.AddPlaceholderChunk("type");
   1975         Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1976         Results.AddResult(Result(Builder.TakeString()));
   1977 
   1978         // noexcept
   1979         Builder.AddResultTypeChunk("bool");
   1980         Builder.AddTypedTextChunk("noexcept");
   1981         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1982         Builder.AddPlaceholderChunk("expression");
   1983         Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1984         Results.AddResult(Result(Builder.TakeString()));
   1985 
   1986         // sizeof... expression
   1987         Builder.AddResultTypeChunk("size_t");
   1988         Builder.AddTypedTextChunk("sizeof...");
   1989         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   1990         Builder.AddPlaceholderChunk("parameter-pack");
   1991         Builder.AddChunk(CodeCompletionString::CK_RightParen);
   1992         Results.AddResult(Result(Builder.TakeString()));
   1993       }
   1994     }
   1995 
   1996     if (SemaRef.getLangOpts().ObjC1) {
   1997       // Add "super", if we're in an Objective-C class with a superclass.
   1998       if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl()) {
   1999         // The interface can be NULL.
   2000         if (ObjCInterfaceDecl *ID = Method->getClassInterface())
   2001           if (ID->getSuperClass()) {
   2002             std::string SuperType;
   2003             SuperType = ID->getSuperClass()->getNameAsString();
   2004             if (Method->isInstanceMethod())
   2005               SuperType += " *";
   2006 
   2007             Builder.AddResultTypeChunk(Allocator.CopyString(SuperType));
   2008             Builder.AddTypedTextChunk("super");
   2009             Results.AddResult(Result(Builder.TakeString()));
   2010           }
   2011       }
   2012 
   2013       AddObjCExpressionResults(Results, true);
   2014     }
   2015 
   2016     if (SemaRef.getLangOpts().C11) {
   2017       // _Alignof
   2018       Builder.AddResultTypeChunk("size_t");
   2019       if (SemaRef.getASTContext().Idents.get("alignof").hasMacroDefinition())
   2020         Builder.AddTypedTextChunk("alignof");
   2021       else
   2022         Builder.AddTypedTextChunk("_Alignof");
   2023       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   2024       Builder.AddPlaceholderChunk("type");
   2025       Builder.AddChunk(CodeCompletionString::CK_RightParen);
   2026       Results.AddResult(Result(Builder.TakeString()));
   2027     }
   2028 
   2029     // sizeof expression
   2030     Builder.AddResultTypeChunk("size_t");
   2031     Builder.AddTypedTextChunk("sizeof");
   2032     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   2033     Builder.AddPlaceholderChunk("expression-or-type");
   2034     Builder.AddChunk(CodeCompletionString::CK_RightParen);
   2035     Results.AddResult(Result(Builder.TakeString()));
   2036     break;
   2037   }
   2038 
   2039   case Sema::PCC_Type:
   2040   case Sema::PCC_LocalDeclarationSpecifiers:
   2041     break;
   2042   }
   2043 
   2044   if (WantTypesInContext(CCC, SemaRef.getLangOpts()))
   2045     AddTypeSpecifierResults(SemaRef.getLangOpts(), Results);
   2046 
   2047   if (SemaRef.getLangOpts().CPlusPlus && CCC != Sema::PCC_Type)
   2048     Results.AddResult(Result("operator"));
   2049 }
   2050 
   2051 /// \brief If the given declaration has an associated type, add it as a result
   2052 /// type chunk.
   2053 static void AddResultTypeChunk(ASTContext &Context,
   2054                                const PrintingPolicy &Policy,
   2055                                const NamedDecl *ND,
   2056                                CodeCompletionBuilder &Result) {
   2057   if (!ND)
   2058     return;
   2059 
   2060   // Skip constructors and conversion functions, which have their return types
   2061   // built into their names.
   2062   if (isa<CXXConstructorDecl>(ND) || isa<CXXConversionDecl>(ND))
   2063     return;
   2064 
   2065   // Determine the type of the declaration (if it has a type).
   2066   QualType T;
   2067   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(ND))
   2068     T = Function->getResultType();
   2069   else if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND))
   2070     T = Method->getResultType();
   2071   else if (const FunctionTemplateDecl *FunTmpl =
   2072                dyn_cast<FunctionTemplateDecl>(ND))
   2073     T = FunTmpl->getTemplatedDecl()->getResultType();
   2074   else if (const EnumConstantDecl *Enumerator = dyn_cast<EnumConstantDecl>(ND))
   2075     T = Context.getTypeDeclType(cast<TypeDecl>(Enumerator->getDeclContext()));
   2076   else if (isa<UnresolvedUsingValueDecl>(ND)) {
   2077     /* Do nothing: ignore unresolved using declarations*/
   2078   } else if (const ValueDecl *Value = dyn_cast<ValueDecl>(ND)) {
   2079     T = Value->getType();
   2080   } else if (const ObjCPropertyDecl *Property = dyn_cast<ObjCPropertyDecl>(ND))
   2081     T = Property->getType();
   2082 
   2083   if (T.isNull() || Context.hasSameType(T, Context.DependentTy))
   2084     return;
   2085 
   2086   Result.AddResultTypeChunk(GetCompletionTypeString(T, Context, Policy,
   2087                                                     Result.getAllocator()));
   2088 }
   2089 
   2090 static void MaybeAddSentinel(ASTContext &Context,
   2091                              const NamedDecl *FunctionOrMethod,
   2092                              CodeCompletionBuilder &Result) {
   2093   if (SentinelAttr *Sentinel = FunctionOrMethod->getAttr<SentinelAttr>())
   2094     if (Sentinel->getSentinel() == 0) {
   2095       if (Context.getLangOpts().ObjC1 &&
   2096           Context.Idents.get("nil").hasMacroDefinition())
   2097         Result.AddTextChunk(", nil");
   2098       else if (Context.Idents.get("NULL").hasMacroDefinition())
   2099         Result.AddTextChunk(", NULL");
   2100       else
   2101         Result.AddTextChunk(", (void*)0");
   2102     }
   2103 }
   2104 
   2105 static std::string formatObjCParamQualifiers(unsigned ObjCQuals) {
   2106   std::string Result;
   2107   if (ObjCQuals & Decl::OBJC_TQ_In)
   2108     Result += "in ";
   2109   else if (ObjCQuals & Decl::OBJC_TQ_Inout)
   2110     Result += "inout ";
   2111   else if (ObjCQuals & Decl::OBJC_TQ_Out)
   2112     Result += "out ";
   2113   if (ObjCQuals & Decl::OBJC_TQ_Bycopy)
   2114     Result += "bycopy ";
   2115   else if (ObjCQuals & Decl::OBJC_TQ_Byref)
   2116     Result += "byref ";
   2117   if (ObjCQuals & Decl::OBJC_TQ_Oneway)
   2118     Result += "oneway ";
   2119   return Result;
   2120 }
   2121 
   2122 static std::string FormatFunctionParameter(ASTContext &Context,
   2123                                            const PrintingPolicy &Policy,
   2124                                            const ParmVarDecl *Param,
   2125                                            bool SuppressName = false,
   2126                                            bool SuppressBlock = false) {
   2127   bool ObjCMethodParam = isa<ObjCMethodDecl>(Param->getDeclContext());
   2128   if (Param->getType()->isDependentType() ||
   2129       !Param->getType()->isBlockPointerType()) {
   2130     // The argument for a dependent or non-block parameter is a placeholder
   2131     // containing that parameter's type.
   2132     std::string Result;
   2133 
   2134     if (Param->getIdentifier() && !ObjCMethodParam && !SuppressName)
   2135       Result = Param->getIdentifier()->getName();
   2136 
   2137     Param->getType().getAsStringInternal(Result, Policy);
   2138 
   2139     if (ObjCMethodParam) {
   2140       Result = "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier())
   2141              + Result + ")";
   2142       if (Param->getIdentifier() && !SuppressName)
   2143         Result += Param->getIdentifier()->getName();
   2144     }
   2145     return Result;
   2146   }
   2147 
   2148   // The argument for a block pointer parameter is a block literal with
   2149   // the appropriate type.
   2150   FunctionTypeLoc Block;
   2151   FunctionProtoTypeLoc BlockProto;
   2152   TypeLoc TL;
   2153   if (TypeSourceInfo *TSInfo = Param->getTypeSourceInfo()) {
   2154     TL = TSInfo->getTypeLoc().getUnqualifiedLoc();
   2155     while (true) {
   2156       // Look through typedefs.
   2157       if (!SuppressBlock) {
   2158         if (TypedefTypeLoc TypedefTL = TL.getAs<TypedefTypeLoc>()) {
   2159           if (TypeSourceInfo *InnerTSInfo =
   2160                   TypedefTL.getTypedefNameDecl()->getTypeSourceInfo()) {
   2161             TL = InnerTSInfo->getTypeLoc().getUnqualifiedLoc();
   2162             continue;
   2163           }
   2164         }
   2165 
   2166         // Look through qualified types
   2167         if (QualifiedTypeLoc QualifiedTL = TL.getAs<QualifiedTypeLoc>()) {
   2168           TL = QualifiedTL.getUnqualifiedLoc();
   2169           continue;
   2170         }
   2171       }
   2172 
   2173       // Try to get the function prototype behind the block pointer type,
   2174       // then we're done.
   2175       if (BlockPointerTypeLoc BlockPtr = TL.getAs<BlockPointerTypeLoc>()) {
   2176         TL = BlockPtr.getPointeeLoc().IgnoreParens();
   2177         Block = TL.getAs<FunctionTypeLoc>();
   2178         BlockProto = TL.getAs<FunctionProtoTypeLoc>();
   2179       }
   2180       break;
   2181     }
   2182   }
   2183 
   2184   if (!Block) {
   2185     // We were unable to find a FunctionProtoTypeLoc with parameter names
   2186     // for the block; just use the parameter type as a placeholder.
   2187     std::string Result;
   2188     if (!ObjCMethodParam && Param->getIdentifier())
   2189       Result = Param->getIdentifier()->getName();
   2190 
   2191     Param->getType().getUnqualifiedType().getAsStringInternal(Result, Policy);
   2192 
   2193     if (ObjCMethodParam) {
   2194       Result = "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier())
   2195              + Result + ")";
   2196       if (Param->getIdentifier())
   2197         Result += Param->getIdentifier()->getName();
   2198     }
   2199 
   2200     return Result;
   2201   }
   2202 
   2203   // We have the function prototype behind the block pointer type, as it was
   2204   // written in the source.
   2205   std::string Result;
   2206   QualType ResultType = Block.getTypePtr()->getResultType();
   2207   if (!ResultType->isVoidType() || SuppressBlock)
   2208     ResultType.getAsStringInternal(Result, Policy);
   2209 
   2210   // Format the parameter list.
   2211   std::string Params;
   2212   if (!BlockProto || Block.getNumArgs() == 0) {
   2213     if (BlockProto && BlockProto.getTypePtr()->isVariadic())
   2214       Params = "(...)";
   2215     else
   2216       Params = "(void)";
   2217   } else {
   2218     Params += "(";
   2219     for (unsigned I = 0, N = Block.getNumArgs(); I != N; ++I) {
   2220       if (I)
   2221         Params += ", ";
   2222       Params += FormatFunctionParameter(Context, Policy, Block.getArg(I),
   2223                                         /*SuppressName=*/false,
   2224                                         /*SuppressBlock=*/true);
   2225 
   2226       if (I == N - 1 && BlockProto.getTypePtr()->isVariadic())
   2227         Params += ", ...";
   2228     }
   2229     Params += ")";
   2230   }
   2231 
   2232   if (SuppressBlock) {
   2233     // Format as a parameter.
   2234     Result = Result + " (^";
   2235     if (Param->getIdentifier())
   2236       Result += Param->getIdentifier()->getName();
   2237     Result += ")";
   2238     Result += Params;
   2239   } else {
   2240     // Format as a block literal argument.
   2241     Result = '^' + Result;
   2242     Result += Params;
   2243 
   2244     if (Param->getIdentifier())
   2245       Result += Param->getIdentifier()->getName();
   2246   }
   2247 
   2248   return Result;
   2249 }
   2250 
   2251 /// \brief Add function parameter chunks to the given code completion string.
   2252 static void AddFunctionParameterChunks(ASTContext &Context,
   2253                                        const PrintingPolicy &Policy,
   2254                                        const FunctionDecl *Function,
   2255                                        CodeCompletionBuilder &Result,
   2256                                        unsigned Start = 0,
   2257                                        bool InOptional = false) {
   2258   bool FirstParameter = true;
   2259 
   2260   for (unsigned P = Start, N = Function->getNumParams(); P != N; ++P) {
   2261     const ParmVarDecl *Param = Function->getParamDecl(P);
   2262 
   2263     if (Param->hasDefaultArg() && !InOptional) {
   2264       // When we see an optional default argument, put that argument and
   2265       // the remaining default arguments into a new, optional string.
   2266       CodeCompletionBuilder Opt(Result.getAllocator(),
   2267                                 Result.getCodeCompletionTUInfo());
   2268       if (!FirstParameter)
   2269         Opt.AddChunk(CodeCompletionString::CK_Comma);
   2270       AddFunctionParameterChunks(Context, Policy, Function, Opt, P, true);
   2271       Result.AddOptionalChunk(Opt.TakeString());
   2272       break;
   2273     }
   2274 
   2275     if (FirstParameter)
   2276       FirstParameter = false;
   2277     else
   2278       Result.AddChunk(CodeCompletionString::CK_Comma);
   2279 
   2280     InOptional = false;
   2281 
   2282     // Format the placeholder string.
   2283     std::string PlaceholderStr = FormatFunctionParameter(Context, Policy,
   2284                                                          Param);
   2285 
   2286     if (Function->isVariadic() && P == N - 1)
   2287       PlaceholderStr += ", ...";
   2288 
   2289     // Add the placeholder string.
   2290     Result.AddPlaceholderChunk(
   2291                              Result.getAllocator().CopyString(PlaceholderStr));
   2292   }
   2293 
   2294   if (const FunctionProtoType *Proto
   2295         = Function->getType()->getAs<FunctionProtoType>())
   2296     if (Proto->isVariadic()) {
   2297       if (Proto->getNumArgs() == 0)
   2298         Result.AddPlaceholderChunk("...");
   2299 
   2300       MaybeAddSentinel(Context, Function, Result);
   2301     }
   2302 }
   2303 
   2304 /// \brief Add template parameter chunks to the given code completion string.
   2305 static void AddTemplateParameterChunks(ASTContext &Context,
   2306                                        const PrintingPolicy &Policy,
   2307                                        const TemplateDecl *Template,
   2308                                        CodeCompletionBuilder &Result,
   2309                                        unsigned MaxParameters = 0,
   2310                                        unsigned Start = 0,
   2311                                        bool InDefaultArg = false) {
   2312   bool FirstParameter = true;
   2313 
   2314   TemplateParameterList *Params = Template->getTemplateParameters();
   2315   TemplateParameterList::iterator PEnd = Params->end();
   2316   if (MaxParameters)
   2317     PEnd = Params->begin() + MaxParameters;
   2318   for (TemplateParameterList::iterator P = Params->begin() + Start;
   2319        P != PEnd; ++P) {
   2320     bool HasDefaultArg = false;
   2321     std::string PlaceholderStr;
   2322     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
   2323       if (TTP->wasDeclaredWithTypename())
   2324         PlaceholderStr = "typename";
   2325       else
   2326         PlaceholderStr = "class";
   2327 
   2328       if (TTP->getIdentifier()) {
   2329         PlaceholderStr += ' ';
   2330         PlaceholderStr += TTP->getIdentifier()->getName();
   2331       }
   2332 
   2333       HasDefaultArg = TTP->hasDefaultArgument();
   2334     } else if (NonTypeTemplateParmDecl *NTTP
   2335                                     = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
   2336       if (NTTP->getIdentifier())
   2337         PlaceholderStr = NTTP->getIdentifier()->getName();
   2338       NTTP->getType().getAsStringInternal(PlaceholderStr, Policy);
   2339       HasDefaultArg = NTTP->hasDefaultArgument();
   2340     } else {
   2341       assert(isa<TemplateTemplateParmDecl>(*P));
   2342       TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
   2343 
   2344       // Since putting the template argument list into the placeholder would
   2345       // be very, very long, we just use an abbreviation.
   2346       PlaceholderStr = "template<...> class";
   2347       if (TTP->getIdentifier()) {
   2348         PlaceholderStr += ' ';
   2349         PlaceholderStr += TTP->getIdentifier()->getName();
   2350       }
   2351 
   2352       HasDefaultArg = TTP->hasDefaultArgument();
   2353     }
   2354 
   2355     if (HasDefaultArg && !InDefaultArg) {
   2356       // When we see an optional default argument, put that argument and
   2357       // the remaining default arguments into a new, optional string.
   2358       CodeCompletionBuilder Opt(Result.getAllocator(),
   2359                                 Result.getCodeCompletionTUInfo());
   2360       if (!FirstParameter)
   2361         Opt.AddChunk(CodeCompletionString::CK_Comma);
   2362       AddTemplateParameterChunks(Context, Policy, Template, Opt, MaxParameters,
   2363                                  P - Params->begin(), true);
   2364       Result.AddOptionalChunk(Opt.TakeString());
   2365       break;
   2366     }
   2367 
   2368     InDefaultArg = false;
   2369 
   2370     if (FirstParameter)
   2371       FirstParameter = false;
   2372     else
   2373       Result.AddChunk(CodeCompletionString::CK_Comma);
   2374 
   2375     // Add the placeholder string.
   2376     Result.AddPlaceholderChunk(
   2377                               Result.getAllocator().CopyString(PlaceholderStr));
   2378   }
   2379 }
   2380 
   2381 /// \brief Add a qualifier to the given code-completion string, if the
   2382 /// provided nested-name-specifier is non-NULL.
   2383 static void
   2384 AddQualifierToCompletionString(CodeCompletionBuilder &Result,
   2385                                NestedNameSpecifier *Qualifier,
   2386                                bool QualifierIsInformative,
   2387                                ASTContext &Context,
   2388                                const PrintingPolicy &Policy) {
   2389   if (!Qualifier)
   2390     return;
   2391 
   2392   std::string PrintedNNS;
   2393   {
   2394     llvm::raw_string_ostream OS(PrintedNNS);
   2395     Qualifier->print(OS, Policy);
   2396   }
   2397   if (QualifierIsInformative)
   2398     Result.AddInformativeChunk(Result.getAllocator().CopyString(PrintedNNS));
   2399   else
   2400     Result.AddTextChunk(Result.getAllocator().CopyString(PrintedNNS));
   2401 }
   2402 
   2403 static void
   2404 AddFunctionTypeQualsToCompletionString(CodeCompletionBuilder &Result,
   2405                                        const FunctionDecl *Function) {
   2406   const FunctionProtoType *Proto
   2407     = Function->getType()->getAs<FunctionProtoType>();
   2408   if (!Proto || !Proto->getTypeQuals())
   2409     return;
   2410 
   2411   // FIXME: Add ref-qualifier!
   2412 
   2413   // Handle single qualifiers without copying
   2414   if (Proto->getTypeQuals() == Qualifiers::Const) {
   2415     Result.AddInformativeChunk(" const");
   2416     return;
   2417   }
   2418 
   2419   if (Proto->getTypeQuals() == Qualifiers::Volatile) {
   2420     Result.AddInformativeChunk(" volatile");
   2421     return;
   2422   }
   2423 
   2424   if (Proto->getTypeQuals() == Qualifiers::Restrict) {
   2425     Result.AddInformativeChunk(" restrict");
   2426     return;
   2427   }
   2428 
   2429   // Handle multiple qualifiers.
   2430   std::string QualsStr;
   2431   if (Proto->isConst())
   2432     QualsStr += " const";
   2433   if (Proto->isVolatile())
   2434     QualsStr += " volatile";
   2435   if (Proto->isRestrict())
   2436     QualsStr += " restrict";
   2437   Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
   2438 }
   2439 
   2440 /// \brief Add the name of the given declaration
   2441 static void AddTypedNameChunk(ASTContext &Context, const PrintingPolicy &Policy,
   2442                               const NamedDecl *ND,
   2443                               CodeCompletionBuilder &Result) {
   2444   DeclarationName Name = ND->getDeclName();
   2445   if (!Name)
   2446     return;
   2447 
   2448   switch (Name.getNameKind()) {
   2449     case DeclarationName::CXXOperatorName: {
   2450       const char *OperatorName = 0;
   2451       switch (Name.getCXXOverloadedOperator()) {
   2452       case OO_None:
   2453       case OO_Conditional:
   2454       case NUM_OVERLOADED_OPERATORS:
   2455         OperatorName = "operator";
   2456         break;
   2457 
   2458 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
   2459       case OO_##Name: OperatorName = "operator" Spelling; break;
   2460 #define OVERLOADED_OPERATOR_MULTI(Name,Spelling,Unary,Binary,MemberOnly)
   2461 #include "clang/Basic/OperatorKinds.def"
   2462 
   2463       case OO_New:          OperatorName = "operator new"; break;
   2464       case OO_Delete:       OperatorName = "operator delete"; break;
   2465       case OO_Array_New:    OperatorName = "operator new[]"; break;
   2466       case OO_Array_Delete: OperatorName = "operator delete[]"; break;
   2467       case OO_Call:         OperatorName = "operator()"; break;
   2468       case OO_Subscript:    OperatorName = "operator[]"; break;
   2469       }
   2470       Result.AddTypedTextChunk(OperatorName);
   2471       break;
   2472     }
   2473 
   2474   case DeclarationName::Identifier:
   2475   case DeclarationName::CXXConversionFunctionName:
   2476   case DeclarationName::CXXDestructorName:
   2477   case DeclarationName::CXXLiteralOperatorName:
   2478     Result.AddTypedTextChunk(
   2479                       Result.getAllocator().CopyString(ND->getNameAsString()));
   2480     break;
   2481 
   2482   case DeclarationName::CXXUsingDirective:
   2483   case DeclarationName::ObjCZeroArgSelector:
   2484   case DeclarationName::ObjCOneArgSelector:
   2485   case DeclarationName::ObjCMultiArgSelector:
   2486     break;
   2487 
   2488   case DeclarationName::CXXConstructorName: {
   2489     CXXRecordDecl *Record = 0;
   2490     QualType Ty = Name.getCXXNameType();
   2491     if (const RecordType *RecordTy = Ty->getAs<RecordType>())
   2492       Record = cast<CXXRecordDecl>(RecordTy->getDecl());
   2493     else if (const InjectedClassNameType *InjectedTy
   2494                                         = Ty->getAs<InjectedClassNameType>())
   2495       Record = InjectedTy->getDecl();
   2496     else {
   2497       Result.AddTypedTextChunk(
   2498                       Result.getAllocator().CopyString(ND->getNameAsString()));
   2499       break;
   2500     }
   2501 
   2502     Result.AddTypedTextChunk(
   2503                   Result.getAllocator().CopyString(Record->getNameAsString()));
   2504     if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate()) {
   2505       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
   2506       AddTemplateParameterChunks(Context, Policy, Template, Result);
   2507       Result.AddChunk(CodeCompletionString::CK_RightAngle);
   2508     }
   2509     break;
   2510   }
   2511   }
   2512 }
   2513 
   2514 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(Sema &S,
   2515                                          CodeCompletionAllocator &Allocator,
   2516                                          CodeCompletionTUInfo &CCTUInfo,
   2517                                          bool IncludeBriefComments) {
   2518   return CreateCodeCompletionString(S.Context, S.PP, Allocator, CCTUInfo,
   2519                                     IncludeBriefComments);
   2520 }
   2521 
   2522 /// \brief If possible, create a new code completion string for the given
   2523 /// result.
   2524 ///
   2525 /// \returns Either a new, heap-allocated code completion string describing
   2526 /// how to use this result, or NULL to indicate that the string or name of the
   2527 /// result is all that is needed.
   2528 CodeCompletionString *
   2529 CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
   2530                                                  Preprocessor &PP,
   2531                                            CodeCompletionAllocator &Allocator,
   2532                                            CodeCompletionTUInfo &CCTUInfo,
   2533                                            bool IncludeBriefComments) {
   2534   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
   2535 
   2536   PrintingPolicy Policy = getCompletionPrintingPolicy(Ctx, PP);
   2537   if (Kind == RK_Pattern) {
   2538     Pattern->Priority = Priority;
   2539     Pattern->Availability = Availability;
   2540 
   2541     if (Declaration) {
   2542       Result.addParentContext(Declaration->getDeclContext());
   2543       Pattern->ParentName = Result.getParentName();
   2544       // Provide code completion comment for self.GetterName where
   2545       // GetterName is the getter method for a property with name
   2546       // different from the property name (declared via a property
   2547       // getter attribute.
   2548       const NamedDecl *ND = Declaration;
   2549       if (const ObjCMethodDecl *M = dyn_cast<ObjCMethodDecl>(ND))
   2550         if (M->isPropertyAccessor())
   2551           if (const ObjCPropertyDecl *PDecl = M->findPropertyDecl())
   2552             if (PDecl->getGetterName() == M->getSelector() &&
   2553                 PDecl->getIdentifier() != M->getIdentifier()) {
   2554               if (const RawComment *RC =
   2555                     Ctx.getRawCommentForAnyRedecl(M)) {
   2556                 Result.addBriefComment(RC->getBriefText(Ctx));
   2557                 Pattern->BriefComment = Result.getBriefComment();
   2558               }
   2559               else if (const RawComment *RC =
   2560                          Ctx.getRawCommentForAnyRedecl(PDecl)) {
   2561                 Result.addBriefComment(RC->getBriefText(Ctx));
   2562                 Pattern->BriefComment = Result.getBriefComment();
   2563               }
   2564             }
   2565     }
   2566 
   2567     return Pattern;
   2568   }
   2569 
   2570   if (Kind == RK_Keyword) {
   2571     Result.AddTypedTextChunk(Keyword);
   2572     return Result.TakeString();
   2573   }
   2574 
   2575   if (Kind == RK_Macro) {
   2576     const MacroDirective *MD = PP.getMacroDirectiveHistory(Macro);
   2577     assert(MD && "Not a macro?");
   2578     const MacroInfo *MI = MD->getMacroInfo();
   2579 
   2580     Result.AddTypedTextChunk(
   2581                             Result.getAllocator().CopyString(Macro->getName()));
   2582 
   2583     if (!MI->isFunctionLike())
   2584       return Result.TakeString();
   2585 
   2586     // Format a function-like macro with placeholders for the arguments.
   2587     Result.AddChunk(CodeCompletionString::CK_LeftParen);
   2588     MacroInfo::arg_iterator A = MI->arg_begin(), AEnd = MI->arg_end();
   2589 
   2590     // C99 variadic macros add __VA_ARGS__ at the end. Skip it.
   2591     if (MI->isC99Varargs()) {
   2592       --AEnd;
   2593 
   2594       if (A == AEnd) {
   2595         Result.AddPlaceholderChunk("...");
   2596       }
   2597     }
   2598 
   2599     for (MacroInfo::arg_iterator A = MI->arg_begin(); A != AEnd; ++A) {
   2600       if (A != MI->arg_begin())
   2601         Result.AddChunk(CodeCompletionString::CK_Comma);
   2602 
   2603       if (MI->isVariadic() && (A+1) == AEnd) {
   2604         SmallString<32> Arg = (*A)->getName();
   2605         if (MI->isC99Varargs())
   2606           Arg += ", ...";
   2607         else
   2608           Arg += "...";
   2609         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
   2610         break;
   2611       }
   2612 
   2613       // Non-variadic macros are simple.
   2614       Result.AddPlaceholderChunk(
   2615                           Result.getAllocator().CopyString((*A)->getName()));
   2616     }
   2617     Result.AddChunk(CodeCompletionString::CK_RightParen);
   2618     return Result.TakeString();
   2619   }
   2620 
   2621   assert(Kind == RK_Declaration && "Missed a result kind?");
   2622   const NamedDecl *ND = Declaration;
   2623   Result.addParentContext(ND->getDeclContext());
   2624 
   2625   if (IncludeBriefComments) {
   2626     // Add documentation comment, if it exists.
   2627     if (const RawComment *RC = Ctx.getRawCommentForAnyRedecl(ND)) {
   2628       Result.addBriefComment(RC->getBriefText(Ctx));
   2629     }
   2630     else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
   2631       if (OMD->isPropertyAccessor())
   2632         if (const ObjCPropertyDecl *PDecl = OMD->findPropertyDecl())
   2633           if (const RawComment *RC = Ctx.getRawCommentForAnyRedecl(PDecl))
   2634             Result.addBriefComment(RC->getBriefText(Ctx));
   2635   }
   2636 
   2637   if (StartsNestedNameSpecifier) {
   2638     Result.AddTypedTextChunk(
   2639                       Result.getAllocator().CopyString(ND->getNameAsString()));
   2640     Result.AddTextChunk("::");
   2641     return Result.TakeString();
   2642   }
   2643 
   2644   for (Decl::attr_iterator i = ND->attr_begin(); i != ND->attr_end(); ++i) {
   2645     if (AnnotateAttr *Attr = dyn_cast_or_null<AnnotateAttr>(*i)) {
   2646       Result.AddAnnotation(Result.getAllocator().CopyString(Attr->getAnnotation()));
   2647     }
   2648   }
   2649 
   2650   AddResultTypeChunk(Ctx, Policy, ND, Result);
   2651 
   2652   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(ND)) {
   2653     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
   2654                                    Ctx, Policy);
   2655     AddTypedNameChunk(Ctx, Policy, ND, Result);
   2656     Result.AddChunk(CodeCompletionString::CK_LeftParen);
   2657     AddFunctionParameterChunks(Ctx, Policy, Function, Result);
   2658     Result.AddChunk(CodeCompletionString::CK_RightParen);
   2659     AddFunctionTypeQualsToCompletionString(Result, Function);
   2660     return Result.TakeString();
   2661   }
   2662 
   2663   if (const FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(ND)) {
   2664     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
   2665                                    Ctx, Policy);
   2666     FunctionDecl *Function = FunTmpl->getTemplatedDecl();
   2667     AddTypedNameChunk(Ctx, Policy, Function, Result);
   2668 
   2669     // Figure out which template parameters are deduced (or have default
   2670     // arguments).
   2671     llvm::SmallBitVector Deduced;
   2672     Sema::MarkDeducedTemplateParameters(Ctx, FunTmpl, Deduced);
   2673     unsigned LastDeducibleArgument;
   2674     for (LastDeducibleArgument = Deduced.size(); LastDeducibleArgument > 0;
   2675          --LastDeducibleArgument) {
   2676       if (!Deduced[LastDeducibleArgument - 1]) {
   2677         // C++0x: Figure out if the template argument has a default. If so,
   2678         // the user doesn't need to type this argument.
   2679         // FIXME: We need to abstract template parameters better!
   2680         bool HasDefaultArg = false;
   2681         NamedDecl *Param = FunTmpl->getTemplateParameters()->getParam(
   2682                                                     LastDeducibleArgument - 1);
   2683         if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
   2684           HasDefaultArg = TTP->hasDefaultArgument();
   2685         else if (NonTypeTemplateParmDecl *NTTP
   2686                  = dyn_cast<NonTypeTemplateParmDecl>(Param))
   2687           HasDefaultArg = NTTP->hasDefaultArgument();
   2688         else {
   2689           assert(isa<TemplateTemplateParmDecl>(Param));
   2690           HasDefaultArg
   2691             = cast<TemplateTemplateParmDecl>(Param)->hasDefaultArgument();
   2692         }
   2693 
   2694         if (!HasDefaultArg)
   2695           break;
   2696       }
   2697     }
   2698 
   2699     if (LastDeducibleArgument) {
   2700       // Some of the function template arguments cannot be deduced from a
   2701       // function call, so we introduce an explicit template argument list
   2702       // containing all of the arguments up to the first deducible argument.
   2703       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
   2704       AddTemplateParameterChunks(Ctx, Policy, FunTmpl, Result,
   2705                                  LastDeducibleArgument);
   2706       Result.AddChunk(CodeCompletionString::CK_RightAngle);
   2707     }
   2708 
   2709     // Add the function parameters
   2710     Result.AddChunk(CodeCompletionString::CK_LeftParen);
   2711     AddFunctionParameterChunks(Ctx, Policy, Function, Result);
   2712     Result.AddChunk(CodeCompletionString::CK_RightParen);
   2713     AddFunctionTypeQualsToCompletionString(Result, Function);
   2714     return Result.TakeString();
   2715   }
   2716 
   2717   if (const TemplateDecl *Template = dyn_cast<TemplateDecl>(ND)) {
   2718     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
   2719                                    Ctx, Policy);
   2720     Result.AddTypedTextChunk(
   2721                 Result.getAllocator().CopyString(Template->getNameAsString()));
   2722     Result.AddChunk(CodeCompletionString::CK_LeftAngle);
   2723     AddTemplateParameterChunks(Ctx, Policy, Template, Result);
   2724     Result.AddChunk(CodeCompletionString::CK_RightAngle);
   2725     return Result.TakeString();
   2726   }
   2727 
   2728   if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND)) {
   2729     Selector Sel = Method->getSelector();
   2730     if (Sel.isUnarySelector()) {
   2731       Result.AddTypedTextChunk(Result.getAllocator().CopyString(
   2732                                   Sel.getNameForSlot(0)));
   2733       return Result.TakeString();
   2734     }
   2735 
   2736     std::string SelName = Sel.getNameForSlot(0).str();
   2737     SelName += ':';
   2738     if (StartParameter == 0)
   2739       Result.AddTypedTextChunk(Result.getAllocator().CopyString(SelName));
   2740     else {
   2741       Result.AddInformativeChunk(Result.getAllocator().CopyString(SelName));
   2742 
   2743       // If there is only one parameter, and we're past it, add an empty
   2744       // typed-text chunk since there is nothing to type.
   2745       if (Method->param_size() == 1)
   2746         Result.AddTypedTextChunk("");
   2747     }
   2748     unsigned Idx = 0;
   2749     for (ObjCMethodDecl::param_const_iterator P = Method->param_begin(),
   2750                                            PEnd = Method->param_end();
   2751          P != PEnd; (void)++P, ++Idx) {
   2752       if (Idx > 0) {
   2753         std::string Keyword;
   2754         if (Idx > StartParameter)
   2755           Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
   2756         if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(Idx))
   2757           Keyword += II->getName();
   2758         Keyword += ":";
   2759         if (Idx < StartParameter || AllParametersAreInformative)
   2760           Result.AddInformativeChunk(Result.getAllocator().CopyString(Keyword));
   2761         else
   2762           Result.AddTypedTextChunk(Result.getAllocator().CopyString(Keyword));
   2763       }
   2764 
   2765       // If we're before the starting parameter, skip the placeholder.
   2766       if (Idx < StartParameter)
   2767         continue;
   2768 
   2769       std::string Arg;
   2770 
   2771       if ((*P)->getType()->isBlockPointerType() && !DeclaringEntity)
   2772         Arg = FormatFunctionParameter(Ctx, Policy, *P, true);
   2773       else {
   2774         (*P)->getType().getAsStringInternal(Arg, Policy);
   2775         Arg = "(" + formatObjCParamQualifiers((*P)->getObjCDeclQualifier())
   2776             + Arg + ")";
   2777         if (IdentifierInfo *II = (*P)->getIdentifier())
   2778           if (DeclaringEntity || AllParametersAreInformative)
   2779             Arg += II->getName();
   2780       }
   2781 
   2782       if (Method->isVariadic() && (P + 1) == PEnd)
   2783         Arg += ", ...";
   2784 
   2785       if (DeclaringEntity)
   2786         Result.AddTextChunk(Result.getAllocator().CopyString(Arg));
   2787       else if (AllParametersAreInformative)
   2788         Result.AddInformativeChunk(Result.getAllocator().CopyString(Arg));
   2789       else
   2790         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
   2791     }
   2792 
   2793     if (Method->isVariadic()) {
   2794       if (Method->param_size() == 0) {
   2795         if (DeclaringEntity)
   2796           Result.AddTextChunk(", ...");
   2797         else if (AllParametersAreInformative)
   2798           Result.AddInformativeChunk(", ...");
   2799         else
   2800           Result.AddPlaceholderChunk(", ...");
   2801       }
   2802 
   2803       MaybeAddSentinel(Ctx, Method, Result);
   2804     }
   2805 
   2806     return Result.TakeString();
   2807   }
   2808 
   2809   if (Qualifier)
   2810     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
   2811                                    Ctx, Policy);
   2812 
   2813   Result.AddTypedTextChunk(
   2814                        Result.getAllocator().CopyString(ND->getNameAsString()));
   2815   return Result.TakeString();
   2816 }
   2817 
   2818 CodeCompletionString *
   2819 CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
   2820                                                           unsigned CurrentArg,
   2821                                                                Sema &S,
   2822                                      CodeCompletionAllocator &Allocator,
   2823                                      CodeCompletionTUInfo &CCTUInfo) const {
   2824   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
   2825 
   2826   // FIXME: Set priority, availability appropriately.
   2827   CodeCompletionBuilder Result(Allocator,CCTUInfo, 1, CXAvailability_Available);
   2828   FunctionDecl *FDecl = getFunction();
   2829   AddResultTypeChunk(S.Context, Policy, FDecl, Result);
   2830   const FunctionProtoType *Proto
   2831     = dyn_cast<FunctionProtoType>(getFunctionType());
   2832   if (!FDecl && !Proto) {
   2833     // Function without a prototype. Just give the return type and a
   2834     // highlighted ellipsis.
   2835     const FunctionType *FT = getFunctionType();
   2836     Result.AddTextChunk(GetCompletionTypeString(FT->getResultType(),
   2837                                                 S.Context, Policy,
   2838                                                 Result.getAllocator()));
   2839     Result.AddChunk(CodeCompletionString::CK_LeftParen);
   2840     Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
   2841     Result.AddChunk(CodeCompletionString::CK_RightParen);
   2842     return Result.TakeString();
   2843   }
   2844 
   2845   if (FDecl)
   2846     Result.AddTextChunk(
   2847                     Result.getAllocator().CopyString(FDecl->getNameAsString()));
   2848   else
   2849     Result.AddTextChunk(
   2850          Result.getAllocator().CopyString(
   2851                                   Proto->getResultType().getAsString(Policy)));
   2852 
   2853   Result.AddChunk(CodeCompletionString::CK_LeftParen);
   2854   unsigned NumParams = FDecl? FDecl->getNumParams() : Proto->getNumArgs();
   2855   for (unsigned I = 0; I != NumParams; ++I) {
   2856     if (I)
   2857       Result.AddChunk(CodeCompletionString::CK_Comma);
   2858 
   2859     std::string ArgString;
   2860     QualType ArgType;
   2861 
   2862     if (FDecl) {
   2863       ArgString = FDecl->getParamDecl(I)->getNameAsString();
   2864       ArgType = FDecl->getParamDecl(I)->getOriginalType();
   2865     } else {
   2866       ArgType = Proto->getArgType(I);
   2867     }
   2868 
   2869     ArgType.getAsStringInternal(ArgString, Policy);
   2870 
   2871     if (I == CurrentArg)
   2872       Result.AddChunk(CodeCompletionString::CK_CurrentParameter,
   2873                       Result.getAllocator().CopyString(ArgString));
   2874     else
   2875       Result.AddTextChunk(Result.getAllocator().CopyString(ArgString));
   2876   }
   2877 
   2878   if (Proto && Proto->isVariadic()) {
   2879     Result.AddChunk(CodeCompletionString::CK_Comma);
   2880     if (CurrentArg < NumParams)
   2881       Result.AddTextChunk("...");
   2882     else
   2883       Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
   2884   }
   2885   Result.AddChunk(CodeCompletionString::CK_RightParen);
   2886 
   2887   return Result.TakeString();
   2888 }
   2889 
   2890 unsigned clang::getMacroUsagePriority(StringRef MacroName,
   2891                                       const LangOptions &LangOpts,
   2892                                       bool PreferredTypeIsPointer) {
   2893   unsigned Priority = CCP_Macro;
   2894 
   2895   // Treat the "nil", "Nil" and "NULL" macros as null pointer constants.
   2896   if (MacroName.equals("nil") || MacroName.equals("NULL") ||
   2897       MacroName.equals("Nil")) {
   2898     Priority = CCP_Constant;
   2899     if (PreferredTypeIsPointer)
   2900       Priority = Priority / CCF_SimilarTypeMatch;
   2901   }
   2902   // Treat "YES", "NO", "true", and "false" as constants.
   2903   else if (MacroName.equals("YES") || MacroName.equals("NO") ||
   2904            MacroName.equals("true") || MacroName.equals("false"))
   2905     Priority = CCP_Constant;
   2906   // Treat "bool" as a type.
   2907   else if (MacroName.equals("bool"))
   2908     Priority = CCP_Type + (LangOpts.ObjC1? CCD_bool_in_ObjC : 0);
   2909 
   2910 
   2911   return Priority;
   2912 }
   2913 
   2914 CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
   2915   if (!D)
   2916     return CXCursor_UnexposedDecl;
   2917 
   2918   switch (D->getKind()) {
   2919     case Decl::Enum:               return CXCursor_EnumDecl;
   2920     case Decl::EnumConstant:       return CXCursor_EnumConstantDecl;
   2921     case Decl::Field:              return CXCursor_FieldDecl;
   2922     case Decl::Function:
   2923       return CXCursor_FunctionDecl;
   2924     case Decl::ObjCCategory:       return CXCursor_ObjCCategoryDecl;
   2925     case Decl::ObjCCategoryImpl:   return CXCursor_ObjCCategoryImplDecl;
   2926     case Decl::ObjCImplementation: return CXCursor_ObjCImplementationDecl;
   2927 
   2928     case Decl::ObjCInterface:      return CXCursor_ObjCInterfaceDecl;
   2929     case Decl::ObjCIvar:           return CXCursor_ObjCIvarDecl;
   2930     case Decl::ObjCMethod:
   2931       return cast<ObjCMethodDecl>(D)->isInstanceMethod()
   2932       ? CXCursor_ObjCInstanceMethodDecl : CXCursor_ObjCClassMethodDecl;
   2933     case Decl::CXXMethod:          return CXCursor_CXXMethod;
   2934     case Decl::CXXConstructor:     return CXCursor_Constructor;
   2935     case Decl::CXXDestructor:      return CXCursor_Destructor;
   2936     case Decl::CXXConversion:      return CXCursor_ConversionFunction;
   2937     case Decl::ObjCProperty:       return CXCursor_ObjCPropertyDecl;
   2938     case Decl::ObjCProtocol:       return CXCursor_ObjCProtocolDecl;
   2939     case Decl::ParmVar:            return CXCursor_ParmDecl;
   2940     case Decl::Typedef:            return CXCursor_TypedefDecl;
   2941     case Decl::TypeAlias:          return CXCursor_TypeAliasDecl;
   2942     case Decl::Var:                return CXCursor_VarDecl;
   2943     case Decl::Namespace:          return CXCursor_Namespace;
   2944     case Decl::NamespaceAlias:     return CXCursor_NamespaceAlias;
   2945     case Decl::TemplateTypeParm:   return CXCursor_TemplateTypeParameter;
   2946     case Decl::NonTypeTemplateParm:return CXCursor_NonTypeTemplateParameter;
   2947     case Decl::TemplateTemplateParm:return CXCursor_TemplateTemplateParameter;
   2948     case Decl::FunctionTemplate:   return CXCursor_FunctionTemplate;
   2949     case Decl::ClassTemplate:      return CXCursor_ClassTemplate;
   2950     case Decl::AccessSpec:         return CXCursor_CXXAccessSpecifier;
   2951     case Decl::ClassTemplatePartialSpecialization:
   2952       return CXCursor_ClassTemplatePartialSpecialization;
   2953     case Decl::UsingDirective:     return CXCursor_UsingDirective;
   2954     case Decl::TranslationUnit:    return CXCursor_TranslationUnit;
   2955 
   2956     case Decl::Using:
   2957     case Decl::UnresolvedUsingValue:
   2958     case Decl::UnresolvedUsingTypename:
   2959       return CXCursor_UsingDeclaration;
   2960 
   2961     case Decl::ObjCPropertyImpl:
   2962       switch (cast<ObjCPropertyImplDecl>(D)->getPropertyImplementation()) {
   2963       case ObjCPropertyImplDecl::Dynamic:
   2964         return CXCursor_ObjCDynamicDecl;
   2965 
   2966       case ObjCPropertyImplDecl::Synthesize:
   2967         return CXCursor_ObjCSynthesizeDecl;
   2968       }
   2969 
   2970       case Decl::Import:
   2971         return CXCursor_ModuleImportDecl;
   2972 
   2973     default:
   2974       if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
   2975         switch (TD->getTagKind()) {
   2976           case TTK_Interface:  // fall through
   2977           case TTK_Struct: return CXCursor_StructDecl;
   2978           case TTK_Class:  return CXCursor_ClassDecl;
   2979           case TTK_Union:  return CXCursor_UnionDecl;
   2980           case TTK_Enum:   return CXCursor_EnumDecl;
   2981         }
   2982       }
   2983   }
   2984 
   2985   return CXCursor_UnexposedDecl;
   2986 }
   2987 
   2988 static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
   2989                             bool IncludeUndefined,
   2990                             bool TargetTypeIsPointer = false) {
   2991   typedef CodeCompletionResult Result;
   2992 
   2993   Results.EnterNewScope();
   2994 
   2995   for (Preprocessor::macro_iterator M = PP.macro_begin(),
   2996                                  MEnd = PP.macro_end();
   2997        M != MEnd; ++M) {
   2998     if (IncludeUndefined || M->first->hasMacroDefinition())
   2999       Results.AddResult(Result(M->first,
   3000                              getMacroUsagePriority(M->first->getName(),
   3001                                                    PP.getLangOpts(),
   3002                                                    TargetTypeIsPointer)));
   3003   }
   3004 
   3005   Results.ExitScope();
   3006 
   3007 }
   3008 
   3009 static void AddPrettyFunctionResults(const LangOptions &LangOpts,
   3010                                      ResultBuilder &Results) {
   3011   typedef CodeCompletionResult Result;
   3012 
   3013   Results.EnterNewScope();
   3014 
   3015   Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
   3016   Results.AddResult(Result("__FUNCTION__", CCP_Constant));
   3017   if (LangOpts.C99 || LangOpts.CPlusPlus11)
   3018     Results.AddResult(Result("__func__", CCP_Constant));
   3019   Results.ExitScope();
   3020 }
   3021 
   3022 static void HandleCodeCompleteResults(Sema *S,
   3023                                       CodeCompleteConsumer *CodeCompleter,
   3024                                       CodeCompletionContext Context,
   3025                                       CodeCompletionResult *Results,
   3026                                       unsigned NumResults) {
   3027   if (CodeCompleter)
   3028     CodeCompleter->ProcessCodeCompleteResults(*S, Context, Results, NumResults);
   3029 }
   3030 
   3031 static enum CodeCompletionContext::Kind mapCodeCompletionContext(Sema &S,
   3032                                             Sema::ParserCompletionContext PCC) {
   3033   switch (PCC) {
   3034   case Sema::PCC_Namespace:
   3035     return CodeCompletionContext::CCC_TopLevel;
   3036 
   3037   case Sema::PCC_Class:
   3038     return CodeCompletionContext::CCC_ClassStructUnion;
   3039 
   3040   case Sema::PCC_ObjCInterface:
   3041     return CodeCompletionContext::CCC_ObjCInterface;
   3042 
   3043   case Sema::PCC_ObjCImplementation:
   3044     return CodeCompletionContext::CCC_ObjCImplementation;
   3045 
   3046   case Sema::PCC_ObjCInstanceVariableList:
   3047     return CodeCompletionContext::CCC_ObjCIvarList;
   3048 
   3049   case Sema::PCC_Template:
   3050   case Sema::PCC_MemberTemplate:
   3051     if (S.CurContext->isFileContext())
   3052       return CodeCompletionContext::CCC_TopLevel;
   3053     if (S.CurContext->isRecord())
   3054       return CodeCompletionContext::CCC_ClassStructUnion;
   3055     return CodeCompletionContext::CCC_Other;
   3056 
   3057   case Sema::PCC_RecoveryInFunction:
   3058     return CodeCompletionContext::CCC_Recovery;
   3059 
   3060   case Sema::PCC_ForInit:
   3061     if (S.getLangOpts().CPlusPlus || S.getLangOpts().C99 ||
   3062         S.getLangOpts().ObjC1)
   3063       return CodeCompletionContext::CCC_ParenthesizedExpression;
   3064     else
   3065       return CodeCompletionContext::CCC_Expression;
   3066 
   3067   case Sema::PCC_Expression:
   3068   case Sema::PCC_Condition:
   3069     return CodeCompletionContext::CCC_Expression;
   3070 
   3071   case Sema::PCC_Statement:
   3072     return CodeCompletionContext::CCC_Statement;
   3073 
   3074   case Sema::PCC_Type:
   3075     return CodeCompletionContext::CCC_Type;
   3076 
   3077   case Sema::PCC_ParenthesizedExpression:
   3078     return CodeCompletionContext::CCC_ParenthesizedExpression;
   3079 
   3080   case Sema::PCC_LocalDeclarationSpecifiers:
   3081     return CodeCompletionContext::CCC_Type;
   3082   }
   3083 
   3084   llvm_unreachable("Invalid ParserCompletionContext!");
   3085 }
   3086 
   3087 /// \brief If we're in a C++ virtual member function, add completion results
   3088 /// that invoke the functions we override, since it's common to invoke the
   3089 /// overridden function as well as adding new functionality.
   3090 ///
   3091 /// \param S The semantic analysis object for which we are generating results.
   3092 ///
   3093 /// \param InContext This context in which the nested-name-specifier preceding
   3094 /// the code-completion point
   3095 static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext,
   3096                                   ResultBuilder &Results) {
   3097   // Look through blocks.
   3098   DeclContext *CurContext = S.CurContext;
   3099   while (isa<BlockDecl>(CurContext))
   3100     CurContext = CurContext->getParent();
   3101 
   3102 
   3103   CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(CurContext);
   3104   if (!Method || !Method->isVirtual())
   3105     return;
   3106 
   3107   // We need to have names for all of the parameters, if we're going to
   3108   // generate a forwarding call.
   3109   for (CXXMethodDecl::param_iterator P = Method->param_begin(),
   3110                                   PEnd = Method->param_end();
   3111        P != PEnd;
   3112        ++P) {
   3113     if (!(*P)->getDeclName())
   3114       return;
   3115   }
   3116 
   3117   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
   3118   for (CXXMethodDecl::method_iterator M = Method->begin_overridden_methods(),
   3119                                    MEnd = Method->end_overridden_methods();
   3120        M != MEnd; ++M) {
   3121     CodeCompletionBuilder Builder(Results.getAllocator(),
   3122                                   Results.getCodeCompletionTUInfo());
   3123     const CXXMethodDecl *Overridden = *M;
   3124     if (Overridden->getCanonicalDecl() == Method->getCanonicalDecl())
   3125       continue;
   3126 
   3127     // If we need a nested-name-specifier, add one now.
   3128     if (!InContext) {
   3129       NestedNameSpecifier *NNS
   3130         = getRequiredQualification(S.Context, CurContext,
   3131                                    Overridden->getDeclContext());
   3132       if (NNS) {
   3133         std::string Str;
   3134         llvm::raw_string_ostream OS(Str);
   3135         NNS->print(OS, Policy);
   3136         Builder.AddTextChunk(Results.getAllocator().CopyString(OS.str()));
   3137       }
   3138     } else if (!InContext->Equals(Overridden->getDeclContext()))
   3139       continue;
   3140 
   3141     Builder.AddTypedTextChunk(Results.getAllocator().CopyString(
   3142                                          Overridden->getNameAsString()));
   3143     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
   3144     bool FirstParam = true;
   3145     for (CXXMethodDecl::param_iterator P = Method->param_begin(),
   3146                                     PEnd = Method->param_end();
   3147          P != PEnd; ++P) {
   3148       if (FirstParam)
   3149         FirstParam = false;
   3150       else
   3151         Builder.AddChunk(CodeCompletionString::CK_Comma);
   3152 
   3153       Builder.AddPlaceholderChunk(Results.getAllocator().CopyString(
   3154                                         (*P)->getIdentifier()->getName()));
   3155     }
   3156     Builder.AddChunk(CodeCompletionString::CK_RightParen);
   3157     Results.AddResult(CodeCompletionResult(Builder.TakeString(),
   3158                                            CCP_SuperCompletion,
   3159                                            CXCursor_CXXMethod,
   3160                                            CXAvailability_Available,
   3161                                            Overridden));
   3162     Results.Ignore(Overridden);
   3163   }
   3164 }
   3165 
   3166 void Sema::CodeCompleteModuleImport(SourceLocation ImportLoc,
   3167                                     ModuleIdPath Path) {
   3168   typedef CodeCompletionResult Result;
   3169   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3170                         CodeCompleter->getCodeCompletionTUInfo(),
   3171                         CodeCompletionContext::CCC_Other);
   3172   Results.EnterNewScope();
   3173 
   3174   CodeCompletionAllocator &Allocator = Results.getAllocator();
   3175   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
   3176   typedef CodeCompletionResult Result;
   3177   if (Path.empty()) {
   3178     // Enumerate all top-level modules.
   3179     SmallVector<Module *, 8> Modules;
   3180     PP.getHeaderSearchInfo().collectAllModules(Modules);
   3181     for (unsigned I = 0, N = Modules.size(); I != N; ++I) {
   3182       Builder.AddTypedTextChunk(
   3183         Builder.getAllocator().CopyString(Modules[I]->Name));
   3184       Results.AddResult(Result(Builder.TakeString(),
   3185                                CCP_Declaration,
   3186                                CXCursor_ModuleImportDecl,
   3187                                Modules[I]->isAvailable()
   3188                                  ? CXAvailability_Available
   3189                                   : CXAvailability_NotAvailable));
   3190     }
   3191   } else if (getLangOpts().Modules) {
   3192     // Load the named module.
   3193     Module *Mod = PP.getModuleLoader().loadModule(ImportLoc, Path,
   3194                                                   Module::AllVisible,
   3195                                                 /*IsInclusionDirective=*/false);
   3196     // Enumerate submodules.
   3197     if (Mod) {
   3198       for (Module::submodule_iterator Sub = Mod->submodule_begin(),
   3199                                    SubEnd = Mod->submodule_end();
   3200            Sub != SubEnd; ++Sub) {
   3201 
   3202         Builder.AddTypedTextChunk(
   3203           Builder.getAllocator().CopyString((*Sub)->Name));
   3204         Results.AddResult(Result(Builder.TakeString(),
   3205                                  CCP_Declaration,
   3206                                  CXCursor_ModuleImportDecl,
   3207                                  (*Sub)->isAvailable()
   3208                                    ? CXAvailability_Available
   3209                                    : CXAvailability_NotAvailable));
   3210       }
   3211     }
   3212   }
   3213   Results.ExitScope();
   3214   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
   3215                             Results.data(),Results.size());
   3216 }
   3217 
   3218 void Sema::CodeCompleteOrdinaryName(Scope *S,
   3219                                     ParserCompletionContext CompletionContext) {
   3220   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3221                         CodeCompleter->getCodeCompletionTUInfo(),
   3222                         mapCodeCompletionContext(*this, CompletionContext));
   3223   Results.EnterNewScope();
   3224 
   3225   // Determine how to filter results, e.g., so that the names of
   3226   // values (functions, enumerators, function templates, etc.) are
   3227   // only allowed where we can have an expression.
   3228   switch (CompletionContext) {
   3229   case PCC_Namespace:
   3230   case PCC_Class:
   3231   case PCC_ObjCInterface:
   3232   case PCC_ObjCImplementation:
   3233   case PCC_ObjCInstanceVariableList:
   3234   case PCC_Template:
   3235   case PCC_MemberTemplate:
   3236   case PCC_Type:
   3237   case PCC_LocalDeclarationSpecifiers:
   3238     Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
   3239     break;
   3240 
   3241   case PCC_Statement:
   3242   case PCC_ParenthesizedExpression:
   3243   case PCC_Expression:
   3244   case PCC_ForInit:
   3245   case PCC_Condition:
   3246     if (WantTypesInContext(CompletionContext, getLangOpts()))
   3247       Results.setFilter(&ResultBuilder::IsOrdinaryName);
   3248     else
   3249       Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
   3250 
   3251     if (getLangOpts().CPlusPlus)
   3252       MaybeAddOverrideCalls(*this, /*InContext=*/0, Results);
   3253     break;
   3254 
   3255   case PCC_RecoveryInFunction:
   3256     // Unfiltered
   3257     break;
   3258   }
   3259 
   3260   // If we are in a C++ non-static member function, check the qualifiers on
   3261   // the member function to filter/prioritize the results list.
   3262   if (CXXMethodDecl *CurMethod = dyn_cast<CXXMethodDecl>(CurContext))
   3263     if (CurMethod->isInstance())
   3264       Results.setObjectTypeQualifiers(
   3265                       Qualifiers::fromCVRMask(CurMethod->getTypeQualifiers()));
   3266 
   3267   CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3268   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
   3269                      CodeCompleter->includeGlobals());
   3270 
   3271   AddOrdinaryNameResults(CompletionContext, S, *this, Results);
   3272   Results.ExitScope();
   3273 
   3274   switch (CompletionContext) {
   3275   case PCC_ParenthesizedExpression:
   3276   case PCC_Expression:
   3277   case PCC_Statement:
   3278   case PCC_RecoveryInFunction:
   3279     if (S->getFnParent())
   3280       AddPrettyFunctionResults(PP.getLangOpts(), Results);
   3281     break;
   3282 
   3283   case PCC_Namespace:
   3284   case PCC_Class:
   3285   case PCC_ObjCInterface:
   3286   case PCC_ObjCImplementation:
   3287   case PCC_ObjCInstanceVariableList:
   3288   case PCC_Template:
   3289   case PCC_MemberTemplate:
   3290   case PCC_ForInit:
   3291   case PCC_Condition:
   3292   case PCC_Type:
   3293   case PCC_LocalDeclarationSpecifiers:
   3294     break;
   3295   }
   3296 
   3297   if (CodeCompleter->includeMacros())
   3298     AddMacroResults(PP, Results, false);
   3299 
   3300   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
   3301                             Results.data(),Results.size());
   3302 }
   3303 
   3304 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
   3305                                        ParsedType Receiver,
   3306                                        ArrayRef<IdentifierInfo *> SelIdents,
   3307                                        bool AtArgumentExpression,
   3308                                        bool IsSuper,
   3309                                        ResultBuilder &Results);
   3310 
   3311 void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
   3312                                 bool AllowNonIdentifiers,
   3313                                 bool AllowNestedNameSpecifiers) {
   3314   typedef CodeCompletionResult Result;
   3315   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3316                         CodeCompleter->getCodeCompletionTUInfo(),
   3317                         AllowNestedNameSpecifiers
   3318                           ? CodeCompletionContext::CCC_PotentiallyQualifiedName
   3319                           : CodeCompletionContext::CCC_Name);
   3320   Results.EnterNewScope();
   3321 
   3322   // Type qualifiers can come after names.
   3323   Results.AddResult(Result("const"));
   3324   Results.AddResult(Result("volatile"));
   3325   if (getLangOpts().C99)
   3326     Results.AddResult(Result("restrict"));
   3327 
   3328   if (getLangOpts().CPlusPlus) {
   3329     if (AllowNonIdentifiers) {
   3330       Results.AddResult(Result("operator"));
   3331     }
   3332 
   3333     // Add nested-name-specifiers.
   3334     if (AllowNestedNameSpecifiers) {
   3335       Results.allowNestedNameSpecifiers();
   3336       Results.setFilter(&ResultBuilder::IsImpossibleToSatisfy);
   3337       CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3338       LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
   3339                          CodeCompleter->includeGlobals());
   3340       Results.setFilter(0);
   3341     }
   3342   }
   3343   Results.ExitScope();
   3344 
   3345   // If we're in a context where we might have an expression (rather than a
   3346   // declaration), and what we've seen so far is an Objective-C type that could
   3347   // be a receiver of a class message, this may be a class message send with
   3348   // the initial opening bracket '[' missing. Add appropriate completions.
   3349   if (AllowNonIdentifiers && !AllowNestedNameSpecifiers &&
   3350       DS.getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier &&
   3351       DS.getTypeSpecType() == DeclSpec::TST_typename &&
   3352       DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified &&
   3353       DS.getTypeSpecSign() == DeclSpec::TSS_unspecified &&
   3354       !DS.isTypeAltiVecVector() &&
   3355       S &&
   3356       (S->getFlags() & Scope::DeclScope) != 0 &&
   3357       (S->getFlags() & (Scope::ClassScope | Scope::TemplateParamScope |
   3358                         Scope::FunctionPrototypeScope |
   3359                         Scope::AtCatchScope)) == 0) {
   3360     ParsedType T = DS.getRepAsType();
   3361     if (!T.get().isNull() && T.get()->isObjCObjectOrInterfaceType())
   3362       AddClassMessageCompletions(*this, S, T, None, false, false, Results);
   3363   }
   3364 
   3365   // Note that we intentionally suppress macro results here, since we do not
   3366   // encourage using macros to produce the names of entities.
   3367 
   3368   HandleCodeCompleteResults(this, CodeCompleter,
   3369                             Results.getCompletionContext(),
   3370                             Results.data(), Results.size());
   3371 }
   3372 
   3373 struct Sema::CodeCompleteExpressionData {
   3374   CodeCompleteExpressionData(QualType PreferredType = QualType())
   3375     : PreferredType(PreferredType), IntegralConstantExpression(false),
   3376       ObjCCollection(false) { }
   3377 
   3378   QualType PreferredType;
   3379   bool IntegralConstantExpression;
   3380   bool ObjCCollection;
   3381   SmallVector<Decl *, 4> IgnoreDecls;
   3382 };
   3383 
   3384 /// \brief Perform code-completion in an expression context when we know what
   3385 /// type we're looking for.
   3386 void Sema::CodeCompleteExpression(Scope *S,
   3387                                   const CodeCompleteExpressionData &Data) {
   3388   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3389                         CodeCompleter->getCodeCompletionTUInfo(),
   3390                         CodeCompletionContext::CCC_Expression);
   3391   if (Data.ObjCCollection)
   3392     Results.setFilter(&ResultBuilder::IsObjCCollection);
   3393   else if (Data.IntegralConstantExpression)
   3394     Results.setFilter(&ResultBuilder::IsIntegralConstantValue);
   3395   else if (WantTypesInContext(PCC_Expression, getLangOpts()))
   3396     Results.setFilter(&ResultBuilder::IsOrdinaryName);
   3397   else
   3398     Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
   3399 
   3400   if (!Data.PreferredType.isNull())
   3401     Results.setPreferredType(Data.PreferredType.getNonReferenceType());
   3402 
   3403   // Ignore any declarations that we were told that we don't care about.
   3404   for (unsigned I = 0, N = Data.IgnoreDecls.size(); I != N; ++I)
   3405     Results.Ignore(Data.IgnoreDecls[I]);
   3406 
   3407   CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3408   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
   3409                      CodeCompleter->includeGlobals());
   3410 
   3411   Results.EnterNewScope();
   3412   AddOrdinaryNameResults(PCC_Expression, S, *this, Results);
   3413   Results.ExitScope();
   3414 
   3415   bool PreferredTypeIsPointer = false;
   3416   if (!Data.PreferredType.isNull())
   3417     PreferredTypeIsPointer = Data.PreferredType->isAnyPointerType()
   3418       || Data.PreferredType->isMemberPointerType()
   3419       || Data.PreferredType->isBlockPointerType();
   3420 
   3421   if (S->getFnParent() &&
   3422       !Data.ObjCCollection &&
   3423       !Data.IntegralConstantExpression)
   3424     AddPrettyFunctionResults(PP.getLangOpts(), Results);
   3425 
   3426   if (CodeCompleter->includeMacros())
   3427     AddMacroResults(PP, Results, false, PreferredTypeIsPointer);
   3428   HandleCodeCompleteResults(this, CodeCompleter,
   3429                 CodeCompletionContext(CodeCompletionContext::CCC_Expression,
   3430                                       Data.PreferredType),
   3431                             Results.data(),Results.size());
   3432 }
   3433 
   3434 void Sema::CodeCompletePostfixExpression(Scope *S, ExprResult E) {
   3435   if (E.isInvalid())
   3436     CodeCompleteOrdinaryName(S, PCC_RecoveryInFunction);
   3437   else if (getLangOpts().ObjC1)
   3438     CodeCompleteObjCInstanceMessage(S, E.take(), None, false);
   3439 }
   3440 
   3441 /// \brief The set of properties that have already been added, referenced by
   3442 /// property name.
   3443 typedef llvm::SmallPtrSet<IdentifierInfo*, 16> AddedPropertiesSet;
   3444 
   3445 /// \brief Retrieve the container definition, if any?
   3446 static ObjCContainerDecl *getContainerDef(ObjCContainerDecl *Container) {
   3447   if (ObjCInterfaceDecl *Interface = dyn_cast<ObjCInterfaceDecl>(Container)) {
   3448     if (Interface->hasDefinition())
   3449       return Interface->getDefinition();
   3450 
   3451     return Interface;
   3452   }
   3453 
   3454   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
   3455     if (Protocol->hasDefinition())
   3456       return Protocol->getDefinition();
   3457 
   3458     return Protocol;
   3459   }
   3460   return Container;
   3461 }
   3462 
   3463 static void AddObjCProperties(ObjCContainerDecl *Container,
   3464                               bool AllowCategories,
   3465                               bool AllowNullaryMethods,
   3466                               DeclContext *CurContext,
   3467                               AddedPropertiesSet &AddedProperties,
   3468                               ResultBuilder &Results) {
   3469   typedef CodeCompletionResult Result;
   3470 
   3471   // Retrieve the definition.
   3472   Container = getContainerDef(Container);
   3473 
   3474   // Add properties in this container.
   3475   for (ObjCContainerDecl::prop_iterator P = Container->prop_begin(),
   3476                                      PEnd = Container->prop_end();
   3477        P != PEnd;
   3478        ++P) {
   3479     if (AddedProperties.insert(P->getIdentifier()))
   3480       Results.MaybeAddResult(Result(*P, Results.getBasePriority(*P), 0),
   3481                              CurContext);
   3482   }
   3483 
   3484   // Add nullary methods
   3485   if (AllowNullaryMethods) {
   3486     ASTContext &Context = Container->getASTContext();
   3487     PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
   3488     for (ObjCContainerDecl::method_iterator M = Container->meth_begin(),
   3489                                          MEnd = Container->meth_end();
   3490          M != MEnd; ++M) {
   3491       if (M->getSelector().isUnarySelector())
   3492         if (IdentifierInfo *Name = M->getSelector().getIdentifierInfoForSlot(0))
   3493           if (AddedProperties.insert(Name)) {
   3494             CodeCompletionBuilder Builder(Results.getAllocator(),
   3495                                           Results.getCodeCompletionTUInfo());
   3496             AddResultTypeChunk(Context, Policy, *M, Builder);
   3497             Builder.AddTypedTextChunk(
   3498                             Results.getAllocator().CopyString(Name->getName()));
   3499 
   3500             Results.MaybeAddResult(Result(Builder.TakeString(), *M,
   3501                                   CCP_MemberDeclaration + CCD_MethodAsProperty),
   3502                                           CurContext);
   3503           }
   3504     }
   3505   }
   3506 
   3507 
   3508   // Add properties in referenced protocols.
   3509   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
   3510     for (ObjCProtocolDecl::protocol_iterator P = Protocol->protocol_begin(),
   3511                                           PEnd = Protocol->protocol_end();
   3512          P != PEnd; ++P)
   3513       AddObjCProperties(*P, AllowCategories, AllowNullaryMethods, CurContext,
   3514                         AddedProperties, Results);
   3515   } else if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)){
   3516     if (AllowCategories) {
   3517       // Look through categories.
   3518       for (ObjCInterfaceDecl::known_categories_iterator
   3519              Cat = IFace->known_categories_begin(),
   3520              CatEnd = IFace->known_categories_end();
   3521            Cat != CatEnd; ++Cat)
   3522         AddObjCProperties(*Cat, AllowCategories, AllowNullaryMethods,
   3523                           CurContext, AddedProperties, Results);
   3524     }
   3525 
   3526     // Look through protocols.
   3527     for (ObjCInterfaceDecl::all_protocol_iterator
   3528          I = IFace->all_referenced_protocol_begin(),
   3529          E = IFace->all_referenced_protocol_end(); I != E; ++I)
   3530       AddObjCProperties(*I, AllowCategories, AllowNullaryMethods, CurContext,
   3531                         AddedProperties, Results);
   3532 
   3533     // Look in the superclass.
   3534     if (IFace->getSuperClass())
   3535       AddObjCProperties(IFace->getSuperClass(), AllowCategories,
   3536                         AllowNullaryMethods, CurContext,
   3537                         AddedProperties, Results);
   3538   } else if (const ObjCCategoryDecl *Category
   3539                                     = dyn_cast<ObjCCategoryDecl>(Container)) {
   3540     // Look through protocols.
   3541     for (ObjCCategoryDecl::protocol_iterator P = Category->protocol_begin(),
   3542                                           PEnd = Category->protocol_end();
   3543          P != PEnd; ++P)
   3544       AddObjCProperties(*P, AllowCategories, AllowNullaryMethods, CurContext,
   3545                         AddedProperties, Results);
   3546   }
   3547 }
   3548 
   3549 void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
   3550                                            SourceLocation OpLoc,
   3551                                            bool IsArrow) {
   3552   if (!Base || !CodeCompleter)
   3553     return;
   3554 
   3555   ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
   3556   if (ConvertedBase.isInvalid())
   3557     return;
   3558   Base = ConvertedBase.get();
   3559 
   3560   typedef CodeCompletionResult Result;
   3561 
   3562   QualType BaseType = Base->getType();
   3563 
   3564   if (IsArrow) {
   3565     if (const PointerType *Ptr = BaseType->getAs<PointerType>())
   3566       BaseType = Ptr->getPointeeType();
   3567     else if (BaseType->isObjCObjectPointerType())
   3568       /*Do nothing*/ ;
   3569     else
   3570       return;
   3571   }
   3572 
   3573   enum CodeCompletionContext::Kind contextKind;
   3574 
   3575   if (IsArrow) {
   3576     contextKind = CodeCompletionContext::CCC_ArrowMemberAccess;
   3577   }
   3578   else {
   3579     if (BaseType->isObjCObjectPointerType() ||
   3580         BaseType->isObjCObjectOrInterfaceType()) {
   3581       contextKind = CodeCompletionContext::CCC_ObjCPropertyAccess;
   3582     }
   3583     else {
   3584       contextKind = CodeCompletionContext::CCC_DotMemberAccess;
   3585     }
   3586   }
   3587 
   3588   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3589                         CodeCompleter->getCodeCompletionTUInfo(),
   3590                   CodeCompletionContext(contextKind,
   3591                                         BaseType),
   3592                         &ResultBuilder::IsMember);
   3593   Results.EnterNewScope();
   3594   if (const RecordType *Record = BaseType->getAs<RecordType>()) {
   3595     // Indicate that we are performing a member access, and the cv-qualifiers
   3596     // for the base object type.
   3597     Results.setObjectTypeQualifiers(BaseType.getQualifiers());
   3598 
   3599     // Access to a C/C++ class, struct, or union.
   3600     Results.allowNestedNameSpecifiers();
   3601     CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3602     LookupVisibleDecls(Record->getDecl(), LookupMemberName, Consumer,
   3603                        CodeCompleter->includeGlobals());
   3604 
   3605     if (getLangOpts().CPlusPlus) {
   3606       if (!Results.empty()) {
   3607         // The "template" keyword can follow "->" or "." in the grammar.
   3608         // However, we only want to suggest the template keyword if something
   3609         // is dependent.
   3610         bool IsDependent = BaseType->isDependentType();
   3611         if (!IsDependent) {
   3612           for (Scope *DepScope = S; DepScope; DepScope = DepScope->getParent())
   3613             if (DeclContext *Ctx = (DeclContext *)DepScope->getEntity()) {
   3614               IsDependent = Ctx->isDependentContext();
   3615               break;
   3616             }
   3617         }
   3618 
   3619         if (IsDependent)
   3620           Results.AddResult(Result("template"));
   3621       }
   3622     }
   3623   } else if (!IsArrow && BaseType->getAsObjCInterfacePointerType()) {
   3624     // Objective-C property reference.
   3625     AddedPropertiesSet AddedProperties;
   3626 
   3627     // Add property results based on our interface.
   3628     const ObjCObjectPointerType *ObjCPtr
   3629       = BaseType->getAsObjCInterfacePointerType();
   3630     assert(ObjCPtr && "Non-NULL pointer guaranteed above!");
   3631     AddObjCProperties(ObjCPtr->getInterfaceDecl(), true,
   3632                       /*AllowNullaryMethods=*/true, CurContext,
   3633                       AddedProperties, Results);
   3634 
   3635     // Add properties from the protocols in a qualified interface.
   3636     for (ObjCObjectPointerType::qual_iterator I = ObjCPtr->qual_begin(),
   3637                                               E = ObjCPtr->qual_end();
   3638          I != E; ++I)
   3639       AddObjCProperties(*I, true, /*AllowNullaryMethods=*/true, CurContext,
   3640                         AddedProperties, Results);
   3641   } else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
   3642              (!IsArrow && BaseType->isObjCObjectType())) {
   3643     // Objective-C instance variable access.
   3644     ObjCInterfaceDecl *Class = 0;
   3645     if (const ObjCObjectPointerType *ObjCPtr
   3646                                     = BaseType->getAs<ObjCObjectPointerType>())
   3647       Class = ObjCPtr->getInterfaceDecl();
   3648     else
   3649       Class = BaseType->getAs<ObjCObjectType>()->getInterface();
   3650 
   3651     // Add all ivars from this class and its superclasses.
   3652     if (Class) {
   3653       CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3654       Results.setFilter(&ResultBuilder::IsObjCIvar);
   3655       LookupVisibleDecls(Class, LookupMemberName, Consumer,
   3656                          CodeCompleter->includeGlobals());
   3657     }
   3658   }
   3659 
   3660   // FIXME: How do we cope with isa?
   3661 
   3662   Results.ExitScope();
   3663 
   3664   // Hand off the results found for code completion.
   3665   HandleCodeCompleteResults(this, CodeCompleter,
   3666                             Results.getCompletionContext(),
   3667                             Results.data(),Results.size());
   3668 }
   3669 
   3670 void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
   3671   if (!CodeCompleter)
   3672     return;
   3673 
   3674   ResultBuilder::LookupFilter Filter = 0;
   3675   enum CodeCompletionContext::Kind ContextKind
   3676     = CodeCompletionContext::CCC_Other;
   3677   switch ((DeclSpec::TST)TagSpec) {
   3678   case DeclSpec::TST_enum:
   3679     Filter = &ResultBuilder::IsEnum;
   3680     ContextKind = CodeCompletionContext::CCC_EnumTag;
   3681     break;
   3682 
   3683   case DeclSpec::TST_union:
   3684     Filter = &ResultBuilder::IsUnion;
   3685     ContextKind = CodeCompletionContext::CCC_UnionTag;
   3686     break;
   3687 
   3688   case DeclSpec::TST_struct:
   3689   case DeclSpec::TST_class:
   3690   case DeclSpec::TST_interface:
   3691     Filter = &ResultBuilder::IsClassOrStruct;
   3692     ContextKind = CodeCompletionContext::CCC_ClassOrStructTag;
   3693     break;
   3694 
   3695   default:
   3696     llvm_unreachable("Unknown type specifier kind in CodeCompleteTag");
   3697   }
   3698 
   3699   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3700                         CodeCompleter->getCodeCompletionTUInfo(), ContextKind);
   3701   CodeCompletionDeclConsumer Consumer(Results, CurContext);
   3702 
   3703   // First pass: look for tags.
   3704   Results.setFilter(Filter);
   3705   LookupVisibleDecls(S, LookupTagName, Consumer,
   3706                      CodeCompleter->includeGlobals());
   3707 
   3708   if (CodeCompleter->includeGlobals()) {
   3709     // Second pass: look for nested name specifiers.
   3710     Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
   3711     LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer);
   3712   }
   3713 
   3714   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
   3715                             Results.data(),Results.size());
   3716 }
   3717 
   3718 void Sema::CodeCompleteTypeQualifiers(DeclSpec &DS) {
   3719   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3720                         CodeCompleter->getCodeCompletionTUInfo(),
   3721                         CodeCompletionContext::CCC_TypeQualifiers);
   3722   Results.EnterNewScope();
   3723   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_const))
   3724     Results.AddResult("const");
   3725   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_volatile))
   3726     Results.AddResult("volatile");
   3727   if (getLangOpts().C99 &&
   3728       !(DS.getTypeQualifiers() & DeclSpec::TQ_restrict))
   3729     Results.AddResult("restrict");
   3730   if (getLangOpts().C11 &&
   3731       !(DS.getTypeQualifiers() & DeclSpec::TQ_atomic))
   3732     Results.AddResult("_Atomic");
   3733   Results.ExitScope();
   3734   HandleCodeCompleteResults(this, CodeCompleter,
   3735                             Results.getCompletionContext(),
   3736                             Results.data(), Results.size());
   3737 }
   3738 
   3739 void Sema::CodeCompleteCase(Scope *S) {
   3740   if (getCurFunction()->SwitchStack.empty() || !CodeCompleter)
   3741     return;
   3742 
   3743   SwitchStmt *Switch = getCurFunction()->SwitchStack.back();
   3744   QualType type = Switch->getCond()->IgnoreImplicit()->getType();
   3745   if (!type->isEnumeralType()) {
   3746     CodeCompleteExpressionData Data(type);
   3747     Data.IntegralConstantExpression = true;
   3748     CodeCompleteExpression(S, Data);
   3749     return;
   3750   }
   3751 
   3752   // Code-complete the cases of a switch statement over an enumeration type
   3753   // by providing the list of
   3754   EnumDecl *Enum = type->castAs<EnumType>()->getDecl();
   3755   if (EnumDecl *Def = Enum->getDefinition())
   3756     Enum = Def;
   3757 
   3758   // Determine which enumerators we have already seen in the switch statement.
   3759   // FIXME: Ideally, we would also be able to look *past* the code-completion
   3760   // token, in case we are code-completing in the middle of the switch and not
   3761   // at the end. However, we aren't able to do so at the moment.
   3762   llvm::SmallPtrSet<EnumConstantDecl *, 8> EnumeratorsSeen;
   3763   NestedNameSpecifier *Qualifier = 0;
   3764   for (SwitchCase *SC = Switch->getSwitchCaseList(); SC;
   3765        SC = SC->getNextSwitchCase()) {
   3766     CaseStmt *Case = dyn_cast<CaseStmt>(SC);
   3767     if (!Case)
   3768       continue;
   3769 
   3770     Expr *CaseVal = Case->getLHS()->IgnoreParenCasts();
   3771     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CaseVal))
   3772       if (EnumConstantDecl *Enumerator
   3773             = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
   3774         // We look into the AST of the case statement to determine which
   3775         // enumerator was named. Alternatively, we could compute the value of
   3776         // the integral constant expression, then compare it against the
   3777         // values of each enumerator. However, value-based approach would not
   3778         // work as well with C++ templates where enumerators declared within a
   3779         // template are type- and value-dependent.
   3780         EnumeratorsSeen.insert(Enumerator);
   3781 
   3782         // If this is a qualified-id, keep track of the nested-name-specifier
   3783         // so that we can reproduce it as part of code completion, e.g.,
   3784         //
   3785         //   switch (TagD.getKind()) {
   3786         //     case TagDecl::TK_enum:
   3787         //       break;
   3788         //     case XXX
   3789         //
   3790         // At the XXX, our completions are TagDecl::TK_union,
   3791         // TagDecl::TK_struct, and TagDecl::TK_class, rather than TK_union,
   3792         // TK_struct, and TK_class.
   3793         Qualifier = DRE->getQualifier();
   3794       }
   3795   }
   3796 
   3797   if (getLangOpts().CPlusPlus && !Qualifier && EnumeratorsSeen.empty()) {
   3798     // If there are no prior enumerators in C++, check whether we have to
   3799     // qualify the names of the enumerators that we suggest, because they
   3800     // may not be visible in this scope.
   3801     Qualifier = getRequiredQualification(Context, CurContext, Enum);
   3802   }
   3803 
   3804   // Add any enumerators that have not yet been mentioned.
   3805   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
   3806                         CodeCompleter->getCodeCompletionTUInfo(),
   3807                         CodeCompletionContext::CCC_Expression);
   3808   Results.EnterNewScope();
   3809   for (EnumDecl::enumerator_iterator E = Enum->enumerator_begin(),
   3810                                   EEnd = Enum->enumerator_end();
   3811        E != EEnd; ++E) {
   3812     if (EnumeratorsSeen.count(*E))
   3813       continue;
   3814 
   3815     CodeCompletionResult R(*E, CCP_EnumInCase, Qualifier);
   3816     Results.AddResult(R, CurContext, 0, false);
   3817   }
   3818   Results.ExitScope();
   3819 
   3820   //We need to make sure we're setting the right context,
   3821   //so only say we include macros if the code completer says we do
   3822   enum CodeCompletionContext::Kind kind = CodeCompletionContext::CCC_Other;
   3823   if (CodeCompleter->includeMacros()) {
   3824     AddMacroResults(PP, Results, false);
   3825     kind = CodeCompletionContext::CCC_OtherWithMacros;
   3826   }
   3827 
   3828   HandleCodeCompleteResults(this, CodeCompleter,
   3829                             kind,
   3830                             Results.data(),Results.size());
   3831 }
   3832 
   3833 namespace {
   3834   struct IsBetterOverloadCandidate {
   3835     Sema &S;
   3836     SourceLocation Loc;
   3837 
   3838   public:
   3839     explicit IsBetterOverloadCandidate(Sema &S, SourceLocation Loc)
   3840       : S(S), Loc(Loc) { }
   3841 
   3842     bool
   3843     operator()(const OverloadCandidate &X, const OverloadCandidate &Y) const {
   3844       return isBetterOverloadCandidate(S, X, Y, Loc);
   3845     }
   3846   };
   3847 }
   3848 
   3849 static bool anyNullArgument