mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-10 11:23:52 +00:00
Add some comments to MultiKeywordSelector, make all methods private, add a friend, move some methods around.
llvm-svn: 42456
This commit is contained in:
parent
1b61261a25
commit
92866f4fbb
@ -33,36 +33,6 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const {
|
|||||||
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
|
return specId ? specId->getObjCKeywordID() : tok::objc_not_keyword;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *MultiKeywordSelector::getName(llvm::SmallVectorImpl<char> &methodName) {
|
|
||||||
methodName[0] = '\0';
|
|
||||||
keyword_iterator KeyIter = keyword_begin();
|
|
||||||
for (unsigned int i = 0; i < NumArgs; i++) {
|
|
||||||
if (KeyIter[i]) {
|
|
||||||
unsigned KeyLen = strlen(KeyIter[i]->getName());
|
|
||||||
methodName.append(KeyIter[i]->getName(), KeyIter[i]->getName()+KeyLen);
|
|
||||||
}
|
|
||||||
methodName.push_back(':');
|
|
||||||
}
|
|
||||||
methodName.push_back('\0');
|
|
||||||
return &methodName[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
char *Selector::getName(llvm::SmallVectorImpl<char> &methodName) {
|
|
||||||
methodName[0] = '\0';
|
|
||||||
IdentifierInfo *II = getAsIdentifierInfo();
|
|
||||||
if (II) {
|
|
||||||
unsigned NameLen = strlen(II->getName());
|
|
||||||
methodName.append(II->getName(), II->getName()+NameLen);
|
|
||||||
if (getNumArgs() == 1)
|
|
||||||
methodName.push_back(':');
|
|
||||||
methodName.push_back('\0');
|
|
||||||
} else { // We have a multiple keyword selector (no embedded flags).
|
|
||||||
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
|
||||||
SI->getName(methodName);
|
|
||||||
}
|
|
||||||
return &methodName[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// IdentifierInfo Implementation
|
// IdentifierInfo Implementation
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -502,6 +502,58 @@ Parser::TypeTy *Parser::ParseObjCTypeName() {
|
|||||||
return Ty;
|
return Ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned Selector::getNumArgs() const {
|
||||||
|
unsigned IIF = getIdentifierInfoFlag();
|
||||||
|
if (IIF == ZeroArg)
|
||||||
|
return 0;
|
||||||
|
if (IIF == OneArg)
|
||||||
|
return 1;
|
||||||
|
// We point to a MultiKeywordSelector (pointer doesn't contain any flags).
|
||||||
|
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
||||||
|
return SI->getNumArgs();
|
||||||
|
}
|
||||||
|
|
||||||
|
IdentifierInfo *Selector::getIdentifierInfoForSlot(unsigned argIndex) {
|
||||||
|
IdentifierInfo *II = getAsIdentifierInfo();
|
||||||
|
if (II) {
|
||||||
|
assert(((argIndex == 0) || (argIndex == 1)) && "illegal keyword index");
|
||||||
|
return II;
|
||||||
|
}
|
||||||
|
// We point to a MultiKeywordSelector (pointer doesn't contain any flags).
|
||||||
|
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
||||||
|
return SI->getIdentifierInfoForSlot(argIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *MultiKeywordSelector::getName(llvm::SmallVectorImpl<char> &methodName) {
|
||||||
|
methodName[0] = '\0';
|
||||||
|
keyword_iterator KeyIter = keyword_begin();
|
||||||
|
for (unsigned int i = 0; i < NumArgs; i++) {
|
||||||
|
if (KeyIter[i]) {
|
||||||
|
unsigned KeyLen = strlen(KeyIter[i]->getName());
|
||||||
|
methodName.append(KeyIter[i]->getName(), KeyIter[i]->getName()+KeyLen);
|
||||||
|
}
|
||||||
|
methodName.push_back(':');
|
||||||
|
}
|
||||||
|
methodName.push_back('\0');
|
||||||
|
return &methodName[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
char *Selector::getName(llvm::SmallVectorImpl<char> &methodName) {
|
||||||
|
methodName[0] = '\0';
|
||||||
|
IdentifierInfo *II = getAsIdentifierInfo();
|
||||||
|
if (II) {
|
||||||
|
unsigned NameLen = strlen(II->getName());
|
||||||
|
methodName.append(II->getName(), II->getName()+NameLen);
|
||||||
|
if (getNumArgs() == 1)
|
||||||
|
methodName.push_back(':');
|
||||||
|
methodName.push_back('\0');
|
||||||
|
} else { // We have a multiple keyword selector (no embedded flags).
|
||||||
|
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
||||||
|
SI->getName(methodName);
|
||||||
|
}
|
||||||
|
return &methodName[0];
|
||||||
|
}
|
||||||
|
|
||||||
Selector Parser::ObjcGetUnarySelector(IdentifierInfo *unarySel)
|
Selector Parser::ObjcGetUnarySelector(IdentifierInfo *unarySel)
|
||||||
{
|
{
|
||||||
return Selector(unarySel, 0);
|
return Selector(unarySel, 0);
|
||||||
|
@ -171,8 +171,10 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// MultiKeywordSelector - One of these variable length records is kept for each
|
/// MultiKeywordSelector - One of these variable length records is kept for each
|
||||||
/// parsed selector (similar in spirit to IdentifierInfo). We use a folding set
|
/// selector containing more than one keyword. We use a folding set
|
||||||
/// to unique aggregate names (keyword selectors in ObjC parlance).
|
/// to unique aggregate names (keyword selectors in ObjC parlance). Access to
|
||||||
|
/// this class is provided strictly through Selector. All methods are private.
|
||||||
|
/// The only reason it appears in this header is FoldingSet needs to see it:-(
|
||||||
class MultiKeywordSelector : public llvm::FoldingSetNode {
|
class MultiKeywordSelector : public llvm::FoldingSetNode {
|
||||||
friend class Selector; // Only Selector can access me.
|
friend class Selector; // Only Selector can access me.
|
||||||
friend class Parser; // Only Parser can instantiate me.
|
friend class Parser; // Only Parser can instantiate me.
|
||||||
@ -206,7 +208,7 @@ class MultiKeywordSelector : public llvm::FoldingSetNode {
|
|||||||
assert((i < NumArgs) && "getIdentifierInfoForSlot(): illegal index");
|
assert((i < NumArgs) && "getIdentifierInfoForSlot(): illegal index");
|
||||||
return keyword_begin()[i];
|
return keyword_begin()[i];
|
||||||
}
|
}
|
||||||
public:
|
friend class llvm::FoldingSet<MultiKeywordSelector>;
|
||||||
static void Profile(llvm::FoldingSetNodeID &ID,
|
static void Profile(llvm::FoldingSetNodeID &ID,
|
||||||
keyword_iterator ArgTys, unsigned NumArgs) {
|
keyword_iterator ArgTys, unsigned NumArgs) {
|
||||||
ID.AddInteger(NumArgs);
|
ID.AddInteger(NumArgs);
|
||||||
@ -248,11 +250,6 @@ class Selector {
|
|||||||
return reinterpret_cast<IdentifierInfo *>(InfoPtr & ~ArgFlags);
|
return reinterpret_cast<IdentifierInfo *>(InfoPtr & ~ArgFlags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
MultiKeywordSelector *getAsMultiKeywordSelector() const {
|
|
||||||
if (InfoPtr & ArgFlags)
|
|
||||||
return 0;
|
|
||||||
return reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
|
||||||
}
|
|
||||||
public:
|
public:
|
||||||
unsigned getIdentifierInfoFlag() const {
|
unsigned getIdentifierInfoFlag() const {
|
||||||
return InfoPtr & ArgFlags;
|
return InfoPtr & ArgFlags;
|
||||||
@ -274,26 +271,9 @@ public:
|
|||||||
bool isUnarySelector() const {
|
bool isUnarySelector() const {
|
||||||
return getIdentifierInfoFlag() == ZeroArg;
|
return getIdentifierInfoFlag() == ZeroArg;
|
||||||
}
|
}
|
||||||
unsigned getNumArgs() const {
|
unsigned getNumArgs() const;
|
||||||
unsigned IIF = getIdentifierInfoFlag();
|
IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex);
|
||||||
if (IIF == ZeroArg)
|
|
||||||
return 0;
|
|
||||||
if (IIF == OneArg)
|
|
||||||
return 1;
|
|
||||||
// We point to a MultiKeywordSelector (pointer doesn't contain any flags).
|
|
||||||
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
|
||||||
return SI->getNumArgs();
|
|
||||||
}
|
|
||||||
IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex) {
|
|
||||||
IdentifierInfo *II = getAsIdentifierInfo();
|
|
||||||
if (II) {
|
|
||||||
assert(((argIndex == 0) || (argIndex == 1)) && "illegal keyword index");
|
|
||||||
return II;
|
|
||||||
}
|
|
||||||
// We point to a MultiKeywordSelector (pointer doesn't contain any flags).
|
|
||||||
MultiKeywordSelector *SI = reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
|
|
||||||
return SI->getIdentifierInfoForSlot(argIndex);
|
|
||||||
}
|
|
||||||
// Derive the full selector name, placing the result into methodBuffer.
|
// Derive the full selector name, placing the result into methodBuffer.
|
||||||
// As a convenience, a pointer to the first character is returned.
|
// As a convenience, a pointer to the first character is returned.
|
||||||
// Example usage: llvm::SmallString<128> mbuf; Selector->getName(mbuf);
|
// Example usage: llvm::SmallString<128> mbuf; Selector->getName(mbuf);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user