diff options
| author | Abramo Bagnara <abramo.bagnara@gmail.com> | 2010-05-14 14:14:23 +0000 |
|---|---|---|
| committer | Abramo Bagnara <abramo.bagnara@gmail.com> | 2010-05-14 14:14:23 +0000 |
| commit | e9f4d6ed7d242e910ebc6d1e7660ba68fb5b907b (patch) | |
| tree | a47db077e29cca783f0cfdaa9085d39f00fa3743 /clang/lib/Sema/TreeTransform.h | |
| parent | 148e876ac285c2f837e04d92b9316e32b0b4e3b9 (diff) | |
| download | bcm5719-llvm-e9f4d6ed7d242e910ebc6d1e7660ba68fb5b907b.tar.gz bcm5719-llvm-e9f4d6ed7d242e910ebc6d1e7660ba68fb5b907b.zip | |
Added basic source locations to Elaborated and DependentName types.
llvm-svn: 103770
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 35152617336..4929bf7ba3b 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -3247,22 +3247,22 @@ QualType TreeTransform<Derived>::TransformElaboratedType(TypeLocBuilder &TLB, ElaboratedTypeLoc TL, QualType ObjectType) { + QualType Named = getDerived().TransformType(TLB, TL.getNamedTypeLoc()); + if (Named.isNull()) + return QualType(); + ElaboratedType *T = TL.getTypePtr(); NestedNameSpecifier *NNS = 0; // NOTE: the qualifier in an ElaboratedType is optional. if (T->getQualifier() != 0) { NNS = getDerived().TransformNestedNameSpecifier(T->getQualifier(), - SourceRange(), + /* FIXME */ SourceRange(), ObjectType); if (!NNS) return QualType(); } - QualType Named = getDerived().TransformType(T->getNamedType()); - if (Named.isNull()) - return QualType(); - QualType Result = TL.getType(); if (getDerived().AlwaysRebuild() || NNS != T->getQualifier() || @@ -3273,7 +3273,7 @@ TreeTransform<Derived>::TransformElaboratedType(TypeLocBuilder &TLB, } ElaboratedTypeLoc NewTL = TLB.push<ElaboratedTypeLoc>(Result); - NewTL.setNameLoc(TL.getNameLoc()); + NewTL.setKeywordLoc(TL.getKeywordLoc()); return Result; } @@ -3315,9 +3315,36 @@ QualType TreeTransform<Derived>::TransformDependentNameType(TypeLocBuilder &TLB, if (Result.isNull()) return QualType(); - DependentNameTypeLoc NewTL = TLB.push<DependentNameTypeLoc>(Result); - NewTL.setNameLoc(TL.getNameLoc()); - + if (const ElaboratedType* ElabT = Result->getAs<ElaboratedType>()) { + QualType NamedT = ElabT->getNamedType(); + if (isa<TypedefType>(NamedT)) { + TypedefTypeLoc NamedTLoc = TLB.push<TypedefTypeLoc>(NamedT); + NamedTLoc.setNameLoc(TL.getNameLoc()); + } + else if (isa<RecordType>(NamedT)) { + RecordTypeLoc NamedTLoc = TLB.push<RecordTypeLoc>(NamedT); + NamedTLoc.setNameLoc(TL.getNameLoc()); + } + else if (isa<EnumType>(NamedT)) { + EnumTypeLoc NamedTLoc = TLB.push<EnumTypeLoc>(NamedT); + NamedTLoc.setNameLoc(TL.getNameLoc()); + } + else if (isa<TemplateSpecializationType>(NamedT)) { + TemplateSpecializationTypeLoc NamedTLoc + = TLB.push<TemplateSpecializationTypeLoc>(NamedT); + // FIXME: fill locations + NamedTLoc.initializeLocal(SourceLocation()); + } + else + llvm_unreachable("Unexpected type"); + ElaboratedTypeLoc NewTL = TLB.push<ElaboratedTypeLoc>(Result); + NewTL.setKeywordLoc(TL.getKeywordLoc()); + } + else { + DependentNameTypeLoc NewTL = TLB.push<DependentNameTypeLoc>(Result); + NewTL.setKeywordLoc(TL.getKeywordLoc()); + NewTL.setNameLoc(TL.getNameLoc()); + } return Result; } |

