diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/ASTContext.cpp | 4 | ||||
-rw-r--r-- | lib/AST/DeclObjC.cpp | 2 | ||||
-rw-r--r-- | lib/AST/DeclarationName.cpp | 2 | ||||
-rw-r--r-- | lib/AST/StmtDumper.cpp | 11 | ||||
-rw-r--r-- | lib/AST/StmtPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Analysis/BasicObjCFoundationChecks.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/CFRefCount.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/CheckObjCInstMethSignature.cpp | 2 | ||||
-rw-r--r-- | lib/Basic/IdentifierTable.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/CGCXX.cpp | 13 | ||||
-rw-r--r-- | lib/CodeGen/CGObjCGNU.cpp | 17 | ||||
-rw-r--r-- | lib/CodeGen/CGObjCMac.cpp | 17 | ||||
-rw-r--r-- | lib/Sema/Sema.cpp | 17 | ||||
-rw-r--r-- | lib/Sema/Sema.h | 2 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 11 | ||||
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 26 |
16 files changed, 72 insertions, 64 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 7bfdf71339..61e8c99aa4 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -1577,12 +1577,12 @@ void ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD, if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) { S += ",G"; - S += PD->getGetterName().getName(); + S += PD->getGetterName().getAsString(); } if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_setter) { S += ",S"; - S += PD->getSetterName().getName(); + S += PD->getSetterName().getAsString(); } if (SynthesizePID) { diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 558156c4a0..e69526e241 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -763,7 +763,7 @@ unsigned ObjCMethodDecl::getSynthesizedMethodSize() const { if (ObjCCategoryImplDecl *CID = dyn_cast<ObjCCategoryImplDecl>(MethodContext)) length += strlen(CID->getIdentifierName()) +1; - length += getSelector().getName().size(); // selector name + length += getSelector().getAsString().size(); // selector name return length; } diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp index 3a9e7c84e3..ed4b7c6105 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -120,7 +120,7 @@ std::string DeclarationName::getAsString() const { case ObjCZeroArgSelector: case ObjCOneArgSelector: case ObjCMultiArgSelector: - return getObjCSelector().getName(); + return getObjCSelector().getAsString(); case CXXConstructorName: { QualType ClassType = getCXXNameType(); diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp index 04ae2cdb19..f7330c2a9d 100644 --- a/lib/AST/StmtDumper.cpp +++ b/lib/AST/StmtDumper.cpp @@ -376,7 +376,7 @@ void StmtDumper::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *Node) { void StmtDumper::VisitMemberExpr(MemberExpr *Node) { DumpExpr(Node); fprintf(F, " %s%s %p", Node->isArrow() ? "->" : ".", - Node->getMemberDecl()->getName().c_str(), + Node->getMemberDecl()->getNameAsString().c_str(), (void*)Node->getMemberDecl()); } void StmtDumper::VisitExtVectorElementExpr(ExtVectorElementExpr *Node) { @@ -441,7 +441,7 @@ void StmtDumper::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *Node) { void StmtDumper::VisitObjCMessageExpr(ObjCMessageExpr* Node) { DumpExpr(Node); - fprintf(F, " selector=%s", Node->getSelector().getName().c_str()); + fprintf(F, " selector=%s", Node->getSelector().getAsString().c_str()); IdentifierInfo* clsName = Node->getClassName(); if (clsName) fprintf(F, " class=%s", clsName->getName()); } @@ -457,8 +457,7 @@ void StmtDumper::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) { DumpExpr(Node); fprintf(F, " "); - Selector selector = Node->getSelector(); - fprintf(F, "%s", selector.getName().c_str()); + fprintf(F, "%s", Node->getSelector().getAsString().c_str()); } void StmtDumper::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) { @@ -481,8 +480,8 @@ void StmtDumper::VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node) { ObjCMethodDecl *Getter = Node->getGetterMethod(); ObjCMethodDecl *Setter = Node->getSetterMethod(); fprintf(F, " Kind=MethodRef Getter=\"%s\" Setter=\"%s\"", - Getter->getSelector().getName().c_str(), - Setter ? Setter->getSelector().getName().c_str() : "(null)"); + Getter->getSelector().getAsString().c_str(), + Setter ? Setter->getSelector().getAsString().c_str() : "(null)"); } void StmtDumper::VisitObjCSuperExpr(ObjCSuperExpr *Node) { diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 94cfae9d4c..8a7d3eb650 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -988,7 +988,7 @@ void StmtPrinter::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) { } void StmtPrinter::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) { - OS << "@selector(" << Node->getSelector().getName() << ")"; + OS << "@selector(" << Node->getSelector().getAsString() << ")"; } void StmtPrinter::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) { diff --git a/lib/Analysis/BasicObjCFoundationChecks.cpp b/lib/Analysis/BasicObjCFoundationChecks.cpp index 033dc02cd7..d81b3343c9 100644 --- a/lib/Analysis/BasicObjCFoundationChecks.cpp +++ b/lib/Analysis/BasicObjCFoundationChecks.cpp @@ -91,7 +91,7 @@ public: std::ostringstream os; os << "Argument to '" << GetReceiverNameType(ME) << "' method '" - << ME->getSelector().getName() << "' cannot be nil."; + << ME->getSelector().getAsString() << "' cannot be nil."; Msg = os.str(); s = Msg.c_str(); @@ -243,7 +243,7 @@ bool BasicObjCFoundationChecks::AuditNSString(NodeTy* N, // FIXME: This is going to be really slow doing these checks with // lexical comparisons. - std::string name = S.getName(); + std::string name = S.getAsString(); assert (!name.empty()); const char* cstr = &name[0]; unsigned len = name.size(); diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 8c16c9fd6b..56f5ab6234 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -1887,7 +1887,7 @@ CFRefCount::HandleSymbolDeath(GRStateManager& VMgr, if (V.isReturnedOwned() && V.getCount() == 0) if (const ObjCMethodDecl* MD = dyn_cast<ObjCMethodDecl>(CD)) { - std::string s = MD->getSelector().getName(); + std::string s = MD->getSelector().getAsString(); if (!followsReturnRule(s.c_str())) { hasLeak = true; state = state.set<RefBindings>(sid, V ^ RefVal::ErrorLeakReturned); @@ -2635,7 +2635,7 @@ PathDiagnosticPiece* CFRefReport::getEndPath(BugReporter& br, if (RV->getKind() == RefVal::ErrorLeakReturned) { ObjCMethodDecl& MD = cast<ObjCMethodDecl>(BR.getGraph().getCodeDecl()); os << " is returned from a method whose name ('" - << MD.getSelector().getName() + << MD.getSelector().getAsString() << "') does not contain 'create' or 'copy' or otherwise starts with" " 'new' or 'alloc'. This violates the naming convention rules given" " in the Memory Management Guide for Cocoa (object leaked)."; diff --git a/lib/Analysis/CheckObjCInstMethSignature.cpp b/lib/Analysis/CheckObjCInstMethSignature.cpp index ffaef42b23..00dbe9f2b2 100644 --- a/lib/Analysis/CheckObjCInstMethSignature.cpp +++ b/lib/Analysis/CheckObjCInstMethSignature.cpp @@ -53,7 +53,7 @@ static void CompareReturnTypes(ObjCMethodDecl* MethDerived, << "', which is derived from class '" << MethAncestor->getClassInterface()->getName() << "', defines the instance method '" - << MethDerived->getSelector().getName() + << MethDerived->getSelector().getAsString() << "' whose return type is '" << ResDerived.getAsString() << "'. A method with the same name (same selector) is also defined in " diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp index 1bef76688c..048abf8b2e 100644 --- a/lib/Basic/IdentifierTable.cpp +++ b/lib/Basic/IdentifierTable.cpp @@ -342,7 +342,7 @@ std::string MultiKeywordSelector::getName() const { return Result; } -std::string Selector::getName() const { +std::string Selector::getAsString() const { if (IdentifierInfo *II = getAsIdentifierInfo()) { if (getNumArgs() == 0) return II->getName(); diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index 70eeb942b7..d55d0f81bc 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -19,12 +19,9 @@ #include "clang/AST/Decl.h" #include "clang/AST/DeclObjC.h" #include "llvm/ADT/StringExtras.h" - using namespace clang; using namespace CodeGen; -using llvm::utostr; - // FIXME: Name mangling should be moved to a separate class. @@ -35,7 +32,7 @@ static void mangleDeclContextInternal(const DeclContext *D, std::string &S) "Only one level of decl context mangling is currently supported!"); if (const FunctionDecl* FD = dyn_cast<FunctionDecl>(D)) { - S += utostr(FD->getIdentifier()->getLength()); + S += llvm::utostr(FD->getIdentifier()->getLength()); S += FD->getIdentifier()->getName(); if (FD->param_size() == 0) @@ -48,11 +45,11 @@ static void mangleDeclContextInternal(const DeclContext *D, std::string &S) std::string Name; Name += MD->isInstance() ? '-' : '+'; Name += '['; - Name += MD->getClassInterface()->getName(); + Name += MD->getClassInterface()->getNameAsString(); Name += ' '; - Name += MD->getSelector().getName(); + Name += MD->getSelector().getAsString(); Name += ']'; - S += utostr(Name.length()); + S += llvm::utostr(Name.length()); S += Name; } else assert(0 && "Unsupported decl type!"); @@ -64,7 +61,7 @@ static void mangleVarDeclInternal(const VarDecl &D, std::string &S) mangleDeclContextInternal(D.getDeclContext(), S); S += 'E'; - S += utostr(D.getIdentifier()->getLength()); + S += llvm::utostr(D.getIdentifier()->getLength()); S += D.getIdentifier()->getName(); } diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 25e3915049..9bcd816c6d 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -205,7 +205,7 @@ llvm::Value *CGObjCGNU::GetClass(CGBuilderTy &Builder, /// GetSelector - Return the pointer to the unique'd string for this selector. llvm::Value *CGObjCGNU::GetSelector(CGBuilderTy &Builder, Selector Sel) { // FIXME: uniquing on the string is wasteful, unique on Sel instead! - llvm::GlobalAlias *&US = UntypedSelectors[Sel.getName()]; + llvm::GlobalAlias *&US = UntypedSelectors[Sel.getAsString()]; if (US == 0) US = new llvm::GlobalAlias(llvm::PointerType::getUnqual(SelectorTy), llvm::GlobalValue::InternalLinkage, @@ -370,13 +370,14 @@ llvm::Constant *CGObjCGNU::GenerateMethodList(const std::string &ClassName, std::vector<llvm::Constant*> Elements; for (unsigned int i = 0, e = MethodTypes.size(); i < e; ++i) { Elements.clear(); - llvm::Constant *C = CGM.GetAddrOfConstantCString(MethodSels[i].getName()); + llvm::Constant *C = + CGM.GetAddrOfConstantCString(MethodSels[i].getAsString()); Elements.push_back(llvm::ConstantExpr::getGetElementPtr(C, Zeros, 2)); Elements.push_back( llvm::ConstantExpr::getGetElementPtr(MethodTypes[i], Zeros, 2)); llvm::Constant *Method = TheModule.getFunction(SymbolNameForMethod(ClassName, CategoryName, - MethodSels[i].getName(), + MethodSels[i].getAsString(), isClassMethodList)); Method = llvm::ConstantExpr::getBitCast(Method, llvm::PointerType::getUnqual(IMPTy)); @@ -581,7 +582,7 @@ void CGObjCGNU::GenerateProtocol(const ObjCProtocolDecl *PD) { std::string TypeStr; Context.getObjCEncodingForMethodDecl(*iter, TypeStr); InstanceMethodNames.push_back( - CGM.GetAddrOfConstantCString((*iter)->getSelector().getName())); + CGM.GetAddrOfConstantCString((*iter)->getSelector().getAsString())); InstanceMethodTypes.push_back(CGM.GetAddrOfConstantCString(TypeStr)); } // Collect information about class methods: @@ -592,7 +593,7 @@ void CGObjCGNU::GenerateProtocol(const ObjCProtocolDecl *PD) { std::string TypeStr; Context.getObjCEncodingForMethodDecl((*iter),TypeStr); ClassMethodNames.push_back( - CGM.GetAddrOfConstantCString((*iter)->getSelector().getName())); + CGM.GetAddrOfConstantCString((*iter)->getSelector().getAsString())); ClassMethodTypes.push_back(CGM.GetAddrOfConstantCString(TypeStr)); } @@ -932,9 +933,9 @@ llvm::Function *CGObjCGNU::ModuleInitFunction() { llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl *OMD) { const ObjCCategoryImplDecl *OCD = dyn_cast<ObjCCategoryImplDecl>(OMD->getMethodContext()); - const std::string &CategoryName = OCD ? OCD->getName() : ""; - const std::string &ClassName = OMD->getClassInterface()->getName(); - const std::string &MethodName = OMD->getSelector().getName(); + std::string CategoryName = OCD ? OCD->getNameAsString() : ""; + std::string ClassName = OMD->getClassInterface()->getNameAsString(); + std::string MethodName = OMD->getSelector().getAsString(); bool isClassMethod = !OMD->isInstance(); const llvm::FunctionType *MethodTy = diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 8eb81a4b4b..f9a4d77925 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/lib/CodeGen/CGObjCMac.cpp @@ -2065,7 +2065,8 @@ llvm::Constant *CGObjCMac::GetMethodVarName(Selector Sel) { llvm::GlobalVariable *&Entry = MethodVarNames[Sel]; if (!Entry) { - llvm::Constant *C = llvm::ConstantArray::get(Sel.getName()); + // FIXME: Avoid std::string copying. + llvm::Constant *C = llvm::ConstantArray::get(Sel.getAsString()); Entry = new llvm::GlobalVariable(C->getType(), false, llvm::GlobalValue::InternalLinkage, @@ -2143,14 +2144,12 @@ llvm::Constant *CGObjCMac::GetPropertyTypeString(const ObjCPropertyDecl *PD, void CGObjCMac::GetNameForMethod(const ObjCMethodDecl *D, std::string &NameOut) { // FIXME: Find the mangling GCC uses. - std::stringstream s; - s << (D->isInstance() ? "-" : "+"); - s << "["; - s << D->getClassInterface()->getName(); - s << " "; - s << D->getSelector().getName(); - s << "]"; - NameOut = s.str(); + NameOut = (D->isInstance() ? "-" : "+"); + NameOut += '['; + NameOut += D->getClassInterface()->getName(); + NameOut += ' '; + NameOut += D->getSelector().getAsString(); + NameOut += ']'; } void CGObjCMac::FinishModule() { diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index be21c36073..6b913fb215 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -23,22 +23,33 @@ using namespace clang; /// ConvertQualTypeToStringFn - This function is used to pretty print the /// specified QualType as a string in diagnostics. static void ConvertArgToStringFn(Diagnostic::ArgumentKind Kind, intptr_t Val, - const char *Modifier, unsigned ML, + const char *Modifier, unsigned ModLen, const char *Argument, unsigned ArgLen, llvm::SmallVectorImpl<char> &Output) { - assert(ML == 0 && ArgLen == 0 && "Invalid modifier for QualType argument"); std::string S; if (Kind == Diagnostic::ak_qualtype) { QualType Ty(QualType::getFromOpaquePtr(reinterpret_cast<void*>(Val))); - + // FIXME: Playing with std::string is really slow. S = Ty.getAsString(); + + assert(ModLen == 0 && ArgLen == 0 && + "Invalid modifier for QualType argument"); + } else { assert(Kind == Diagnostic::ak_declarationname); DeclarationName N = DeclarationName::getFromOpaqueInteger(Val); S = N.getAsString(); + + if (ModLen == 9 && !memcmp(Modifier, "objcclass", 9) && ArgLen == 0) + S = '+' + S; + else if (ModLen == 12 && !memcmp(Modifier, "objcinstance", 12) && ArgLen==0) + S = '-' + S; + else + assert(ModLen == 0 && ArgLen == 0 && + "Invalid modifier for DeclarationName argument"); } Output.append(S.begin(), S.end()); } diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 410c25486b..de588c58fb 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -1317,7 +1317,7 @@ public: /// \param [out] ReturnType - The return type of the send. /// \return true iff there were any incompatible types. bool CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs, Selector Sel, - ObjCMethodDecl *Method, const char *PrefixStr, + ObjCMethodDecl *Method, bool isClassMessage, SourceLocation lbrac, SourceLocation rbrac, QualType &ReturnType); diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index cc54e890cf..64fd6c515d 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -805,8 +805,7 @@ void Sema::AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method) { if (!match) { // We have a new signature for an existing method - add it. // This is extremely rare. Only 1% of Cocoa selectors are "overloaded". - struct ObjCMethodList *OMI = new ObjCMethodList(Method, FirstMethod.Next); - FirstMethod.Next = OMI; + FirstMethod.Next = new ObjCMethodList(Method, FirstMethod.Next);; } } } @@ -824,7 +823,7 @@ ObjCMethodDecl *Sema::LookupInstanceMethodInGlobalPool(Selector Sel, issueWarning = true; } if (issueWarning && (MethList.Method && MethList.Next)) { - Diag(R.getBegin(), diag::warn_multiple_method_decl) << Sel.getName() << R; + Diag(R.getBegin(), diag::warn_multiple_method_decl) << Sel << R; Diag(MethList.Method->getLocStart(), diag::note_using_decl) << MethList.Method->getSourceRange(); for (ObjCMethodList *Next = MethList.Next; Next; Next = Next->Next) @@ -905,7 +904,7 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl, if (isInterfaceDeclKind && PrevMethod && !match || checkIdenticalMethods && match) { Diag(Method->getLocation(), diag::err_duplicate_method_decl) - << Method->getSelector().getName(); + << Method->getDeclName(); Diag(PrevMethod->getLocation(), diag::note_previous_declaration); } else { insMethods.push_back(Method); @@ -922,7 +921,7 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl, if (isInterfaceDeclKind && PrevMethod && !match || checkIdenticalMethods && match) { Diag(Method->getLocation(), diag::err_duplicate_method_decl) - << Method->getSelector().getName(); + << Method->getDeclName(); Diag(PrevMethod->getLocation(), diag::note_previous_declaration); } else { clsMethods.push_back(Method); @@ -1115,7 +1114,7 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration( if (PrevMethod) { // You can never have two method definitions with the same name. Diag(ObjCMethod->getLocation(), diag::err_duplicate_method_decl) - << ObjCMethod->getSelector().getName(); + << ObjCMethod->getDeclName(); Diag(PrevMethod->getLocation(), diag::note_previous_declaration); } return ObjCMethod; diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index f587dd6ae2..2225d6758f 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -109,7 +109,7 @@ Sema::ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, bool Sema::CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs, Selector Sel, ObjCMethodDecl *Method, - const char *PrefixStr, + bool isClassMessage, SourceLocation lbrac, SourceLocation rbrac, QualType &ReturnType) { if (!Method) { @@ -117,13 +117,15 @@ bool Sema::CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs, for (unsigned i = 0; i != NumArgs; i++) DefaultArgumentPromotion(Args[i]); - Diag(lbrac, diag::warn_method_not_found) - << PrefixStr << Sel.getName() << SourceRange(lbrac, rbrac); + unsigned DiagID = isClassMessage ? diag::warn_class_method_not_found : + diag::warn_inst_method_not_found; + Diag(lbrac, DiagID) + << Sel << isClassMessage << SourceRange(lbrac, rbrac); ReturnType = Context.getObjCIdType(); return false; - } else { - ReturnType = Method->getResultType(); } + + ReturnType = Method->getResultType(); unsigned NumNamedArgs = Sel.getNumArgs(); assert(NumArgs >= NumNamedArgs && "Too few arguments for selector!"); @@ -261,7 +263,7 @@ Sema::ExprResult Sema::ActOnClassMessage( if (!Method) Method = ClassDecl->lookupInstanceMethod(Sel); - if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, "+", + if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, true, lbrac, rbrac, returnType)) return true; @@ -304,7 +306,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, if (ObjCInterfaceDecl *SuperDecl = ClassDecl->getSuperClass()) Method = SuperDecl->lookupInstanceMethod(Sel); } - if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, "-", + if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, false, lbrac, rbrac, returnType)) return true; return new ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, rbrac, @@ -318,7 +320,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, Sel, SourceRange(lbrac,rbrac)); if (!Method) Method = FactoryMethodPool[Sel].Method; - if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, "-", + if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, false, lbrac, rbrac, returnType)) return true; return new ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, rbrac, @@ -340,7 +342,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, if (!Method) Method = LookupInstanceMethodInGlobalPool( Sel, SourceRange(lbrac,rbrac)); - if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, "-", + if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, false, lbrac, rbrac, returnType)) return true; return new ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, rbrac, @@ -361,7 +363,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, } if (!Method) Diag(lbrac, diag::warn_method_not_found_in_protocol) - << "-" << Sel.getName() << RExpr->getSourceRange(); + << Sel << RExpr->getSourceRange(); } else if (const ObjCInterfaceType *OCIReceiver = ReceiverCType->getAsPointerToObjCInterfaceType()) { // We allow sending a message to a pointer to an interface (an object). @@ -383,7 +385,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, if (!Method && !OCIReceiver->qual_empty()) Diag(lbrac, diag::warn_method_not_found_in_protocol) - << "-" << Sel.getName() << SourceRange(lbrac, rbrac); + << Sel << SourceRange(lbrac, rbrac); } else { Diag(lbrac, diag::error_bad_receiver_type) << RExpr->getType().getAsString() << RExpr->getSourceRange(); @@ -403,7 +405,7 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel, Method = LookupInstanceMethodInGlobalPool( Sel, SourceRange(lbrac,rbrac)); } - if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, "-", + if (CheckMessageArgumentTypes(ArgExprs, NumArgs, Sel, Method, false, lbrac, rbrac, returnType)) return true; return new ObjCMessageExpr(RExpr, Sel, returnType, Method, lbrac, rbrac, |