From 12183e25aa35cbaf6ef317cabca5dba1d543a23e Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 7 Oct 2008 23:06:01 +0000 Subject: Add const_iterator to DeclGroup. Serialization for OwningDeclGroupRefs now works. llvm-svn: 57272 --- clang/lib/AST/DeclGroup.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'clang/lib/AST/DeclGroup.cpp') diff --git a/clang/lib/AST/DeclGroup.cpp b/clang/lib/AST/DeclGroup.cpp index bd79fafc8f3..5ddcd5954db 100644 --- a/clang/lib/AST/DeclGroup.cpp +++ b/clang/lib/AST/DeclGroup.cpp @@ -21,6 +21,7 @@ using namespace clang; DeclGroup* DeclGroup::Create(ASTContext& C, unsigned numdecls, Decl** decls) { + assert (numdecls > 0); unsigned size = sizeof(DeclGroup) + sizeof(Decl*) * numdecls; unsigned alignment = llvm::AlignOf::Alignment; void* mem = C.getAllocator().Allocate(size, alignment); @@ -46,7 +47,7 @@ DeclGroup* DeclGroup::Create(llvm::Deserializer& D, ASTContext& C) { return DG; } -DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) { +DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) : NumDecls(numdecls) { assert (numdecls > 0); assert (decls); memcpy(this+1, decls, numdecls * sizeof(*decls)); @@ -110,13 +111,15 @@ void DeclGroupOwningRef::Emit(llvm::Serializer& S) const { } } -DeclGroupOwningRef DeclGroupOwningRef::ReadVal(llvm::Deserializer& D, - ASTContext& C) { - if (D.ReadBool()) { - DeclGroupOwningRef DG(D.ReadOwnedPtr(C)); - return DG; +DeclGroupOwningRef& DeclGroupOwningRef::Read(llvm::Deserializer& Dezr, + ASTContext& C) { + + if (!Dezr.ReadBool()) + D = Dezr.ReadOwnedPtr(C); + else { + uintptr_t x = reinterpret_cast(Dezr.ReadOwnedPtr(C)); + D = reinterpret_cast(x | DeclGroupKind); } - - DeclGroupOwningRef DG(D.ReadOwnedPtr(C)); - return DG; + + return *this; } -- cgit v1.2.3