From: Douglas Gregor Date: Mon, 12 Jan 2009 23:27:07 +0000 (+0000) Subject: Cleanup DeclContext::addDecl and DeclContext::insert interface, from Piotr Rak X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=482b77d1cb4ca08391d1f749436f092a4cc24427;p=clang Cleanup DeclContext::addDecl and DeclContext::insert interface, from Piotr Rak git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62122 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp index cc66a2c267..ec0018a11c 100644 --- a/Driver/RewriteObjC.cpp +++ b/Driver/RewriteObjC.cpp @@ -2172,12 +2172,10 @@ QualType RewriteObjC::getSuperStructType() { // Create fields for (unsigned i = 0; i < 2; ++i) { - SuperStructDecl->addDecl(*Context, - FieldDecl::Create(*Context, SuperStructDecl, + SuperStructDecl->addDecl(FieldDecl::Create(*Context, SuperStructDecl, SourceLocation(), 0, FieldTypes[i], /*BitWidth=*/0, - /*Mutable=*/false, 0), - true); + /*Mutable=*/false, 0)); } SuperStructDecl->completeDefinition(*Context); @@ -2203,14 +2201,12 @@ QualType RewriteObjC::getConstantStringStructType() { // Create fields for (unsigned i = 0; i < 4; ++i) { - ConstantStringDecl->addDecl(*Context, - FieldDecl::Create(*Context, + ConstantStringDecl->addDecl(FieldDecl::Create(*Context, ConstantStringDecl, SourceLocation(), 0, FieldTypes[i], /*BitWidth=*/0, - /*Mutable=*/true, 0), - true); + /*Mutable=*/true, 0)); } ConstantStringDecl->completeDefinition(*Context); diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index f96909bb91..b506436e26 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -610,12 +610,9 @@ public: } }; - /// addDecl - Add the declaration D to this scope. Note that - /// declarations are added at the beginning of the declaration - /// chain, so reverseDeclChain() should be called after all - /// declarations have been added. If AllowLookup, also adds this - /// declaration into data structure for name lookup. - void addDecl(ASTContext &Context, ScopedDecl *D, bool AllowLookup = true); + /// addDecl - Add the declaration D to this scope, and into data structure + /// for name lookup. + void addDecl(ScopedDecl *D); void buildLookup(DeclContext *DCtx); @@ -652,7 +649,7 @@ public: /// that this replacement is semantically correct, e.g., that /// declarations are only replaced by later declarations of the same /// entity and not a declaration of some other kind of entity. - void insert(ASTContext &Context, ScopedDecl *D); + void insert(ScopedDecl *D); static bool classof(const Decl *D) { switch (D->getKind()) { diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 988fa1a5c3..24172a5ddb 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -533,7 +533,7 @@ const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) RecFields[i]->getIdentifier(), RecFields[i]->getType(), RecFields[i]->getBitWidth(), false, 0); - NewRD->addDecl(*this, Field); + NewRD->addDecl(Field); } NewRD->completeDefinition(*this); RD = NewRD; @@ -1554,7 +1554,7 @@ QualType ASTContext::getCFConstantStringType() { SourceLocation(), 0, FieldTypes[i], /*BitWidth=*/0, /*Mutable=*/false, /*PrevDecl=*/0); - CFConstantStringTypeDecl->addDecl(*this, Field, true); + CFConstantStringTypeDecl->addDecl(Field); } CFConstantStringTypeDecl->completeDefinition(*this); @@ -1584,7 +1584,7 @@ QualType ASTContext::getObjCFastEnumerationStateType() SourceLocation(), 0, FieldTypes[i], /*BitWidth=*/0, /*Mutable=*/false, /*PrevDecl=*/0); - ObjCFastEnumerationStateTypeDecl->addDecl(*this, Field, true); + ObjCFastEnumerationStateTypeDecl->addDecl(Field); } ObjCFastEnumerationStateTypeDecl->completeDefinition(*this); diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index cafe5358d6..8eb52b722d 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -514,7 +514,7 @@ DeclContext *DeclContext::getNextContext() { } } -void DeclContext::addDecl(ASTContext &Context, ScopedDecl *D, bool AllowLookup) { +void DeclContext::addDecl(ScopedDecl *D) { assert(D->getLexicalDeclContext() == this && "Decl inserted into wrong lexical context"); assert(!D->NextDeclInScope && D != LastDecl && "Decl already inserted into a DeclContext"); @@ -525,8 +525,7 @@ void DeclContext::addDecl(ASTContext &Context, ScopedDecl *D, bool AllowLookup) } else { FirstDecl = LastDecl = D; } - if (AllowLookup) - D->getDeclContext()->insert(Context, D); + D->getDeclContext()->insert(D); } /// buildLookup - Build the lookup data structure with all of the @@ -596,10 +595,10 @@ const DeclContext *DeclContext::getLookupContext() const { return Ctx; } -void DeclContext::insert(ASTContext &Context, ScopedDecl *D) { +void DeclContext::insert(ScopedDecl *D) { DeclContext *PrimaryContext = getPrimaryContext(); if (PrimaryContext != this) { - PrimaryContext->insert(Context, D); + PrimaryContext->insert(D); return; } @@ -612,7 +611,7 @@ void DeclContext::insert(ASTContext &Context, ScopedDecl *D) { // If we are a transparent context, insert into our parent context, // too. This operation is recursive. if (isTransparentContext()) - getParent()->insert(Context, D); + getParent()->insert(D); } void DeclContext::insertImpl(ScopedDecl *D) { diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index c587ab8230..0a8aa45b2d 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -2376,14 +2376,10 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm) RecordDecl *RD = RecordDecl::Create(Ctx, TagDecl::TK_struct, 0, SourceLocation(), &Ctx.Idents.get("_objc_super")); - RD->addDecl(Ctx, - FieldDecl::Create(Ctx, RD, SourceLocation(), 0, - Ctx.getObjCIdType(), 0, false, 0), - true); - RD->addDecl(Ctx, - FieldDecl::Create(Ctx, RD, SourceLocation(), 0, - Ctx.getObjCClassType(), 0, false, 0), - true); + RD->addDecl(FieldDecl::Create(Ctx, RD, SourceLocation(), 0, + Ctx.getObjCIdType(), 0, false, 0)); + RD->addDecl(FieldDecl::Create(Ctx, RD, SourceLocation(), 0, + Ctx.getObjCClassType(), 0, false, 0)); RD->completeDefinition(Ctx); SuperCTy = Ctx.getTagDeclType(RD); diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 6aeda8bc0b..9b419e5b63 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -106,7 +106,7 @@ void Sema::PushOnScopeChains(NamedDecl *D, Scope *S) { // found later. Declarations without a context won't be inserted // into any context. if (ScopedDecl *SD = dyn_cast(D)) - CurContext->addDecl(Context, SD); + CurContext->addDecl(SD); // C++ [basic.scope]p4: // -- exactly one declaration shall declare a class name or @@ -931,7 +931,7 @@ bool Sema::InjectAnonymousStructOrUnionMembers(Scope *S, DeclContext *Owner, // definition, the members of the anonymous union are // considered to have been defined in the scope in which the // anonymous union is declared. - Owner->insert(Context, *F); + Owner->insert(*F); S->AddDecl(*F); IdResolver.AddDecl(*F); } @@ -1090,7 +1090,7 @@ Sema::DeclTy *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, // Add the anonymous struct/union object to the current // context. We'll be referencing this object when we refer to one of // its members. - Owner->addDecl(Context, Anon); + Owner->addDecl(Anon); // Inject the members of the anonymous struct/union into the owning // context and into the identifier resolver chain for name lookup @@ -3126,7 +3126,7 @@ CreateNewDecl: } else PushOnScopeChains(New, S); } else { - LexicalContext->addDecl(Context, New); + LexicalContext->addDecl(New); } return New; @@ -3296,7 +3296,7 @@ Sema::DeclTy *Sema::ActOnField(Scope *S, DeclTy *TagD, if (II) { PushOnScopeChains(NewFD, S); } else - Record->addDecl(Context, NewFD); + Record->addDecl(NewFD); return NewFD; } diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index dcd378936a..d7cef91f33 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -797,7 +797,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { /*isImplicitlyDeclared=*/true); DefaultCon->setAccess(AS_public); DefaultCon->setImplicit(); - ClassDecl->addDecl(Context, DefaultCon); + ClassDecl->addDecl(DefaultCon); // Notify the class that we've added a constructor. ClassDecl->addedConstructor(Context, DefaultCon); @@ -878,7 +878,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { CopyConstructor->setParams(&FromParam, 1); ClassDecl->addedConstructor(Context, CopyConstructor); - ClassDecl->addDecl(Context, CopyConstructor); + ClassDecl->addDecl(CopyConstructor); } if (!ClassDecl->hasUserDeclaredCopyAssignment()) { @@ -956,7 +956,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { // Don't call addedAssignmentOperator. There is no way to distinguish an // implicit from an explicit assignment operator. - ClassDecl->addDecl(Context, CopyAssignment); + ClassDecl->addDecl(CopyAssignment); } if (!ClassDecl->hasUserDeclaredDestructor()) { @@ -975,7 +975,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { /*isImplicitlyDeclared=*/true); Destructor->setAccess(AS_public); Destructor->setImplicit(); - ClassDecl->addDecl(Context, Destructor); + ClassDecl->addDecl(Destructor); } } @@ -2123,7 +2123,7 @@ Sema::DeclTy *Sema::ActOnStartLinkageSpecification(Scope *S, LinkageSpecDecl *D = LinkageSpecDecl::Create(Context, CurContext, LangLoc, Language, LBraceLoc.isValid()); - CurContext->addDecl(Context, D); + CurContext->addDecl(D); PushDeclContext(S, D); return D; } diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index afcf45622b..f6a245a317 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -100,7 +100,7 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc, ObjCInterfaceDecls[ClassName] = IDecl; // FIXME: PushOnScopeChains - CurContext->addDecl(Context, IDecl); + CurContext->addDecl(IDecl); // Remember that this needs to be removed when the scope is popped. TUScope->AddDecl(IDecl); } @@ -185,7 +185,7 @@ Sema::DeclTy *Sema::ActOnCompatiblityAlias(SourceLocation AtLoc, ObjCAliasDecls[AliasName] = AliasDecl; // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, AliasDecl); + CurContext->addDecl(AliasDecl); if (!CheckObjCDeclScope(AliasDecl)) TUScope->AddDecl(AliasDecl); @@ -219,7 +219,7 @@ Sema::ActOnStartProtocolInterface(SourceLocation AtProtoInterfaceLoc, PDecl = ObjCProtocolDecl::Create(Context, CurContext, AtProtoInterfaceLoc,ProtocolName); // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, PDecl); + CurContext->addDecl(PDecl); PDecl->setForwardDecl(false); ObjCProtocols[ProtocolName] = PDecl; } @@ -444,7 +444,7 @@ Sema::ActOnForwardProtocolDeclaration(SourceLocation AtProtocolLoc, PDecl = ObjCProtocolDecl::Create(Context, CurContext, IdentList[i].second, Ident); // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, PDecl); + CurContext->addDecl(PDecl); } if (attrList) ProcessDeclAttributeList(PDecl, attrList); @@ -454,7 +454,7 @@ Sema::ActOnForwardProtocolDeclaration(SourceLocation AtProtocolLoc, ObjCForwardProtocolDecl *PDecl = ObjCForwardProtocolDecl::Create(Context, CurContext, AtProtocolLoc, &Protocols[0], Protocols.size()); - CurContext->addDecl(Context, PDecl); + CurContext->addDecl(PDecl); CheckObjCDeclScope(PDecl); return PDecl; } @@ -472,7 +472,7 @@ ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, ObjCCategoryDecl *CDecl = ObjCCategoryDecl::Create(Context, CurContext, AtInterfaceLoc, CategoryName); // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, CDecl); + CurContext->addDecl(CDecl); CDecl->setClassInterface(IDecl); /// Check that class of this category is already completely declared. @@ -519,7 +519,7 @@ Sema::DeclTy *Sema::ActOnStartCategoryImplementation( Diag(ClassLoc, diag::err_undef_interface) << ClassName; // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, CDecl); + CurContext->addDecl(CDecl); /// TODO: Check that CatName, category name, is not used in another // implementation. @@ -585,7 +585,7 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( IDecl->setLocEnd(ClassLoc); // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, IDecl); + CurContext->addDecl(IDecl); // Remember that this needs to be removed when the scope is popped. TUScope->AddDecl(IDecl); } @@ -595,7 +595,7 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( ClassName, IDecl, SDecl); // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, IMPDecl); + CurContext->addDecl(IMPDecl); if (CheckObjCDeclScope(IMPDecl)) return IMPDecl; @@ -938,7 +938,7 @@ Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, ObjCInterfaceDecls[IdentList[i]] = IDecl; // FIXME: PushOnScopeChains? - CurContext->addDecl(Context, IDecl); + CurContext->addDecl(IDecl); // Remember that this needs to be removed when the scope is popped. TUScope->AddDecl(IDecl); } @@ -949,7 +949,7 @@ Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, ObjCClassDecl *CDecl = ObjCClassDecl::Create(Context, CurContext, AtClassLoc, &Interfaces[0], Interfaces.size()); - CurContext->addDecl(Context, CDecl); + CurContext->addDecl(CDecl); CheckObjCDeclScope(CDecl); return CDecl; } @@ -1114,7 +1114,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property, ObjCPropertyDecl::Optional) ? ObjCMethodDecl::Optional : ObjCMethodDecl::Required); - CD->addDecl(Context, GetterMethod); + CD->addDecl(GetterMethod); } else // A user declared getter will be synthesize when @synthesize of // the property with the same name is seen in the @implementation @@ -1145,7 +1145,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property, VarDecl::None, 0, 0); SetterMethod->setMethodParams(&Argument, 1); - CD->addDecl(Context, SetterMethod); + CD->addDecl(SetterMethod); } else // A user declared setter will be synthesize when @synthesize of // the property with the same name is seen in the @implementation @@ -1210,7 +1210,7 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl, << Method->getDeclName(); Diag(PrevMethod->getLocation(), diag::note_previous_declaration); } else { - DC->addDecl(Context, Method); + DC->addDecl(Method); InsMap[Method->getSelector()] = Method; /// The following allows us to typecheck messages to "id". AddInstanceMethodToGlobalPool(Method); @@ -1227,7 +1227,7 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl, << Method->getDeclName(); Diag(PrevMethod->getLocation(), diag::note_previous_declaration); } else { - DC->addDecl(Context, Method); + DC->addDecl(Method); ClsMap[Method->getSelector()] = Method; /// The following allows us to typecheck messages to "Class". AddFactoryMethodToGlobalPool(Method); @@ -1567,7 +1567,7 @@ Sema::DeclTy *Sema::ActOnProperty(Scope *S, SourceLocation AtLoc, assert(DC && "ClassDecl is not a DeclContext"); ObjCPropertyDecl *PDecl = ObjCPropertyDecl::Create(Context, DC, AtLoc, FD.D.getIdentifier(), T); - DC->addDecl(Context, PDecl); + DC->addDecl(PDecl); // Regardless of setter/getter attribute, we save the default getter/setter // selector names in anticipation of declaration of setter/getter methods. @@ -1707,7 +1707,7 @@ Sema::DeclTy *Sema::ActOnPropertyImplDecl(SourceLocation AtLoc, ObjCPropertyImplDecl::Synthesize : ObjCPropertyImplDecl::Dynamic), Ivar); - CurContext->addDecl(Context, PIDecl); + CurContext->addDecl(PIDecl); if (IC) { if (Synthesize) if (ObjCPropertyImplDecl *PPIDecl = @@ -1801,7 +1801,7 @@ void Sema::ActOnDefs(Scope *S, DeclTy *TagD, SourceLocation DeclStart, if (getLangOptions().CPlusPlus) PushOnScopeChains(cast(FD), S); else if (RecordDecl *Record = dyn_cast((Decl*)TagD)) - Record->addDecl(Context, FD); + Record->addDecl(FD); } } diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 111dca4ae0..99e00a7a82 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -540,7 +540,7 @@ void Sema::DeclareGlobalAllocationFunction(DeclarationName Name, // FIXME: Also add this declaration to the IdentifierResolver, but // make sure it is at the end of the chain to coincide with the // global scope. - ((DeclContext *)TUScope->getEntity())->addDecl(Context, Alloc); + ((DeclContext *)TUScope->getEntity())->addDecl(Alloc); } /// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in: