[cfe-commits] r42456 - in /cfe/trunk: Lex/IdentifierTable.cpp Parse/ParseObjc.cpp include/clang/Lex/IdentifierTable.h
Steve Naroff
snaroff at apple.com
Fri Sep 28 16:39:26 PDT 2007
Author: snaroff
Date: Fri Sep 28 18:39:26 2007
New Revision: 42456
URL: http://llvm.org/viewvc/llvm-project?rev=42456&view=rev
Log:
Add some comments to MultiKeywordSelector, make all methods private, add a friend, move some methods around.
Modified:
cfe/trunk/Lex/IdentifierTable.cpp
cfe/trunk/Parse/ParseObjc.cpp
cfe/trunk/include/clang/Lex/IdentifierTable.h
Modified: cfe/trunk/Lex/IdentifierTable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/IdentifierTable.cpp?rev=42456&r1=42455&r2=42456&view=diff
==============================================================================
--- cfe/trunk/Lex/IdentifierTable.cpp (original)
+++ cfe/trunk/Lex/IdentifierTable.cpp Fri Sep 28 18:39:26 2007
@@ -33,36 +33,6 @@
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
//===----------------------------------------------------------------------===//
Modified: cfe/trunk/Parse/ParseObjc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Parse/ParseObjc.cpp?rev=42456&r1=42455&r2=42456&view=diff
==============================================================================
--- cfe/trunk/Parse/ParseObjc.cpp (original)
+++ cfe/trunk/Parse/ParseObjc.cpp Fri Sep 28 18:39:26 2007
@@ -502,6 +502,58 @@
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)
{
return Selector(unarySel, 0);
Modified: cfe/trunk/include/clang/Lex/IdentifierTable.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/IdentifierTable.h?rev=42456&r1=42455&r2=42456&view=diff
==============================================================================
--- cfe/trunk/include/clang/Lex/IdentifierTable.h (original)
+++ cfe/trunk/include/clang/Lex/IdentifierTable.h Fri Sep 28 18:39:26 2007
@@ -171,8 +171,10 @@
};
/// MultiKeywordSelector - One of these variable length records is kept for each
-/// parsed selector (similar in spirit to IdentifierInfo). We use a folding set
-/// to unique aggregate names (keyword selectors in ObjC parlance).
+/// selector containing more than one keyword. We use a folding set
+/// 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 {
friend class Selector; // Only Selector can access me.
friend class Parser; // Only Parser can instantiate me.
@@ -206,7 +208,7 @@
assert((i < NumArgs) && "getIdentifierInfoForSlot(): illegal index");
return keyword_begin()[i];
}
-public:
+ friend class llvm::FoldingSet<MultiKeywordSelector>;
static void Profile(llvm::FoldingSetNodeID &ID,
keyword_iterator ArgTys, unsigned NumArgs) {
ID.AddInteger(NumArgs);
@@ -248,11 +250,6 @@
return reinterpret_cast<IdentifierInfo *>(InfoPtr & ~ArgFlags);
return 0;
}
- MultiKeywordSelector *getAsMultiKeywordSelector() const {
- if (InfoPtr & ArgFlags)
- return 0;
- return reinterpret_cast<MultiKeywordSelector *>(InfoPtr);
- }
public:
unsigned getIdentifierInfoFlag() const {
return InfoPtr & ArgFlags;
@@ -274,26 +271,9 @@
bool isUnarySelector() const {
return getIdentifierInfoFlag() == ZeroArg;
}
- unsigned 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 *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);
- }
+ unsigned getNumArgs() const;
+ IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex);
+
// Derive the full selector name, placing the result into methodBuffer.
// As a convenience, a pointer to the first character is returned.
// Example usage: llvm::SmallString<128> mbuf; Selector->getName(mbuf);
More information about the cfe-commits
mailing list