diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-08-13 00:59:25 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-08-13 00:59:25 +0000 |
commit | 89da6ad1db120f53437de8800f8cd6de532a8003 (patch) | |
tree | c4b056d205b1a46f61ddd9ec370ecf08ca92fda3 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 40f83ac6497f61f24baf49afb66d67d5181e9dfe (diff) | |
download | bcm5719-llvm-89da6ad1db120f53437de8800f8cd6de532a8003.tar.gz bcm5719-llvm-89da6ad1db120f53437de8800f8cd6de532a8003.zip |
Change ObjCRuntime GenerateProtocol[Ref] methods to take
ObjCProtocolDecl directly.
Implement CodeGen support for forward protocol decls (no-ops are so
nice to implement).
Also moved CGObjCRuntime.h out of CodeGenModule.h
llvm-svn: 54709
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 29 |
1 files changed, 2 insertions, 27 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 633b7b8dad7..f575300b6dd 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -14,6 +14,7 @@ #include "CGDebugInfo.h" #include "CodeGenModule.h" #include "CodeGenFunction.h" +#include "CGObjCRuntime.h" #include "clang/AST/ASTContext.h" #include "clang/AST/DeclObjC.h" #include "clang/Basic/Diagnostic.h" @@ -247,33 +248,7 @@ void CodeGenModule::EmitObjCMethod(const ObjCMethodDecl *OMD) { CodeGenFunction(*this).GenerateObjCMethod(OMD); } void CodeGenModule::EmitObjCProtocolImplementation(const ObjCProtocolDecl *PD){ - llvm::SmallVector<std::string, 16> Protocols; - for (ObjCProtocolDecl::protocol_iterator PI = PD->protocol_begin(), - E = PD->protocol_end(); PI != E; ++PI) - Protocols.push_back((*PI)->getName()); - llvm::SmallVector<llvm::Constant*, 16> InstanceMethodNames; - llvm::SmallVector<llvm::Constant*, 16> InstanceMethodTypes; - for (ObjCProtocolDecl::instmeth_iterator iter = PD->instmeth_begin(), - E = PD->instmeth_end(); iter != E; iter++) { - std::string TypeStr; - Context.getObjCEncodingForMethodDecl(*iter, TypeStr); - InstanceMethodNames.push_back( - GetAddrOfConstantString((*iter)->getSelector().getName())); - InstanceMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); - } - // Collect information about class methods: - llvm::SmallVector<llvm::Constant*, 16> ClassMethodNames; - llvm::SmallVector<llvm::Constant*, 16> ClassMethodTypes; - for (ObjCProtocolDecl::classmeth_iterator iter = PD->classmeth_begin(), - endIter = PD->classmeth_end() ; iter != endIter ; iter++) { - std::string TypeStr; - Context.getObjCEncodingForMethodDecl((*iter),TypeStr); - ClassMethodNames.push_back( - GetAddrOfConstantString((*iter)->getSelector().getName())); - ClassMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); - } - Runtime->GenerateProtocol(PD->getName(), Protocols, InstanceMethodNames, - InstanceMethodTypes, ClassMethodNames, ClassMethodTypes); + Runtime->GenerateProtocol(PD); } void CodeGenModule::EmitObjCCategoryImpl(const ObjCCategoryImplDecl *OCD) { |