Fix problem dumping/printing method names with null selector.

llvm-svn: 43039
This commit is contained in:
Fariborz Jahanian 2007-10-16 20:52:13 +00:00
parent 4bef462a3e
commit 81ccd88f0e
3 changed files with 12 additions and 7 deletions

View File

@ -416,7 +416,10 @@ void StmtDumper::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) {
fprintf(F, "%s", selector.getIdentifierInfoForSlot(0)->getName()); fprintf(F, "%s", selector.getIdentifierInfoForSlot(0)->getName());
else { else {
for (unsigned i = 0, e = Node->getNumArgs(); i != e; ++i) for (unsigned i = 0, e = Node->getNumArgs(); i != e; ++i)
fprintf(F, "%s:", selector.getIdentifierInfoForSlot(i)->getName()); if (selector.getIdentifierInfoForSlot(i))
fprintf(F, "%s:", selector.getIdentifierInfoForSlot(i)->getName());
else
fprintf(F, ":");
} }
} }

View File

@ -627,7 +627,10 @@ void StmtPrinter::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) {
OS << " " << selector.getIdentifierInfoForSlot(0)->getName(); OS << " " << selector.getIdentifierInfoForSlot(0)->getName();
else { else {
for (unsigned i = 0, e = Node->getNumArgs(); i != e; ++i) for (unsigned i = 0, e = Node->getNumArgs(); i != e; ++i)
OS << selector.getIdentifierInfoForSlot(i)->getName() << ":"; if (selector.getIdentifierInfoForSlot(i))
OS << selector.getIdentifierInfoForSlot(i)->getName() << ":";
else
OS << ":";
} }
OS << ")"; OS << ")";
} }
@ -642,7 +645,10 @@ void StmtPrinter::VisitObjCMessageExpr(ObjCMessageExpr *Mess) {
OS << " " << selector.getIdentifierInfoForSlot(0)->getName(); OS << " " << selector.getIdentifierInfoForSlot(0)->getName();
} else { } else {
for (unsigned i = 0, e = Mess->getNumArgs(); i != e; ++i) { for (unsigned i = 0, e = Mess->getNumArgs(); i != e; ++i) {
OS << " " << selector.getIdentifierInfoForSlot(i)->getName() << ":"; if (selector.getIdentifierInfoForSlot(i))
OS << selector.getIdentifierInfoForSlot(i)->getName() << ":";
else
OS << ":";
PrintExpr(Mess->getArg(i)); PrintExpr(Mess->getArg(i));
} }
} }

View File

@ -1327,8 +1327,6 @@ Parser::ExprResult Parser::ParseObjCSelectorExpression()
Diag(Tok, diag::err_expected_ident); // missing selector name. Diag(Tok, diag::err_expected_ident); // missing selector name.
return 0; return 0;
} }
if (!SelIdent)
SelIdent = &PP.getIdentifierTable().get("");
KeyIdents.push_back(SelIdent); KeyIdents.push_back(SelIdent);
if (Tok.isNot(tok::r_paren)) if (Tok.isNot(tok::r_paren))
while (1) { while (1) {
@ -1342,8 +1340,6 @@ Parser::ExprResult Parser::ParseObjCSelectorExpression()
// Check for another keyword selector. // Check for another keyword selector.
SourceLocation Loc; SourceLocation Loc;
SelIdent = ParseObjCSelector(Loc); SelIdent = ParseObjCSelector(Loc);
if (!SelIdent)
SelIdent = &PP.getIdentifierTable().get("");
KeyIdents.push_back(SelIdent); KeyIdents.push_back(SelIdent);
if (!SelIdent && Tok.isNot(tok::colon)) if (!SelIdent && Tok.isNot(tok::colon))
break; break;