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 | |
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
-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>(); |