clang API Documentation
#include "CGDebugInfo.h"
#include "CGObjCRuntime.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
Go to the source code of this file.
typedef llvm::PointerIntPair<llvm::Value*,1,bool> TryEmitResult |
Definition at line 31 of file CGObjC.cpp.
static RValue AdjustRelatedResultType | ( | CodeGenFunction & | CGF, |
QualType | ET, | ||
const ObjCMethodDecl * | Method, | ||
RValue | Result | ||
) | [static] |
Adjust the type of the result of an Objective-C message send expression when the method has a related result type.
Definition at line 230 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCMethodDecl::hasRelatedResultType(), clang::ASTContext::hasSameType(), and clang::CodeGen::RValue::isScalar().
Referenced by clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr().
static llvm::Constant* createARCRuntimeFunction | ( | CodeGenModule & | CGM, |
llvm::FunctionType * | type, | ||
StringRef | fnName | ||
) | [static] |
Definition at line 1770 of file CGObjC.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCRuntime::hasNativeARC(), and clang::LangOptions::ObjCRuntime.
Referenced by emitARCCopyOperation(), clang::CodeGen::CodeGenFunction::EmitARCDestroyWeak(), emitARCLoadOperation(), clang::CodeGen::CodeGenFunction::EmitARCRelease(), emitARCStoreOperation(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrongCall(), emitARCValueOperation(), clang::CodeGen::CodeGenFunction::EmitObjCAutoreleasePoolPop(), and clang::CodeGen::CodeGenFunction::EmitObjCAutoreleasePoolPush().
static void destroyARCStrongWithStore | ( | CodeGenFunction & | CGF, |
llvm::Value * | addr, | ||
QualType | type | ||
) | [static] |
Like CodeGenFunction::destroyARCStrong, but do it with a call.
Definition at line 1312 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCStoreStrongCall(), and getNullForVariable().
Referenced by emitCXXDestructMethod().
static void emitARCCopyOperation | ( | CodeGenFunction & | CGF, |
llvm::Value * | dst, | ||
llvm::Value * | src, | ||
llvm::Constant *& | fn, | ||
StringRef | fnName | ||
) | [static] |
Perform an operation having the following signature: void (i8**, i8**)
Definition at line 1881 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCCopyWeak(), and clang::CodeGen::CodeGenFunction::EmitARCMoveWeak().
static llvm::Value* emitARCLoadOperation | ( | CodeGenFunction & | CGF, |
llvm::Value * | addr, | ||
llvm::Constant *& | fn, | ||
StringRef | fnName | ||
) | [static] |
Perform an operation having the following signature: i8* (i8**)
Definition at line 1822 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), getElementType(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCLoadWeak(), and clang::CodeGen::CodeGenFunction::EmitARCLoadWeakRetained().
static llvm::Value * emitARCRetainAfterCall | ( | CodeGenFunction & | CGF, |
llvm::Value * | value | ||
) | [static] |
Definition at line 2430 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue(), and clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock().
Referenced by emitARCRetainCall().
static llvm::Value* emitARCRetainCall | ( | CodeGenFunction & | CGF, |
const Expr * | e | ||
) | [static] |
Given that the given expression is some sort of call (which does not return retained), emit a retain following it.
Definition at line 2425 of file CGObjC.cpp.
References emitARCRetainAfterCall(), and clang::CodeGen::CodeGenFunction::EmitScalarExpr().
Referenced by tryEmitARCRetainScalarExpr().
static llvm::Value * emitARCRetainLoadOfScalar | ( | CodeGenFunction & | CGF, |
LValue | lvalue, | ||
QualType | type | ||
) | [static] |
Definition at line 2700 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCRetain(), and tryEmitARCRetainLoadOfScalar().
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
static llvm::Value* emitARCStoreOperation | ( | CodeGenFunction & | CGF, |
llvm::Value * | addr, | ||
llvm::Value * | value, | ||
llvm::Constant *& | fn, | ||
StringRef | fnName, | ||
bool | ignored | ||
) | [static] |
Perform an operation having the following signature: i8* (i8**, i8*)
Definition at line 1849 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), getElementType(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCInitWeak(), and clang::CodeGen::CodeGenFunction::EmitARCStoreWeak().
static llvm::Value* emitARCValueOperation | ( | CodeGenFunction & | CGF, |
llvm::Value * | value, | ||
llvm::Constant *& | fn, | ||
StringRef | fnName, | ||
bool | isTailCall = false |
||
) | [static] |
Perform an operation having the signature i8* (i8*) where a null input causes a no-op and returns null.
Definition at line 1794 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCAutorelease(), clang::CodeGen::CodeGenFunction::EmitARCAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseNonBlock(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainBlock(), and clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock().
static void emitCPPObjectAtomicGetterCall | ( | CodeGenFunction & | CGF, |
llvm::Value * | returnAddr, | ||
ObjCIvarDecl * | ivar, | ||
llvm::Constant * | AtomicHelperFn | ||
) | [static] |
emitCPPObjectAtomicGetterCall - Call the runtime function to copy the ivar into the resturn slot.
Definition at line 784 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectGetFunction(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CodeGenFunction::getTypes(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
static void emitCPPObjectAtomicSetterCall | ( | CodeGenFunction & | CGF, |
ObjCMethodDecl * | OMD, | ||
ObjCIvarDecl * | ivar, | ||
llvm::Constant * | AtomicHelperFn | ||
) | [static] |
emitCPPObjectAtomicSetterCall - Call the runtime function to store the value from the first formal parameter into the given ivar, using the Cpp API for atomic Cpp objects with non-trivial copy assignment.
Definition at line 1026 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectSetFunction(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::ObjCMethodDecl::param_begin(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::VK_LValue, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
static void emitCXXDestructMethod | ( | CodeGenFunction & | CGF, |
ObjCImplementationDecl * | impl | ||
) | [static] |
Definition at line 1319 of file CGObjC.cpp.
References clang::ObjCInterfaceDecl::all_declared_ivar_begin(), destroyARCStrongWithStore(), clang::QualType::DK_objc_strong_lifetime, clang::CodeGen::EHCleanup, clang::CodeGen::CodeGenFunction::EHStack, clang::ObjCImplDecl::getClassInterface(), clang::CodeGen::CodeGenFunction::getCleanupKind(), clang::CodeGen::CodeGenFunction::getDestroyer(), clang::ObjCIvarDecl::getNextIvar(), clang::QualType::isDestructedType(), clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), and clang::ast_matchers::type.
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCCtorDtorMethod().
static void emitStructGetterCall | ( | CodeGenFunction & | CGF, |
ObjCIvarDecl * | ivar, | ||
bool | isAtomic, | ||
bool | hasStrong | ||
) | [static] |
emitStructGetterCall - Call the runtime function to load a property into the return value slot.
Definition at line 517 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::ASTContext::BoolTy, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, Context, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetGetStructFunction(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CodeGenModule::getSize(), clang::ASTContext::getSizeType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::ReturnValue, clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
static void emitStructSetterCall | ( | CodeGenFunction & | CGF, |
ObjCMethodDecl * | OMD, | ||
ObjCIvarDecl * | ivar | ||
) | [static] |
emitStructSetterCall - Call the runtime function to store the value from the first formal parameter into the given ivar.
Definition at line 982 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::ASTContext::BoolTy, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getContext(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CGObjCRuntime::GetSetStructFunction(), clang::CodeGen::CodeGenModule::getSize(), clang::ASTContext::getSizeType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::ObjCMethodDecl::param_begin(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::VK_LValue, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
static CharUnits getMaxAtomicAccessSize | ( | CodeGenModule & | CGM, |
llvm::Triple::ArchType | arch | ||
) | [static] |
Return the maximum size that permits atomic accesses for the given architecture.
Definition at line 558 of file CGObjC.cpp.
References clang::CharUnits::fromQuantity(), and clang::CodeGen::CodeGenTypeCache::PointerSizeInBytes.
static llvm::Constant* getNullForVariable | ( | llvm::Value * | addr | ) | [static] |
Given the address of a variable of pointer type, find the correct null to store into it.
Definition at line 41 of file CGObjC.cpp.
References getElementType(), and clang::ast_matchers::type.
Referenced by destroyARCStrongWithStore(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), and tryEmitARCRetainLoadOfScalar().
static bool hasTrivialGetExpr | ( | const ObjCPropertyImplDecl * | propImpl | ) | [static] |
Definition at line 759 of file CGObjC.cpp.
References clang::ObjCPropertyImplDecl::getGetterCXXConstructor(), and clang::Expr::isGLValue().
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(), and clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
static bool hasTrivialSetExpr | ( | const ObjCPropertyImplDecl * | PID | ) | [static] |
Definition at line 1062 of file CGObjC.cpp.
References clang::ObjCPropertyImplDecl::getSetterCXXAssignment().
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction(), and clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
static bool hasUnalignedAtomics | ( | llvm::Triple::ArchType | arch | ) | [static] |
Determine whether the given architecture supports unaligned atomic accesses. They don't have to be fast, just faster than a function call and a mutex.
Definition at line 550 of file CGObjC.cpp.
static bool shouldEmitSeparateBlockRetain | ( | const Expr * | e | ) | [static] |
Determine whether it might be important to emit a separate objc_retain_block on the result of the given expression, or whether it's okay to just emit it in a +1 context.
Definition at line 2472 of file CGObjC.cpp.
References clang::CK_AnyPointerToBlockPointerCast, clang::CK_ARCConsumeObject, clang::CK_ARCProduceObject, clang::CK_ARCReclaimReturnedObject, clang::CK_BitCast, clang::CK_LValueToRValue, clang::CK_NoOp, clang::Expr::getType(), clang::Expr::IgnoreParens(), and clang::Type::isBlockPointerType().
Referenced by clang::CodeGen::CodeGenFunction::EmitARCExtendBlockObject(), and tryEmitARCRetainScalarExpr().
static bool shouldExtendReceiverForInnerPointerMessage | ( | const ObjCMessageExpr * | message | ) | [static] |
Decide whether to extend the lifetime of the receiver of a returns-inner-pointer message.
Definition at line 250 of file CGObjC.cpp.
References clang::CK_LValueToRValue, clang::ObjCMessageExpr::Class, clang::CastExpr::getCastKind(), clang::DeclRefExpr::getDecl(), clang::ObjCMessageExpr::getInstanceReceiver(), clang::QualType::getObjCLifetime(), clang::ObjCMessageExpr::getReceiverKind(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::Decl::hasAttr(), clang::VarDecl::hasLocalStorage(), clang::Expr::IgnoreParens(), clang::ObjCMessageExpr::Instance, clang::Qualifiers::OCL_Strong, clang::ObjCMessageExpr::SuperClass, and clang::ObjCMessageExpr::SuperInstance.
Referenced by clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr().
static TryEmitResult tryEmitARCRetainLoadOfScalar | ( | CodeGenFunction & | CGF, |
LValue | lvalue, | ||
QualType | type | ||
) | [static] |
Definition at line 2363 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCLoadWeakRetained(), clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::LValue::getAddress(), clang::QualType::getObjCLifetime(), clang::CodeGen::RValue::getScalarVal(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by emitARCRetainLoadOfScalar(), tryEmitARCRetainLoadOfScalar(), and tryEmitARCRetainScalarExpr().
static TryEmitResult tryEmitARCRetainLoadOfScalar | ( | CodeGenFunction & | CGF, |
const Expr * | e | ||
) | [static] |
Definition at line 2383 of file CGObjC.cpp.
References clang::BO_Assign, clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getLangOpts(), getNullForVariable(), clang::QualType::getObjCLifetime(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::Expr::IgnoreParens(), clang::QualType::isConstQualified(), clang::QualType::isVolatileQualified(), clang::Expr::isXValue(), clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, tryEmitARCRetainLoadOfScalar(), and clang::ast_matchers::type.
static TryEmitResult tryEmitARCRetainPseudoObject | ( | CodeGenFunction & | CGF, |
const PseudoObjectExpr * | E | ||
) | [static] |
Try to emit a PseudoObjectExpr at +1.
This massively duplicates emitPseudoObjectRValue.
Definition at line 2508 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(), clang::CodeGen::RValue::get(), clang::PseudoObjectExpr::getResultExpr(), clang::PseudoObjectExpr::semantics_begin(), clang::PseudoObjectExpr::semantics_end(), and tryEmitARCRetainScalarExpr().
Referenced by tryEmitARCRetainScalarExpr().
static TryEmitResult tryEmitARCRetainScalarExpr | ( | CodeGenFunction & | CGF, |
const Expr * | e | ||
) | [static] |
Definition at line 2559 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CK_AnyPointerToBlockPointerCast, clang::CK_ARCConsumeObject, clang::CK_ARCExtendBlockObject, clang::CK_ARCReclaimReturnedObject, clang::CK_BitCast, clang::CK_BlockPointerToObjCPointerCast, clang::CK_CPointerToObjCPointerCast, clang::CK_LValueToRValue, clang::CK_NoOp, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::EmitARCRetainBlock(), emitARCRetainCall(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::Expr::getType(), clang::Type::hasPointerRepresentation(), clang::Expr::IgnoreParens(), shouldEmitSeparateBlockRetain(), tryEmitARCRetainLoadOfScalar(), tryEmitARCRetainPseudoObject(), and clang::UO_Extension.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCExtendBlockObject(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseScalarExpr(), clang::CodeGen::CodeGenFunction::EmitARCRetainScalarExpr(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrong(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), and tryEmitARCRetainPseudoObject().
static bool UseOptimizedSetter | ( | CodeGenModule & | CGM | ) | [static] |
Definition at line 1086 of file CGObjC.cpp.
References clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCRuntime::hasOptimizedSetter(), clang::LangOptions::NonGC, and clang::LangOptions::ObjCRuntime.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().