diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-14 16:34:09 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-14 16:34:09 +0000 |
commit | a63db84b164d3f1c987a3ea6251e3092db4f317b (patch) | |
tree | d0b94e39c34a8d3ca09dbc5f5ae0c8b0cf675af4 | |
parent | 3cb18bcefe39756f3b079fa1a62b4c9cbf6a592f (diff) |
Revert r103770, "Added basic source locations to Elaborated and DependentName
types.", it is breaking Clang bootstrap.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103775 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/TypeLoc.h | 87 | ||||
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 3 | ||||
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 3 | ||||
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 50 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 29 | ||||
-rw-r--r-- | lib/Sema/TreeTransform.h | 45 |
6 files changed, 34 insertions, 183 deletions
diff --git a/include/clang/AST/TypeLoc.h b/include/clang/AST/TypeLoc.h index 19b0e976b8..9927ae7edb 100644 --- a/include/clang/AST/TypeLoc.h +++ b/include/clang/AST/TypeLoc.h @@ -269,16 +269,6 @@ public: return TypeClass::classof(Ty); } - static bool classof(const TypeLoc *TL) { - return Derived::classofType(TL->getTypePtr()); - } - static bool classof(const UnqualTypeLoc *TL) { - return Derived::classofType(TL->getTypePtr()); - } - static bool classof(const Derived *TL) { - return true; - } - TypeLoc getNextTypeLoc() const { return getNextTypeLoc(asDerived()->getInnerType()); } @@ -1241,75 +1231,18 @@ class DecltypeTypeLoc : public InheritingConcreteTypeLoc<TypeSpecTypeLoc, DecltypeType> { }; -// FIXME: locations for the nested name specifier should be put in -// NestedNameSpecifier -struct ElaboratedLocInfo { - SourceLocation KeywordLoc; -}; - -class ElaboratedTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc, - ElaboratedTypeLoc, - ElaboratedType, - ElaboratedLocInfo> { -public: - SourceLocation getKeywordLoc() const { - return this->getLocalData()->KeywordLoc; - } - void setKeywordLoc(SourceLocation Loc) { - this->getLocalData()->KeywordLoc = Loc; - } - - SourceRange getSourceRange() const { - return SourceRange(getKeywordLoc(), getKeywordLoc()); - } - - void initializeLocal(SourceLocation Loc) { - setKeywordLoc(Loc); - } - - TypeLoc getNamedTypeLoc() const { - return getInnerTypeLoc(); - } - - QualType getInnerType() const { - return getTypePtr()->getNamedType(); - } -}; - -// FIXME: locations for the nested name specifier should be put in -// NestedNameSpecifier -struct DependentNameLocInfo { - SourceLocation KeywordLoc; - SourceLocation NameLoc; +// FIXME: locations for the nested name specifier; at the very least, +// a SourceRange. +class ElaboratedTypeLoc : + public InheritingConcreteTypeLoc<TypeSpecTypeLoc, + ElaboratedTypeLoc, + ElaboratedType> { }; -class DependentNameTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc, - DependentNameTypeLoc, - DependentNameType, - DependentNameLocInfo> { -public: - SourceLocation getKeywordLoc() const { - return this->getLocalData()->KeywordLoc; - } - void setKeywordLoc(SourceLocation Loc) { - this->getLocalData()->KeywordLoc = Loc; - } - - SourceLocation getNameLoc() const { - return this->getLocalData()->NameLoc; - } - void setNameLoc(SourceLocation Loc) { - this->getLocalData()->NameLoc = Loc; - } - - SourceRange getSourceRange() const { - return SourceRange(getKeywordLoc(), getNameLoc()); - } - - void initializeLocal(SourceLocation Loc) { - setKeywordLoc(Loc); - setNameLoc(Loc); - } +// FIXME: locations for the typename keyword and nested name specifier. +class DependentNameTypeLoc : public InheritingConcreteTypeLoc<TypeSpecTypeLoc, + DependentNameTypeLoc, + DependentNameType> { }; } diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 4d5c001519..c329f7b64f 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -2354,13 +2354,12 @@ void TypeLocReader::VisitTemplateSpecializationTypeLoc( Record, Idx)); } void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { - TL.setKeywordLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); + TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); } void TypeLocReader::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) { TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); } void TypeLocReader::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { - TL.setKeywordLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); TL.setNameLoc(SourceLocation::getFromRawEncoding(Record[Idx++])); } void TypeLocReader::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) { diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 5d84ca6530..b323dcf4b8 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -396,13 +396,12 @@ void TypeLocWriter::VisitTemplateSpecializationTypeLoc( Writer.AddTemplateArgumentLoc(TL.getArgLoc(i), Record); } void TypeLocWriter::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { - Writer.AddSourceLocation(TL.getKeywordLoc(), Record); + Writer.AddSourceLocation(TL.getNameLoc(), Record); } void TypeLocWriter::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) { Writer.AddSourceLocation(TL.getNameLoc(), Record); } void TypeLocWriter::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { - Writer.AddSourceLocation(TL.getKeywordLoc(), Record); Writer.AddSourceLocation(TL.getNameLoc(), Record); } void TypeLocWriter::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) { diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index d8b00cc816..9009b4d897 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -5184,18 +5184,16 @@ Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK, static void FillTypeLoc(DependentNameTypeLoc TL, SourceLocation TypenameLoc, - SourceRange QualifierRange, - SourceLocation NameLoc) { - // FIXME: qualifier range - TL.setKeywordLoc(TypenameLoc); - TL.setNameLoc(NameLoc); + SourceRange QualifierRange) { + // FIXME: typename, qualifier range + TL.setNameLoc(TypenameLoc); } static void FillTypeLoc(ElaboratedTypeLoc TL, SourceLocation TypenameLoc, SourceRange QualifierRange) { - // FIXME: qualifier range and inner locations. - TL.setKeywordLoc(TypenameLoc); + // FIXME: typename, qualifier range + TL.setNameLoc(TypenameLoc); } Sema::TypeResult @@ -5215,7 +5213,7 @@ Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS, if (isa<DependentNameType>(T)) { DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc()); // FIXME: fill inner type loc - FillTypeLoc(TL, TypenameLoc, SS.getRange(), IdLoc); + FillTypeLoc(TL, TypenameLoc, SS.getRange()); } else { ElaboratedTypeLoc TL = cast<ElaboratedTypeLoc>(TSI->getTypeLoc()); // FIXME: fill inner type loc @@ -5251,7 +5249,7 @@ Sema::ActOnTypenameType(SourceLocation TypenameLoc, const CXXScopeSpec &SS, TypeSourceInfo *TSI = Context.CreateTypeSourceInfo(T); DependentNameTypeLoc TL = cast<DependentNameTypeLoc>(TSI->getTypeLoc()); // FIXME: fill inner type loc - FillTypeLoc(TL, TypenameLoc, SS.getRange(), TemplateLoc); + FillTypeLoc(TL, TypenameLoc, SS.getRange()); return CreateLocInfoType(T, TSI).getAsOpaquePtr(); } @@ -5428,41 +5426,13 @@ CurrentInstantiationRebuilder::TransformDependentNameType(TypeLocBuilder &TLB, } else Result = getDerived().RebuildDependentNameType(T->getKeyword(), NNS, T->getIdentifier(), - TL.getSourceRange()); + SourceRange(TL.getNameLoc())); if (Result.isNull()) return QualType(); - 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()); - } + DependentNameTypeLoc NewTL = TLB.push<DependentNameTypeLoc>(Result); + NewTL.setNameLoc(TL.getNameLoc()); return Result; } diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 84348f1475..d926b9b61f 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -1455,15 +1455,9 @@ namespace { return; } - TypeLoc OldTL = TInfo->getTypeLoc(); - if (TInfo->getType()->getAs<ElaboratedType>()) { - ElaboratedTypeLoc ElabTL = cast<ElaboratedTypeLoc>(OldTL); - TemplateSpecializationTypeLoc NamedTL = - cast<TemplateSpecializationTypeLoc>(ElabTL.getNamedTypeLoc()); - TL.copy(NamedTL); - } - else - TL.copy(cast<TemplateSpecializationTypeLoc>(OldTL)); + TemplateSpecializationTypeLoc OldTL = + cast<TemplateSpecializationTypeLoc>(TInfo->getTypeLoc()); + TL.copy(OldTL); } void VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) { assert(DS.getTypeSpecType() == DeclSpec::TST_typeofExpr); @@ -1494,23 +1488,6 @@ namespace { TL.setBuiltinLoc(DS.getTypeSpecWidthLoc()); } } - void VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { - ElaboratedTypeKeyword Keyword - = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType()); - TL.setKeywordLoc(Keyword != ETK_None - ? DS.getTypeSpecTypeLoc() - : SourceLocation()); - Visit(TL.getNextTypeLoc().getUnqualifiedLoc()); - } - void VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { - ElaboratedTypeKeyword Keyword - = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType()); - TL.setKeywordLoc(Keyword != ETK_None - ? DS.getTypeSpecTypeLoc() - : SourceLocation()); - TL.setNameLoc(DS.getTypeSpecTypeLoc()); - } - void VisitTypeLoc(TypeLoc TL) { // FIXME: add other typespec types and change this to an assert. TL.initialize(DS.getTypeSpecTypeLoc()); diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 4929bf7ba3..3515261733 100644 --- a/lib/Sema/TreeTransform.h +++ b/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(), - /* FIXME */ SourceRange(), + 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.setKeywordLoc(TL.getKeywordLoc()); + NewTL.setNameLoc(TL.getNameLoc()); return Result; } @@ -3315,36 +3315,9 @@ QualType TreeTransform<Derived>::TransformDependentNameType(TypeLocBuilder &TLB, if (Result.isNull()) return QualType(); - 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()); - } + DependentNameTypeLoc NewTL = TLB.push<DependentNameTypeLoc>(Result); + NewTL.setNameLoc(TL.getNameLoc()); + return Result; } |