From 081148986a60a761ac7528a9a132cab2ec70273b Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Sun, 27 Apr 2008 13:50:30 +0000 Subject: Parsing of namespaces: -NamespaceDecl for the AST -Checks for name clashes between namespaces and tag/normal declarations. This commit doesn't implement proper name lookup for namespaces. llvm-svn: 50321 --- clang/lib/AST/DeclSerialization.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'clang/lib/AST/DeclSerialization.cpp') diff --git a/clang/lib/AST/DeclSerialization.cpp b/clang/lib/AST/DeclSerialization.cpp index 6186649e70a..cbae8313082 100644 --- a/clang/lib/AST/DeclSerialization.cpp +++ b/clang/lib/AST/DeclSerialization.cpp @@ -44,6 +44,9 @@ Decl* Decl::Create(Deserializer& D, ASTContext& C) { case TranslationUnit: return TranslationUnitDecl::CreateImpl(D, C); + case Namespace: + return NamespaceDecl::CreateImpl(D, C); + case Var: return VarDecl::CreateImpl(D, C); @@ -206,14 +209,37 @@ void TranslationUnitDecl::EmitImpl(llvm::Serializer& S) const TranslationUnitDecl* TranslationUnitDecl::CreateImpl(Deserializer& D, ASTContext& C) { void *Mem = C.getAllocator().Allocate(); - TranslationUnitDecl* decl = - new (Mem) TranslationUnitDecl(); + TranslationUnitDecl* decl = new (Mem) TranslationUnitDecl(); decl->Decl::ReadInRec(D, C); return decl; } +//===----------------------------------------------------------------------===// +// NamespaceDecl Serialization. +//===----------------------------------------------------------------------===// + +void NamespaceDecl::EmitImpl(llvm::Serializer& S) const +{ + ScopedDecl::EmitInRec(S); + S.Emit(getLBracLoc()); + S.Emit(getRBracLoc()); + ScopedDecl::EmitOutRec(S); +} + +NamespaceDecl* NamespaceDecl::CreateImpl(Deserializer& D, ASTContext& C) { + void *Mem = C.getAllocator().Allocate(); + NamespaceDecl* decl = new (Mem) NamespaceDecl(0, SourceLocation(), 0); + + decl->ScopedDecl::ReadInRec(D, C); + decl->LBracLoc = SourceLocation::ReadVal(D); + decl->RBracLoc = SourceLocation::ReadVal(D); + decl->ScopedDecl::ReadOutRec(D, C); + + return decl; +} + //===----------------------------------------------------------------------===// // VarDecl Serialization. //===----------------------------------------------------------------------===// -- cgit v1.2.3