From: Chris Lattner Date: Tue, 4 Nov 2008 16:51:42 +0000 (+0000) Subject: LinkageSpecDecl is c++ specific, move it to DeclCXX X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=21ef7ae45c8b91f23cf5eab2263421bb398a644b;p=clang LinkageSpecDecl is c++ specific, move it to DeclCXX git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58704 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 2a4d201e5a..e23b4d8419 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -958,44 +958,6 @@ protected: friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; -/// LinkageSpecDecl - This represents a linkage specification. For example: -/// extern "C" void foo(); -/// -class LinkageSpecDecl : public Decl { -public: - /// LanguageIDs - Used to represent the language in a linkage - /// specification. The values are part of the serialization abi for - /// ASTs and cannot be changed without altering that abi. To help - /// ensure a stable abi for this, we choose the DW_LANG_ encodings - /// from the dwarf standard. - enum LanguageIDs { lang_c = /* DW_LANG_C */ 0x0002, - lang_cxx = /* DW_LANG_C_plus_plus */ 0x0004 }; -private: - /// Language - The language for this linkage specification. - LanguageIDs Language; - /// D - This is the Decl of the linkage specification. - Decl *D; - - LinkageSpecDecl(SourceLocation L, LanguageIDs lang, Decl *d) - : Decl(LinkageSpec, L), Language(lang), D(d) {} -public: - static LinkageSpecDecl *Create(ASTContext &C, SourceLocation L, - LanguageIDs Lang, Decl *D); - - LanguageIDs getLanguage() const { return Language; } - const Decl *getDecl() const { return D; } - Decl *getDecl() { return D; } - - static bool classof(const Decl *D) { - return D->getKind() == LinkageSpec; - } - static bool classof(const LinkageSpecDecl *D) { return true; } - -protected: - void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D, ASTContext& C); -}; - /// BlockDecl - This represents a block literal declaration, which is like an /// unnamed FunctionDecl. For example: /// ^{ statement-body } or ^(int arg1, float arg2){ statement-body } diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 9595a78021..7a0bce8f83 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -573,6 +573,46 @@ public: return isa(D); } }; + +/// LinkageSpecDecl - This represents a linkage specification. For example: +/// extern "C" void foo(); +/// +class LinkageSpecDecl : public Decl { +public: + /// LanguageIDs - Used to represent the language in a linkage + /// specification. The values are part of the serialization abi for + /// ASTs and cannot be changed without altering that abi. To help + /// ensure a stable abi for this, we choose the DW_LANG_ encodings + /// from the dwarf standard. + enum LanguageIDs { lang_c = /* DW_LANG_C */ 0x0002, + lang_cxx = /* DW_LANG_C_plus_plus */ 0x0004 }; +private: + /// Language - The language for this linkage specification. + LanguageIDs Language; + /// D - This is the Decl of the linkage specification. + Decl *D; + + LinkageSpecDecl(SourceLocation L, LanguageIDs lang, Decl *d) + : Decl(LinkageSpec, L), Language(lang), D(d) {} +public: + static LinkageSpecDecl *Create(ASTContext &C, SourceLocation L, + LanguageIDs Lang, Decl *D); + + LanguageIDs getLanguage() const { return Language; } + const Decl *getDecl() const { return D; } + Decl *getDecl() { return D; } + + static bool classof(const Decl *D) { + return D->getKind() == LinkageSpec; + } + static bool classof(const LinkageSpecDecl *D) { return true; } + +protected: + void EmitInRec(llvm::Serializer& S) const; + void ReadInRec(llvm::Deserializer& D, ASTContext& C); +}; + + } // end namespace clang diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index dbc92f414f..81fe766ff0 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -129,13 +129,6 @@ FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, return new (Mem) FileScopeAsmDecl(L, Str); } -LinkageSpecDecl *LinkageSpecDecl::Create(ASTContext &C, - SourceLocation L, - LanguageIDs Lang, Decl *D) { - void *Mem = C.getAllocator().Allocate(); - return new (Mem) LinkageSpecDecl(L, Lang, D); -} - //===----------------------------------------------------------------------===// // NamedDecl Implementation //===----------------------------------------------------------------------===// diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index fa4f35be7a..21701461e6 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -189,3 +189,11 @@ OverloadedFunctionDecl::Create(ASTContext &C, DeclContext *DC, void *Mem = C.getAllocator().Allocate(); return new (Mem) OverloadedFunctionDecl(DC, Id); } + +LinkageSpecDecl *LinkageSpecDecl::Create(ASTContext &C, + SourceLocation L, + LanguageIDs Lang, Decl *D) { + void *Mem = C.getAllocator().Allocate(); + return new (Mem) LinkageSpecDecl(L, Lang, D); +} + diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 2ca893fb41..3555ccd53a 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -18,6 +18,7 @@ #include "CGObjCRuntime.h" #include "clang/AST/ASTContext.h" #include "clang/AST/DeclObjC.h" +#include "clang/AST/DeclCXX.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetInfo.h"