summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/DeclSerialization.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2008-12-05 18:15:24 +0000
committerDouglas Gregor <dgregor@apple.com>2008-12-05 18:15:24 +0000
commit5101c24f60997b3775624f5c9488ded8e9f3cdf2 (patch)
tree2807802cd135f700026aa90f8d842508b2630d5a /clang/lib/AST/DeclSerialization.cpp
parent43c08918389ca2f928a94a4f2a5faa256a10e8e4 (diff)
downloadbcm5719-llvm-5101c24f60997b3775624f5c9488ded8e9f3cdf2.tar.gz
bcm5719-llvm-5101c24f60997b3775624f5c9488ded8e9f3cdf2.zip
Representation of template type parameters and non-type template
parameters, with some semantic analysis: - Template parameters are introduced into template parameter scope - Complain about template parameter shadowing (except in Microsoft mode) Note that we leak template parameter declarations like crazy, a problem we'll remedy once we actually create proper declarations for templates. Next up: dependent types and value-dependent/type-dependent expressions. llvm-svn: 60597
Diffstat (limited to 'clang/lib/AST/DeclSerialization.cpp')
-rw-r--r--clang/lib/AST/DeclSerialization.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/clang/lib/AST/DeclSerialization.cpp b/clang/lib/AST/DeclSerialization.cpp
index 8a4612b6745..29714c0125c 100644
--- a/clang/lib/AST/DeclSerialization.cpp
+++ b/clang/lib/AST/DeclSerialization.cpp
@@ -88,6 +88,10 @@ Decl* Decl::Create(Deserializer& D, ASTContext& C) {
Dcl = TypedefDecl::CreateImpl(D, C);
break;
+ case TemplateTypeParm:
+ Dcl = TemplateTypeParmDecl::CreateImpl(D, C);
+ break;
+
case FileScopeAsm:
Dcl = FileScopeAsmDecl::CreateImpl(D, C);
break;
@@ -630,6 +634,27 @@ TypedefDecl* TypedefDecl::CreateImpl(Deserializer& D, ASTContext& C) {
}
//===----------------------------------------------------------------------===//
+// TemplateTypeParmDecl Serialization.
+//===----------------------------------------------------------------------===//
+
+void TemplateTypeParmDecl::EmitImpl(Serializer& S) const {
+ S.EmitBool(Typename);
+ ScopedDecl::EmitInRec(S);
+ ScopedDecl::EmitOutRec(S);
+}
+
+TemplateTypeParmDecl *
+TemplateTypeParmDecl::CreateImpl(Deserializer& D, ASTContext& C) {
+ bool Typename = D.ReadBool();
+ void *Mem = C.getAllocator().Allocate<TemplateTypeParmDecl>();
+ TemplateTypeParmDecl *decl
+ = new (Mem) TemplateTypeParmDecl(0, SourceLocation(), NULL, Typename);
+ decl->ScopedDecl::ReadInRec(D, C);
+ decl->ScopedDecl::ReadOutRec(D, C);
+ return decl;
+}
+
+//===----------------------------------------------------------------------===//
// LinkageSpec Serialization.
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud