Yes, I think so. > On Jul 26, 2016, at 1:37 AM, Vassil Vassilev <v.g.vassi...@gmail.com> wrote: > > (forgot to click "reply all") > Thanks! This is really handy interface. Would it make sense adding the same > for NamespaceDecl for consistency? > On 15/07/16 20:11, Argyrios Kyrtzidis via cfe-commits wrote: >> Author: akirtzidis >> Date: Fri Jul 15 13:11:33 2016 >> New Revision: 275590 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=275590&view=rev >> Log: >> [AST] Keep track of the left brace source location of a tag decl. >> >> This is useful for source modification tools. There will be a follow-up >> commit using it. >> >> Modified: >> cfe/trunk/include/clang/AST/Decl.h >> cfe/trunk/include/clang/Sema/Sema.h >> cfe/trunk/lib/AST/Decl.cpp >> cfe/trunk/lib/AST/DeclTemplate.cpp >> cfe/trunk/lib/Parse/ParseDecl.cpp >> cfe/trunk/lib/Parse/ParseDeclCXX.cpp >> cfe/trunk/lib/Sema/SemaDecl.cpp >> cfe/trunk/lib/Sema/SemaTemplate.cpp >> cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp >> cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp >> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp >> cfe/trunk/lib/Serialization/ASTWriter.cpp >> cfe/trunk/lib/Serialization/ASTWriterDecl.cpp >> >> Modified: cfe/trunk/include/clang/AST/Decl.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/AST/Decl.h (original) >> +++ cfe/trunk/include/clang/AST/Decl.h Fri Jul 15 13:11:33 2016 >> @@ -2781,7 +2781,7 @@ protected: >> /// the TU. >> unsigned IsCompleteDefinitionRequired : 1; >> private: >> - SourceLocation RBraceLoc; >> + SourceRange BraceRange; >> // A struct representing syntactic qualifier info, >> // to be used for the (uncommon) case of out-of-line declarations. >> @@ -2843,8 +2843,8 @@ public: >> using redeclarable_base::getMostRecentDecl; >> using redeclarable_base::isFirstDecl; >> - SourceLocation getRBraceLoc() const { return RBraceLoc; } >> - void setRBraceLoc(SourceLocation L) { RBraceLoc = L; } >> + SourceRange getBraceRange() const { return BraceRange; } >> + void setBraceRange(SourceRange R) { BraceRange = R; } >> /// getInnerLocStart - Return SourceLocation representing start of >> source >> /// range ignoring outer template declarations. >> >> Modified: cfe/trunk/include/clang/Sema/Sema.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Sema/Sema.h (original) >> +++ cfe/trunk/include/clang/Sema/Sema.h Fri Jul 15 13:11:33 2016 >> @@ -2039,7 +2039,7 @@ public: >> /// ActOnTagFinishDefinition - Invoked once we have finished parsing >> /// the definition of a tag (enumeration, class, struct, or union). >> void ActOnTagFinishDefinition(Scope *S, Decl *TagDecl, >> - SourceLocation RBraceLoc); >> + SourceRange BraceRange); >> void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context); >> @@ -2076,8 +2076,8 @@ public: >> SourceLocation IdLoc, IdentifierInfo *Id, >> AttributeList *Attrs, >> SourceLocation EqualLoc, Expr *Val); >> - void ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc, >> - SourceLocation RBraceLoc, Decl *EnumDecl, >> + void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, >> + Decl *EnumDecl, >> ArrayRef<Decl *> Elements, >> Scope *S, AttributeList *Attr); >> >> Modified: cfe/trunk/lib/AST/Decl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/AST/Decl.cpp (original) >> +++ cfe/trunk/lib/AST/Decl.cpp Fri Jul 15 13:11:33 2016 >> @@ -3525,6 +3525,7 @@ SourceLocation TagDecl::getOuterLocStart >> } >> SourceRange TagDecl::getSourceRange() const { >> + SourceLocation RBraceLoc = BraceRange.getEnd(); >> SourceLocation E = RBraceLoc.isValid() ? RBraceLoc : getLocation(); >> return SourceRange(getOuterLocStart(), E); >> } >> >> Modified: cfe/trunk/lib/AST/DeclTemplate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclTemplate.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/AST/DeclTemplate.cpp (original) >> +++ cfe/trunk/lib/AST/DeclTemplate.cpp Fri Jul 15 13:11:33 2016 >> @@ -778,7 +778,7 @@ ClassTemplateSpecializationDecl::getSour >> getSpecializationKind() == >> TSK_ExplicitInstantiationDefinition); >> if (getExternLoc().isValid()) >> Begin = getExternLoc(); >> - SourceLocation End = getRBraceLoc(); >> + SourceLocation End = getBraceRange().getEnd(); >> if (End.isInvalid()) >> End = getTypeAsWritten()->getTypeLoc().getEndLoc(); >> return SourceRange(Begin, End); >> >> Modified: cfe/trunk/lib/Parse/ParseDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) >> +++ cfe/trunk/lib/Parse/ParseDecl.cpp Fri Jul 15 13:11:33 2016 >> @@ -3773,8 +3773,7 @@ void Parser::ParseStructUnionBody(Source >> T.getOpenLocation(), T.getCloseLocation(), >> attrs.getList()); >> StructScope.Exit(); >> - Actions.ActOnTagFinishDefinition(getCurScope(), TagDecl, >> - T.getCloseLocation()); >> + Actions.ActOnTagFinishDefinition(getCurScope(), TagDecl, T.getRange()); >> } >> /// ParseEnumSpecifier >> @@ -4269,7 +4268,7 @@ void Parser::ParseEnumBody(SourceLocatio >> ParsedAttributes attrs(AttrFactory); >> MaybeParseGNUAttributes(attrs); >> - Actions.ActOnEnumBody(StartLoc, T.getOpenLocation(), >> T.getCloseLocation(), >> + Actions.ActOnEnumBody(StartLoc, T.getRange(), >> EnumDecl, EnumConstantDecls, >> getCurScope(), >> attrs.getList()); >> @@ -4283,8 +4282,7 @@ void Parser::ParseEnumBody(SourceLocatio >> } >> EnumScope.Exit(); >> - Actions.ActOnTagFinishDefinition(getCurScope(), EnumDecl, >> - T.getCloseLocation()); >> + Actions.ActOnTagFinishDefinition(getCurScope(), EnumDecl, T.getRange()); >> // The next token must be valid after an enum definition. If not, a ';' >> // was probably forgotten. >> >> Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original) >> +++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Fri Jul 15 13:11:33 2016 >> @@ -3143,8 +3143,7 @@ void Parser::ParseCXXMemberSpecification >> } >> if (TagDecl) >> - Actions.ActOnTagFinishDefinition(getCurScope(), TagDecl, >> - T.getCloseLocation()); >> + Actions.ActOnTagFinishDefinition(getCurScope(), TagDecl, T.getRange()); >> // Leave the class scope. >> ParsingDef.Pop(); >> >> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Jul 15 13:11:33 2016 >> @@ -13176,10 +13176,10 @@ void Sema::ActOnStartCXXMemberDeclaratio >> } >> void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, >> - SourceLocation RBraceLoc) { >> + SourceRange BraceRange) { >> AdjustDeclIfTemplate(TagD); >> TagDecl *Tag = cast<TagDecl>(TagD); >> - Tag->setRBraceLoc(RBraceLoc); >> + Tag->setBraceRange(BraceRange); >> // Make sure we "complete" the definition even it is invalid. >> if (Tag->isBeingDefined()) { >> @@ -14775,8 +14775,8 @@ bool Sema::IsValueInFlagEnum(const EnumD >> return !(FlagMask & Val) || (AllowMask && !(FlagMask & ~Val)); >> } >> -void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc, >> - SourceLocation RBraceLoc, Decl *EnumDeclX, >> +void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, >> + Decl *EnumDeclX, >> ArrayRef<Decl *> Elements, >> Scope *S, AttributeList *Attr) { >> EnumDecl *Enum = cast<EnumDecl>(EnumDeclX); >> >> Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Fri Jul 15 13:11:33 2016 >> @@ -7509,7 +7509,7 @@ Sema::ActOnExplicitInstantiation(Scope * >> // Set source locations for keywords. >> Specialization->setExternLoc(ExternLoc); >> Specialization->setTemplateKeywordLoc(TemplateLoc); >> - Specialization->setRBraceLoc(SourceLocation()); >> + Specialization->setBraceRange(SourceRange()); >> if (Attr) >> ProcessDeclAttributeList(S, Specialization, Attr); >> >> Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp Fri Jul 15 13:11:33 2016 >> @@ -2090,7 +2090,7 @@ Sema::InstantiateClass(SourceLocation Po >> if (TSK == TSK_ImplicitInstantiation) { >> Instantiation->setLocation(Pattern->getLocation()); >> Instantiation->setLocStart(Pattern->getInnerLocStart()); >> - Instantiation->setRBraceLoc(Pattern->getRBraceLoc()); >> + Instantiation->setBraceRange(Pattern->getBraceRange()); >> } >> if (!Instantiation->isInvalidDecl()) { >> >> Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Fri Jul 15 13:11:33 >> 2016 >> @@ -1018,9 +1018,7 @@ void TemplateDeclInstantiator::Instantia >> } >> } >> - // FIXME: Fixup LBraceLoc >> - SemaRef.ActOnEnumBody(Enum->getLocation(), SourceLocation(), >> - Enum->getRBraceLoc(), Enum, >> + SemaRef.ActOnEnumBody(Enum->getLocation(), Enum->getBraceRange(), Enum, >> Enumerators, >> nullptr, nullptr); >> } >> >> Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Fri Jul 15 13:11:33 2016 >> @@ -647,7 +647,7 @@ ASTDeclReader::RedeclarableResult ASTDec >> TD->setEmbeddedInDeclarator(Record[Idx++]); >> TD->setFreeStanding(Record[Idx++]); >> TD->setCompleteDefinitionRequired(Record[Idx++]); >> - TD->setRBraceLoc(ReadSourceLocation(Record, Idx)); >> + TD->setBraceRange(ReadSourceRange(Record, Idx)); >> switch (Record[Idx++]) { >> case 0: >> @@ -3846,7 +3846,7 @@ void ASTDeclReader::UpdateDecl(Decl *D, >> RD->setTagKind((TagTypeKind)Record[Idx++]); >> RD->setLocation(Reader.ReadSourceLocation(ModuleFile, Record, Idx)); >> RD->setLocStart(Reader.ReadSourceLocation(ModuleFile, Record, Idx)); >> - RD->setRBraceLoc(Reader.ReadSourceLocation(ModuleFile, Record, Idx)); >> + RD->setBraceRange(Reader.ReadSourceRange(ModuleFile, Record, Idx)); >> if (Record[Idx++]) { >> AttrVec Attrs; >> >> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri Jul 15 13:11:33 2016 >> @@ -4716,7 +4716,7 @@ void ASTWriter::WriteDeclUpdatesBlocks(R >> Record.push_back(RD->getTagKind()); >> Record.AddSourceLocation(RD->getLocation()); >> Record.AddSourceLocation(RD->getLocStart()); >> - Record.AddSourceLocation(RD->getRBraceLoc()); >> + Record.AddSourceRange(RD->getBraceRange()); >> // Instantiation may change attributes; write them all out afresh. >> Record.push_back(D->hasAttrs()); >> >> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=275590&r1=275589&r2=275590&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Fri Jul 15 13:11:33 2016 >> @@ -399,7 +399,7 @@ void ASTDeclWriter::VisitTagDecl(TagDecl >> Record.push_back(D->isEmbeddedInDeclarator()); >> Record.push_back(D->isFreeStanding()); >> Record.push_back(D->isCompleteDefinitionRequired()); >> - Record.AddSourceLocation(D->getRBraceLoc()); >> + Record.AddSourceRange(D->getBraceRange()); >> if (D->hasExtInfo()) { >> Record.push_back(1); >> @@ -1769,6 +1769,7 @@ void ASTWriter::WriteDeclAbbrevs() { >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsFreeStanding >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // >> IsCompleteDefinitionRequired >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // SourceLocation >> + Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // SourceLocation >> Abv->Add(BitCodeAbbrevOp(0)); // ExtInfoKind >> // EnumDecl >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // AddTypeRef >> @@ -1817,6 +1818,7 @@ void ASTWriter::WriteDeclAbbrevs() { >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsFreeStanding >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // >> IsCompleteDefinitionRequired >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // SourceLocation >> + Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // SourceLocation >> Abv->Add(BitCodeAbbrevOp(0)); // ExtInfoKind >> // RecordDecl >> Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // >> FlexibleArrayMember >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits