diff options
Diffstat (limited to 'Clang/CGObjCRuntime.h')
-rw-r--r-- | Clang/CGObjCRuntime.h | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/Clang/CGObjCRuntime.h b/Clang/CGObjCRuntime.h deleted file mode 100644 index a5d88c3..0000000 --- a/Clang/CGObjCRuntime.h +++ /dev/null @@ -1,126 +0,0 @@ -//===----- CGObjCRuntime.h - Emit LLVM Code from ASTs for a Module --------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This provides an abstract class for Objective-C code generation. Concrete -// subclasses of this implement code generation for specific Objective-C -// runtime libraries. -// -//===----------------------------------------------------------------------===// - -#ifndef CLANG_CODEGEN_OBCJRUNTIME_H -#define CLANG_CODEGEN_OBCJRUNTIME_H -#include "llvm/ADT/SmallVector.h" -#include <string> - -namespace llvm { - class IRBuilder; - class Constant; - class Type; - class Value; - class Module; - class Function; -} - -namespace clang { - class Selector; - -namespace CodeGen { - class CodeGenModule; - -//FIXME Several methods should be pure virtual but aren't to avoid the -//partially-implemented subclass breaking. - -/// Implements runtime-specific code generation functions. -class CGObjCRuntime { -public: - virtual ~CGObjCRuntime(); - - /// Generate an Objective-C message send operation - virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder &Builder, - const llvm::Type *ReturnTy, - llvm::Value *Sender, - llvm::Value *Receiver, - Selector Sel, - llvm::Value** ArgV, - unsigned ArgC) =0; - /// Generate the function required to register all Objective-C components in - /// this compilation unit with the runtime library. - virtual llvm::Function *ModuleInitFunction() =0; - /// Get a selector for the specified name and type values - virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder, Selector Sel) = 0; - /// Generate a constant string object - virtual llvm::Constant *GenerateConstantString(const char *String, - const size_t Length) = 0; - /// Generate a category. A category contains a list of methods (and - /// accompanying metadata) and a list of protocols. - virtual void GenerateCategory(const char *ClassName, const char *CategoryName, - const llvm::SmallVectorImpl<Selector> &InstanceMethodSels, - const llvm::SmallVectorImpl<llvm::Constant *> &InstanceMethodTypes, - const llvm::SmallVectorImpl<Selector> &ClassMethodSels, - const llvm::SmallVectorImpl<llvm::Constant *> &ClassMethodTypes, - const llvm::SmallVectorImpl<std::string> &Protocols) =0; - /// Generate a class stucture for this class. - virtual void GenerateClass( - const char *ClassName, - const char *SuperClassName, - const int instanceSize, - const llvm::SmallVectorImpl<llvm::Constant *> &IvarNames, - const llvm::SmallVectorImpl<llvm::Constant *> &IvarTypes, - const llvm::SmallVectorImpl<llvm::Constant *> &IvarOffsets, - const llvm::SmallVectorImpl<Selector> &InstanceMethodSels, - const llvm::SmallVectorImpl<llvm::Constant *> &InstanceMethodTypes, - const llvm::SmallVectorImpl<Selector> &ClassMethodSels, - const llvm::SmallVectorImpl<llvm::Constant *> &ClassMethodTypes, - const llvm::SmallVectorImpl<std::string> &Protocols) =0; - /// Generate a reference to the named protocol. - virtual llvm::Value *GenerateProtocolRef(llvm::IRBuilder &Builder, const char - *ProtocolName) =0; - virtual llvm::Value *GenerateMessageSendSuper(llvm::IRBuilder &Builder, - const llvm::Type *ReturnTy, - llvm::Value *Sender, - const char *SuperClassName, - llvm::Value *Receiver, - Selector Sel, - llvm::Value** ArgV, - unsigned ArgC) = 0; - /// Generate the named protocol. Protocols contain method metadata but no - /// implementations. - virtual void GenerateProtocol(const char *ProtocolName, - const llvm::SmallVectorImpl<std::string> &Protocols, - const llvm::SmallVectorImpl<llvm::Constant *> &InstanceMethodNames, - const llvm::SmallVectorImpl<llvm::Constant *> &InstanceMethodTypes, - const llvm::SmallVectorImpl<llvm::Constant *> &ClassMethodNames, - const llvm::SmallVectorImpl<llvm::Constant *> &ClassMethodTypes) =0; - /// Generate a function preamble for a method with the specified types - virtual llvm::Function *MethodPreamble( - const std::string &ClassName, - const std::string &CategoryName, - const std::string &MethodName, - const llvm::Type *ReturnTy, - const llvm::Type *SelfTy, - const llvm::Type **ArgTy, - unsigned ArgC, - bool isClassMethod, - bool isVarArg) = 0; - /// Look up the class for the specified name - virtual llvm::Value *LookupClass(llvm::IRBuilder &Builder, llvm::Value - *ClassName) =0; - /// If instance variable addresses are determined at runtime then this should - /// return true, otherwise instance variables will be accessed directly from - /// the structure. If this returns true then @defs is invalid for this - /// runtime and a warning should be generated. - virtual bool LateBoundIVars() { return false; } -}; - -/// Creates an instance of an Objective-C runtime class. -//TODO: This should include some way of selecting which runtime to target. -CGObjCRuntime *CreateObjCRuntime(CodeGenModule &CGM); -} -} -#endif |