[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