diff options
author | Douglas Gregor <dgregor@apple.com> | 2008-12-05 18:15:24 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2008-12-05 18:15:24 +0000 |
commit | 5101c24f60997b3775624f5c9488ded8e9f3cdf2 (patch) | |
tree | 2807802cd135f700026aa90f8d842508b2630d5a /clang/lib/AST/DeclSerialization.cpp | |
parent | 43c08918389ca2f928a94a4f2a5faa256a10e8e4 (diff) | |
download | bcm5719-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.cpp | 25 |
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. //===----------------------------------------------------------------------===// |