[cfe-commits] r55649 - in /cfe/trunk: include/clang/AST/Decl.h lib/AST/Decl.cpp
Ted Kremenek
kremenek at apple.com
Tue Sep 2 14:12:33 PDT 2008
Author: kremenek
Date: Tue Sep 2 16:12:32 2008
New Revision: 55649
URL: http://llvm.org/viewvc/llvm-project?rev=55649&view=rev
Log:
RecordDecl:
- Remove method 'isForwardDecl'; this functionality is already provided by
'isDefinition()'
- Move method definitions to be co-located with other RecordDecl methods.
Modified:
cfe/trunk/include/clang/AST/Decl.h
cfe/trunk/lib/AST/Decl.cpp
Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=55649&r1=55648&r2=55649&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Tue Sep 2 16:12:32 2008
@@ -821,14 +821,7 @@
RecordDecl *PrevDecl);
virtual void Destroy(ASTContext& C);
-
- /// isForwardDeclaration - Returns true if this RecordDecl represents a
- /// forward declaration.
- bool isForwardDeclaration() const {
- assert ((!Members || NextDecl == 0) && "(Members != 0) => (NextDecl == 0)");
- return !Members;
- }
-
+
/// getDefinitionDecl - Returns the RecordDecl for the struct/union that
/// represents the actual definition (i.e., not a forward declaration).
/// This method returns NULL if no such RecordDecl exists.
Modified: cfe/trunk/lib/AST/Decl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=55649&r1=55648&r2=55649&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Tue Sep 2 16:12:32 2008
@@ -114,65 +114,6 @@
Decl::Destroy(C);
}
-//==------------------------------------------------------------------------==//
-// RecordDecl methods.
-//==------------------------------------------------------------------------==//
-
-RecordDecl::RecordDecl(Kind DK, DeclContext *DC, SourceLocation L,
- IdentifierInfo *Id, RecordDecl *PrevDecl)
- : TagDecl(DK, DC, L, Id, 0), NextDecl(0) {
-
- HasFlexibleArrayMember = false;
- assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
- Members = 0;
- NumMembers = -1;
-
- // Hook up the RecordDecl chain.
- if (PrevDecl) {
- RecordDecl* Tmp = PrevDecl->NextDecl;
- // 'Tmp' might be non-NULL if it is the RecordDecl that provides the
- // definition of the struct/union. By construction, the last RecordDecl
- // in the chain is the 'defining' RecordDecl.
- if (Tmp) {
- assert (Tmp->NextDecl == 0);
- assert (Tmp->Members && "Previous RecordDecl has a NextDecl that is "
- "not the 'defining' RecordDecl");
-
- NextDecl = Tmp;
- }
-
- PrevDecl->NextDecl = this;
- }
-}
-
-RecordDecl *RecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
- SourceLocation L, IdentifierInfo *Id,
- RecordDecl *PrevDecl) {
- void *Mem = C.getAllocator().Allocate<RecordDecl>();
- Kind DK;
- switch (TK) {
- default: assert(0 && "Invalid TagKind!");
- case TK_enum: assert(0 && "Enum TagKind passed for Record!");
- case TK_struct: DK = Struct; break;
- case TK_union: DK = Union; break;
- case TK_class: DK = Class; break;
- }
- return new (Mem) RecordDecl(DK, DC, L, Id, PrevDecl);
-}
-
-/// getDefinitionDecl - Returns the RecordDecl for the struct/union that
-/// represents the actual definition (i.e., not a forward declaration).
-/// This method returns NULL if no such RecordDecl exists.
-const RecordDecl* RecordDecl::getDefinitionDecl() const {
- const RecordDecl* R = this;
-
- for (RecordDecl* N = R->NextDecl; N; N = R->NextDecl)
- R = N;
-
- return R->Members ? R : 0;
-}
-
-
FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C,
SourceLocation L,
StringLiteral *Str) {
@@ -262,6 +203,49 @@
// RecordDecl Implementation
//===----------------------------------------------------------------------===//
+RecordDecl::RecordDecl(Kind DK, DeclContext *DC, SourceLocation L,
+ IdentifierInfo *Id, RecordDecl *PrevDecl)
+: TagDecl(DK, DC, L, Id, 0), NextDecl(0) {
+
+ HasFlexibleArrayMember = false;
+ assert(classof(static_cast<Decl*>(this)) && "Invalid Kind!");
+ Members = 0;
+ NumMembers = -1;
+
+ // Hook up the RecordDecl chain.
+ if (PrevDecl) {
+ RecordDecl* Tmp = PrevDecl->NextDecl;
+ // 'Tmp' might be non-NULL if it is the RecordDecl that provides the
+ // definition of the struct/union. By construction, the last RecordDecl
+ // in the chain is the 'defining' RecordDecl.
+ if (Tmp) {
+ assert (Tmp->NextDecl == 0);
+ assert (Tmp->isDefinition()
+ && "Previous RecordDecl has a NextDecl that is "
+ "not the 'defining' RecordDecl");
+
+ NextDecl = Tmp;
+ }
+
+ PrevDecl->NextDecl = this;
+ }
+}
+
+RecordDecl *RecordDecl::Create(ASTContext &C, TagKind TK, DeclContext *DC,
+ SourceLocation L, IdentifierInfo *Id,
+ RecordDecl *PrevDecl) {
+ void *Mem = C.getAllocator().Allocate<RecordDecl>();
+ Kind DK;
+ switch (TK) {
+ default: assert(0 && "Invalid TagKind!");
+ case TK_enum: assert(0 && "Enum TagKind passed for Record!");
+ case TK_struct: DK = Struct; break;
+ case TK_union: DK = Union; break;
+ case TK_class: DK = Class; break;
+ }
+ return new (Mem) RecordDecl(DK, DC, L, Id, PrevDecl);
+}
+
RecordDecl::~RecordDecl() {
delete[] Members;
}
@@ -274,7 +258,6 @@
TagDecl::Destroy(C);
}
-
/// defineBody - When created, RecordDecl's correspond to a forward declared
/// record. This method is used to mark the decl as being defined, with the
/// specified contents.
@@ -298,3 +281,16 @@
return Members[i];
return 0;
}
+
+/// getDefinitionDecl - Returns the RecordDecl for the struct/union that
+/// represents the actual definition (i.e., not a forward declaration).
+/// This method returns NULL if no such RecordDecl exists.
+const RecordDecl* RecordDecl::getDefinitionDecl() const {
+ const RecordDecl* R = this;
+
+ for (RecordDecl* N = R->NextDecl; N; N = R->NextDecl)
+ R = N;
+
+ return R->Members ? R : 0;
+}
+
More information about the cfe-commits
mailing list