clang API Documentation

Classes | Public Member Functions | Protected Member Functions | Protected Attributes
clang::CodeGen::CGObjCRuntime Class Reference

Implements runtime-specific code generation functions. More...

#include <CGObjCRuntime.h>

Collaboration diagram for clang::CodeGen::CGObjCRuntime:
Collaboration graph
[legend]

List of all members.

Classes

struct  MessageSendInfo

Public Member Functions

virtual ~CGObjCRuntime ()
virtual llvm::Function * ModuleInitFunction ()=0
virtual llvm::ValueGetSelector (CodeGenFunction &CGF, Selector Sel, bool lval=false)=0
virtual llvm::ValueGetSelector (CodeGenFunction &CGF, const ObjCMethodDecl *Method)=0
 Get a typed selector.
virtual llvm::Constant * GetEHType (QualType T)=0
virtual llvm::Constant * GenerateConstantString (const StringLiteral *)=0
 Generate a constant string object.
virtual void GenerateCategory (const ObjCCategoryImplDecl *OCD)=0
virtual void GenerateClass (const ObjCImplementationDecl *OID)=0
 Generate a class structure for this class.
virtual void RegisterAlias (const ObjCCompatibleAliasDecl *OAD)=0
 Register an class alias.
virtual CodeGen::RValue GenerateMessageSend (CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot, QualType ResultType, Selector Sel, llvm::Value *Receiver, const CallArgList &CallArgs, const ObjCInterfaceDecl *Class=nullptr, const ObjCMethodDecl *Method=nullptr)=0
virtual CodeGen::RValue GenerateMessageSendSuper (CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot, QualType ResultType, Selector Sel, const ObjCInterfaceDecl *Class, bool isCategoryImpl, llvm::Value *Self, bool IsClassMessage, const CallArgList &CallArgs, const ObjCMethodDecl *Method=nullptr)=0
virtual llvm::ValueGenerateProtocolRef (CodeGenFunction &CGF, const ObjCProtocolDecl *OPD)=0
virtual void GenerateProtocol (const ObjCProtocolDecl *OPD)=0
virtual llvm::Function * GenerateMethod (const ObjCMethodDecl *OMD, const ObjCContainerDecl *CD)=0
virtual llvm::Constant * GetPropertyGetFunction ()=0
 Return the runtime function for getting properties.
virtual llvm::Constant * GetPropertySetFunction ()=0
 Return the runtime function for setting properties.
virtual llvm::Constant * GetOptimizedPropertySetFunction (bool atomic, bool copy)=0
 Return the runtime function for optimized setting properties.
virtual llvm::Constant * GetGetStructFunction ()=0
virtual llvm::Constant * GetSetStructFunction ()=0
virtual llvm::Constant * GetCppAtomicObjectSetFunction ()=0
virtual llvm::Constant * GetCppAtomicObjectGetFunction ()=0
virtual llvm::ValueGetClass (CodeGenFunction &CGF, const ObjCInterfaceDecl *OID)=0
virtual llvm::ValueEmitNSAutoreleasePoolClassRef (CodeGenFunction &CGF)
virtual llvm::Constant * EnumerationMutationFunction ()=0
virtual void EmitSynchronizedStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtSynchronizedStmt &S)=0
virtual void EmitTryStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtTryStmt &S)=0
virtual void EmitThrowStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S, bool ClearInsertionPoint=true)=0
virtual llvm::ValueEmitObjCWeakRead (CodeGen::CodeGenFunction &CGF, llvm::Value *AddrWeakObj)=0
virtual void EmitObjCWeakAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, llvm::Value *dest)=0
virtual void EmitObjCGlobalAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, llvm::Value *dest, bool threadlocal=false)=0
virtual void EmitObjCIvarAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, llvm::Value *dest, llvm::Value *ivarOffset)=0
virtual void EmitObjCStrongCastAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, llvm::Value *dest)=0
virtual LValue EmitObjCValueForIvar (CodeGen::CodeGenFunction &CGF, QualType ObjectTy, llvm::Value *BaseValue, const ObjCIvarDecl *Ivar, unsigned CVRQualifiers)=0
virtual llvm::ValueEmitIvarOffset (CodeGen::CodeGenFunction &CGF, const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar)=0
virtual void EmitGCMemmoveCollectable (CodeGen::CodeGenFunction &CGF, llvm::Value *DestPtr, llvm::Value *SrcPtr, llvm::Value *Size)=0
virtual llvm::Constant * BuildGCBlockLayout (CodeGen::CodeGenModule &CGM, const CodeGen::CGBlockInfo &blockInfo)=0
virtual llvm::Constant * BuildRCBlockLayout (CodeGen::CodeGenModule &CGM, const CodeGen::CGBlockInfo &blockInfo)=0
virtual llvm::Constant * BuildByrefLayout (CodeGen::CodeGenModule &CGM, QualType T)=0
virtual llvm::GlobalVariable * GetClassGlobal (const std::string &Name, bool Weak=false)=0
MessageSendInfo getMessageSendInfo (const ObjCMethodDecl *method, QualType resultType, CallArgList &callArgs)
unsigned ComputeBitfieldBitOffset (CodeGen::CodeGenModule &CGM, const ObjCInterfaceDecl *ID, const ObjCIvarDecl *Ivar)

Protected Member Functions

 CGObjCRuntime (CodeGen::CodeGenModule &CGM)
uint64_t ComputeIvarBaseOffset (CodeGen::CodeGenModule &CGM, const ObjCInterfaceDecl *OID, const ObjCIvarDecl *Ivar)
uint64_t ComputeIvarBaseOffset (CodeGen::CodeGenModule &CGM, const ObjCImplementationDecl *OID, const ObjCIvarDecl *Ivar)
LValue EmitValueForIvarAtOffset (CodeGen::CodeGenFunction &CGF, const ObjCInterfaceDecl *OID, llvm::Value *BaseValue, const ObjCIvarDecl *Ivar, unsigned CVRQualifiers, llvm::Value *Offset)
void EmitTryCatchStmt (CodeGenFunction &CGF, const ObjCAtTryStmt &S, llvm::Constant *beginCatchFn, llvm::Constant *endCatchFn, llvm::Constant *exceptionRethrowFn)
void EmitAtSynchronizedStmt (CodeGenFunction &CGF, const ObjCAtSynchronizedStmt &S, llvm::Function *syncEnterFn, llvm::Function *syncExitFn)

Protected Attributes

CodeGen::CodeGenModuleCGM

Detailed Description

Implements runtime-specific code generation functions.

Definition at line 63 of file CGObjCRuntime.h.


Constructor & Destructor Documentation

Definition at line 66 of file CGObjCRuntime.h.

Definition at line 3073 of file CGObjC.cpp.


Member Function Documentation

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::BuildByrefLayout ( CodeGen::CodeGenModule CGM,
QualType  T 
) [pure virtual]
virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::BuildGCBlockLayout ( CodeGen::CodeGenModule CGM,
const CodeGen::CGBlockInfo blockInfo 
) [pure virtual]

Referenced by buildBlockDescriptor().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::BuildRCBlockLayout ( CodeGen::CodeGenModule CGM,
const CodeGen::CGBlockInfo blockInfo 
) [pure virtual]

Referenced by buildBlockDescriptor().

uint64_t CGObjCRuntime::ComputeIvarBaseOffset ( CodeGen::CodeGenModule CGM,
const ObjCInterfaceDecl OID,
const ObjCIvarDecl Ivar 
) [protected]

Compute an offset to the given ivar, suitable for passing to EmitValueForIvarAtOffset. Note that the correct handling of bit-fields is carefully coordinated by these two, use caution!

The latter overload is suitable for computing the offset of a sythesized ivar.

Definition at line 65 of file CGObjCRuntime.cpp.

References clang::ASTContext::getCharWidth(), clang::CodeGen::CodeGenModule::getContext(), and LookupFieldBitOffset().

uint64_t CGObjCRuntime::ComputeIvarBaseOffset ( CodeGen::CodeGenModule CGM,
const ObjCImplementationDecl OID,
const ObjCIvarDecl Ivar 
) [protected]
void CGObjCRuntime::EmitAtSynchronizedStmt ( CodeGenFunction CGF,
const ObjCAtSynchronizedStmt S,
llvm::Function *  syncEnterFn,
llvm::Function *  syncExitFn 
) [protected]
virtual void clang::CodeGen::CGObjCRuntime::EmitGCMemmoveCollectable ( CodeGen::CodeGenFunction CGF,
llvm::Value DestPtr,
llvm::Value SrcPtr,
llvm::Value Size 
) [pure virtual]
virtual llvm::Value* clang::CodeGen::CGObjCRuntime::EmitIvarOffset ( CodeGen::CodeGenFunction CGF,
const ObjCInterfaceDecl Interface,
const ObjCIvarDecl Ivar 
) [pure virtual]
virtual void clang::CodeGen::CGObjCRuntime::EmitObjCGlobalAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value src,
llvm::Value dest,
bool  threadlocal = false 
) [pure virtual]
virtual void clang::CodeGen::CGObjCRuntime::EmitObjCIvarAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value src,
llvm::Value dest,
llvm::Value ivarOffset 
) [pure virtual]
virtual LValue clang::CodeGen::CGObjCRuntime::EmitObjCValueForIvar ( CodeGen::CodeGenFunction CGF,
QualType  ObjectTy,
llvm::Value BaseValue,
const ObjCIvarDecl Ivar,
unsigned  CVRQualifiers 
) [pure virtual]
virtual void clang::CodeGen::CGObjCRuntime::EmitObjCWeakAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value src,
llvm::Value dest 
) [pure virtual]
virtual void clang::CodeGen::CGObjCRuntime::EmitThrowStmt ( CodeGen::CodeGenFunction CGF,
const ObjCAtThrowStmt S,
bool  ClearInsertionPoint = true 
) [pure virtual]
void CGObjCRuntime::EmitTryCatchStmt ( CodeGenFunction CGF,
const ObjCAtTryStmt S,
llvm::Constant *  beginCatchFn,
llvm::Constant *  endCatchFn,
llvm::Constant *  exceptionRethrowFn 
) [protected]

Emits a try / catch statement. This function is intended to be called by subclasses, and provides a generic mechanism for generating these, which should be usable by all runtimes. The caller must provide the functions to call when entering and exiting a @catch() block, and the function used to rethrow exceptions. If the begin and end catch functions are NULL, then the function assumes that the EH personality function provides the thrown object directly.

Definition at line 173 of file CGObjCRuntime.cpp.

References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::CodeGenFunction::EmitARCInitWeak(), clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock(), clang::CodeGen::CodeGenFunction::EmitAutoVarDecl(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBranchThroughCleanup(), clang::CodeGen::CodeGenFunction::EmitStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::ObjCAtCatchStmt::getCatchBody(), clang::ObjCAtCatchStmt::getCatchParamDecl(), clang::ObjCAtTryStmt::getCatchStmt(), GetEHType(), clang::CodeGen::CodeGenFunction::getExceptionFromSlot(), clang::ObjCAtTryStmt::getFinallyStmt(), clang::CodeGen::CodeGenFunction::getJumpDestInCurrentScope(), clang::ObjCAtTryStmt::getNumCatchStmts(), clang::ObjCAtTryStmt::getTryBody(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::JumpDest::isValid(), clang::CodeGen::NormalAndEHCleanup, clang::CodeGen::CodeGenFunction::ObjCEHValueStack, clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::CodeGen::CodeGenFunction::popCatchScope(), clang::CodeGen::EHScopeStack::pushCatch(), and clang::CodeGen::EHCatchScope::setHandler().

virtual void clang::CodeGen::CGObjCRuntime::EmitTryStmt ( CodeGen::CodeGenFunction CGF,
const ObjCAtTryStmt S 
) [pure virtual]
LValue CGObjCRuntime::EmitValueForIvarAtOffset ( CodeGen::CodeGenFunction CGF,
const ObjCInterfaceDecl OID,
llvm::Value BaseValue,
const ObjCIvarDecl Ivar,
unsigned  CVRQualifiers,
llvm::Value Offset 
) [protected]
virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::EnumerationMutationFunction ( ) [pure virtual]

EnumerationMutationFunction - Return the function that's called by the compiler when a mutation is detected during foreach iteration.

Referenced by clang::CodeGen::CodeGenFunction::EmitObjCForCollectionStmt().

virtual void clang::CodeGen::CGObjCRuntime::GenerateCategory ( const ObjCCategoryImplDecl OCD) [pure virtual]

Generate a category. A category contains a list of methods (and accompanying metadata) and a list of protocols.

virtual void clang::CodeGen::CGObjCRuntime::GenerateClass ( const ObjCImplementationDecl OID) [pure virtual]

Generate a class structure for this class.

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GenerateConstantString ( const StringLiteral ) [pure virtual]

Generate a constant string object.

Referenced by clang::CodeGen::CodeGenFunction::EmitObjCStringLiteral().

virtual CodeGen::RValue clang::CodeGen::CGObjCRuntime::GenerateMessageSend ( CodeGen::CodeGenFunction CGF,
ReturnValueSlot  ReturnSlot,
QualType  ResultType,
Selector  Sel,
llvm::Value Receiver,
const CallArgList CallArgs,
const ObjCInterfaceDecl Class = nullptr,
const ObjCMethodDecl Method = nullptr 
) [pure virtual]
virtual CodeGen::RValue clang::CodeGen::CGObjCRuntime::GenerateMessageSendSuper ( CodeGen::CodeGenFunction CGF,
ReturnValueSlot  ReturnSlot,
QualType  ResultType,
Selector  Sel,
const ObjCInterfaceDecl Class,
bool  isCategoryImpl,
llvm::Value Self,
bool  IsClassMessage,
const CallArgList CallArgs,
const ObjCMethodDecl Method = nullptr 
) [pure virtual]

Generate an Objective-C message send operation to the super class initiated in a method for Class and with the given Self object.

Parameters:
Method- The method being called, this may be null if synthesizing a property setter or getter.

Referenced by clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr().

virtual llvm::Function* clang::CodeGen::CGObjCRuntime::GenerateMethod ( const ObjCMethodDecl OMD,
const ObjCContainerDecl CD 
) [pure virtual]

Generate a function preamble for a method with the specified types.

Referenced by clang::CodeGen::CodeGenFunction::StartObjCMethod().

virtual void clang::CodeGen::CGObjCRuntime::GenerateProtocol ( const ObjCProtocolDecl OPD) [pure virtual]

Generate the named protocol. Protocols contain method metadata but no implementations.

Emit the code to return the named protocol as an object, as in a @protocol expression.

Referenced by clang::CodeGen::CodeGenFunction::EmitObjCProtocolExpr().

virtual llvm::Value* clang::CodeGen::CGObjCRuntime::GetClass ( CodeGenFunction CGF,
const ObjCInterfaceDecl OID 
) [pure virtual]
virtual llvm::GlobalVariable* clang::CodeGen::CGObjCRuntime::GetClassGlobal ( const std::string &  Name,
bool  Weak = false 
) [pure virtual]
virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectGetFunction ( ) [pure virtual]

API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in getter.

Referenced by emitCPPObjectAtomicGetterCall().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectSetFunction ( ) [pure virtual]

API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in setter.

Referenced by emitCPPObjectAtomicSetterCall().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetEHType ( QualType  T) [pure virtual]

Get the type constant to catch for the given ObjC pointer type. This is used externally to implement catching ObjC types in C++. Runtimes which don't support this should add the appropriate error to Sema.

Referenced by EmitTryCatchStmt(), and clang::CodeGen::CodeGenFunction::EnterCXXTryStmt().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetGetStructFunction ( ) [pure virtual]

Referenced by emitStructGetterCall().

Compute the pointer-to-function type to which a message send should be casted in order to correctly call the given method with the given arguments.

Parameters:
method- may be null
resultType- the result type to use if there's no method
callArgs- the actual arguments, including implicit ones

Definition at line 348 of file CGObjCRuntime.cpp.

References clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature(), CGM, clang::CodeGen::CGFunctionInfo::getExtInfo(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CGFunctionInfo::getRequiredArgs(), clang::CodeGen::CodeGenModule::getTypes(), and clang::CodeGen::CGFunctionInfo::isVariadic().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetOptimizedPropertySetFunction ( bool  atomic,
bool  copy 
) [pure virtual]

Return the runtime function for optimized setting properties.

Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetPropertyGetFunction ( ) [pure virtual]

Return the runtime function for getting properties.

Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetPropertySetFunction ( ) [pure virtual]

Return the runtime function for setting properties.

Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().

virtual llvm::Value* clang::CodeGen::CGObjCRuntime::GetSelector ( CodeGenFunction CGF,
Selector  Sel,
bool  lval = false 
) [pure virtual]

Get a selector for the specified name and type values. The return value should have the LLVM type for pointer-to ASTContext::getObjCSelType().

Referenced by clang::CodeGen::CodeGenFunction::EmitObjCSelectorExpr(), and clang::CodeGen::CodeGenFunction::EmitObjCSelectorLValue().

virtual llvm::Value* clang::CodeGen::CGObjCRuntime::GetSelector ( CodeGenFunction CGF,
const ObjCMethodDecl Method 
) [pure virtual]

Get a typed selector.

virtual llvm::Constant* clang::CodeGen::CGObjCRuntime::GetSetStructFunction ( ) [pure virtual]

Referenced by emitStructSetterCall().

virtual llvm::Function* clang::CodeGen::CGObjCRuntime::ModuleInitFunction ( ) [pure virtual]

Generate the function required to register all Objective-C components in this compilation unit with the runtime library.

virtual void clang::CodeGen::CGObjCRuntime::RegisterAlias ( const ObjCCompatibleAliasDecl OAD) [pure virtual]

Register an class alias.


Member Data Documentation

Definition at line 65 of file CGObjCRuntime.h.

Referenced by getMessageSendInfo().


The documentation for this class was generated from the following files: