forked from OSchip/llvm-project
Selector: (changes made after discussing this more with Steve Naroff)
- Make Selector::getAsIdentifierInfo() private. Using IdentifierInfo* in Selector is an implementation detail that clients shouldn't think about. - Modify diagnostic emission in Sema::ProcessPropertyDecl to not use Selector::getAsIdentifierInfo() (which could crash when IdentifierInfo* is null) and instead use Selector::getAsString(). - Tidy up Selector::getAsString() implementation. llvm-svn: 66313
This commit is contained in:
parent
b6b7ce4b50
commit
0666a6ce70
|
@ -353,13 +353,6 @@ class Selector {
|
||||||
assert((InfoPtr & ArgFlags) == 0 &&"Insufficiently aligned IdentifierInfo");
|
assert((InfoPtr & ArgFlags) == 0 &&"Insufficiently aligned IdentifierInfo");
|
||||||
}
|
}
|
||||||
Selector(uintptr_t V) : InfoPtr(V) {}
|
Selector(uintptr_t V) : InfoPtr(V) {}
|
||||||
public:
|
|
||||||
friend class SelectorTable; // only the SelectorTable can create these
|
|
||||||
friend class DeclarationName; // and the AST's DeclarationName.
|
|
||||||
|
|
||||||
/// The default ctor should only be used when creating data structures that
|
|
||||||
/// will contain selectors.
|
|
||||||
Selector() : InfoPtr(0) {}
|
|
||||||
|
|
||||||
IdentifierInfo *getAsIdentifierInfo() const {
|
IdentifierInfo *getAsIdentifierInfo() const {
|
||||||
if (getIdentifierInfoFlag())
|
if (getIdentifierInfoFlag())
|
||||||
|
@ -369,6 +362,14 @@ public:
|
||||||
unsigned getIdentifierInfoFlag() const {
|
unsigned getIdentifierInfoFlag() const {
|
||||||
return InfoPtr & ArgFlags;
|
return InfoPtr & ArgFlags;
|
||||||
}
|
}
|
||||||
|
public:
|
||||||
|
friend class SelectorTable; // only the SelectorTable can create these
|
||||||
|
friend class DeclarationName; // and the AST's DeclarationName.
|
||||||
|
|
||||||
|
/// The default ctor should only be used when creating data structures that
|
||||||
|
/// will contain selectors.
|
||||||
|
Selector() : InfoPtr(0) {}
|
||||||
|
|
||||||
/// operator==/!= - Indicate whether the specified selectors are identical.
|
/// operator==/!= - Indicate whether the specified selectors are identical.
|
||||||
bool operator==(Selector RHS) const {
|
bool operator==(Selector RHS) const {
|
||||||
return InfoPtr == RHS.InfoPtr;
|
return InfoPtr == RHS.InfoPtr;
|
||||||
|
|
|
@ -352,8 +352,9 @@ std::string Selector::getAsString() const {
|
||||||
if (InfoPtr & ArgFlags) {
|
if (InfoPtr & ArgFlags) {
|
||||||
IdentifierInfo *II = getAsIdentifierInfo();
|
IdentifierInfo *II = getAsIdentifierInfo();
|
||||||
|
|
||||||
|
// If the number of arguments is 0 then II is guaranteed to not be null.
|
||||||
if (getNumArgs() == 0)
|
if (getNumArgs() == 0)
|
||||||
return II ? II->getName() : "";
|
return II->getName();
|
||||||
|
|
||||||
std::string Res = II ? II->getName() : "";
|
std::string Res = II ? II->getName() : "";
|
||||||
Res += ":";
|
Res += ":";
|
||||||
|
|
|
@ -1139,7 +1139,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
||||||
Diag(property->getLocation(),
|
Diag(property->getLocation(),
|
||||||
diag::err_accessor_property_type_mismatch)
|
diag::err_accessor_property_type_mismatch)
|
||||||
<< property->getDeclName()
|
<< property->getDeclName()
|
||||||
<< GetterMethod->getSelector().getAsIdentifierInfo();
|
<< GetterMethod->getSelector().getAsString();
|
||||||
Diag(GetterMethod->getLocation(), diag::note_declared_at);
|
Diag(GetterMethod->getLocation(), diag::note_declared_at);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,7 +1152,7 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property,
|
||||||
Diag(property->getLocation(),
|
Diag(property->getLocation(),
|
||||||
diag::err_accessor_property_type_mismatch)
|
diag::err_accessor_property_type_mismatch)
|
||||||
<< property->getDeclName()
|
<< property->getDeclName()
|
||||||
<< SetterMethod->getSelector().getAsIdentifierInfo();
|
<< SetterMethod->getSelector().getAsString();
|
||||||
Diag(SetterMethod->getLocation(), diag::note_declared_at);
|
Diag(SetterMethod->getLocation(), diag::note_declared_at);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue