diff options
| author | James Y Knight <jyknight@google.com> | 2015-12-24 02:59:37 +0000 | 
|---|---|---|
| committer | James Y Knight <jyknight@google.com> | 2015-12-24 02:59:37 +0000 | 
| commit | 04ec5bfad8ff4ce74e9a0104069971d5e27862c7 (patch) | |
| tree | ddece5dda6b3dbf5be86581a383c5d540d055a21 /clang/tools/libclang | |
| parent | 0a1f1fe5a21ea65b0cf08c139ce5c2c9ffc91ba1 (diff) | |
| download | bcm5719-llvm-04ec5bfad8ff4ce74e9a0104069971d5e27862c7.tar.gz bcm5719-llvm-04ec5bfad8ff4ce74e9a0104069971d5e27862c7.zip  | |
[TrailingObjects] Convert ASTTemplateKWAndArgsInfo and ASTTemplateArgumentListInfo.
Doing so required separating them so that the former doesn't inherit
from the latter anymore. Investigating that, it became clear that the
inheritance wasn't actually providing real value in any case.
So also:
- Remove a bunch of redundant functions (getExplicitTemplateArgs,
  getOptionalExplicitTemplateArgs) on various Expr subclasses which
  depended on the inheritance relationship.
- Switched external callers to use pre-existing accessors that return the
  data they're actually interested in (getTemplateArgs,
  getNumTemplateArgs, etc).
- Switched internal callers to use pre-existing getTemplateKWAndArgsInfo.
llvm-svn: 256359
Diffstat (limited to 'clang/tools/libclang')
| -rw-r--r-- | clang/tools/libclang/CIndex.cpp | 77 | 
1 files changed, 45 insertions, 32 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 5022417d9af..11cd7bc25d5 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -1755,13 +1755,27 @@ DEF_JOB(StmtVisit, Stmt, StmtVisitKind)  DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind)  DEF_JOB(DeclRefExprParts, DeclRefExpr, DeclRefExprPartsKind)  DEF_JOB(OverloadExprParts, OverloadExpr, OverloadExprPartsKind) -DEF_JOB(ExplicitTemplateArgsVisit, ASTTemplateArgumentListInfo,  -        ExplicitTemplateArgsVisitKind)  DEF_JOB(SizeOfPackExprParts, SizeOfPackExpr, SizeOfPackExprPartsKind)  DEF_JOB(LambdaExprParts, LambdaExpr, LambdaExprPartsKind)  DEF_JOB(PostChildrenVisit, void, PostChildrenVisitKind)  #undef DEF_JOB +class ExplicitTemplateArgsVisit : public VisitorJob { +public: +  ExplicitTemplateArgsVisit(const TemplateArgumentLoc *Begin, +                            const TemplateArgumentLoc *End, CXCursor parent) +      : VisitorJob(parent, VisitorJob::ExplicitTemplateArgsVisitKind, Begin, +                   End) {} +  static bool classof(const VisitorJob *VJ) { +    return VJ->getKind() == ExplicitTemplateArgsVisitKind; +  } +  const TemplateArgumentLoc *begin() const { +    return static_cast<const TemplateArgumentLoc *>(data[0]); +  } +  const TemplateArgumentLoc *end() { +    return static_cast<const TemplateArgumentLoc *>(data[1]); +  } +};  class DeclVisit : public VisitorJob {  public:    DeclVisit(const Decl *D, CXCursor parent, bool isFirst) : @@ -1949,7 +1963,8 @@ public:  private:    void AddDeclarationNameInfo(const Stmt *S);    void AddNestedNameSpecifierLoc(NestedNameSpecifierLoc Qualifier); -  void AddExplicitTemplateArgs(const ASTTemplateArgumentListInfo *A); +  void AddExplicitTemplateArgs(const TemplateArgumentLoc *A, +                               unsigned NumTemplateArgs);    void AddMemberRef(const FieldDecl *D, SourceLocation L);    void AddStmt(const Stmt *S);    void AddDecl(const Decl *D, bool isFirst = true); @@ -1979,10 +1994,9 @@ void EnqueueVisitor::AddDecl(const Decl *D, bool isFirst) {    if (D)      WL.push_back(DeclVisit(D, Parent, isFirst));  } -void EnqueueVisitor:: -  AddExplicitTemplateArgs(const ASTTemplateArgumentListInfo *A) { -  if (A) -    WL.push_back(ExplicitTemplateArgsVisit(A, Parent)); +void EnqueueVisitor::AddExplicitTemplateArgs(const TemplateArgumentLoc *A, +                                             unsigned NumTemplateArgs) { +  WL.push_back(ExplicitTemplateArgsVisit(A, A + NumTemplateArgs, Parent));  }  void EnqueueVisitor::AddMemberRef(const FieldDecl *D, SourceLocation L) {    if (D) @@ -2247,7 +2261,8 @@ VisitMSDependentExistsStmt(const MSDependentExistsStmt *S) {  void EnqueueVisitor::  VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *E) { -  AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs()); +  if (E->hasExplicitTemplateArgs()) +    AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());    AddDeclarationNameInfo(E);    if (NestedNameSpecifierLoc QualifierLoc = E->getQualifierLoc())      AddNestedNameSpecifierLoc(QualifierLoc); @@ -2322,14 +2337,14 @@ void EnqueueVisitor::VisitCXXForRangeStmt(const CXXForRangeStmt *S) {  }  void EnqueueVisitor::VisitDeclRefExpr(const DeclRefExpr *DR) { -  if (DR->hasExplicitTemplateArgs()) { -    AddExplicitTemplateArgs(&DR->getExplicitTemplateArgs()); -  } +  if (DR->hasExplicitTemplateArgs()) +    AddExplicitTemplateArgs(DR->getTemplateArgs(), DR->getNumTemplateArgs());    WL.push_back(DeclRefExprParts(DR, Parent));  }  void EnqueueVisitor::VisitDependentScopeDeclRefExpr(                                          const DependentScopeDeclRefExpr *E) { -  AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs()); +  if (E->hasExplicitTemplateArgs()) +    AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());    AddDeclarationNameInfo(E);    AddNestedNameSpecifierLoc(E->getQualifierLoc());  } @@ -2443,7 +2458,8 @@ void EnqueueVisitor::VisitOffsetOfExpr(const OffsetOfExpr *E) {    AddTypeLoc(E->getTypeSourceInfo());  }  void EnqueueVisitor::VisitOverloadExpr(const OverloadExpr *E) { -  AddExplicitTemplateArgs(E->getOptionalExplicitTemplateArgs()); +  if (E->hasExplicitTemplateArgs()) +    AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());    WL.push_back(OverloadExprParts(E, Parent));  }  void EnqueueVisitor::VisitUnaryExprOrTypeTraitExpr( @@ -2677,12 +2693,9 @@ bool CursorVisitor::RunVisitorWorkList(VisitorWorkList &WL) {          continue;        }        case VisitorJob::ExplicitTemplateArgsVisitKind: { -        const ASTTemplateArgumentListInfo *ArgList = -          cast<ExplicitTemplateArgsVisit>(&LI)->get(); -        for (const TemplateArgumentLoc *Arg = ArgList->getTemplateArgs(), -               *ArgEnd = Arg + ArgList->NumTemplateArgs; -               Arg != ArgEnd; ++Arg) { -          if (VisitTemplateArgumentLoc(*Arg)) +        for (const TemplateArgumentLoc &Arg : +             *cast<ExplicitTemplateArgsVisit>(&LI)) { +          if (VisitTemplateArgumentLoc(Arg))              return true;          }          continue; @@ -2884,10 +2897,9 @@ bool CursorVisitor::Visit(const Stmt *S) {  namespace {  typedef SmallVector<SourceRange, 4> RefNamePieces; -RefNamePieces -buildPieces(unsigned NameFlags, bool IsMemberRefExpr, -            const DeclarationNameInfo &NI, SourceRange QLoc, -            const ASTTemplateArgumentListInfo *TemplateArgs = nullptr) { +RefNamePieces buildPieces(unsigned NameFlags, bool IsMemberRefExpr, +                          const DeclarationNameInfo &NI, SourceRange QLoc, +                          const SourceRange *TemplateArgsLoc = nullptr) {    const bool WantQualifier = NameFlags & CXNameRange_WantQualifier;    const bool WantTemplateArgs = NameFlags & CXNameRange_WantTemplateArgs;    const bool WantSinglePiece = NameFlags & CXNameRange_WantSinglePiece; @@ -2901,11 +2913,10 @@ buildPieces(unsigned NameFlags, bool IsMemberRefExpr,    if (Kind != DeclarationName::CXXOperatorName || IsMemberRefExpr)      Pieces.push_back(NI.getLoc()); -   -  if (WantTemplateArgs && TemplateArgs) -    Pieces.push_back(SourceRange(TemplateArgs->LAngleLoc, -                                 TemplateArgs->RAngleLoc)); -   + +  if (WantTemplateArgs && TemplateArgsLoc && TemplateArgsLoc->isValid()) +    Pieces.push_back(*TemplateArgsLoc); +    if (Kind == DeclarationName::CXXOperatorName) {      Pieces.push_back(SourceLocation::getFromRawEncoding(                         NI.getInfo().CXXOperatorName.BeginOpNameLoc)); @@ -5524,10 +5535,12 @@ CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, unsigned NameFlags,      break;    case CXCursor_DeclRefExpr: -    if (const DeclRefExpr *E = dyn_cast<DeclRefExpr>(getCursorExpr(C))) -      Pieces = buildPieces(NameFlags, false, E->getNameInfo(),  -                           E->getQualifierLoc().getSourceRange(), -                           E->getOptionalExplicitTemplateArgs()); +    if (const DeclRefExpr *E = dyn_cast<DeclRefExpr>(getCursorExpr(C))) { +      SourceRange TemplateArgLoc(E->getLAngleLoc(), E->getRAngleLoc()); +      Pieces = +          buildPieces(NameFlags, false, E->getNameInfo(), +                      E->getQualifierLoc().getSourceRange(), &TemplateArgLoc); +    }      break;    case CXCursor_CallExpr:  | 

