summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorAbramo Bagnara <abramo.bagnara@gmail.com>2010-05-14 14:14:23 +0000
committerAbramo Bagnara <abramo.bagnara@gmail.com>2010-05-14 14:14:23 +0000
commite9f4d6ed7d242e910ebc6d1e7660ba68fb5b907b (patch)
treea47db077e29cca783f0cfdaa9085d39f00fa3743 /clang/lib/Sema/TreeTransform.h
parent148e876ac285c2f837e04d92b9316e32b0b4e3b9 (diff)
downloadbcm5719-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.h45
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;
}
OpenPOWER on IntegriCloud