]> granicus.if.org Git - clang/commitdiff
Add some comments to MultiKeywordSelector, make all methods private, add a friend...
authorSteve Naroff <snaroff@apple.com>
Fri, 28 Sep 2007 23:39:26 +0000 (23:39 +0000)
committerSteve Naroff <snaroff@apple.com>
Fri, 28 Sep 2007 23:39:26 +0000 (23:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42456 91177308-0d34-0410-b5e6-96231b3b80d8

Lex/IdentifierTable.cpp
Parse/ParseObjc.cpp
include/clang/Lex/IdentifierTable.h

index 9a03d3f72d063e8c81e193a35418327fa108fea7..a5ba4d412ab020714b70e0587335da35cc4b2d48 100644 (file)
@@ -33,36 +33,6 @@ tok::ObjCKeywordKind Token::getObjCKeywordID() const {
   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
 //===----------------------------------------------------------------------===//
index 3317b88da3e903df762513df9a5cca54aa32fc42..be0e026157b294d049295f9e0eb5ec81144dce52 100644 (file)
@@ -502,6 +502,58 @@ Parser::TypeTy *Parser::ParseObjCTypeName() {
   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);
index 100f940e0eb73cdd087c083fdccb0394832540b4..b98cd9517a09e2dcf7f27e4083d01caf897d1e74 100644 (file)
@@ -171,8 +171,10 @@ private:
 };
 
 /// 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 @@ class MultiKeywordSelector : public llvm::FoldingSetNode {
     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 @@ class Selector {
       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 @@ public:
   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);