mirror of
https://github.com/intel/llvm.git
synced 2026-02-03 19:18:13 +08:00
[Objective-C]. Patch to unify code generation for ObjCMsgSend and ObjCBoxedExpr.
Patch by Alex Denisov. NFC. llvm-svn: 224525
This commit is contained in:
@@ -124,6 +124,15 @@ public:
|
||||
|
||||
// Iterators
|
||||
child_range children() { return child_range(&SubExpr, &SubExpr+1); }
|
||||
|
||||
typedef ConstExprIterator const_arg_iterator;
|
||||
|
||||
const_arg_iterator arg_begin() const {
|
||||
return reinterpret_cast<Stmt const * const*>(&SubExpr);
|
||||
}
|
||||
const_arg_iterator arg_end() const {
|
||||
return reinterpret_cast<Stmt const * const*>(&SubExpr + 1);
|
||||
}
|
||||
|
||||
friend class ASTStmtReader;
|
||||
};
|
||||
|
||||
@@ -60,7 +60,6 @@ llvm::Value *CodeGenFunction::EmitObjCStringLiteral(const ObjCStringLiteral *E)
|
||||
llvm::Value *
|
||||
CodeGenFunction::EmitObjCBoxedExpr(const ObjCBoxedExpr *E) {
|
||||
// Generate the correct selector for this literal's concrete type.
|
||||
const Expr *SubExpr = E->getSubExpr();
|
||||
// Get the method.
|
||||
const ObjCMethodDecl *BoxingMethod = E->getBoxingMethod();
|
||||
assert(BoxingMethod && "BoxingMethod is null");
|
||||
@@ -73,12 +72,9 @@ CodeGenFunction::EmitObjCBoxedExpr(const ObjCBoxedExpr *E) {
|
||||
CGObjCRuntime &Runtime = CGM.getObjCRuntime();
|
||||
const ObjCInterfaceDecl *ClassDecl = BoxingMethod->getClassInterface();
|
||||
llvm::Value *Receiver = Runtime.GetClass(*this, ClassDecl);
|
||||
|
||||
const ParmVarDecl *argDecl = *BoxingMethod->param_begin();
|
||||
QualType ArgQT = argDecl->getType().getUnqualifiedType();
|
||||
RValue RV = EmitAnyExpr(SubExpr);
|
||||
|
||||
CallArgList Args;
|
||||
Args.add(RV, ArgQT);
|
||||
EmitCallArgs(Args, BoxingMethod, E->arg_begin(), E->arg_end());
|
||||
|
||||
RValue result = Runtime.GenerateMessageSend(
|
||||
*this, ReturnValueSlot(), BoxingMethod->getReturnType(), Sel, Receiver,
|
||||
|
||||
Reference in New Issue
Block a user