forked from OSchip/llvm-project
parent
305d268ac3
commit
ef8b94ae84
|
@ -372,6 +372,7 @@ protected:
|
|||
static FunctionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
|
||||
|
||||
friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
|
||||
friend void Decl::Destroy(ASTContext& C) const;
|
||||
};
|
||||
|
||||
|
||||
|
@ -452,6 +453,7 @@ protected:
|
|||
static EnumConstantDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
|
||||
|
||||
friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
|
||||
friend void Decl::Destroy(ASTContext& C) const;
|
||||
};
|
||||
|
||||
|
||||
|
@ -504,6 +506,7 @@ protected:
|
|||
static TypedefDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
|
||||
|
||||
friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C);
|
||||
friend void Decl::Destroy(ASTContext& C) const;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -118,12 +118,10 @@ protected:
|
|||
HasAttrs(false) {
|
||||
if (Decl::CollectingStats()) addDeclKind(DK);
|
||||
}
|
||||
|
||||
public:
|
||||
// TODO: This should probably be made protected once derived classes have
|
||||
// destructors.
|
||||
|
||||
virtual ~Decl();
|
||||
|
||||
|
||||
public:
|
||||
SourceLocation getLocation() const { return Loc; }
|
||||
void setLocation(SourceLocation L) { Loc = L; }
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ private:
|
|||
SelName(SelInfo), MethodDeclType(T),
|
||||
ParamInfo(0), NumMethodParams(0),
|
||||
MethodAttrs(M), EndLoc(endLoc), Body(0), SelfDecl(0) {}
|
||||
virtual ~ObjCMethodDecl();
|
||||
~ObjCMethodDecl();
|
||||
public:
|
||||
|
||||
static ObjCMethodDecl *Create(ASTContext &C,
|
||||
|
@ -175,6 +175,8 @@ public:
|
|||
// Implement isa/cast/dyncast/etc.
|
||||
static bool classof(const Decl *D) { return D->getKind() == ObjCMethod; }
|
||||
static bool classof(const ObjCMethodDecl *D) { return true; }
|
||||
|
||||
friend void Decl::Destroy(ASTContext& C) const;
|
||||
};
|
||||
|
||||
/// ObjCInterfaceDecl - Represents an ObjC class declaration. For example:
|
||||
|
|
|
@ -329,10 +329,43 @@ const Attr *Decl::getAttrs() const {
|
|||
return (*DeclAttrs)[this];
|
||||
}
|
||||
|
||||
#define CASE(KIND) case KIND: cast<KIND##Decl>(this)->~KIND##Decl(); break
|
||||
|
||||
void Decl::Destroy(ASTContext& C) const {
|
||||
switch (getKind()) {
|
||||
CASE(Field);
|
||||
CASE(ObjCIvar);
|
||||
CASE(ObjCCategory);
|
||||
CASE(ObjCCategoryImpl);
|
||||
CASE(ObjCImplementation);
|
||||
CASE(ObjCProtocol);
|
||||
CASE(ObjCProperty);
|
||||
CASE(Typedef);
|
||||
CASE(Enum);
|
||||
CASE(EnumConstant);
|
||||
CASE(Function);
|
||||
CASE(BlockVar);
|
||||
CASE(FileVar);
|
||||
CASE(ParmVar);
|
||||
CASE(ObjCInterface);
|
||||
CASE(ObjCCompatibleAlias);
|
||||
CASE(ObjCMethod);
|
||||
CASE(ObjCClass);
|
||||
CASE(ObjCForwardProtocol);
|
||||
CASE(LinkageSpec);
|
||||
|
||||
case Struct: case Union: case Class:
|
||||
cast<RecordDecl>(this)->~RecordDecl();
|
||||
break;
|
||||
|
||||
default: assert(0 && "Unknown decl kind!");
|
||||
}
|
||||
|
||||
C.getAllocator().Deallocate((void *)this);
|
||||
}
|
||||
|
||||
#undef CASE
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DeclContext Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue