diff options
| author | Reid Kleckner <reid@kleckner.net> | 2013-12-04 22:51:51 +0000 | 
|---|---|---|
| committer | Reid Kleckner <reid@kleckner.net> | 2013-12-04 22:51:51 +0000 | 
| commit | feb8ac9bd1c1327074a3c0daa8e796fe21b51afd (patch) | |
| tree | c0407fdd4d2c0653651a5f9296039983ce76621e /clang/lib | |
| parent | 8ad70b3542ec7ac478d668724d1f9767170740c5 (diff) | |
| download | bcm5719-llvm-feb8ac9bd1c1327074a3c0daa8e796fe21b51afd.tar.gz bcm5719-llvm-feb8ac9bd1c1327074a3c0daa8e796fe21b51afd.zip | |
Factor duplicated code for TransformTypeInObjectScope
Fixes the relevant FIXME about copy-pasted code.
llvm-svn: 196425
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 71 | 
1 files changed, 22 insertions, 49 deletions
| diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 4b70e702b6b..44581fd4153 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -2655,6 +2655,10 @@ private:                                               QualType ObjectType,                                               NamedDecl *FirstQualifierInScope,                                               CXXScopeSpec &SS); + +  TypeSourceInfo *TransformTSIInObjectScope(TypeLoc TL, QualType ObjectType, +                                            NamedDecl *FirstQualifierInScope, +                                            CXXScopeSpec &SS);  };  template<typename Derived> @@ -3562,52 +3566,14 @@ TreeTransform<Derived>::TransformTypeInObjectScope(TypeLoc TL,                                                     QualType ObjectType,                                                     NamedDecl *UnqualLookup,                                                     CXXScopeSpec &SS) { -  QualType T = TL.getType(); -  if (getDerived().AlreadyTransformed(T)) +  if (getDerived().AlreadyTransformed(TL.getType()))      return TL; -  TypeLocBuilder TLB; -  QualType Result; - -  if (isa<TemplateSpecializationType>(T)) { -    TemplateSpecializationTypeLoc SpecTL = -        TL.castAs<TemplateSpecializationTypeLoc>(); - -    TemplateName Template = -      getDerived().TransformTemplateName(SS, -                                         SpecTL.getTypePtr()->getTemplateName(), -                                         SpecTL.getTemplateNameLoc(), -                                         ObjectType, UnqualLookup); -    if (Template.isNull()) -      return TypeLoc(); - -    Result = getDerived().TransformTemplateSpecializationType(TLB, SpecTL, -                                                              Template); -  } else if (isa<DependentTemplateSpecializationType>(T)) { -    DependentTemplateSpecializationTypeLoc SpecTL = -        TL.castAs<DependentTemplateSpecializationTypeLoc>(); - -    TemplateName Template -      = getDerived().RebuildTemplateName(SS, -                                         *SpecTL.getTypePtr()->getIdentifier(), -                                         SpecTL.getTemplateNameLoc(), -                                         ObjectType, UnqualLookup); -    if (Template.isNull()) -      return TypeLoc(); - -    Result = getDerived().TransformDependentTemplateSpecializationType(TLB, -                                                                       SpecTL, -                                                                     Template, -                                                                       SS); -  } else { -    // Nothing special needs to be done for these. -    Result = getDerived().TransformType(TLB, TL); -  } - -  if (Result.isNull()) -    return TypeLoc(); - -  return TLB.getTypeSourceInfo(SemaRef.Context, Result)->getTypeLoc(); +  TypeSourceInfo *TSI = +      TransformTSIInObjectScope(TL, ObjectType, UnqualLookup, SS); +  if (TSI) +    return TSI->getTypeLoc(); +  return TypeLoc();  }  template<typename Derived> @@ -3616,16 +3582,23 @@ TreeTransform<Derived>::TransformTypeInObjectScope(TypeSourceInfo *TSInfo,                                                     QualType ObjectType,                                                     NamedDecl *UnqualLookup,                                                     CXXScopeSpec &SS) { -  // FIXME: Painfully copy-paste from the above! - -  QualType T = TSInfo->getType(); -  if (getDerived().AlreadyTransformed(T)) +  if (getDerived().AlreadyTransformed(TSInfo->getType()))      return TSInfo; +  return TransformTSIInObjectScope(TSInfo->getTypeLoc(), ObjectType, +                                   UnqualLookup, SS); +} + +template <typename Derived> +TypeSourceInfo *TreeTransform<Derived>::TransformTSIInObjectScope( +    TypeLoc TL, QualType ObjectType, NamedDecl *UnqualLookup, +    CXXScopeSpec &SS) { +  QualType T = TL.getType(); +  assert(!getDerived().AlreadyTransformed(T)); +    TypeLocBuilder TLB;    QualType Result; -  TypeLoc TL = TSInfo->getTypeLoc();    if (isa<TemplateSpecializationType>(T)) {      TemplateSpecializationTypeLoc SpecTL =          TL.castAs<TemplateSpecializationTypeLoc>(); | 

