forked from OSchip/llvm-project
parent
dc1244386f
commit
59ad1e3f57
|
@ -502,7 +502,7 @@ class ObjCMessageExpr : public Expr {
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
ObjCMessageExpr(QualType T, ExprValueKind VK,
|
ObjCMessageExpr(QualType T, ExprValueKind VK,
|
||||||
SourceLocation LBracLoc,
|
SourceLocation LBracLoc,
|
||||||
|
@ -510,7 +510,7 @@ class ObjCMessageExpr : public Expr {
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
ObjCMessageExpr(QualType T, ExprValueKind VK,
|
ObjCMessageExpr(QualType T, ExprValueKind VK,
|
||||||
SourceLocation LBracLoc,
|
SourceLocation LBracLoc,
|
||||||
|
@ -518,7 +518,7 @@ class ObjCMessageExpr : public Expr {
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
|
|
||||||
/// \brief Retrieve the pointer value of the message receiver.
|
/// \brief Retrieve the pointer value of the message receiver.
|
||||||
|
@ -581,7 +581,7 @@ public:
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SelLocs,
|
ArrayRef<SourceLocation> SelLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
|
|
||||||
/// \brief Create a class message send.
|
/// \brief Create a class message send.
|
||||||
|
@ -616,7 +616,7 @@ public:
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SelLocs,
|
ArrayRef<SourceLocation> SelLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
|
|
||||||
/// \brief Create an instance message send.
|
/// \brief Create an instance message send.
|
||||||
|
@ -651,7 +651,7 @@ public:
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SeLocs,
|
ArrayRef<SourceLocation> SeLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc);
|
SourceLocation RBracLoc);
|
||||||
|
|
||||||
/// \brief Create an empty Objective-C message expression, to be
|
/// \brief Create an empty Objective-C message expression, to be
|
||||||
|
|
|
@ -2718,7 +2718,7 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc)
|
SourceLocation RBracLoc)
|
||||||
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary,
|
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary,
|
||||||
/*TypeDependent=*/false, /*ValueDependent=*/false,
|
/*TypeDependent=*/false, /*ValueDependent=*/false,
|
||||||
|
@ -2730,10 +2730,10 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
: Sel.getAsOpaquePtr())),
|
: Sel.getAsOpaquePtr())),
|
||||||
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
||||||
{
|
{
|
||||||
setNumArgs(NumArgs);
|
setNumArgs(Args.size());
|
||||||
setReceiverPointer(SuperType.getAsOpaquePtr());
|
setReceiverPointer(SuperType.getAsOpaquePtr());
|
||||||
if (NumArgs)
|
if (!Args.empty())
|
||||||
memcpy(getArgs(), Args, NumArgs * sizeof(Expr *));
|
std::copy(Args.begin(), Args.end(), getArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
|
@ -2743,7 +2743,7 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc)
|
SourceLocation RBracLoc)
|
||||||
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary, T->isDependentType(),
|
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary, T->isDependentType(),
|
||||||
T->isDependentType(), T->isInstantiationDependentType(),
|
T->isDependentType(), T->isInstantiationDependentType(),
|
||||||
|
@ -2754,10 +2754,10 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
: Sel.getAsOpaquePtr())),
|
: Sel.getAsOpaquePtr())),
|
||||||
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
||||||
{
|
{
|
||||||
setNumArgs(NumArgs);
|
setNumArgs(Args.size());
|
||||||
setReceiverPointer(Receiver);
|
setReceiverPointer(Receiver);
|
||||||
Expr **MyArgs = getArgs();
|
Expr **MyArgs = getArgs();
|
||||||
for (unsigned I = 0; I != NumArgs; ++I) {
|
for (unsigned I = 0; I != Args.size(); ++I) {
|
||||||
if (Args[I]->isTypeDependent())
|
if (Args[I]->isTypeDependent())
|
||||||
ExprBits.TypeDependent = true;
|
ExprBits.TypeDependent = true;
|
||||||
if (Args[I]->isValueDependent())
|
if (Args[I]->isValueDependent())
|
||||||
|
@ -2778,7 +2778,7 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
SourceLocation SelLoc,
|
SourceLocation SelLoc,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc)
|
SourceLocation RBracLoc)
|
||||||
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary, Receiver->isTypeDependent(),
|
: Expr(ObjCMessageExprClass, T, VK, OK_Ordinary, Receiver->isTypeDependent(),
|
||||||
Receiver->isTypeDependent(),
|
Receiver->isTypeDependent(),
|
||||||
|
@ -2790,10 +2790,10 @@ ObjCMessageExpr::ObjCMessageExpr(QualType T,
|
||||||
: Sel.getAsOpaquePtr())),
|
: Sel.getAsOpaquePtr())),
|
||||||
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
SelectorLoc(SelLoc), LBracLoc(LBracLoc), RBracLoc(RBracLoc)
|
||||||
{
|
{
|
||||||
setNumArgs(NumArgs);
|
setNumArgs(Args.size());
|
||||||
setReceiverPointer(Receiver);
|
setReceiverPointer(Receiver);
|
||||||
Expr **MyArgs = getArgs();
|
Expr **MyArgs = getArgs();
|
||||||
for (unsigned I = 0; I != NumArgs; ++I) {
|
for (unsigned I = 0; I != Args.size(); ++I) {
|
||||||
if (Args[I]->isTypeDependent())
|
if (Args[I]->isTypeDependent())
|
||||||
ExprBits.TypeDependent = true;
|
ExprBits.TypeDependent = true;
|
||||||
if (Args[I]->isValueDependent())
|
if (Args[I]->isValueDependent())
|
||||||
|
@ -2816,14 +2816,14 @@ ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SelLocs,
|
ArrayRef<SourceLocation> SelLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc) {
|
SourceLocation RBracLoc) {
|
||||||
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
||||||
NumArgs * sizeof(Expr *);
|
Args.size() * sizeof(Expr *);
|
||||||
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
||||||
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, SuperLoc, IsInstanceSuper,
|
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, SuperLoc, IsInstanceSuper,
|
||||||
SuperType, Sel, SelLocs.front(), Method,
|
SuperType, Sel, SelLocs.front(), Method,
|
||||||
Args, NumArgs, RBracLoc);
|
Args, RBracLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
||||||
|
@ -2833,14 +2833,14 @@ ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SelLocs,
|
ArrayRef<SourceLocation> SelLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc) {
|
SourceLocation RBracLoc) {
|
||||||
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
||||||
NumArgs * sizeof(Expr *);
|
Args.size() * sizeof(Expr *);
|
||||||
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
||||||
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel,
|
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel,
|
||||||
SelLocs.front(),
|
SelLocs.front(),
|
||||||
Method, Args, NumArgs, RBracLoc);
|
Method, Args, RBracLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
||||||
|
@ -2850,14 +2850,14 @@ ObjCMessageExpr *ObjCMessageExpr::Create(ASTContext &Context, QualType T,
|
||||||
Selector Sel,
|
Selector Sel,
|
||||||
ArrayRef<SourceLocation> SelLocs,
|
ArrayRef<SourceLocation> SelLocs,
|
||||||
ObjCMethodDecl *Method,
|
ObjCMethodDecl *Method,
|
||||||
Expr **Args, unsigned NumArgs,
|
ArrayRef<Expr *> Args,
|
||||||
SourceLocation RBracLoc) {
|
SourceLocation RBracLoc) {
|
||||||
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
unsigned Size = sizeof(ObjCMessageExpr) + sizeof(void *) +
|
||||||
NumArgs * sizeof(Expr *);
|
Args.size() * sizeof(Expr *);
|
||||||
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
void *Mem = Context.Allocate(Size, llvm::AlignOf<ObjCMessageExpr>::Alignment);
|
||||||
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel,
|
return new (Mem) ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel,
|
||||||
SelLocs.front(),
|
SelLocs.front(),
|
||||||
Method, Args, NumArgs, RBracLoc);
|
Method, Args, RBracLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjCMessageExpr *ObjCMessageExpr::CreateEmpty(ASTContext &Context,
|
ObjCMessageExpr *ObjCMessageExpr::CreateEmpty(ASTContext &Context,
|
||||||
|
|
|
@ -1316,8 +1316,6 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(OMD && "RewritePropertyOrImplicitSetter - null OMD");
|
assert(OMD && "RewritePropertyOrImplicitSetter - null OMD");
|
||||||
SmallVector<Expr *, 1> ExprVec;
|
|
||||||
ExprVec.push_back(newStmt);
|
|
||||||
|
|
||||||
ObjCMessageExpr *MsgExpr;
|
ObjCMessageExpr *MsgExpr;
|
||||||
if (Super)
|
if (Super)
|
||||||
|
@ -1329,7 +1327,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
|
||||||
/*IsInstanceSuper=*/true,
|
/*IsInstanceSuper=*/true,
|
||||||
SuperTy,
|
SuperTy,
|
||||||
Sel, SelectorLoc, OMD,
|
Sel, SelectorLoc, OMD,
|
||||||
&ExprVec[0], 1,
|
newStmt,
|
||||||
/*FIXME:*/SourceLocation());
|
/*FIXME:*/SourceLocation());
|
||||||
else {
|
else {
|
||||||
// FIXME. Refactor this into common code with that in
|
// FIXME. Refactor this into common code with that in
|
||||||
|
@ -1346,7 +1344,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitSetter(BinaryOperator *BinOp, Expr *
|
||||||
/*FIXME: */SourceLocation(),
|
/*FIXME: */SourceLocation(),
|
||||||
cast<Expr>(Receiver),
|
cast<Expr>(Receiver),
|
||||||
Sel, SelectorLoc, OMD,
|
Sel, SelectorLoc, OMD,
|
||||||
&ExprVec[0], 1,
|
newStmt,
|
||||||
/*FIXME:*/SourceLocation());
|
/*FIXME:*/SourceLocation());
|
||||||
}
|
}
|
||||||
Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr);
|
Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr);
|
||||||
|
@ -1405,7 +1403,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
|
||||||
/*IsInstanceSuper=*/true,
|
/*IsInstanceSuper=*/true,
|
||||||
SuperTy,
|
SuperTy,
|
||||||
Sel, SelectorLoc, OMD,
|
Sel, SelectorLoc, OMD,
|
||||||
0, 0,
|
ArrayRef<Expr*>(),
|
||||||
PropOrGetterRefExpr->getLocEnd());
|
PropOrGetterRefExpr->getLocEnd());
|
||||||
else {
|
else {
|
||||||
assert (Receiver && "RewritePropertyOrImplicitGetter - Receiver is null");
|
assert (Receiver && "RewritePropertyOrImplicitGetter - Receiver is null");
|
||||||
|
@ -1419,7 +1417,7 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
|
||||||
PropOrGetterRefExpr->getLocStart(),
|
PropOrGetterRefExpr->getLocStart(),
|
||||||
cast<Expr>(Receiver),
|
cast<Expr>(Receiver),
|
||||||
Sel, SelectorLoc, OMD,
|
Sel, SelectorLoc, OMD,
|
||||||
0, 0,
|
ArrayRef<Expr*>(),
|
||||||
PropOrGetterRefExpr->getLocEnd());
|
PropOrGetterRefExpr->getLocEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
using namespace clang;
|
using namespace clang;
|
||||||
using namespace sema;
|
using namespace sema;
|
||||||
|
using llvm::makeArrayRef;
|
||||||
|
|
||||||
ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs,
|
ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs,
|
||||||
Expr **strings,
|
Expr **strings,
|
||||||
|
@ -1065,7 +1066,7 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
|
||||||
return Owned(ObjCMessageExpr::Create(Context, ReceiverType,
|
return Owned(ObjCMessageExpr::Create(Context, ReceiverType,
|
||||||
VK_RValue, LBracLoc, ReceiverTypeInfo,
|
VK_RValue, LBracLoc, ReceiverTypeInfo,
|
||||||
Sel, SelectorLocs, /*Method=*/0,
|
Sel, SelectorLocs, /*Method=*/0,
|
||||||
Args, NumArgs, RBracLoc));
|
makeArrayRef(Args, NumArgs),RBracLoc));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the class to which we are sending this message.
|
// Find the class to which we are sending this message.
|
||||||
|
@ -1127,11 +1128,13 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
|
||||||
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
||||||
SuperLoc, /*IsInstanceSuper=*/false,
|
SuperLoc, /*IsInstanceSuper=*/false,
|
||||||
ReceiverType, Sel, SelectorLocs,
|
ReceiverType, Sel, SelectorLocs,
|
||||||
Method, Args, NumArgs, RBracLoc);
|
Method, makeArrayRef(Args, NumArgs),
|
||||||
|
RBracLoc);
|
||||||
else
|
else
|
||||||
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
||||||
ReceiverTypeInfo, Sel, SelectorLocs,
|
ReceiverTypeInfo, Sel, SelectorLocs,
|
||||||
Method, Args, NumArgs, RBracLoc);
|
Method, makeArrayRef(Args, NumArgs),
|
||||||
|
RBracLoc);
|
||||||
return MaybeBindToTemporary(Result);
|
return MaybeBindToTemporary(Result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1217,7 +1220,8 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
|
||||||
return Owned(ObjCMessageExpr::Create(Context, Context.DependentTy,
|
return Owned(ObjCMessageExpr::Create(Context, Context.DependentTy,
|
||||||
VK_RValue, LBracLoc, Receiver, Sel,
|
VK_RValue, LBracLoc, Receiver, Sel,
|
||||||
SelectorLocs, /*Method=*/0,
|
SelectorLocs, /*Method=*/0,
|
||||||
Args, NumArgs, RBracLoc));
|
makeArrayRef(Args, NumArgs),
|
||||||
|
RBracLoc));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If necessary, apply function/array conversion to the receiver.
|
// If necessary, apply function/array conversion to the receiver.
|
||||||
|
@ -1501,11 +1505,11 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
|
||||||
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
||||||
SuperLoc, /*IsInstanceSuper=*/true,
|
SuperLoc, /*IsInstanceSuper=*/true,
|
||||||
ReceiverType, Sel, SelectorLocs, Method,
|
ReceiverType, Sel, SelectorLocs, Method,
|
||||||
Args, NumArgs, RBracLoc);
|
makeArrayRef(Args, NumArgs), RBracLoc);
|
||||||
else
|
else
|
||||||
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
Result = ObjCMessageExpr::Create(Context, ReturnType, VK, LBracLoc,
|
||||||
Receiver, Sel, SelectorLocs, Method,
|
Receiver, Sel, SelectorLocs, Method,
|
||||||
Args, NumArgs, RBracLoc);
|
makeArrayRef(Args, NumArgs), RBracLoc);
|
||||||
|
|
||||||
if (getLangOptions().ObjCAutoRefCount) {
|
if (getLangOptions().ObjCAutoRefCount) {
|
||||||
// In ARC, annotate delegate init calls.
|
// In ARC, annotate delegate init calls.
|
||||||
|
|
Loading…
Reference in New Issue