From feb8ac9bd1c1327074a3c0daa8e796fe21b51afd Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 4 Dec 2013 22:51:51 +0000 Subject: Factor duplicated code for TransformTypeInObjectScope Fixes the relevant FIXME about copy-pasted code. llvm-svn: 196425 --- clang/lib/Sema/TreeTransform.h | 71 +++++++++++++----------------------------- 1 file changed, 22 insertions(+), 49 deletions(-) (limited to 'clang/lib') 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 @@ -3562,52 +3566,14 @@ TreeTransform::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(T)) { - TemplateSpecializationTypeLoc SpecTL = - TL.castAs(); - - 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(T)) { - DependentTemplateSpecializationTypeLoc SpecTL = - TL.castAs(); - - 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 @@ -3616,16 +3582,23 @@ TreeTransform::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 +TypeSourceInfo *TreeTransform::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(T)) { TemplateSpecializationTypeLoc SpecTL = TL.castAs(); -- cgit v1.2.3